aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Clement <aclement@gopivotal.com>2014-05-23 13:25:57 -0700
committerAndy Clement <aclement@gopivotal.com>2014-05-23 13:25:57 -0700
commit6e5c19b7529d637084564d155d1515f6c4058e05 (patch)
treefc994bcac1cd080ae0e92d064036352edbb771a7
parent2334f629a16a1623a222bc12de10a85ff9abaa04 (diff)
downloadaspectj-6e5c19b7529d637084564d155d1515f6c4058e05.tar.gz
aspectj-6e5c19b7529d637084564d155d1515f6c4058e05.zip
fix for 435446: ensure size of invokedynamic correct
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/ConstantsInitializer.java28
-rw-r--r--lib/bcel/bcel-src.zipbin313692 -> 326237 bytes
-rw-r--r--lib/bcel/bcel-verifier-src.zipbin182111 -> 183372 bytes
-rw-r--r--lib/bcel/bcel-verifier.jarbin159627 -> 161556 bytes
-rw-r--r--lib/bcel/bcel.jarbin271193 -> 285387 bytes
-rw-r--r--tests/bugs181/435446/Application.java37
-rw-r--r--tests/bugs181/435446/MyAspect.java9
-rw-r--r--tests/src/org/aspectj/systemtest/ajc181/Ajc181Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc181/ajc181.xml7
9 files changed, 72 insertions, 13 deletions
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/ConstantsInitializer.java b/bcel-builder/src/org/aspectj/apache/bcel/ConstantsInitializer.java
index 2196df3e7..9e19c417d 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/ConstantsInitializer.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/ConstantsInitializer.java
@@ -337,20 +337,22 @@ public class ConstantsInitializer {
| Constants.INDEXED;
Constants.instExcs[Constants.INVOKEVIRTUAL] = ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION_INVOKESPECIAL_INVOKEVIRTUAL;
+ //@formatter:off
char[] lengths = // . = varies in length, / = undefined
("1111111111111111" + // nop > dconst_1
- "2323322222111111" + // bipush > lload_1
- "1111111111111111" + // lload_2 > laload
- "1111112222211111" + // faload > lstore_0
- "1111111111111111" + // lstore_1 > iastore
- "1111111111111111" + // lastore > swap
- "1111111111111111" + // iadd > ddiv
- "1111111111111111" + // irem > land
- "1111311111111111" + // ior > d2l
- "1111111113333333" + // d2f > if_icmpeq
- "3333333332..1111" + // if_icmpne > dreturn
- "1133333335/32311" + // areturn > athrow
- "3311.433551/////").toCharArray(); // checkcast >
+ "2323322222111111" + // bipush > lload_1
+ "1111111111111111" + // lload_2 > laload
+ "1111112222211111" + // faload > lstore_0
+ "1111111111111111" + // lstore_1 > iastore
+ "1111111111111111" + // lastore > swap
+ "1111111111111111" + // iadd > ddiv
+ "1111111111111111" + // irem > land
+ "1111311111111111" + // ior > d2l
+ "1111111113333333" + // d2f > if_icmpeq
+ "3333333332..1111" + // if_icmpne > dreturn
+ "1133333335532311" + // areturn > athrow
+ "3311.433551/////").toCharArray(); // checkcast >
+ //@formatter:on
int count = 0;
for (; count < lengths.length; count++) {
Constants.iLen[count] = (byte) (lengths[count] - 48);
@@ -374,7 +376,7 @@ public class ConstantsInitializer {
"1212021211212212" + // ior > d2l
"1111111110000000" + // d2f > if_icmpeq
"0000000010000000" + // if_icmpne > dreturn
- "00.0.0..../11111" + // areturn > athrow
+ "00.0.0.....11111" + // areturn > athrow
"11000100010/").toCharArray(); // checkcast >
count = 0;
for (; count < producesOnStack.length; count++) {
diff --git a/lib/bcel/bcel-src.zip b/lib/bcel/bcel-src.zip
index 9150034a6..090f7083a 100644
--- a/lib/bcel/bcel-src.zip
+++ b/lib/bcel/bcel-src.zip
Binary files differ
diff --git a/lib/bcel/bcel-verifier-src.zip b/lib/bcel/bcel-verifier-src.zip
index ba3f777d1..bf5a86a3e 100644
--- a/lib/bcel/bcel-verifier-src.zip
+++ b/lib/bcel/bcel-verifier-src.zip
Binary files differ
diff --git a/lib/bcel/bcel-verifier.jar b/lib/bcel/bcel-verifier.jar
index a86266c05..c407530cf 100644
--- a/lib/bcel/bcel-verifier.jar
+++ b/lib/bcel/bcel-verifier.jar
Binary files differ
diff --git a/lib/bcel/bcel.jar b/lib/bcel/bcel.jar
index 3a1fb89e5..20e2af40c 100644
--- a/lib/bcel/bcel.jar
+++ b/lib/bcel/bcel.jar
Binary files differ
diff --git a/tests/bugs181/435446/Application.java b/tests/bugs181/435446/Application.java
new file mode 100644
index 000000000..f332729d2
--- /dev/null
+++ b/tests/bugs181/435446/Application.java
@@ -0,0 +1,37 @@
+package de.scrum_master.app;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Application {
+ static Map/*<String, Map<Integer, String>>*/ languages = new HashMap<>();
+
+ static {
+ Map<Integer, String> englishNumbers = new HashMap<>();
+ englishNumbers.put(11, "eleven");
+ englishNumbers.put(12, "twelve");
+ englishNumbers.put(13, "thirteen");
+ languages.put("EN", englishNumbers);
+
+ Map<Integer, String> germanNumbers = new HashMap<>();
+ germanNumbers.put(11, "elf");
+ germanNumbers.put(12, "zwölf");
+ germanNumbers.put(13, "dreizehn");
+ languages.put("DE", germanNumbers);
+
+
+ }
+
+ public static void main(String[] args) {
+ languages.entrySet().stream().forEach((language) -> {
+// String languageCode = language.getKey();
+ Map/*<Integer, String>*/ numbers = (Map)((Map.Entry)language).getValue();
+// System.out.println("Language code = " + languageCode);
+ numbers.entrySet().stream().forEach((number) -> {
+// int numericValue = number.getKey();
+// String textualValue = number.getValue();
+// System.out.println(" " + numericValue + " -> " + textualValue);
+ });
+ });
+ }
+}
diff --git a/tests/bugs181/435446/MyAspect.java b/tests/bugs181/435446/MyAspect.java
new file mode 100644
index 000000000..fb45a513f
--- /dev/null
+++ b/tests/bugs181/435446/MyAspect.java
@@ -0,0 +1,9 @@
+package de.scrum_master.aspect;
+
+import de.scrum_master.app.Application;
+
+public aspect MyAspect {
+ before() : execution(* Application.lambda$0(..)) {
+// System.out.println(thisJoinPointStaticPart);
+ }
+}
diff --git a/tests/src/org/aspectj/systemtest/ajc181/Ajc181Tests.java b/tests/src/org/aspectj/systemtest/ajc181/Ajc181Tests.java
index 2bc5e0c0c..3fc5e17cd 100644
--- a/tests/src/org/aspectj/systemtest/ajc181/Ajc181Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc181/Ajc181Tests.java
@@ -22,6 +22,10 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
*/
public class Ajc181Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
+ public void testLvarTable_435446() throws Exception {
+ runTest("lvartable");
+ }
+
public void testBrokenAnnotations_377096() throws Exception {
runTest("broken annotations");
Method method = getMethodFromClass(getClassFrom(ajc.getSandboxDirectory(), "C"), "xxx");
diff --git a/tests/src/org/aspectj/systemtest/ajc181/ajc181.xml b/tests/src/org/aspectj/systemtest/ajc181/ajc181.xml
index cd2066506..fdbe11d21 100644
--- a/tests/src/org/aspectj/systemtest/ajc181/ajc181.xml
+++ b/tests/src/org/aspectj/systemtest/ajc181/ajc181.xml
@@ -2,6 +2,13 @@
<suite>
+ <ajc-test dir="bugs181/435446" title="lvartable">
+ <compile options="-1.8" files="Application.java MyAspect.java">
+ </compile>
+ <run class="de.scrum_master.app.Application">
+ </run>
+ </ajc-test>
+
<ajc-test dir="bugs181/377096" title="broken annotations">
<compile options="-1.5 -proceedOnError" files="A.java">
<message kind="error" text="The attribute wibble is undefined for the annotation type A"/>