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

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/compiler/regression/StackMapAttributeTest.java (-1 / +36 lines)
Lines 31-37 Link Here
31
	static {
31
	static {
32
//		TESTS_PREFIX = "testBug95521";
32
//		TESTS_PREFIX = "testBug95521";
33
//		TESTS_NAMES = new String[] { "testBug83127a" };
33
//		TESTS_NAMES = new String[] { "testBug83127a" };
34
//		TESTS_NUMBERS = new int[] { 40, 41 };
34
//		TESTS_NUMBERS = new int[] { 42 };
35
//		TESTS_RANGE = new int[] { 23 -1,};
35
//		TESTS_RANGE = new int[] { 23 -1,};
36
	}
36
	}
37
	public static Test suite() {
37
	public static Test suite() {
Lines 6235-6238 Link Here
6235
			"        [pc: 11, append: {java.lang.Object}]\n";
6235
			"        [pc: 11, append: {java.lang.Object}]\n";
6236
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
6236
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
6237
	}
6237
	}
6238
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=260031
6239
	public void test042() throws Exception {
6240
		this.runConformTest(
6241
			new String[] {
6242
				"X.java",
6243
				"public class X {\n" + 
6244
				"	private static void foo(Class<?> c, int n) { }\n" + 
6245
				"	public static void main(String... args) {\n" + 
6246
				"		foo(Integer.class, (args == null ? -1 : 1));\n" + 
6247
				"	}\n" + 
6248
				"}",
6249
			},
6250
		"");
6251
	
6252
		String expectedOutput =
6253
			"  // Stack: 2, Locals: 1\n" + 
6254
			"  public static void main(java.lang.String... args);\n" + 
6255
			"     0  ldc <Class java.lang.Integer> [26]\n" + 
6256
			"     2  aload_0 [args]\n" + 
6257
			"     3  ifnonnull 10\n" + 
6258
			"     6  iconst_m1\n" + 
6259
			"     7  goto 11\n" + 
6260
			"    10  iconst_1\n" + 
6261
			"    11  invokestatic X.foo(java.lang.Class, int) : void [28]\n" + 
6262
			"    14  return\n" + 
6263
			"      Line numbers:\n" + 
6264
			"        [pc: 0, line: 4]\n" + 
6265
			"        [pc: 14, line: 5]\n" + 
6266
			"      Local variable table:\n" + 
6267
			"        [pc: 0, pc: 15] local: args index: 0 type: java.lang.String[]\n" + 
6268
			"      Stack map table: number of frames 2\n" + 
6269
			"        [pc: 10, same_locals_1_stack_item, stack: {java.lang.Class}]\n" + 
6270
			"        [pc: 11, full, stack: {java.lang.Class, int}, locals: {java.lang.String[]}]\n";
6271
		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X.class", "X", expectedOutput);
6272
	}
6238
}
6273
}
(-)compiler/org/eclipse/jdt/internal/compiler/ClassFile.java (-15 / +6 lines)
Lines 7427-7439 Link Here
7427
							frame.addStackItem(TypeBinding.FLOAT);
7427
							frame.addStackItem(TypeBinding.FLOAT);
7428
							break;
7428
							break;
7429
						case ClassFileConstants.ClassTag:
7429
						case ClassFileConstants.ClassTag:
7430
							int utf8index = u2At(poolContents, 1,
7430
							frame.addStackItem(new VerificationTypeInfo(
7431
									constantPoolOffsets[index]);
7431
									TypeIds.T_JavaLangClass,
7432
							char[] classSignature = utf8At(poolContents,
7432
									ConstantPool.JavaLangClassConstantPoolName));
7433
									constantPoolOffsets[utf8index] + 3, u2At(
7434
											poolContents, 1,
7435
											constantPoolOffsets[utf8index]));
7436
							frame.addStackItem(new VerificationTypeInfo(0, classSignature));
7437
					}
7433
					}
7438
					pc += 2;
7434
					pc += 2;
7439
					break;
7435
					break;
Lines 7453-7466 Link Here
7453
							frame.addStackItem(TypeBinding.FLOAT);
7449
							frame.addStackItem(TypeBinding.FLOAT);
7454
							break;
7450
							break;
7455
						case ClassFileConstants.ClassTag:
7451
						case ClassFileConstants.ClassTag:
7456
							int utf8index = u2At(poolContents, 1,
7452
							frame.addStackItem(new VerificationTypeInfo(
7457
									constantPoolOffsets[index]);
7453
									TypeIds.T_JavaLangClass,
7458
							char[] classSignature = utf8At(poolContents,
7454
									ConstantPool.JavaLangClassConstantPoolName));
7459
									constantPoolOffsets[utf8index] + 3, u2At(
7460
											poolContents, 1,
7461
											constantPoolOffsets[utf8index]));
7462
							frame.addStackItem(new VerificationTypeInfo(0,
7463
									classSignature));
7464
					}
7455
					}
7465
					pc += 3;
7456
					pc += 3;
7466
					break;
7457
					break;

Return to bug 260031