changeset 3538:e32341052fe1 icedtea-3.7.0pre01

Merge jdk8u152-b16
author andrew
date Thu, 07 Dec 2017 02:46:55 +0000
parents 6a7abb86ee98 (current diff) 97dfb267d417 (diff)
children 79662192804b
files .hgtags
diffstat 7 files changed, 240 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Nov 02 06:16:10 2017 +0000
+++ b/.hgtags	Thu Dec 07 02:46:55 2017 +0000
@@ -760,3 +760,30 @@
 8fb1d9ffc81c4bb6e08330726995b9b8f2b694a1 jdk8u151-b10
 607b049fabd1352893470463dfb455e0a407687d jdk8u151-b11
 61a1c711f7abeb66195623343c1cd08b0df2dc1d icedtea-3.6.0
+8559c5805c2b091e2122dff3d04c7342cd15560c jdk8u151-b12
+9a9ce479b92f1b4d9d436fb857d70c3d2b59a20c jdk8u122-b00
+85d9e434701cc7112aaf965b0f5ee4b31ab2a445 jdk8u122-b01
+2baeb96fa198f75e9bd50a5f5ef4a19be6cfbc4e jdk8u122-b02
+a5da608d17bdc073fd3a4f2e1d4fe7d526567d09 jdk8u122-b03
+a5da608d17bdc073fd3a4f2e1d4fe7d526567d09 jdk8u122-b03
+0000000000000000000000000000000000000000 jdk8u122-b03
+0000000000000000000000000000000000000000 jdk8u122-b03
+18bfe5da1f56c6932cce6378f617904db68bedcd jdk8u122-b03
+5ce29dae0e3e11bbecbc2173479ccf0a06b7d556 jdk8u122-b04
+9229942f9ee2ad7c5b8d57cddcb9011aac6bac23 jdk8u132-b00
+03e31cfcd499360c2db8eeccacc77ee040e71bac jdk8u152-b00
+f47b61665c6fefb5eba2504d5e312004d59f0483 jdk8u152-b01
+a283fc8f44acc956fbc4192d546216c4638e7146 jdk8u152-b02
+2783ff53e49dec0e7939b54aeb302605725e1017 jdk8u152-b03
+71e344b8e2c237dd7ef7c5f4276030e2880a6e07 jdk8u152-b04
+38bb14529d829cc290439a712b9821cd0e272f7e jdk8u152-b05
+243671be7d4e0a4f71c0f88add12695ac86295cb jdk8u152-b06
+a2cc6d348025da4b72c7b18edcc5fc9e046803da jdk8u152-b07
+19eec1de09c1fef1392593284eb9d2c5becd6663 jdk8u152-b08
+ca6375d1a8b2ba3c086746a2bca65015a1a12146 jdk8u152-b09
+abdab2b0bfdbda42030083e99e903bd663cafda3 jdk8u152-b10
+b0aba5c25f8b366fbe93ee19f2f60f863b603967 jdk8u152-b11
+b83ee184e012c5a4eb8989f55216d186d9f5aaaa jdk8u152-b12
+afbf7275401383d6dbbd54149a8985f510f57d7d jdk8u152-b13
+752a7260bb1977979243aa8dd9a588787237662e jdk8u152-b14
+8c2463d627e3cf513522ba32bf71624c880beb91 jdk8u152-b15
--- a/ASSEMBLY_EXCEPTION	Thu Nov 02 06:16:10 2017 +0000
+++ b/ASSEMBLY_EXCEPTION	Thu Dec 07 02:46:55 2017 +0000
@@ -1,27 +1,27 @@
 
 OPENJDK ASSEMBLY EXCEPTION
 
-The OpenJDK source code made available by Sun at openjdk.java.net and
-openjdk.dev.java.net ("OpenJDK Code") is distributed under the terms of the
-GNU General Public License <http://www.gnu.org/copyleft/gpl.html> version 2
+The OpenJDK source code made available by Oracle America, Inc. (Oracle) at
+openjdk.java.net ("OpenJDK Code") is distributed under the terms of the GNU
+General Public License <http://www.gnu.org/copyleft/gpl.html> version 2
 only ("GPL2"), with the following clarification and special exception.
 
     Linking this OpenJDK Code statically or dynamically with other code
     is making a combined work based on this library.  Thus, the terms
     and conditions of GPL2 cover the whole combination.
 
-    As a special exception, Sun gives you permission to link this
-    OpenJDK Code with certain code licensed by Sun as indicated at
+    As a special exception, Oracle gives you permission to link this
+    OpenJDK Code with certain code licensed by Oracle as indicated at
     http://openjdk.java.net/legal/exception-modules-2007-05-08.html
     ("Designated Exception Modules") to produce an executable,
     regardless of the license terms of the Designated Exception Modules,
     and to copy and distribute the resulting executable under GPL2,
     provided that the Designated Exception Modules continue to be
-    governed by the licenses under which they were offered by Sun.
+    governed by the licenses under which they were offered by Oracle.
 
-As such, it allows licensees and sublicensees of Sun's GPL2 OpenJDK Code to
-build an executable that includes those portions of necessary code that Sun
-could not provide under GPL2 (or that Sun has provided under GPL2 with the
-Classpath exception).  If you modify or add to the OpenJDK code, that new
-GPL2 code may still be combined with Designated Exception Modules if the
-new code is made subject to this exception by its copyright holder.
+As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code
+to build an executable that includes those portions of necessary code that
+Oracle could not provide under GPL2 (or that Oracle has provided under GPL2
+with the Classpath exception).  If you modify or add to the OpenJDK code,
+that new GPL2 code may still be combined with Designated Exception Modules
+if the new code is made subject to this exception by its copyright holder.
--- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Thu Nov 02 06:16:10 2017 +0000
+++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Thu Dec 07 02:46:55 2017 +0000
@@ -27,6 +27,7 @@
 
 import java.util.*;
 
+import com.sun.tools.javac.tree.TreeInfo.PosKind;
 import com.sun.tools.javac.util.*;
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
 import com.sun.tools.javac.util.List;
@@ -1531,12 +1532,16 @@
                                   catchallpc, 0);
                     startseg = env.info.gaps.next().intValue();
                 }
-                code.statBegin(TreeInfo.finalizerPos(env.tree));
+                code.statBegin(TreeInfo.finalizerPos(env.tree, PosKind.FIRST_STAT_POS));
                 code.markStatBegin();
 
                 Item excVar = makeTemp(syms.throwableType);
                 excVar.store();
                 genFinalizer(env);
+                code.resolvePending();
+                code.statBegin(TreeInfo.finalizerPos(env.tree, PosKind.END_POS));
+                code.markStatBegin();
+
                 excVar.load();
                 registerCatch(body.pos(), startseg,
                               env.info.gaps.next().intValue(),
@@ -1550,7 +1555,7 @@
                     code.resolve(env.info.cont);
 
                     // Mark statement line number
-                    code.statBegin(TreeInfo.finalizerPos(env.tree));
+                    code.statBegin(TreeInfo.finalizerPos(env.tree, PosKind.FIRST_STAT_POS));
                     code.markStatBegin();
 
                     // Save return address.
--- a/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Thu Nov 02 06:16:10 2017 +0000
+++ b/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Thu Dec 07 02:46:55 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,6 +35,7 @@
 import com.sun.tools.javac.tree.JCTree.*;
 import com.sun.tools.javac.tree.JCTree.JCPolyExpression.*;
 import com.sun.tools.javac.util.*;
+
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
 import static com.sun.tools.javac.code.Flags.*;
 import static com.sun.tools.javac.code.TypeTag.BOT;
@@ -611,13 +612,21 @@
         };
     }
 
+    public enum PosKind {
+        START_POS() { int  toPos(JCTree tree) { return TreeInfo.getStartPos(tree); } },
+        FIRST_STAT_POS() { int  toPos(JCTree tree) { return firstStatPos(tree); } },
+        END_POS() { int  toPos(JCTree tree) { return endPos(tree); } };
+
+        abstract int toPos(JCTree tree);
+    }
+
     /** The position of the finalizer of given try/synchronized statement.
      */
-    public static int finalizerPos(JCTree tree) {
+    public static int finalizerPos(JCTree tree, PosKind posKind) {
         if (tree.hasTag(TRY)) {
             JCTry t = (JCTry) tree;
             Assert.checkNonNull(t.finalizer);
-            return firstStatPos(t.finalizer);
+            return posKind.toPos(t.finalizer);
         } else if (tree.hasTag(SYNCHRONIZED)) {
             return endPos(((JCSynchronized) tree).body);
         } else {
--- a/test/tools/javac/T7008643/InlinedFinallyConfuseDebuggersTest.java	Thu Nov 02 06:16:10 2017 +0000
+++ b/test/tools/javac/T7008643/InlinedFinallyConfuseDebuggersTest.java	Thu Dec 07 02:46:55 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -64,6 +64,7 @@
         {9,           21},      //System.out.println("finally");
         {10,          29},
         {9,           32},      //System.out.println("finally");
+        {10,          41},      //}
         {11,          43},
     };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/T8180660/MissingLNTEntryForFinalizerTest.java	Thu Dec 07 02:46:55 2017 +0000
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8180141
+ * @summary Missing entry in LineNumberTable for break statement that jumps out of try-finally
+ * @compile -g MissingLNTEntryForFinalizerTest.java
+ * @run main MissingLNTEntryForFinalizerTest
+ */
+
+import java.io.File;
+import java.net.URI;
+
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+
+import com.sun.tools.classfile.*;
+import com.sun.tools.javac.comp.Attr;
+import com.sun.tools.javac.comp.AttrContext;
+import com.sun.tools.javac.comp.Env;
+import com.sun.tools.javac.file.JavacFileManager;
+import com.sun.tools.javac.main.JavaCompiler;
+import com.sun.tools.javac.tree.JCTree;
+import com.sun.tools.javac.tree.JCTree.*;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.List;
+
+import static com.sun.tools.javac.util.List.of;
+import static com.sun.tools.javac.tree.JCTree.Tag.*;
+
+public class MissingLNTEntryForFinalizerTest {
+    protected ReusableJavaCompiler tool;
+    Context context;
+
+    MissingLNTEntryForFinalizerTest() {
+        context = new Context();
+        JavacFileManager.preRegister(context);
+        MyAttr.preRegister(context);
+        tool = new ReusableJavaCompiler(context);
+    }
+
+    public static void main(String... args) throws Throwable {
+        new MissingLNTEntryForFinalizerTest().test();
+    }
+
+    void test() throws Throwable {
+        JavaSource source = new JavaSource("1");
+        tool.clear();
+        List<JavaFileObject> inputs = of(source);
+        try {
+            tool.compile(inputs);
+        } catch (Throwable ex) {
+            throw new AssertionError(ex);
+        }
+        File testClasses = new File(".");
+        File file = new File(testClasses, "Test1.class");
+        ClassFile classFile = ClassFile.read(file);
+        for (Method m : classFile.methods) {
+            if (classFile.constant_pool.getUTF8Value(m.name_index).equals("foo")) {
+                Code_attribute code = (Code_attribute)m.attributes.get(Attribute.Code);
+                LineNumberTable_attribute lnt = (LineNumberTable_attribute)code.attributes.get(Attribute.LineNumberTable);
+                checkLNT(lnt, MyAttr.lineNumber);
+            }
+        }
+    }
+
+    void checkLNT(LineNumberTable_attribute lnt, int lineToCheckFor) {
+        for (LineNumberTable_attribute.Entry e: lnt.line_number_table) {
+            if (e.line_number == lineToCheckFor) {
+                return;
+            }
+        }
+        throw new AssertionError("seek line number not found in the LNT for method foo()");
+    }
+
+    class JavaSource extends SimpleJavaFileObject {
+        String id;
+        String template =
+                "import java.util.*;\n" +
+                "class Test#Id {\n" +
+                "    void foo() {\n" +
+                "        List<String> l = null;\n" +
+                "        String first = null;\n" +
+                "        try {\n" +
+                "            first = l.get(0);\n" +
+                "        } finally {\n" +
+                "            if (first != null) {\n" +
+                "                System.out.println(\"finalizer\");\n" +
+                "            }\n" +
+                "        }\n" +
+                "    }\n" +
+                "}";
+
+        JavaSource(String id) {
+            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
+            this.id = id;
+        }
+
+        @Override
+        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+            return template.replace("#Id", id);
+        }
+    }
+
+    /* this class has been set up to do not depend on a fixed line number, this Attr subclass will
+     * look for 'break' or 'continue' statements in order to find the actual line number they occupy.
+     * This way the test can find if that line number appears in the LNT generated for a given class.
+     */
+    static class MyAttr extends Attr {
+        static int lineNumber;
+
+        static void preRegister(Context context) {
+            context.put(attrKey, (com.sun.tools.javac.util.Context.Factory<Attr>) c -> new MyAttr(c));
+        }
+
+        MyAttr(Context context) {
+            super(context);
+        }
+
+        @Override
+        public com.sun.tools.javac.code.Type attribStat(JCTree tree, Env<AttrContext> env) {
+            com.sun.tools.javac.code.Type result = super.attribStat(tree, env);
+            if (tree.hasTag(TRY)) {
+                JCTry tryTree = (JCTry)tree;
+                lineNumber = env.toplevel.lineMap.getLineNumber(tryTree.finalizer.endpos);
+            }
+            return result;
+        }
+    }
+
+    static class ReusableJavaCompiler extends JavaCompiler {
+        ReusableJavaCompiler(Context context) {
+            super(context);
+        }
+
+        protected void checkReusable() {
+            // do nothing
+        }
+
+        @Override
+        public void close() {
+            //do nothing
+        }
+
+        void clear() {
+            //do nothing
+        }
+    }
+}
--- a/test/tools/javac/linenumbers/FinallyLineNumberTest.java	Thu Nov 02 06:16:10 2017 +0000
+++ b/test/tools/javac/linenumbers/FinallyLineNumberTest.java	Thu Dec 07 02:46:55 2017 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,7 +36,6 @@
 import com.sun.tools.classfile.LineNumberTable_attribute;
 import com.sun.tools.classfile.LineNumberTable_attribute.Entry;
 
-import java.io.File;
 import java.io.IOException;
 
 public class FinallyLineNumberTest {
@@ -46,13 +45,13 @@
         if (lines == null) {
             throw new Exception("finally line number table could not be loaded");
         }
-        if (lines.length != 4) {
+        if (lines.length != 5) {
             // Help debug
             System.err.println("LineTable error, got lines:");
             for (Entry e : lines) {
                 System.err.println(e.line_number);
             }
-            throw new Exception("finally line number table incorrect: length=" + lines.length + " expected length=4");
+            throw new Exception("finally line number table incorrect: length=" + lines.length + " expected length=5");
         }
 
         // return null line, for the load null operation
@@ -71,11 +70,17 @@
             throw new Exception("finally line number table incorrect: got=" + current + " expected=" + first);
         }
 
-        // finally line, for when exception is thrown
+        // for when exception is thrown
         current = lines[3].line_number;
         if (current != first + 2) {
             throw new Exception("finally line number table incorrect: got=" + current + " expected=" + (first + 2));
         }
+
+        // the '}' closing the finally block
+        current = lines[4].line_number;
+        if (current != first + 3) {
+            throw new Exception("finally line number table incorrect: got=" + current + " expected=" + (first + 3));
+        }
     }
 
     static Entry[] findEntries() throws IOException, ConstantPoolException {