-
Notifications
You must be signed in to change notification settings - Fork 213
Description
I have observed some compilation error on generated code for Spark, which is around switch statement.
(The generated code is compiled against Janino 3.0.8 but upgrading version to Janino 3.0.15 didn't seem to fix the issue.)
org.codehaus.janino.InternalCompilerException: Compiling "GeneratedClass": Compiling "expand_doConsume(short expand_expr_0, boolean expand_exprIsNull_0, int expand_expr_1, boolean expand_exprIsNull_1, Decimal expand_expr_2, boolean expand_exprIsNull_2, Decimal expand_expr_3, boolean expand_exprIsNull_3, Decimal expand_expr_4, boolean expand_exprIsNull_4, Decimal expand_expr_5, boolean expand_exprIsNull_5, Decimal expand_expr_6, boolean expand_exprIsNull_6, Decimal expand_expr_7, boolean expand_exprIsNull_7, Decimal expand_expr_8, boolean expand_exprIsNull_8, Decimal expand_expr_9, boolean expand_exprIsNull_9, long expand_expr_10, boolean expand_exprIsNull_10, long expand_expr_11, boolean expand_exprIsNull_11, long expand_expr_12, boolean expand_exprIsNull_12, long expand_expr_13, boolean expand_exprIsNull_13, long expand_expr_14, boolean expand_exprIsNull_14, long expand_expr_15, boolean expand_exprIsNull_15, long expand_expr_16, boolean expand_exprIsNull_16, long expand_expr_17, boolean expand_exprIsNull_17, long expand_expr_18, boolean expand_exprIsNull_18, long expand_expr_19, boolean expand_exprIsNull_19, Decimal expand_expr_20, boolean expand_exprIsNull_20, Decimal expand_expr_21, boolean expand_exprIsNull_21, Decimal expand_expr_22, boolean expand_exprIsNull_22, Decimal expand_expr_23, boolean expand_exprIsNull_23, Decimal expand_expr_24, boolean expand_exprIsNull_24, Decimal expand_expr_25, boolean expand_exprIsNull_25, Decimal expand_expr_26, boolean expand_exprIsNull_26, Decimal expand_expr_27, boolean expand_exprIsNull_27, Decimal expand_expr_28, boolean expand_exprIsNull_28, Decimal expand_expr_29, boolean expand_exprIsNull_29, Decimal expand_expr_30, boolean expand_exprIsNull_30, Decimal expand_expr_31, boolean expand_exprIsNull_31, Decimal expand_expr_32, boolean expand_exprIsNull_32, Decimal expand_expr_33, boolean expand_exprIsNull_33, Decimal expand_expr_34, boolean expand_exprIsNull_34, Decimal expand_expr_35, boolean expand_exprIsNull_35, Decimal expand_expr_36, boolean expand_exprIsNull_36, Decimal expand_expr_37, boolean expand_exprIsNull_37, Decimal expand_expr_38, boolean expand_exprIsNull_38, Decimal expand_expr_39, boolean expand_exprIsNull_39, Decimal expand_expr_40, boolean expand_exprIsNull_40, Decimal expand_expr_41, boolean expand_exprIsNull_41, long expand_expr_42, boolean expand_exprIsNull_42, long expand_expr_43, boolean expand_exprIsNull_43, long expand_expr_44, boolean expand_exprIsNull_44, long expand_expr_45, boolean expand_exprIsNull_45, long expand_expr_46, boolean expand_exprIsNull_46, long expand_expr_47, boolean expand_exprIsNull_47, long expand_expr_48, boolean expand_exprIsNull_48, long expand_expr_49, boolean expand_exprIsNull_49, long expand_expr_50, boolean expand_exprIsNull_50, long expand_expr_51, boolean expand_exprIsNull_51, long expand_expr_52, boolean expand_exprIsNull_52, long expand_expr_53, boolean expand_exprIsNull_53, long expand_expr_54, boolean expand_exprIsNull_54, long expand_expr_55, boolean expand_exprIsNull_55, long expand_expr_56, boolean expand_exprIsNull_56, long expand_expr_57, boolean expand_exprIsNull_57, long expand_expr_58, boolean expand_exprIsNull_58, long expand_expr_59, boolean expand_exprIsNull_59, long expand_expr_60, boolean expand_exprIsNull_60, long expand_expr_61, boolean expand_exprIsNull_61, long expand_expr_62, boolean expand_exprIsNull_62, long expand_expr_63, boolean expand_exprIsNull_63)"; expand_doConsume(short expand_expr_0, boolean expand_exprIsNull_0, int expand_expr_1, boolean expand_exprIsNull_1, Decimal expand_expr_2, boolean expand_exprIsNull_2, Decimal expand_expr_3, boolean expand_exprIsNull_3, Decimal expand_expr_4, boolean expand_exprIsNull_4, Decimal expand_expr_5, boolean expand_exprIsNull_5, Decimal expand_expr_6, boolean expand_exprIsNull_6, Decimal expand_expr_7, boolean expand_exprIsNull_7, Decimal expand_expr_8, boolean expand_exprIsNull_8, Decimal expand_expr_9, boolean expand_exprIsNull_9, long expand_expr_10, boolean expand_exprIsNull_10, long expand_expr_11, boolean expand_exprIsNull_11, long expand_expr_12, boolean expand_exprIsNull_12, long expand_expr_13, boolean expand_exprIsNull_13, long expand_expr_14, boolean expand_exprIsNull_14, long expand_expr_15, boolean expand_exprIsNull_15, long expand_expr_16, boolean expand_exprIsNull_16, long expand_expr_17, boolean expand_exprIsNull_17, long expand_expr_18, boolean expand_exprIsNull_18, long expand_expr_19, boolean expand_exprIsNull_19, Decimal expand_expr_20, boolean expand_exprIsNull_20, Decimal expand_expr_21, boolean expand_exprIsNull_21, Decimal expand_expr_22, boolean expand_exprIsNull_22, Decimal expand_expr_23, boolean expand_exprIsNull_23, Decimal expand_expr_24, boolean expand_exprIsNull_24, Decimal expand_expr_25, boolean expand_exprIsNull_25, Decimal expand_expr_26, boolean expand_exprIsNull_26, Decimal expand_expr_27, boolean expand_exprIsNull_27, Decimal expand_expr_28, boolean expand_exprIsNull_28, Decimal expand_expr_29, boolean expand_exprIsNull_29, Decimal expand_expr_30, boolean expand_exprIsNull_30, Decimal expand_expr_31, boolean expand_exprIsNull_31, Decimal expand_expr_32, boolean expand_exprIsNull_32, Decimal expand_expr_33, boolean expand_exprIsNull_33, Decimal expand_expr_34, boolean expand_exprIsNull_34, Decimal expand_expr_35, boolean expand_exprIsNull_35, Decimal expand_expr_36, boolean expand_exprIsNull_36, Decimal expand_expr_37, boolean expand_exprIsNull_37, Decimal expand_expr_38, boolean expand_exprIsNull_38, Decimal expand_expr_39, boolean expand_exprIsNull_39, Decimal expand_expr_40, boolean expand_exprIsNull_40, Decimal expand_expr_41, boolean expand_exprIsNull_41, long expand_expr_42, boolean expand_exprIsNull_42, long expand_expr_43, boolean expand_exprIsNull_43, long expand_expr_44, boolean expand_exprIsNull_44, long expand_expr_45, boolean expand_exprIsNull_45, long expand_expr_46, boolean expand_exprIsNull_46, long expand_expr_47, boolean expand_exprIsNull_47, long expand_expr_48, boolean expand_exprIsNull_48, long expand_expr_49, boolean expand_exprIsNull_49, long expand_expr_50, boolean expand_exprIsNull_50, long expand_expr_51, boolean expand_exprIsNull_51, long expand_expr_52, boolean expand_exprIsNull_52, long expand_expr_53, boolean expand_exprIsNull_53, long expand_expr_54, boolean expand_exprIsNull_54, long expand_expr_55, boolean expand_exprIsNull_55, long expand_expr_56, boolean expand_exprIsNull_56, long expand_expr_57, boolean expand_exprIsNull_57, long expand_expr_58, boolean expand_exprIsNull_58, long expand_expr_59, boolean expand_exprIsNull_59, long expand_expr_60, boolean expand_exprIsNull_60, long expand_expr_61, boolean expand_exprIsNull_61, long expand_expr_62, boolean expand_exprIsNull_62, long expand_expr_63, boolean expand_exprIsNull_63): Operand stack inconsistent at offset 578: Previous size 1, now 0
With some investigation I found that there's a "branch" before TABLESWITCH OP which requires "growing" - so below situation is happening:
- In the first loop of
fixUpAndRelocate
1.1) The padding for TABLESWITCH is applied first infixUp.
1.2) Inrelocate, some branch requires "growing" and insert some spaces "before" TABLESWITCH. In result, TABLESWITCH OP and padded offsets are shifted, which "may" break padding. - In the second loop of
fixUpAndRelocate
2.1) The padding for TABLESWITCH is applied AGAIN infixUp, which adds more spaces if padding was broken in 1.2) fixUpAndRelocateis finished andflowAnalysisrunsflowAnalysisreads the part ofdefaultfor TABLESWITCH which is 0 due to "double padding", hence the offset has been same as TABLESWITCH OP, and error is thrown.
Janino 3.0.8