View | Details | Raw Unified | Return to bug 326950 | Differences between
and this patch

Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java (-9 / +3 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2010 IBM Corporation and others.
2
 * Copyright (c) 2000, 2011 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 164-173 Link Here
164
	if (hasThenPart) {
164
	if (hasThenPart) {
165
		BranchLabel falseLabel = null;
165
		BranchLabel falseLabel = null;
166
		// generate boolean condition only if needed
166
		// generate boolean condition only if needed
167
		if (((this.bits & ASTNode.IsElseStatementUnreachable) != 0) ||
167
		if (cst != Constant.NotAConstant && cst.booleanValue() == true) {
168
				(cst != Constant.NotAConstant && cst.booleanValue() == true)) {
169
			// No need to generate if condition statement when we know that only the then action
170
			// will be executed
171
			this.condition.generateCode(currentScope, codeStream, false);
168
			this.condition.generateCode(currentScope, codeStream, false);
172
		} else {
169
		} else {
173
			this.condition.generateOptimizedBoolean(
170
			this.condition.generateOptimizedBoolean(
Lines 206-215 Link Here
206
		}
203
		}
207
	} else if (hasElsePart) {
204
	} else if (hasElsePart) {
208
		// generate boolean condition only if needed
205
		// generate boolean condition only if needed
209
		if (((this.bits & ASTNode.IsThenStatementUnreachable) != 0) ||
206
		if (cst != Constant.NotAConstant && cst.booleanValue() == false) {
210
				(cst != Constant.NotAConstant && cst.booleanValue() == false)) {
211
			// No need to generate if condition statement when we know that only the else action
212
			// will be executed
213
			this.condition.generateCode(currentScope, codeStream, false);
207
			this.condition.generateCode(currentScope, codeStream, false);
214
		} else {
208
		} else {
215
			this.condition.generateOptimizedBoolean(
209
			this.condition.generateOptimizedBoolean(
(-)compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java (-1 / +2 lines)
Lines 72-78 Link Here
72
// complaintLevel = 0 if was reachable up until now, 1 if fake reachable (deadcode), 2 if fatal unreachable (error)
72
// complaintLevel = 0 if was reachable up until now, 1 if fake reachable (deadcode), 2 if fatal unreachable (error)
73
public int complainIfUnreachable(FlowInfo flowInfo, BlockScope scope, int previousComplaintLevel) {
73
public int complainIfUnreachable(FlowInfo flowInfo, BlockScope scope, int previousComplaintLevel) {
74
	if ((flowInfo.reachMode() & FlowInfo.UNREACHABLE) != 0) {
74
	if ((flowInfo.reachMode() & FlowInfo.UNREACHABLE) != 0) {
75
		this.bits &= ~ASTNode.IsReachable;
75
		if ((flowInfo.reachMode() & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
76
			this.bits &= ~ASTNode.IsReachable;	// only reset this bit if unreachability is not due to null analysis
76
		if (flowInfo == FlowInfo.DEAD_END) {
77
		if (flowInfo == FlowInfo.DEAD_END) {
77
			if (previousComplaintLevel < COMPLAINED_UNREACHABLE) {
78
			if (previousComplaintLevel < COMPLAINED_UNREACHABLE) {
78
				scope.problemReporter().unreachableCode(this);
79
				scope.problemReporter().unreachableCode(this);
(-)Eclipse Java Tests Compiler/org/eclipse/jdt/tests/compiler/regression/ConformTest.java (-176 / +201 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2010 IBM Corporation and others.
2
 * Copyright (c) 2005, 2011 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 6501-6682 Link Here
6501
6501
6502
	CompilerOptions compilerOptions = new CompilerOptions(getCompilerOptions());
6502
	CompilerOptions compilerOptions = new CompilerOptions(getCompilerOptions());
6503
	String expectedOutput = compilerOptions.targetJDK <= ClassFileConstants.JDK1_5 ?
6503
	String expectedOutput = compilerOptions.targetJDK <= ClassFileConstants.JDK1_5 ?
6504
			"  // Method descriptor #15 (Z)V\n" +
6504
			"  // Method descriptor #15 (Z)V\n" + 
6505
			"  // Stack: 4, Locals: 8\n" +
6505
			"  // Stack: 4, Locals: 8\n" + 
6506
			"  private void foo(boolean delete);\n" +
6506
			"  private void foo(boolean delete);\n" + 
6507
			"     0  aload_0 [this]\n" +
6507
			"     0  aload_0 [this]\n" + 
6508
			"     1  invokevirtual X.bar() : java.lang.String [16]\n" +
6508
			"     1  invokevirtual X.bar() : java.lang.String [16]\n" + 
6509
			"     4  astore_2 [s]\n" +
6509
			"     4  astore_2 [s]\n" + 
6510
			"     5  new java.lang.StringBuffer [20]\n" +
6510
			"     5  new java.lang.StringBuffer [20]\n" + 
6511
			"     8  dup\n" +
6511
			"     8  dup\n" + 
6512
			"     9  invokespecial java.lang.StringBuffer() [22]\n" +
6512
			"     9  invokespecial java.lang.StringBuffer() [22]\n" + 
6513
			"    12  astore_3 [buffer]\n" +
6513
			"    12  astore_3 [buffer]\n" + 
6514
			"    13  iconst_1\n" +
6514
			"    13  iconst_1\n" + 
6515
			"    14  anewarray java.lang.String [23]\n" +
6515
			"    14  anewarray java.lang.String [23]\n" + 
6516
			"    17  dup\n" +
6516
			"    17  dup\n" + 
6517
			"    18  iconst_0\n" +
6517
			"    18  iconst_0\n" + 
6518
			"    19  ldc <String \"\"> [25]\n" +
6518
			"    19  ldc <String \"\"> [25]\n" + 
6519
			"    21  aastore\n" +
6519
			"    21  aastore\n" + 
6520
			"    22  astore 4 [datas]\n" +
6520
			"    22  astore 4 [datas]\n" + 
6521
			"    24  iconst_1\n" +
6521
			"    24  iconst_1\n" + 
6522
			"    25  anewarray java.lang.Object [3]\n" +
6522
			"    25  anewarray java.lang.Object [3]\n" + 
6523
			"    28  dup\n" +
6523
			"    28  dup\n" + 
6524
			"    29  iconst_0\n" +
6524
			"    29  iconst_0\n" + 
6525
			"    30  aload_2 [s]\n" +
6525
			"    30  aload_2 [s]\n" + 
6526
			"    31  aastore\n" +
6526
			"    31  aastore\n" + 
6527
			"    32  astore 5 [data]\n" +
6527
			"    32  astore 5 [data]\n" + 
6528
			"    34  aload_3 [buffer]\n" +
6528
			"    34  aload_3 [buffer]\n" + 
6529
			"    35  aload 4 [datas]\n" +
6529
			"    35  aload 4 [datas]\n" + 
6530
			"    37  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" +
6530
			"    37  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" + 
6531
			"    40  aload 5 [data]\n" +
6531
			"    40  aload 5 [data]\n" + 
6532
			"    42  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" +
6532
			"    42  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" + 
6533
			"    45  pop\n" +
6533
			"    45  pop\n" + 
6534
			"    46  goto 54\n" +
6534
			"    46  goto 62\n" + 
6535
			"    49  astore 6 [e]\n" +
6535
			"    49  astore 6 [e]\n" + 
6536
			"    51  aload 6 [e]\n" +
6536
			"    51  aload 6 [e]\n" + 
6537
			"    53  athrow\n" +
6537
			"    53  ifnull 59\n" + 
6538
			"    54  iload_1 [delete]\n" +
6538
			"    56  aload 6 [e]\n" + 
6539
			"    55  ifeq 85\n" +
6539
			"    58  athrow\n" + 
6540
			"    58  aload_3 [buffer]\n" +
6540
			"    59  aconst_null\n" + 
6541
			"    59  iconst_0\n" +
6541
			"    60  astore_3 [buffer]\n" + 
6542
			"    60  aload_3 [buffer]\n" +
6542
			"    61  return\n" + 
6543
			"    61  invokevirtual java.lang.StringBuffer.length() : int [31]\n" +
6543
			"    62  iload_1 [delete]\n" + 
6544
			"    64  invokevirtual java.lang.StringBuffer.delete(int, int) : java.lang.StringBuffer [35]\n" +
6544
			"    63  ifeq 93\n" + 
6545
			"    67  pop\n" +
6545
			"    66  aload_3 [buffer]\n" + 
6546
			"    68  goto 85\n" +
6546
			"    67  iconst_0\n" + 
6547
			"    71  astore 4\n" +
6547
			"    68  aload_3 [buffer]\n" + 
6548
			"    73  aconst_null\n" +
6548
			"    69  invokevirtual java.lang.StringBuffer.length() : int [31]\n" + 
6549
			"    74  astore_3 [buffer]\n" +
6549
			"    72  invokevirtual java.lang.StringBuffer.delete(int, int) : java.lang.StringBuffer [35]\n" + 
6550
			"    75  goto 87\n" +
6550
			"    75  pop\n" + 
6551
			"    78  astore 7\n" +
6551
			"    76  goto 93\n" + 
6552
			"    80  aconst_null\n" +
6552
			"    79  astore 4\n" + 
6553
			"    81  astore_3 [buffer]\n" +
6553
			"    81  aconst_null\n" + 
6554
			"    82  aload 7\n" +
6554
			"    82  astore_3 [buffer]\n" + 
6555
			"    84  athrow\n" +
6555
			"    83  goto 95\n" + 
6556
			"    85  aconst_null\n" +
6556
			"    86  astore 7\n" + 
6557
			"    86  astore_3 [buffer]\n" +
6557
			"    88  aconst_null\n" + 
6558
			"    87  return\n" +
6558
			"    89  astore_3 [buffer]\n" + 
6559
			"      Exception Table:\n" +
6559
			"    90  aload 7\n" + 
6560
			"        [pc: 34, pc: 46] -> 49 when : java.lang.Exception\n" +
6560
			"    92  athrow\n" + 
6561
			"        [pc: 13, pc: 68] -> 71 when : java.lang.Exception\n" +
6561
			"    93  aconst_null\n" + 
6562
			"        [pc: 13, pc: 73] -> 78 when : any\n" +
6562
			"    94  astore_3 [buffer]\n" + 
6563
			"      Line numbers:\n" +
6563
			"    95  return\n" + 
6564
			"        [pc: 0, line: 4]\n" +
6564
			"      Exception Table:\n" + 
6565
			"        [pc: 5, line: 5]\n" +
6565
			"        [pc: 34, pc: 46] -> 49 when : java.lang.Exception\n" + 
6566
			"        [pc: 13, line: 9]\n" +
6566
			"        [pc: 13, pc: 59] -> 79 when : java.lang.Exception\n" + 
6567
			"        [pc: 24, line: 10]\n" +
6567
			"        [pc: 62, pc: 76] -> 79 when : java.lang.Exception\n" + 
6568
			"        [pc: 34, line: 12]\n" +
6568
			"        [pc: 13, pc: 59] -> 86 when : any\n" + 
6569
			"        [pc: 49, line: 13]\n" +
6569
			"        [pc: 62, pc: 81] -> 86 when : any\n" + 
6570
			"        [pc: 51, line: 15]\n" +
6570
			"      Line numbers:\n" + 
6571
			"        [pc: 54, line: 19]\n" +
6571
			"        [pc: 0, line: 4]\n" + 
6572
			"        [pc: 58, line: 20]\n" +
6572
			"        [pc: 5, line: 5]\n" + 
6573
			"        [pc: 71, line: 22]\n" +
6573
			"        [pc: 13, line: 9]\n" + 
6574
			"        [pc: 73, line: 24]\n" +
6574
			"        [pc: 24, line: 10]\n" + 
6575
			"        [pc: 78, line: 23]\n" +
6575
			"        [pc: 34, line: 12]\n" + 
6576
			"        [pc: 80, line: 24]\n" +
6576
			"        [pc: 49, line: 13]\n" + 
6577
			"        [pc: 82, line: 25]\n" +
6577
			"        [pc: 51, line: 14]\n" + 
6578
			"        [pc: 85, line: 24]\n" +
6578
			"        [pc: 56, line: 15]\n" + 
6579
			"        [pc: 87, line: 26]\n" +
6579
			"        [pc: 59, line: 24]\n" + 
6580
			"      Local variable table:\n" +
6580
			"        [pc: 61, line: 16]\n" + 
6581
			"        [pc: 0, pc: 88] local: this index: 0 type: X\n" +
6581
			"        [pc: 62, line: 19]\n" + 
6582
			"        [pc: 0, pc: 88] local: delete index: 1 type: boolean\n" +
6582
			"        [pc: 66, line: 20]\n" + 
6583
			"        [pc: 5, pc: 88] local: s index: 2 type: java.lang.String\n" +
6583
			"        [pc: 79, line: 22]\n" + 
6584
			"        [pc: 13, pc: 88] local: buffer index: 3 type: java.lang.StringBuffer\n" +
6584
			"        [pc: 81, line: 24]\n" + 
6585
			"        [pc: 24, pc: 71] local: datas index: 4 type: java.lang.String[]\n" +
6585
			"        [pc: 86, line: 23]\n" + 
6586
			"        [pc: 34, pc: 71] local: data index: 5 type: java.lang.Object[]\n" +
6586
			"        [pc: 88, line: 24]\n" + 
6587
			"        [pc: 51, pc: 54] local: e index: 6 type: java.lang.Exception\n"
6587
			"        [pc: 90, line: 25]\n" + 
6588
			"        [pc: 93, line: 24]\n" + 
6589
			"        [pc: 95, line: 26]\n" + 
6590
			"      Local variable table:\n" + 
6591
			"        [pc: 0, pc: 96] local: this index: 0 type: X\n" + 
6592
			"        [pc: 0, pc: 96] local: delete index: 1 type: boolean\n" + 
6593
			"        [pc: 5, pc: 96] local: s index: 2 type: java.lang.String\n" + 
6594
			"        [pc: 13, pc: 96] local: buffer index: 3 type: java.lang.StringBuffer\n" + 
6595
			"        [pc: 24, pc: 59] local: datas index: 4 type: java.lang.String[]\n" + 
6596
			"        [pc: 62, pc: 79] local: datas index: 4 type: java.lang.String[]\n" + 
6597
			"        [pc: 34, pc: 59] local: data index: 5 type: java.lang.Object[]\n" + 
6598
			"        [pc: 62, pc: 79] local: data index: 5 type: java.lang.Object[]\n" + 
6599
			"        [pc: 51, pc: 59] local: e index: 6 type: java.lang.Exception\n"
6588
		:	"  // Method descriptor #15 (Z)V\n" +
6600
		:	"  // Method descriptor #15 (Z)V\n" +
6589
			"  // Stack: 4, Locals: 8\n" +
6601
			"  // Stack: 4, Locals: 8\n" + 
6590
			"  private void foo(boolean delete);\n" +
6602
			"  private void foo(boolean delete);\n" + 
6591
			"     0  aload_0 [this]\n" +
6603
			"     0  aload_0 [this]\n" + 
6592
			"     1  invokevirtual X.bar() : java.lang.String [16]\n" +
6604
			"     1  invokevirtual X.bar() : java.lang.String [16]\n" + 
6593
			"     4  astore_2 [s]\n" +
6605
			"     4  astore_2 [s]\n" + 
6594
			"     5  new java.lang.StringBuffer [20]\n" +
6606
			"     5  new java.lang.StringBuffer [20]\n" + 
6595
			"     8  dup\n" +
6607
			"     8  dup\n" + 
6596
			"     9  invokespecial java.lang.StringBuffer() [22]\n" +
6608
			"     9  invokespecial java.lang.StringBuffer() [22]\n" + 
6597
			"    12  astore_3 [buffer]\n" +
6609
			"    12  astore_3 [buffer]\n" + 
6598
			"    13  iconst_1\n" +
6610
			"    13  iconst_1\n" + 
6599
			"    14  anewarray java.lang.String [23]\n" +
6611
			"    14  anewarray java.lang.String [23]\n" + 
6600
			"    17  dup\n" +
6612
			"    17  dup\n" + 
6601
			"    18  iconst_0\n" +
6613
			"    18  iconst_0\n" + 
6602
			"    19  ldc <String \"\"> [25]\n" +
6614
			"    19  ldc <String \"\"> [25]\n" + 
6603
			"    21  aastore\n" +
6615
			"    21  aastore\n" + 
6604
			"    22  astore 4 [datas]\n" +
6616
			"    22  astore 4 [datas]\n" + 
6605
			"    24  iconst_1\n" +
6617
			"    24  iconst_1\n" + 
6606
			"    25  anewarray java.lang.Object [3]\n" +
6618
			"    25  anewarray java.lang.Object [3]\n" + 
6607
			"    28  dup\n" +
6619
			"    28  dup\n" + 
6608
			"    29  iconst_0\n" +
6620
			"    29  iconst_0\n" + 
6609
			"    30  aload_2 [s]\n" +
6621
			"    30  aload_2 [s]\n" + 
6610
			"    31  aastore\n" +
6622
			"    31  aastore\n" + 
6611
			"    32  astore 5 [data]\n" +
6623
			"    32  astore 5 [data]\n" + 
6612
			"    34  aload_3 [buffer]\n" +
6624
			"    34  aload_3 [buffer]\n" + 
6613
			"    35  aload 4 [datas]\n" +
6625
			"    35  aload 4 [datas]\n" + 
6614
			"    37  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" +
6626
			"    37  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" + 
6615
			"    40  aload 5 [data]\n" +
6627
			"    40  aload 5 [data]\n" + 
6616
			"    42  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" +
6628
			"    42  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [27]\n" + 
6617
			"    45  pop\n" +
6629
			"    45  pop\n" + 
6618
			"    46  goto 54\n" +
6630
			"    46  goto 62\n" + 
6619
			"    49  astore 6 [e]\n" +
6631
			"    49  astore 6 [e]\n" + 
6620
			"    51  aload 6 [e]\n" +
6632
			"    51  aload 6 [e]\n" + 
6621
			"    53  athrow\n" +
6633
			"    53  ifnull 59\n" + 
6622
			"    54  iload_1 [delete]\n" +
6634
			"    56  aload 6 [e]\n" + 
6623
			"    55  ifeq 85\n" +
6635
			"    58  athrow\n" + 
6624
			"    58  aload_3 [buffer]\n" +
6636
			"    59  aconst_null\n" + 
6625
			"    59  iconst_0\n" +
6637
			"    60  astore_3 [buffer]\n" + 
6626
			"    60  aload_3 [buffer]\n" +
6638
			"    61  return\n" + 
6627
			"    61  invokevirtual java.lang.StringBuffer.length() : int [31]\n" +
6639
			"    62  iload_1 [delete]\n" + 
6628
			"    64  invokevirtual java.lang.StringBuffer.delete(int, int) : java.lang.StringBuffer [35]\n" +
6640
			"    63  ifeq 93\n" + 
6629
			"    67  pop\n" +
6641
			"    66  aload_3 [buffer]\n" + 
6630
			"    68  goto 85\n" +
6642
			"    67  iconst_0\n" + 
6631
			"    71  astore 4\n" +
6643
			"    68  aload_3 [buffer]\n" + 
6632
			"    73  aconst_null\n" +
6644
			"    69  invokevirtual java.lang.StringBuffer.length() : int [31]\n" + 
6633
			"    74  astore_3 [buffer]\n" +
6645
			"    72  invokevirtual java.lang.StringBuffer.delete(int, int) : java.lang.StringBuffer [35]\n" + 
6634
			"    75  goto 87\n" +
6646
			"    75  pop\n" + 
6635
			"    78  astore 7\n" +
6647
			"    76  goto 93\n" + 
6636
			"    80  aconst_null\n" +
6648
			"    79  astore 4\n" + 
6637
			"    81  astore_3 [buffer]\n" + 
6649
			"    81  aconst_null\n" + 
6638
			"    82  aload 7\n" +
6650
			"    82  astore_3 [buffer]\n" + 
6639
			"    84  athrow\n" +
6651
			"    83  goto 95\n" + 
6640
			"    85  aconst_null\n" +
6652
			"    86  astore 7\n" + 
6641
			"    86  astore_3 [buffer]\n" +
6653
			"    88  aconst_null\n" + 
6642
			"    87  return\n" +
6654
			"    89  astore_3 [buffer]\n" + 
6643
			"      Exception Table:\n" +
6655
			"    90  aload 7\n" + 
6644
			"        [pc: 34, pc: 46] -> 49 when : java.lang.Exception\n" +
6656
			"    92  athrow\n" + 
6645
			"        [pc: 13, pc: 68] -> 71 when : java.lang.Exception\n" +
6657
			"    93  aconst_null\n" + 
6646
			"        [pc: 13, pc: 73] -> 78 when : any\n" +
6658
			"    94  astore_3 [buffer]\n" + 
6647
			"      Line numbers:\n" +
6659
			"    95  return\n" + 
6648
			"        [pc: 0, line: 4]\n" +
6660
			"      Exception Table:\n" + 
6649
			"        [pc: 5, line: 5]\n" +
6661
			"        [pc: 34, pc: 46] -> 49 when : java.lang.Exception\n" + 
6650
			"        [pc: 13, line: 9]\n" +
6662
			"        [pc: 13, pc: 59] -> 79 when : java.lang.Exception\n" + 
6651
			"        [pc: 24, line: 10]\n" +
6663
			"        [pc: 62, pc: 76] -> 79 when : java.lang.Exception\n" + 
6652
			"        [pc: 34, line: 12]\n" +
6664
			"        [pc: 13, pc: 59] -> 86 when : any\n" + 
6653
			"        [pc: 49, line: 13]\n" +
6665
			"        [pc: 62, pc: 81] -> 86 when : any\n" + 
6654
			"        [pc: 51, line: 15]\n" +
6666
			"      Line numbers:\n" + 
6655
			"        [pc: 54, line: 19]\n" +
6667
			"        [pc: 0, line: 4]\n" + 
6656
			"        [pc: 58, line: 20]\n" +
6668
			"        [pc: 5, line: 5]\n" + 
6657
			"        [pc: 71, line: 22]\n" +
6669
			"        [pc: 13, line: 9]\n" + 
6658
			"        [pc: 73, line: 24]\n" +
6670
			"        [pc: 24, line: 10]\n" + 
6659
			"        [pc: 78, line: 23]\n" +
6671
			"        [pc: 34, line: 12]\n" + 
6660
			"        [pc: 80, line: 24]\n" +
6672
			"        [pc: 49, line: 13]\n" + 
6661
			"        [pc: 82, line: 25]\n" +
6673
			"        [pc: 51, line: 14]\n" + 
6662
			"        [pc: 85, line: 24]\n" +
6674
			"        [pc: 56, line: 15]\n" + 
6663
			"        [pc: 87, line: 26]\n" +
6675
			"        [pc: 59, line: 24]\n" + 
6664
			"      Local variable table:\n" +
6676
			"        [pc: 61, line: 16]\n" + 
6665
			"        [pc: 0, pc: 88] local: this index: 0 type: X\n" +
6677
			"        [pc: 62, line: 19]\n" + 
6666
			"        [pc: 0, pc: 88] local: delete index: 1 type: boolean\n" +
6678
			"        [pc: 66, line: 20]\n" + 
6667
			"        [pc: 5, pc: 88] local: s index: 2 type: java.lang.String\n" +
6679
			"        [pc: 79, line: 22]\n" + 
6668
			"        [pc: 13, pc: 88] local: buffer index: 3 type: java.lang.StringBuffer\n" +
6680
			"        [pc: 81, line: 24]\n" + 
6669
			"        [pc: 24, pc: 71] local: datas index: 4 type: java.lang.String[]\n" +
6681
			"        [pc: 86, line: 23]\n" + 
6670
			"        [pc: 34, pc: 71] local: data index: 5 type: java.lang.Object[]\n" +
6682
			"        [pc: 88, line: 24]\n" + 
6671
			"        [pc: 51, pc: 54] local: e index: 6 type: java.lang.Exception\n" +
6683
			"        [pc: 90, line: 25]\n" + 
6672
			"      Stack map table: number of frames 7\n" +
6684
			"        [pc: 93, line: 24]\n" + 
6673
			"        [pc: 49, full, stack: {java.lang.Exception}, locals: {X, int, java.lang.String, java.lang.StringBuffer, java.lang.String[], java.lang.Object[]}]\n" +
6685
			"        [pc: 95, line: 26]\n" + 
6674
			"        [pc: 54, same]\n" +
6686
			"      Local variable table:\n" + 
6675
			"        [pc: 68, same]\n" +
6687
			"        [pc: 0, pc: 96] local: this index: 0 type: X\n" + 
6676
			"        [pc: 71, full, stack: {java.lang.Exception}, locals: {X, int, java.lang.String, java.lang.StringBuffer}]\n" +
6688
			"        [pc: 0, pc: 96] local: delete index: 1 type: boolean\n" + 
6677
			"        [pc: 78, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" +
6689
			"        [pc: 5, pc: 96] local: s index: 2 type: java.lang.String\n" + 
6678
			"        [pc: 85, same]\n" +
6690
			"        [pc: 13, pc: 96] local: buffer index: 3 type: java.lang.StringBuffer\n" + 
6679
			"        [pc: 87, same]\n";
6691
			"        [pc: 24, pc: 59] local: datas index: 4 type: java.lang.String[]\n" + 
6692
			"        [pc: 62, pc: 79] local: datas index: 4 type: java.lang.String[]\n" + 
6693
			"        [pc: 34, pc: 59] local: data index: 5 type: java.lang.Object[]\n" + 
6694
			"        [pc: 62, pc: 79] local: data index: 5 type: java.lang.Object[]\n" + 
6695
			"        [pc: 51, pc: 59] local: e index: 6 type: java.lang.Exception\n" + 
6696
			"      Stack map table: number of frames 8\n" + 
6697
			"        [pc: 49, full, stack: {java.lang.Exception}, locals: {X, int, java.lang.String, java.lang.StringBuffer, java.lang.String[], java.lang.Object[]}]\n" + 
6698
			"        [pc: 59, chop 2 local(s)]\n" + 
6699
			"        [pc: 62, append: {java.lang.String[], java.lang.Object[]}]\n" + 
6700
			"        [pc: 76, same]\n" + 
6701
			"        [pc: 79, full, stack: {java.lang.Exception}, locals: {X, int, java.lang.String, java.lang.StringBuffer}]\n" + 
6702
			"        [pc: 86, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" + 
6703
			"        [pc: 93, same]\n" + 
6704
			"        [pc: 95, same]\n";
6680
6705
6681
	File f = new File(OUTPUT_DIR + File.separator + "X.class");
6706
	File f = new File(OUTPUT_DIR + File.separator + "X.class");
6682
	byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(f);
6707
	byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(f);
(-)src/org/eclipse/jdt/core/tests/compiler/regression/ConstantTest.java (-122 / +126 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2003, 2010 IBM Corporation and others.
2
 * Copyright (c) 2003, 2011 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 41-47 Link Here
41
// All specified tests which does not belong to the class are skipped...
41
// All specified tests which does not belong to the class are skipped...
42
static {
42
static {
43
//	TESTS_PREFIX = "testBug95521";
43
//	TESTS_PREFIX = "testBug95521";
44
//	TESTS_NAMES = new String[] { "testBug83127a" };
44
	TESTS_NAMES = new String[] { "test009" };
45
//	TESTS_NUMBERS = new int[] { 14, 15, 16 };
45
//	TESTS_NUMBERS = new int[] { 14, 15, 16 };
46
//	TESTS_RANGE = new int[] { 23, -1 };
46
//	TESTS_RANGE = new int[] { 23, -1 };
47
}
47
}
Lines 360-488 Link Here
360
360
361
	String expectedOutput =
361
	String expectedOutput =
362
		"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
362
		"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
363
		"  // Stack: 3, Locals: 4\n" +
363
		"  // Stack: 3, Locals: 4\n" + 
364
		"  public static void main(java.lang.String[] args);\n" +
364
		"  public static void main(java.lang.String[] args);\n" + 
365
		"     0  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
365
		"     0  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
366
		"     3  ldc <String \"1\"> [22]\n" +
366
		"     3  ldc <String \"1\"> [22]\n" + 
367
		"     5  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
367
		"     5  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
368
		"     8  aconst_null\n" +
368
		"     8  aconst_null\n" + 
369
		"     9  goto 13\n" +
369
		"     9  goto 13\n" + 
370
		"    12  aconst_null\n" +
370
		"    12  aconst_null\n" + 
371
		"    13  aconst_null\n" +
371
		"    13  aconst_null\n" + 
372
		"    14  goto 18\n" +
372
		"    14  goto 18\n" + 
373
		"    17  aconst_null\n" +
373
		"    17  aconst_null\n" + 
374
		"    18  if_acmpne 29\n" +
374
		"    18  if_acmpne 29\n" + 
375
		"    21  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
375
		"    21  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
376
		"    24  ldc <String \"2\"> [30]\n" +
376
		"    24  ldc <String \"2\"> [30]\n" + 
377
		"    26  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
377
		"    26  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
378
		"    29  new java.lang.StringBuffer [32]\n" +
378
		"    29  new java.lang.StringBuffer [32]\n" + 
379
		"    32  dup\n" +
379
		"    32  dup\n" + 
380
		"    33  ldc <String \"[\"> [34]\n" +
380
		"    33  ldc <String \"[\"> [34]\n" + 
381
		"    35  invokespecial java.lang.StringBuffer(java.lang.String) [36]\n" +
381
		"    35  invokespecial java.lang.StringBuffer(java.lang.String) [36]\n" + 
382
		"    38  aconst_null\n" +
382
		"    38  aconst_null\n" + 
383
		"    39  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [38]\n" +
383
		"    39  invokevirtual java.lang.StringBuffer.append(java.lang.Object) : java.lang.StringBuffer [38]\n" + 
384
		"    42  ldc <String \"]\"> [42]\n" +
384
		"    42  ldc <String \"]\"> [42]\n" + 
385
		"    44  invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [44]\n" +
385
		"    44  invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [44]\n" + 
386
		"    47  invokevirtual java.lang.StringBuffer.toString() : java.lang.String [47]\n" +
386
		"    47  invokevirtual java.lang.StringBuffer.toString() : java.lang.String [47]\n" + 
387
		"    50  ldc <String \"[null]\"> [51]\n" +
387
		"    50  ldc <String \"[null]\"> [51]\n" + 
388
		"    52  if_acmpne 59\n" +
388
		"    52  if_acmpne 59\n" + 
389
		"    55  iconst_1\n" +
389
		"    55  iconst_1\n" + 
390
		"    56  goto 60\n" +
390
		"    56  goto 60\n" + 
391
		"    59  iconst_0\n" +
391
		"    59  iconst_0\n" + 
392
		"    60  istore_1 [b]\n" +
392
		"    60  istore_1 [b]\n" + 
393
		"    61  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
393
		"    61  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
394
		"    64  ldc <String \"3\"> [53]\n" +
394
		"    64  ldc <String \"3\"> [53]\n" + 
395
		"    66  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
395
		"    66  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
396
		"    69  aconst_null\n" +
396
		"    69  aconst_null\n" + 
397
		"    70  astore_2 [s]\n" +
397
		"    70  astore_2 [s]\n" + 
398
		"    71  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
398
		"    71  aload_2 [s]\n" + 
399
		"    74  ldc <String \"4\"> [55]\n" +
399
		"    72  ifnonnull 83\n" + 
400
		"    76  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
400
		"    75  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
401
		"    79  ldc <String \"aaa\"> [57]\n" +
401
		"    78  ldc <String \"4\"> [55]\n" + 
402
		"    81  astore_3 [s2]\n" +
402
		"    80  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
403
		"    82  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
403
		"    83  ldc <String \"aaa\"> [57]\n" + 
404
		"    85  ldc <String \"5\"> [59]\n" +
404
		"    85  astore_3 [s2]\n" + 
405
		"    87  invokevirtual java.io.PrintStream.println(java.lang.String) : void [61]\n" +
405
		"    86  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
406
		"    90  return\n" +
406
		"    89  ldc <String \"5\"> [59]\n" + 
407
		"      Line numbers:\n" +
407
		"    91  invokevirtual java.io.PrintStream.println(java.lang.String) : void [61]\n" + 
408
		"        [pc: 0, line: 3]\n" +
408
		"    94  return\n" + 
409
		"        [pc: 8, line: 4]\n" +
409
		"      Line numbers:\n" + 
410
		"        [pc: 21, line: 5]\n" +
410
		"        [pc: 0, line: 3]\n" + 
411
		"        [pc: 29, line: 6]\n" +
411
		"        [pc: 8, line: 4]\n" + 
412
		"        [pc: 61, line: 7]\n" +
412
		"        [pc: 21, line: 5]\n" + 
413
		"        [pc: 69, line: 8]\n" +
413
		"        [pc: 29, line: 6]\n" + 
414
		"        [pc: 71, line: 9]\n" +
414
		"        [pc: 61, line: 7]\n" + 
415
		"        [pc: 79, line: 10]\n" +
415
		"        [pc: 69, line: 8]\n" + 
416
		"        [pc: 82, line: 11]\n" +
416
		"        [pc: 71, line: 9]\n" + 
417
		"        [pc: 90, line: 12]\n" +
417
		"        [pc: 83, line: 10]\n" + 
418
		"      Local variable table:\n" +
418
		"        [pc: 86, line: 11]\n" + 
419
		"        [pc: 0, pc: 91] local: args index: 0 type: java.lang.String[]\n" +
419
		"        [pc: 94, line: 12]\n" + 
420
		"        [pc: 61, pc: 91] local: b index: 1 type: boolean\n" +
420
		"      Local variable table:\n" + 
421
		"        [pc: 71, pc: 91] local: s index: 2 type: java.lang.String\n" +
421
		"        [pc: 0, pc: 95] local: args index: 0 type: java.lang.String[]\n" + 
422
		"        [pc: 82, pc: 91] local: s2 index: 3 type: java.lang.String\n";
422
		"        [pc: 61, pc: 95] local: b index: 1 type: boolean\n" + 
423
		"        [pc: 71, pc: 95] local: s index: 2 type: java.lang.String\n" + 
424
		"        [pc: 86, pc: 95] local: s2 index: 3 type: java.lang.String\n";
423
425
424
	String expectedOutput15 =
426
	String expectedOutput15 =
425
		"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
427
		"  // Method descriptor #15 ([Ljava/lang/String;)V\n" +
426
		"  // Stack: 3, Locals: 4\n" +
428
		"  // Stack: 3, Locals: 4\n" + 
427
		"  public static void main(java.lang.String[] args);\n" +
429
		"  public static void main(java.lang.String[] args);\n" + 
428
		"     0  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
430
		"     0  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
429
		"     3  ldc <String \"1\"> [22]\n" +
431
		"     3  ldc <String \"1\"> [22]\n" + 
430
		"     5  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
432
		"     5  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
431
		"     8  aconst_null\n" +
433
		"     8  aconst_null\n" + 
432
		"     9  goto 13\n" +
434
		"     9  goto 13\n" + 
433
		"    12  aconst_null\n" +
435
		"    12  aconst_null\n" + 
434
		"    13  aconst_null\n" +
436
		"    13  aconst_null\n" + 
435
		"    14  goto 18\n" +
437
		"    14  goto 18\n" + 
436
		"    17  aconst_null\n" +
438
		"    17  aconst_null\n" + 
437
		"    18  if_acmpne 29\n" +
439
		"    18  if_acmpne 29\n" + 
438
		"    21  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
440
		"    21  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
439
		"    24  ldc <String \"2\"> [30]\n" +
441
		"    24  ldc <String \"2\"> [30]\n" + 
440
		"    26  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
442
		"    26  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
441
		"    29  new java.lang.StringBuilder [32]\n" +
443
		"    29  new java.lang.StringBuilder [32]\n" + 
442
		"    32  dup\n" +
444
		"    32  dup\n" + 
443
		"    33  ldc <String \"[\"> [34]\n" +
445
		"    33  ldc <String \"[\"> [34]\n" + 
444
		"    35  invokespecial java.lang.StringBuilder(java.lang.String) [36]\n" +
446
		"    35  invokespecial java.lang.StringBuilder(java.lang.String) [36]\n" + 
445
		"    38  aconst_null\n" +
447
		"    38  aconst_null\n" + 
446
		"    39  invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [38]\n" +
448
		"    39  invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [38]\n" + 
447
		"    42  ldc <String \"]\"> [42]\n" +
449
		"    42  ldc <String \"]\"> [42]\n" + 
448
		"    44  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [44]\n" +
450
		"    44  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [44]\n" + 
449
		"    47  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [47]\n" +
451
		"    47  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [47]\n" + 
450
		"    50  ldc <String \"[null]\"> [51]\n" +
452
		"    50  ldc <String \"[null]\"> [51]\n" + 
451
		"    52  if_acmpne 59\n" +
453
		"    52  if_acmpne 59\n" + 
452
		"    55  iconst_1\n" +
454
		"    55  iconst_1\n" + 
453
		"    56  goto 60\n" +
455
		"    56  goto 60\n" + 
454
		"    59  iconst_0\n" +
456
		"    59  iconst_0\n" + 
455
		"    60  istore_1 [b]\n" +
457
		"    60  istore_1 [b]\n" + 
456
		"    61  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
458
		"    61  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
457
		"    64  ldc <String \"3\"> [53]\n" +
459
		"    64  ldc <String \"3\"> [53]\n" + 
458
		"    66  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
460
		"    66  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
459
		"    69  aconst_null\n" +
461
		"    69  aconst_null\n" + 
460
		"    70  astore_2 [s]\n" +
462
		"    70  astore_2 [s]\n" + 
461
		"    71  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
463
		"    71  aload_2 [s]\n" + 
462
		"    74  ldc <String \"4\"> [55]\n" +
464
		"    72  ifnonnull 83\n" + 
463
		"    76  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" +
465
		"    75  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
464
		"    79  ldc <String \"aaa\"> [57]\n" +
466
		"    78  ldc <String \"4\"> [55]\n" + 
465
		"    81  astore_3 [s2]\n" +
467
		"    80  invokevirtual java.io.PrintStream.print(java.lang.String) : void [24]\n" + 
466
		"    82  getstatic java.lang.System.out : java.io.PrintStream [16]\n" +
468
		"    83  ldc <String \"aaa\"> [57]\n" + 
467
		"    85  ldc <String \"5\"> [59]\n" +
469
		"    85  astore_3 [s2]\n" + 
468
		"    87  invokevirtual java.io.PrintStream.println(java.lang.String) : void [61]\n" +
470
		"    86  getstatic java.lang.System.out : java.io.PrintStream [16]\n" + 
469
		"    90  return\n" +
471
		"    89  ldc <String \"5\"> [59]\n" + 
470
		"      Line numbers:\n" +
472
		"    91  invokevirtual java.io.PrintStream.println(java.lang.String) : void [61]\n" + 
471
		"        [pc: 0, line: 3]\n" +
473
		"    94  return\n" + 
472
		"        [pc: 8, line: 4]\n" +
474
		"      Line numbers:\n" + 
473
		"        [pc: 21, line: 5]\n" +
475
		"        [pc: 0, line: 3]\n" + 
474
		"        [pc: 29, line: 6]\n" +
476
		"        [pc: 8, line: 4]\n" + 
475
		"        [pc: 61, line: 7]\n" +
477
		"        [pc: 21, line: 5]\n" + 
476
		"        [pc: 69, line: 8]\n" +
478
		"        [pc: 29, line: 6]\n" + 
477
		"        [pc: 71, line: 9]\n" +
479
		"        [pc: 61, line: 7]\n" + 
478
		"        [pc: 79, line: 10]\n" +
480
		"        [pc: 69, line: 8]\n" + 
479
		"        [pc: 82, line: 11]\n" +
481
		"        [pc: 71, line: 9]\n" + 
480
		"        [pc: 90, line: 12]\n" +
482
		"        [pc: 83, line: 10]\n" + 
481
		"      Local variable table:\n" +
483
		"        [pc: 86, line: 11]\n" + 
482
		"        [pc: 0, pc: 91] local: args index: 0 type: java.lang.String[]\n" +
484
		"        [pc: 94, line: 12]\n" + 
483
		"        [pc: 61, pc: 91] local: b index: 1 type: boolean\n" +
485
		"      Local variable table:\n" + 
484
		"        [pc: 71, pc: 91] local: s index: 2 type: java.lang.String\n" +
486
		"        [pc: 0, pc: 95] local: args index: 0 type: java.lang.String[]\n" + 
485
		"        [pc: 82, pc: 91] local: s2 index: 3 type: java.lang.String\n";
487
		"        [pc: 61, pc: 95] local: b index: 1 type: boolean\n" + 
488
		"        [pc: 71, pc: 95] local: s index: 2 type: java.lang.String\n" + 
489
		"        [pc: 86, pc: 95] local: s2 index: 3 type: java.lang.String\n";
486
490
487
	if (this.complianceLevel >= ClassFileConstants.JDK1_5) {
491
	if (this.complianceLevel >= ClassFileConstants.JDK1_5) {
488
		int index = actualOutput.indexOf(expectedOutput15);
492
		int index = actualOutput.indexOf(expectedOutput15);

Return to bug 326950