View | Details | Raw Unified | Return to bug 248319
Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java (+2 lines)
Lines 75-80 Link Here
75
						prepareSaveValueLocation(tryStatement);
75
						prepareSaveValueLocation(tryStatement);
76
					}
76
					}
77
					saveValueNeeded = true;
77
					saveValueNeeded = true;
78
					this.initStateIndex =
79
						currentScope.methodScope().recordInitializationStates(flowInfo);
78
				}
80
				}
79
			}
81
			}
80
		} else if (traversedContext instanceof InitializationFlowContext) {
82
		} else if (traversedContext instanceof InitializationFlowContext) {
(-)compiler/org/eclipse/jdt/internal/compiler/ast/TryStatement.java (-1 / +1 lines)
Lines 664-670 Link Here
664
					continue nextReusableTarget;
664
					continue nextReusableTarget;
665
				}
665
				}
666
				// current target has been used in the past, simply branch to its label
666
				// current target has been used in the past, simply branch to its label
667
				if ((this.reusableJSRStateIndexes[i] != stateIndex) && finallyMode == FINALLY_INLINE && isStackMapFrameCodeStream) {
667
				if ((this.reusableJSRStateIndexes[i] != stateIndex) && finallyMode == FINALLY_INLINE) {
668
					reuseTargetLocation = false;
668
					reuseTargetLocation = false;
669
					break nextReusableTarget;
669
					break nextReusableTarget;
670
				} else {
670
				} else {
(-)src/org/eclipse/jdt/core/tests/compiler/regression/TryStatementTest.java (-189 / +269 lines)
Lines 24-30 Link Here
24
24
25
static {
25
static {
26
//	TESTS_NAMES = new String[] { "test000" };
26
//	TESTS_NAMES = new String[] { "test000" };
27
//	TESTS_NUMBERS = new int[] { 63, 64 };
27
//	TESTS_NUMBERS = new int[] { 40, 41, 43, 45, 63, 64 };
28
//	TESTS_RANGE = new int[] { 11, -1 };
28
//	TESTS_RANGE = new int[] { 11, -1 };
29
}
29
}
30
public TryStatementTest(String name) {
30
public TryStatementTest(String name) {
Lines 1966-1996 Link Here
1966
			"    14  return\n" +
1966
			"    14  return\n" +
1967
			"    15  aconst_null\n" +
1967
			"    15  aconst_null\n" +
1968
			"    16  astore_2 [o]\n" +
1968
			"    16  astore_2 [o]\n" +
1969
			"    17  goto 6\n" +
1969
			"    17  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
1970
			"    20  astore_3\n" +
1970
			"    20  ldc <String \"done\"> [22]\n" +
1971
			"    21  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
1971
			"    22  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
1972
			"    24  ldc <String \"done\"> [22]\n" +
1972
			"    25  return\n" +
1973
			"    26  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
1973
			"    26  astore_3\n" +
1974
			"    29  aload_3\n" +
1974
			"    27  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
1975
			"    30  athrow\n" +
1975
			"    30  ldc <String \"done\"> [22]\n" +
1976
			"    32  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
1977
			"    35  aload_3\n" +
1978
			"    36  athrow\n" +
1976
			"      Exception Table:\n" +
1979
			"      Exception Table:\n" +
1977
			"        [pc: 0, pc: 6] -> 20 when : any\n" +
1980
			"        [pc: 0, pc: 6] -> 26 when : any\n" +
1978
			"        [pc: 15, pc: 20] -> 20 when : any\n" +
1981
			"        [pc: 15, pc: 17] -> 26 when : any\n" +
1979
			"      Line numbers:\n" +
1982
			"      Line numbers:\n" +
1980
			"        [pc: 0, line: 4]\n" +
1983
			"        [pc: 0, line: 4]\n" +
1981
			"        [pc: 4, line: 5]\n" +
1984
			"        [pc: 4, line: 5]\n" +
1982
			"        [pc: 6, line: 12]\n" +
1985
			"        [pc: 6, line: 12]\n" +
1983
			"        [pc: 14, line: 6]\n" +
1986
			"        [pc: 14, line: 6]\n" +
1984
			"        [pc: 15, line: 8]\n" +
1987
			"        [pc: 15, line: 8]\n" +
1985
			"        [pc: 17, line: 9]\n" +
1988
			"        [pc: 17, line: 12]\n" +
1986
			"        [pc: 20, line: 11]\n" +
1989
			"        [pc: 25, line: 9]\n" +
1987
			"        [pc: 21, line: 12]\n" +
1990
			"        [pc: 26, line: 11]\n" +
1988
			"        [pc: 29, line: 13]\n" +
1991
			"        [pc: 27, line: 12]\n" +
1992
			"        [pc: 35, line: 13]\n" +
1989
			"      Local variable table:\n" +
1993
			"      Local variable table:\n" +
1990
			"        [pc: 0, pc: 31] local: this index: 0 type: X\n" +
1994
			"        [pc: 0, pc: 37] local: this index: 0 type: X\n" +
1991
			"        [pc: 0, pc: 31] local: b index: 1 type: boolean\n" +
1995
			"        [pc: 0, pc: 37] local: b index: 1 type: boolean\n" +
1992
			"        [pc: 6, pc: 15] local: i index: 2 type: int\n" +
1996
			"        [pc: 6, pc: 15] local: i index: 2 type: int\n" +
1993
			"        [pc: 17, pc: 20] local: o index: 2 type: java.lang.Object\n";
1997
			"        [pc: 17, pc: 26] local: o index: 2 type: java.lang.Object\n";
1994
		} else {
1998
		} else {
1995
			expectedOutput = "  // Method descriptor #15 (Z)V\n" +
1999
			expectedOutput = "  // Method descriptor #15 (Z)V\n" +
1996
			"  // Stack: 2, Locals: 4\n" +
2000
			"  // Stack: 2, Locals: 4\n" +
Lines 2059-2065 Link Here
2059
				"X.java",
2063
				"X.java",
2060
				"public class X {\n" +
2064
				"public class X {\n" +
2061
				"	public void foo(boolean b) {\n" +
2065
				"	public void foo(boolean b) {\n" +
2062
				"		try { \n" +
2066
				"		try {\n" +
2063
				"			int i = 0;\n" +
2067
				"			int i = 0;\n" +
2064
				"			return;\n" +
2068
				"			return;\n" +
2065
				"		} catch(Exception e) {\n" +
2069
				"		} catch(Exception e) {\n" +
Lines 2127-2157 Link Here
2127
			"     7  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
2131
			"     7  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
2128
			"    10  return\n" +
2132
			"    10  return\n" +
2129
			"    11  astore_2 [e]\n" +
2133
			"    11  astore_2 [e]\n" +
2130
			"    12  goto 2\n" +
2134
			"    12  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
2131
			"    15  astore_3\n" +
2135
			"    15  ldc <String \"done\"> [22]\n" +
2132
			"    16  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
2136
			"    17  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
2133
			"    19  ldc <String \"done\"> [22]\n" +
2137
			"    20  return\n" +
2134
			"    21  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
2138
			"    21  astore_3\n" +
2135
			"    24  aload_3\n" +
2139
			"    22  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
2136
			"    25  athrow\n" +
2140
			"    25  ldc <String \"done\"> [22]\n" +
2141
			"    27  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" +
2142
			"    30  aload_3\n" +
2143
			"    31  athrow\n" +
2137
			"      Exception Table:\n" +
2144
			"      Exception Table:\n" +
2138
			"        [pc: 0, pc: 2] -> 11 when : java.lang.Exception\n" +
2145
			"        [pc: 0, pc: 2] -> 11 when : java.lang.Exception\n" +
2139
			"        [pc: 0, pc: 2] -> 15 when : any\n" +
2146
			"        [pc: 0, pc: 2] -> 21 when : any\n" +
2140
			"        [pc: 11, pc: 15] -> 15 when : any\n" +
2147
			"        [pc: 11, pc: 12] -> 21 when : any\n" +
2141
			"      Line numbers:\n" +
2148
			"      Line numbers:\n" +
2142
			"        [pc: 0, line: 4]\n" +
2149
			"        [pc: 0, line: 4]\n" +
2143
			"        [pc: 2, line: 9]\n" +
2150
			"        [pc: 2, line: 9]\n" +
2144
			"        [pc: 10, line: 5]\n" +
2151
			"        [pc: 10, line: 5]\n" +
2145
			"        [pc: 11, line: 6]\n" +
2152
			"        [pc: 11, line: 6]\n" +
2146
			"        [pc: 12, line: 7]\n" +
2153
			"        [pc: 12, line: 9]\n" +
2147
			"        [pc: 15, line: 8]\n" +
2154
			"        [pc: 20, line: 7]\n" +
2148
			"        [pc: 16, line: 9]\n" +
2155
			"        [pc: 21, line: 8]\n" +
2149
			"        [pc: 24, line: 10]\n" +
2156
			"        [pc: 22, line: 9]\n" +
2157
			"        [pc: 30, line: 10]\n" +
2150
			"      Local variable table:\n" +
2158
			"      Local variable table:\n" +
2151
			"        [pc: 0, pc: 26] local: this index: 0 type: X\n" +
2159
			"        [pc: 0, pc: 32] local: this index: 0 type: X\n" +
2152
			"        [pc: 0, pc: 26] local: b index: 1 type: boolean\n" +
2160
			"        [pc: 0, pc: 32] local: b index: 1 type: boolean\n" +
2153
			"        [pc: 2, pc: 11] local: i index: 2 type: int\n" +
2161
			"        [pc: 2, pc: 11] local: i index: 2 type: int\n" +
2154
			"        [pc: 12, pc: 15] local: e index: 2 type: java.lang.Exception\n";
2162
			"        [pc: 12, pc: 21] local: e index: 2 type: java.lang.Exception\n";
2155
		} else {
2163
		} else {
2156
			expectedOutput = "  // Method descriptor #15 (Z)V\n" +
2164
			expectedOutput = "  // Method descriptor #15 (Z)V\n" +
2157
			"  // Stack: 2, Locals: 4\n" +
2165
			"  // Stack: 2, Locals: 4\n" +
Lines 2523-2565 Link Here
2523
			"     63  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2531
			"     63  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2524
			"     66  aload_3 [contexts]\n" +
2532
			"     66  aload_3 [contexts]\n" +
2525
			"     67  invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" +
2533
			"     67  invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" +
2526
			"     70  goto 13\n" +
2534
			"     70  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2527
			"     73  astore 5\n" +
2535
			"     73  new java.lang.StringBuilder [27]\n" +
2528
			"     75  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2536
			"     76  dup\n" +
2529
			"     78  new java.lang.StringBuilder [27]\n" +
2537
			"     77  ldc <String \"#inner -> \"> [29]\n" +
2530
			"     81  dup\n" +
2538
			"     79  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2531
			"     82  ldc <String \"#inner -> \"> [29]\n" +
2539
			"     82  iload_1 [a]\n" +
2532
			"     84  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2540
			"     83  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2533
			"     87  iload_1 [a]\n" +
2541
			"     86  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2534
			"     88  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2542
			"     89  invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" +
2535
			"     91  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2543
			"     92  iconst_0\n" +
2536
			"     94  invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" +
2544
			"     93  istore 7 [var]\n" +
2537
			"     97  aload 5\n" +
2545
			"     95  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2538
			"     99  athrow\n" +
2546
			"     98  new java.lang.StringBuilder [27]\n" +
2539
			"    100  astore_2 [e]\n" +
2547
			"    101  dup\n" +
2540
			"    101  goto 35\n" +
2548
			"    102  ldc <String \"#save -> \"> [44]\n" +
2541
			"    104  astore 6\n" +
2549
			"    104  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2542
			"    106  iconst_0\n" +
2550
			"    107  iload_1 [a]\n" +
2543
			"    107  istore 7 [var]\n" +
2551
			"    108  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2544
			"    109  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2552
			"    111  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2545
			"    112  new java.lang.StringBuilder [27]\n" +
2553
			"    114  invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" +
2546
			"    115  dup\n" +
2554
			"    117  return\n" +
2547
			"    116  ldc <String \"#save -> \"> [44]\n" +
2555
			"    118  astore 5\n" +
2548
			"    118  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2556
			"    120  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2549
			"    121  iload_1 [a]\n" +
2557
			"    123  new java.lang.StringBuilder [27]\n" +
2550
			"    122  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2558
			"    126  dup\n" +
2551
			"    125  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2559
			"    127  ldc <String \"#inner -> \"> [29]\n" +
2552
			"    128  invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" +
2560
			"    129  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2553
			"    131  aload 6\n" +
2561
			"    132  iload_1 [a]\n" +
2554
			"    133  athrow\n" +
2562
			"    133  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2563
			"    136  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2564
			"    139  invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" +
2565
			"    142  aload 5\n" +
2566
			"    144  athrow\n" +
2567
			"    145  astore_2 [e]\n" +
2568
			"    146  iconst_0\n" +
2569
			"    147  istore 7 [var]\n" +
2570
			"    149  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2571
			"    152  new java.lang.StringBuilder [27]\n" +
2572
			"    155  dup\n" +
2573
			"    156  ldc <String \"#save -> \"> [44]\n" +
2574
			"    158  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2575
			"    161  iload_1 [a]\n" +
2576
			"    162  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2577
			"    165  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2578
			"    168  invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" +
2579
			"    171  return\n" +
2580
			"    172  astore 6\n" +
2581
			"    174  iconst_0\n" +
2582
			"    175  istore 7 [var]\n" +
2583
			"    177  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2584
			"    180  new java.lang.StringBuilder [27]\n" +
2585
			"    183  dup\n" +
2586
			"    184  ldc <String \"#save -> \"> [44]\n" +
2587
			"    186  invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" +
2588
			"    189  iload_1 [a]\n" +
2589
			"    190  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" +
2590
			"    193  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" +
2591
			"    196  invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" +
2592
			"    199  aload 6\n" +
2593
			"    201  athrow\n" +
2555
			"      Exception Table:\n" +
2594
			"      Exception Table:\n" +
2556
			"        [pc: 6, pc: 13] -> 61 when : java.lang.NullPointerException\n" +
2595
			"        [pc: 6, pc: 13] -> 61 when : java.lang.NullPointerException\n" +
2557
			"        [pc: 6, pc: 13] -> 73 when : any\n" +
2596
			"        [pc: 6, pc: 13] -> 118 when : any\n" +
2558
			"        [pc: 61, pc: 73] -> 73 when : any\n" +
2597
			"        [pc: 61, pc: 70] -> 118 when : any\n" +
2559
			"        [pc: 2, pc: 35] -> 100 when : java.lang.Exception\n" +
2598
			"        [pc: 2, pc: 35] -> 145 when : java.lang.Exception\n" +
2560
			"        [pc: 61, pc: 100] -> 100 when : java.lang.Exception\n" +
2599
			"        [pc: 61, pc: 92] -> 145 when : java.lang.Exception\n" +
2561
			"        [pc: 2, pc: 35] -> 104 when : any\n" +
2600
			"        [pc: 118, pc: 145] -> 145 when : java.lang.Exception\n" +
2562
			"        [pc: 61, pc: 104] -> 104 when : any\n" +
2601
			"        [pc: 2, pc: 35] -> 172 when : any\n" +
2602
			"        [pc: 61, pc: 92] -> 172 when : any\n" +
2603
			"        [pc: 118, pc: 146] -> 172 when : any\n" +
2563
			"      Line numbers:\n" +
2604
			"      Line numbers:\n" +
2564
			"        [pc: 0, line: 3]\n" +
2605
			"        [pc: 0, line: 3]\n" +
2565
			"        [pc: 2, line: 5]\n" +
2606
			"        [pc: 2, line: 5]\n" +
Lines 2571-2595 Link Here
2571
			"        [pc: 60, line: 9]\n" +
2612
			"        [pc: 60, line: 9]\n" +
2572
			"        [pc: 61, line: 10]\n" +
2613
			"        [pc: 61, line: 10]\n" +
2573
			"        [pc: 63, line: 11]\n" +
2614
			"        [pc: 63, line: 11]\n" +
2574
			"        [pc: 70, line: 12]\n" +
2615
			"        [pc: 70, line: 14]\n" +
2575
			"        [pc: 73, line: 13]\n" +
2616
			"        [pc: 92, line: 19]\n" +
2576
			"        [pc: 75, line: 14]\n" +
2617
			"        [pc: 95, line: 20]\n" +
2577
			"        [pc: 97, line: 15]\n" +
2618
			"        [pc: 117, line: 12]\n" +
2578
			"        [pc: 100, line: 16]\n" +
2619
			"        [pc: 118, line: 13]\n" +
2579
			"        [pc: 101, line: 17]\n" +
2620
			"        [pc: 120, line: 14]\n" +
2580
			"        [pc: 104, line: 18]\n" +
2621
			"        [pc: 142, line: 15]\n" +
2581
			"        [pc: 106, line: 19]\n" +
2622
			"        [pc: 145, line: 16]\n" +
2582
			"        [pc: 109, line: 20]\n" +
2623
			"        [pc: 146, line: 19]\n" +
2583
			"        [pc: 131, line: 21]\n" +
2624
			"        [pc: 149, line: 20]\n" +
2584
			"      Local variable table:\n" +
2625
			"        [pc: 171, line: 17]\n" +
2585
			"        [pc: 0, pc: 134] local: this index: 0 type: X\n" +
2626
			"        [pc: 172, line: 18]\n" +
2586
			"        [pc: 2, pc: 134] local: a index: 1 type: int\n" +
2627
			"        [pc: 174, line: 19]\n" +
2587
			"        [pc: 4, pc: 100] local: warnings index: 2 type: java.lang.Object\n" +
2628
			"        [pc: 177, line: 20]\n" +
2588
			"        [pc: 6, pc: 100] local: contexts index: 3 type: java.lang.Object\n" +
2629
			"        [pc: 199, line: 21]\n" +
2589
			"        [pc: 63, pc: 73] local: npe index: 4 type: java.lang.NullPointerException\n" +
2630
			"      Local variable table:\n" +
2590
			"        [pc: 101, pc: 104] local: e index: 2 type: java.lang.Exception\n" +
2631
			"        [pc: 0, pc: 202] local: this index: 0 type: X\n" +
2632
			"        [pc: 2, pc: 202] local: a index: 1 type: int\n" +
2633
			"        [pc: 4, pc: 145] local: warnings index: 2 type: java.lang.Object\n" +
2634
			"        [pc: 6, pc: 145] local: contexts index: 3 type: java.lang.Object\n" +
2635
			"        [pc: 63, pc: 118] local: npe index: 4 type: java.lang.NullPointerException\n" +
2636
			"        [pc: 146, pc: 172] local: e index: 2 type: java.lang.Exception\n" +
2591
			"        [pc: 38, pc: 60] local: var index: 7 type: int\n" +
2637
			"        [pc: 38, pc: 60] local: var index: 7 type: int\n" +
2592
			"        [pc: 109, pc: 131] local: var index: 7 type: int\n";
2638
			"        [pc: 95, pc: 117] local: var index: 7 type: int\n" +
2639
			"        [pc: 149, pc: 171] local: var index: 7 type: int\n" +
2640
			"        [pc: 177, pc: 199] local: var index: 7 type: int\n";
2593
		} else {
2641
		} else {
2594
			expectedOutput = "  // Method descriptor #6 ()V\n" +
2642
			expectedOutput = "  // Method descriptor #6 ()V\n" +
2595
			"  // Stack: 4, Locals: 8\n" +
2643
			"  // Stack: 4, Locals: 8\n" +
Lines 2981-3039 Link Here
2981
			expectedOutput = "  // Method descriptor #6 ()V\n" +
3029
			expectedOutput = "  // Method descriptor #6 ()V\n" +
2982
			"  // Stack: 2, Locals: 7\n" +
3030
			"  // Stack: 2, Locals: 7\n" +
2983
			"  public void save();\n" +
3031
			"  public void save();\n" +
2984
			"     0  aconst_null\n" +
3032
			"      0  aconst_null\n" +
2985
			"     1  astore_1 [warnings]\n" +
3033
			"      1  astore_1 [warnings]\n" +
2986
			"     2  aconst_null\n" +
3034
			"      2  aconst_null\n" +
2987
			"     3  astore_2 [contexts]\n" +
3035
			"      3  astore_2 [contexts]\n" +
2988
			"     4  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3036
			"      4  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2989
			"     7  ldc <String \"[try]\"> [21]\n" +
3037
			"      7  ldc <String \"[try]\"> [21]\n" +
2990
			"     9  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3038
			"      9  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
2991
			"    12  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3039
			"     12  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2992
			"    15  aload_1 [warnings]\n" +
3040
			"     15  aload_1 [warnings]\n" +
2993
			"    16  invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" +
3041
			"     16  invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" +
2994
			"    19  iconst_0\n" +
3042
			"     19  iconst_0\n" +
2995
			"    20  istore 5 [var]\n" +
3043
			"     20  istore 5 [var]\n" +
2996
			"    22  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3044
			"     22  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
2997
			"    25  ldc <String \"[finally]\"> [32]\n" +
3045
			"     25  ldc <String \"[finally]\"> [32]\n" +
2998
			"    27  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3046
			"     27  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
2999
			"    30  aconst_null\n" +
3047
			"     30  aconst_null\n" +
3000
			"    31  astore 6 [o]\n" +
3048
			"     31  astore 6 [o]\n" +
3001
			"    33  aload 6 [o]\n" +
3049
			"     33  aload 6 [o]\n" +
3002
			"    35  invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" +
3050
			"     35  invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" +
3003
			"    38  pop\n" +
3051
			"     38  pop\n" +
3004
			"    39  return\n" +
3052
			"     39  return\n" +
3005
			"    40  astore_3 [npe]\n" +
3053
			"     40  astore_3 [npe]\n" +
3006
			"    41  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3054
			"     41  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3007
			"    44  ldc <String \"[npe]\"> [38]\n" +
3055
			"     44  ldc <String \"[npe]\"> [38]\n" +
3008
			"    46  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3056
			"     46  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3009
			"    49  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3057
			"     49  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3010
			"    52  aload_2 [contexts]\n" +
3058
			"     52  aload_2 [contexts]\n" +
3011
			"    53  invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" +
3059
			"     53  invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" +
3012
			"    56  goto 19\n" +
3060
			"     56  iconst_0\n" +
3013
			"    59  astore_1 [e]\n" +
3061
			"     57  istore 5 [var]\n" +
3014
			"    60  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3062
			"     59  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3015
			"    63  ldc <String \"[e]\"> [40]\n" +
3063
			"     62  ldc <String \"[finally]\"> [32]\n" +
3016
			"    65  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3064
			"     64  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3017
			"    68  goto 19\n" +
3065
			"     67  aconst_null\n" +
3018
			"    71  astore 4\n" +
3066
			"     68  astore 6 [o]\n" +
3019
			"    73  iconst_0\n" +
3067
			"     70  aload 6 [o]\n" +
3020
			"    74  istore 5 [var]\n" +
3068
			"     72  invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" +
3021
			"    76  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3069
			"     75  pop\n" +
3022
			"    79  ldc <String \"[finally]\"> [32]\n" +
3070
			"     76  return\n" +
3023
			"    81  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3071
			"     77  astore_1 [e]\n" +
3024
			"    84  aconst_null\n" +
3072
			"     78  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3025
			"    85  astore 6 [o]\n" +
3073
			"     81  ldc <String \"[e]\"> [40]\n" +
3026
			"    87  aload 6 [o]\n" +
3074
			"     83  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3027
			"    89  invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" +
3075
			"     86  iconst_0\n" +
3028
			"    92  pop\n" +
3076
			"     87  istore 5 [var]\n" +
3029
			"    93  aload 4\n" +
3077
			"     89  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3030
			"    95  athrow\n" +
3078
			"     92  ldc <String \"[finally]\"> [32]\n" +
3079
			"     94  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3080
			"     97  aconst_null\n" +
3081
			"     98  astore 6 [o]\n" +
3082
			"    100  aload 6 [o]\n" +
3083
			"    102  invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" +
3084
			"    105  pop\n" +
3085
			"    106  return\n" +
3086
			"    107  astore 4\n" +
3087
			"    109  iconst_0\n" +
3088
			"    110  istore 5 [var]\n" +
3089
			"    112  getstatic java.lang.System.out : java.io.PrintStream [15]\n" +
3090
			"    115  ldc <String \"[finally]\"> [32]\n" +
3091
			"    117  invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" +
3092
			"    120  aconst_null\n" +
3093
			"    121  astore 6 [o]\n" +
3094
			"    123  aload 6 [o]\n" +
3095
			"    125  invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" +
3096
			"    128  pop\n" +
3097
			"    129  aload 4\n" +
3098
			"    131  athrow\n" +
3031
			"      Exception Table:\n" +
3099
			"      Exception Table:\n" +
3032
			"        [pc: 4, pc: 19] -> 40 when : java.lang.NullPointerException\n" +
3100
			"        [pc: 4, pc: 19] -> 40 when : java.lang.NullPointerException\n" +
3033
			"        [pc: 0, pc: 19] -> 59 when : java.lang.Exception\n" +
3101
			"        [pc: 0, pc: 19] -> 77 when : java.lang.Exception\n" +
3034
			"        [pc: 40, pc: 59] -> 59 when : java.lang.Exception\n" +
3102
			"        [pc: 40, pc: 56] -> 77 when : java.lang.Exception\n" +
3035
			"        [pc: 0, pc: 19] -> 71 when : any\n" +
3103
			"        [pc: 0, pc: 19] -> 107 when : any\n" +
3036
			"        [pc: 40, pc: 71] -> 71 when : any\n" +
3104
			"        [pc: 40, pc: 56] -> 107 when : any\n" +
3105
			"        [pc: 77, pc: 86] -> 107 when : any\n" +
3037
			"      Line numbers:\n" +
3106
			"      Line numbers:\n" +
3038
			"        [pc: 0, line: 4]\n" +
3107
			"        [pc: 0, line: 4]\n" +
3039
			"        [pc: 2, line: 5]\n" +
3108
			"        [pc: 2, line: 5]\n" +
Lines 3047-3072 Link Here
3047
			"        [pc: 40, line: 10]\n" +
3116
			"        [pc: 40, line: 10]\n" +
3048
			"        [pc: 41, line: 11]\n" +
3117
			"        [pc: 41, line: 11]\n" +
3049
			"        [pc: 49, line: 12]\n" +
3118
			"        [pc: 49, line: 12]\n" +
3050
			"        [pc: 56, line: 13]\n" +
3119
			"        [pc: 56, line: 19]\n" +
3051
			"        [pc: 59, line: 15]\n" +
3120
			"        [pc: 59, line: 20]\n" +
3052
			"        [pc: 60, line: 16]\n" +
3121
			"        [pc: 67, line: 21]\n" +
3053
			"        [pc: 68, line: 17]\n" +
3122
			"        [pc: 70, line: 22]\n" +
3054
			"        [pc: 71, line: 18]\n" +
3123
			"        [pc: 76, line: 13]\n" +
3055
			"        [pc: 73, line: 19]\n" +
3124
			"        [pc: 77, line: 15]\n" +
3056
			"        [pc: 76, line: 20]\n" +
3125
			"        [pc: 78, line: 16]\n" +
3057
			"        [pc: 84, line: 21]\n" +
3126
			"        [pc: 86, line: 19]\n" +
3058
			"        [pc: 87, line: 22]\n" +
3127
			"        [pc: 89, line: 20]\n" +
3059
			"        [pc: 93, line: 23]\n" +
3128
			"        [pc: 97, line: 21]\n" +
3060
			"      Local variable table:\n" +
3129
			"        [pc: 100, line: 22]\n" +
3061
			"        [pc: 0, pc: 96] local: this index: 0 type: X\n" +
3130
			"        [pc: 106, line: 17]\n" +
3062
			"        [pc: 2, pc: 59] local: warnings index: 1 type: java.lang.Object\n" +
3131
			"        [pc: 107, line: 18]\n" +
3063
			"        [pc: 4, pc: 59] local: contexts index: 2 type: java.lang.Object\n" +
3132
			"        [pc: 109, line: 19]\n" +
3064
			"        [pc: 41, pc: 59] local: npe index: 3 type: java.lang.NullPointerException\n" +
3133
			"        [pc: 112, line: 20]\n" +
3065
			"        [pc: 60, pc: 71] local: e index: 1 type: java.lang.Exception\n" +
3134
			"        [pc: 120, line: 21]\n" +
3135
			"        [pc: 123, line: 22]\n" +
3136
			"        [pc: 129, line: 23]\n" +
3137
			"      Local variable table:\n" +
3138
			"        [pc: 0, pc: 132] local: this index: 0 type: X\n" +
3139
			"        [pc: 2, pc: 77] local: warnings index: 1 type: java.lang.Object\n" +
3140
			"        [pc: 4, pc: 77] local: contexts index: 2 type: java.lang.Object\n" +
3141
			"        [pc: 41, pc: 77] local: npe index: 3 type: java.lang.NullPointerException\n" +
3142
			"        [pc: 78, pc: 107] local: e index: 1 type: java.lang.Exception\n" +
3066
			"        [pc: 22, pc: 39] local: var index: 5 type: int\n" +
3143
			"        [pc: 22, pc: 39] local: var index: 5 type: int\n" +
3067
			"        [pc: 76, pc: 93] local: var index: 5 type: int\n" +
3144
			"        [pc: 59, pc: 76] local: var index: 5 type: int\n" +
3145
			"        [pc: 89, pc: 106] local: var index: 5 type: int\n" +
3146
			"        [pc: 112, pc: 129] local: var index: 5 type: int\n" +
3068
			"        [pc: 33, pc: 39] local: o index: 6 type: java.lang.Object\n" +
3147
			"        [pc: 33, pc: 39] local: o index: 6 type: java.lang.Object\n" +
3069
			"        [pc: 87, pc: 93] local: o index: 6 type: java.lang.Object\n";
3148
			"        [pc: 70, pc: 76] local: o index: 6 type: java.lang.Object\n" +
3149
			"        [pc: 100, pc: 106] local: o index: 6 type: java.lang.Object\n" +
3150
			"        [pc: 123, pc: 129] local: o index: 6 type: java.lang.Object\n";
3070
		} else {
3151
		} else {
3071
			expectedOutput = "  // Method descriptor #6 ()V\n" +
3152
			expectedOutput = "  // Method descriptor #6 ()V\n" +
3072
			"  // Stack: 2, Locals: 7\n" +
3153
			"  // Stack: 2, Locals: 7\n" +
Lines 5441-5461 Link Here
5441
			"    22  ret 3\n" +
5522
			"    22  ret 3\n" +
5442
			"      Exception Table:\n" +
5523
			"      Exception Table:\n" +
5443
			"        [pc: 0, pc: 12] -> 13 when : any\n"
5524
			"        [pc: 0, pc: 12] -> 13 when : any\n"
5444
		:	new CompilerOptions(getCompilerOptions()).complianceLevel <= ClassFileConstants.JDK1_5 ?
5445
			"  // Method descriptor #6 ()V\n" +
5446
			"  // Stack: 3, Locals: 4\n" +
5447
			"  void bar();\n" +
5448
			"     0  new X$MyClass [15]\n" +
5449
			"     3  dup\n" +
5450
			"     4  aload_0 [this]\n" +
5451
			"     5  invokespecial X$MyClass(X) [17]\n" +
5452
			"     8  astore_1 [myClass]\n" +
5453
			"     9  return\n" +
5454
			"    10  astore_3\n" +
5455
			"    11  aload_3\n" +
5456
			"    12  athrow\n" +
5457
			"      Exception Table:\n" +
5458
			"        [pc: 0, pc: 9] -> 10 when : any\n"
5459
		:
5525
		:
5460
			"  // Method descriptor #6 ()V\n" +
5526
			"  // Method descriptor #6 ()V\n" +
5461
			"  // Stack: 3, Locals: 4\n" +
5527
			"  // Stack: 3, Locals: 4\n" +
Lines 5538-5561 Link Here
5538
			"    23  ret 3\n" +
5604
			"    23  ret 3\n" +
5539
			"      Exception Table:\n" +
5605
			"      Exception Table:\n" +
5540
			"        [pc: 0, pc: 12] -> 14 when : any\n"
5606
			"        [pc: 0, pc: 12] -> 14 when : any\n"
5541
		:	new CompilerOptions(getCompilerOptions()).complianceLevel <= ClassFileConstants.JDK1_5 ?
5607
		:	"  // Method descriptor #15 ()Ljava/lang/Object;\n" +
5542
			"  // Method descriptor #15 ()Ljava/lang/Object;\n" +
5543
			"  // Stack: 3, Locals: 4\n" +
5544
			"  java.lang.Object bar();\n" +
5545
			"     0  new X$MyClass [16]\n" +
5546
			"     3  dup\n" +
5547
			"     4  aload_0 [this]\n" +
5548
			"     5  invokespecial X$MyClass(X) [18]\n" +
5549
			"     8  astore_1 [myClass]\n" +
5550
			"     9  aconst_null\n" +
5551
			"    10  areturn\n" +
5552
			"    11  astore_3\n" +
5553
			"    12  aload_3\n" +
5554
			"    13  athrow\n" +
5555
			"      Exception Table:\n" +
5556
			"        [pc: 0, pc: 9] -> 11 when : any\n"
5557
		:
5558
			"  // Method descriptor #15 ()Ljava/lang/Object;\n" +
5559
			"  // Stack: 3, Locals: 4\n" +
5608
			"  // Stack: 3, Locals: 4\n" +
5560
			"  java.lang.Object bar();\n" +
5609
			"  java.lang.Object bar();\n" +
5561
			"     0  new X$MyClass [16]\n" +
5610
			"     0  new X$MyClass [16]\n" +
Lines 5653-5658 Link Here
5653
		"Zork cannot be resolved to a type\n" +
5702
		"Zork cannot be resolved to a type\n" +
5654
		"----------\n");
5703
		"----------\n");
5655
}
5704
}
5705
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=248319
5706
public void test067() throws Exception {
5707
	this.runConformTest(
5708
			new String[] {
5709
				"X.java",
5710
				"public class X {\n" + 
5711
				"	public static void main(final String[] args) {\n" + 
5712
				"		System.out.println(new X().verifyError());\n" + 
5713
				"	}\n" + 
5714
				"	private Object verifyError() {\n" + 
5715
				"		try {\n" + 
5716
				"			if (someBooleanMethod()) {\n" + 
5717
				"				return null;\n" + 
5718
				"			}\n" + 
5719
				"			return getStuff();\n" + 
5720
				"		} catch (final Exception ex) {\n" + 
5721
				"			return null;\n" + 
5722
				"		} finally {\n" + 
5723
				"			while (someBooleanMethod()) {\n" + 
5724
				"				anyMethod();\n" + 
5725
				"			}\n" + 
5726
				"		}\n" + 
5727
				"	}\n" + 
5728
				"	private void anyMethod() { /*empty*/ }\n" + 
5729
				"	private Object getStuff() { return null; }\n" + 
5730
				"	private boolean someBooleanMethod() { return false; }\n" + 
5731
				"}\n" + 
5732
				"",
5733
			},
5734
			"null");
5735
}
5656
public static Class testClass() {
5736
public static Class testClass() {
5657
	return TryStatementTest.class;
5737
	return TryStatementTest.class;
5658
}
5738
}

Return to bug 248319