diff --git a/doc/testing.html b/doc/testing.html index be4c23302bd..1963b3bd636 100644 --- a/doc/testing.html +++ b/doc/testing.html @@ -40,7 +40,7 @@ $ make run-test-jdk_lang JTREG="JOBS=8" $ make run-test TEST=jdk_lang $ make run-test-only TEST="gtest:LogTagSet gtest:LogTagSetDescriptions" GTEST="REPEAT=-1" -$ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug" +$ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OPTIONS=-XshowSettings -Xlog:gc+ref=debug" $ make run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java" $ make exploded-run-test TEST=hotspot_tier1

Configuration

@@ -77,8 +77,8 @@ TEST FAILURE

Test suite control

It is possible to control various aspects of the test suites using make control variables.

These variables use a keyword=value approach to allow multiple values to be set. So, for instance, JTREG="JOBS=1;TIMEOUT=8" will set the JTReg concurrency level to 1 and the timeout factor to 8. This is equivalent to setting JTREG_JOBS=1 JTREG_TIMEOUT=8, but using the keyword format means that the JTREG variable is parsed and verified for correctness, so JTREG="TMIEOUT=8" would give an error, while JTREG_TMIEOUT=8 would just pass unnoticed.

-

To separate multiple keyword=value pairs, use ; (semicolon). Since the shell normally eats ;, the recommended usage is to write the assignment inside qoutes, e.g. JTREG="...;...". This will also make sure spaces are preserved, as in JTREG="VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug".

-

(Other ways are possible, e.g. using backslash: JTREG=JOBS=1\;TIMEOUT=8. Also, as a special technique, the string %20 will be replaced with space for certain options, e.g. JTREG=VM_OTIONS=-XshowSettings%20-Xlog:gc+ref=debug. This can be useful if you have layers of scripts and have trouble getting proper quoting of command line arguments through.)

+

To separate multiple keyword=value pairs, use ; (semicolon). Since the shell normally eats ;, the recommended usage is to write the assignment inside qoutes, e.g. JTREG="...;...". This will also make sure spaces are preserved, as in JTREG="VM_OPTIONS=-XshowSettings -Xlog:gc+ref=debug".

+

(Other ways are possible, e.g. using backslash: JTREG=JOBS=1\;TIMEOUT=8. Also, as a special technique, the string %20 will be replaced with space for certain options, e.g. JTREG=VM_OPTIONS=-XshowSettings%20-Xlog:gc+ref=debug. This can be useful if you have layers of scripts and have trouble getting proper quoting of command line arguments through.)

As far as possible, the names of the keywords have been standardized between test suites.

JTReg keywords

JOBS

diff --git a/doc/testing.md b/doc/testing.md index da9b8ca7624..6e5aa8dfc4f 100644 --- a/doc/testing.md +++ b/doc/testing.md @@ -18,7 +18,7 @@ Some example command-lines: $ make run-test-jdk_lang JTREG="JOBS=8" $ make run-test TEST=jdk_lang $ make run-test-only TEST="gtest:LogTagSet gtest:LogTagSetDescriptions" GTEST="REPEAT=-1" - $ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug" + $ make run-test TEST="hotspot/test:hotspot_gc" JTREG="JOBS=1;TIMEOUT=8;VM_OPTIONS=-XshowSettings -Xlog:gc+ref=debug" $ make run-test TEST="jtreg:hotspot/test:hotspot_gc hotspot/test/native_sanity/JniVersion.java" $ make exploded-run-test TEST=hotspot_tier1 @@ -140,11 +140,11 @@ pass unnoticed. To separate multiple keyword=value pairs, use `;` (semicolon). Since the shell normally eats `;`, the recommended usage is to write the assignment inside qoutes, e.g. `JTREG="...;..."`. This will also make sure spaces are preserved, -as in `JTREG="VM_OTIONS=-XshowSettings -Xlog:gc+ref=debug"`. +as in `JTREG="VM_OPTIONS=-XshowSettings -Xlog:gc+ref=debug"`. (Other ways are possible, e.g. using backslash: `JTREG=JOBS=1\;TIMEOUT=8`. Also, as a special technique, the string `%20` will be replaced with space for -certain options, e.g. `JTREG=VM_OTIONS=-XshowSettings%20-Xlog:gc+ref=debug`. +certain options, e.g. `JTREG=VM_OPTIONS=-XshowSettings%20-Xlog:gc+ref=debug`. This can be useful if you have layers of scripts and have trouble getting proper quoting of command line arguments through.) diff --git a/make/scripts/compare.sh b/make/scripts/compare.sh index 8f7c47b7bef..d0ad63f5a7f 100644 --- a/make/scripts/compare.sh +++ b/make/scripts/compare.sh @@ -1298,22 +1298,37 @@ if [ "$SKIP_DEFAULT" != "true" ]; then # Find the common images to compare, prioritizing later build stages if [ -d "$THIS/install/jdk" ] && [ -d "$OTHER/install/jdk" ]; then THIS_JDK="$THIS/install/jdk" - THIS_JRE="$THIS/install/jre" OTHER_JDK="$OTHER/install/jdk" - OTHER_JRE="$OTHER/install/jre" - echo "Selecting install images for compare" + echo "Selecting install images for JDK compare" + if [ -d "$THIS/install/jre" ] && [ -d "$OTHER/install/jre" ]; then + THIS_JRE="$THIS/install/jre" + OTHER_JRE="$OTHER/install/jre" + echo "Also selecting install images for JRE compare" + else + echo "No install JRE image found" + fi elif [ -d "$THIS/images/jdk" ] && [ -d "$OTHER/deploy/images/jdk" ]; then THIS_JDK="$THIS/images/jdk" - THIS_JRE="$THIS/images/jre" OTHER_JDK="$OTHER/deploy/images/jdk" - OTHER_JRE="$OTHER/deploy/images/jre" - echo "Selecting deploy images for compare" + echo "Selecting deploy images for JDK compare" + if [ -d "$THIS/images/jre" ] && [ -d "$OTHER/deploy/images/jre" ]; then + THIS_JRE="$THIS/images/jre" + OTHER_JRE="$OTHER/deploy/images/jre" + echo "Selecting deploy images for JRE compare" + else + echo "No deploy JRE image found" + fi elif [ -d "$THIS/images/jdk" ] && [ -d "$OTHER/images/jdk" ]; then THIS_JDK="$THIS/images/jdk" - THIS_JRE="$THIS/images/jre" OTHER_JDK="$OTHER/images/jdk" - OTHER_JRE="$OTHER/images/jre" - echo "Selecting jdk images for compare" + echo "Selecting normal images for JDK compare" + if [ -d "$THIS/images/jre" ] && [ -d "$OTHER/images/jre" ]; then + THIS_JRE="$THIS/images/jre" + OTHER_JRE="$OTHER/images/jre" + echo "Selecting normal images for JRE compare" + else + echo "No normal JRE image found" + fi elif [ -d "$(ls -d $THIS/licensee-src/build/*/images/jdk 2> /dev/null)" ] \ && [ -d "$(ls -d $OTHER/licensee-src/build/*/images/jdk 2> /dev/null)" ] then @@ -1406,9 +1421,11 @@ if [ "$SKIP_DEFAULT" != "true" ]; then else OTHER_SEC_DIR="$OTHER/tmp" fi - OTHER_SEC_BIN="$OTHER_SEC_DIR/sec-bin.zip" - THIS_SEC_DIR="$THIS/images" - THIS_SEC_BIN="$THIS_SEC_DIR/sec-bin.zip" + if [ -f "$THIS_SEC_DIR/sec-bin.zip" ]; then + OTHER_SEC_BIN="$OTHER_SEC_DIR/sec-bin.zip" + THIS_SEC_DIR="$THIS/images" + THIS_SEC_BIN="$THIS_SEC_DIR/sec-bin.zip" + fi if [ "$OPENJDK_TARGET_OS" = "windows" ]; then if [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then JGSS_WINDOWS_BIN="jgss-windows-x64-bin.zip" @@ -1437,11 +1454,12 @@ if [ "$CMP_NAMES" = "true" ]; then if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then echo -n "JDK " compare_dirs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk - echo -n "JRE " - compare_dirs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre - echo -n "JDK " compare_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk + fi + if [ -n "$THIS_JRE" ] && [ -n "$OTHER_JRE" ]; then + echo -n "JRE " + compare_dirs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre echo -n "JRE " compare_files $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre fi @@ -1480,49 +1498,38 @@ if [ "$CMP_NAMES" = "true" ]; then fi fi -if [ "$CMP_PERMS" = "true" ]; then +if [ "$CMP_LIBS" = "true" ]; then if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then echo -n "JDK " - compare_permissions $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk - echo -n "JRE " - compare_permissions $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre + compare_all_libs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk fi if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then - compare_permissions $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir + compare_all_libs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir fi if [ -n "$THIS_DEPLOY_APPLET_PLUGIN_DIR" ] && [ -n "$OTHER_DEPLOY_APPLET_PLUGIN_DIR" ]; then echo -n "JavaAppletPlugin " - compare_permissions $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin + compare_all_libs $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin fi if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then echo -n "Sparkle.framework " - compare_permissions $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle + compare_all_libs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle fi fi -if [ "$CMP_TYPES" = "true" ]; then +if [ "$CMP_EXECS" = "true" ]; then if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then - echo -n "JDK " - compare_file_types $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk - echo -n "JRE " - compare_file_types $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre - fi - if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then - echo -n "JDK Bundle " - compare_file_types $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle - echo -n "JRE Bundle " - compare_file_types $THIS_JRE_BUNDLE $OTHER_JRE_BUNDLE $COMPARE_ROOT/jre-bundle + compare_all_execs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk fi if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then - compare_file_types $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir + compare_all_execs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir fi if [ -n "$THIS_DEPLOY_APPLET_PLUGIN_DIR" ] && [ -n "$OTHER_DEPLOY_APPLET_PLUGIN_DIR" ]; then echo -n "JavaAppletPlugin " - compare_file_types $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin + compare_all_execs $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin fi if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then echo -n "Sparkle.framework " - compare_file_types $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle + compare_all_execs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle fi fi @@ -1530,6 +1537,8 @@ if [ "$CMP_GENERAL" = "true" ]; then if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then echo -n "JDK " compare_general_files $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk + fi + if [ -n "$THIS_JRE" ] && [ -n "$OTHER_JRE" ]; then echo -n "JRE " compare_general_files $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre fi @@ -1601,46 +1610,53 @@ if [ "$CMP_JARS" = "true" ]; then fi fi -if [ "$CMP_LIBS" = "true" ]; then +if [ "$CMP_PERMS" = "true" ]; then if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then echo -n "JDK " - compare_all_libs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk - if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then - echo -n "JRE " - compare_all_libs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre - fi + compare_permissions $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk + fi + if [ -n "$THIS_JRE" ] && [ -n "$OTHER_JRE" ]; then + echo -n "JRE " + compare_permissions $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre fi if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then - compare_all_libs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir + compare_permissions $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir fi if [ -n "$THIS_DEPLOY_APPLET_PLUGIN_DIR" ] && [ -n "$OTHER_DEPLOY_APPLET_PLUGIN_DIR" ]; then echo -n "JavaAppletPlugin " - compare_all_libs $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin + compare_permissions $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin fi if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then echo -n "Sparkle.framework " - compare_all_libs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle + compare_permissions $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle fi fi -if [ "$CMP_EXECS" = "true" ]; then +if [ "$CMP_TYPES" = "true" ]; then if [ -n "$THIS_JDK" ] && [ -n "$OTHER_JDK" ]; then - compare_all_execs $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk - if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then - echo -n "JRE " - compare_all_execs $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre - fi + echo -n "JDK " + compare_file_types $THIS_JDK $OTHER_JDK $COMPARE_ROOT/jdk + fi + if [ -n "$THIS_JRE" ] && [ -n "$OTHER_JRE" ]; then + echo -n "JRE " + compare_file_types $THIS_JRE $OTHER_JRE $COMPARE_ROOT/jre + fi + if [ -n "$THIS_JDK_BUNDLE" ] && [ -n "$OTHER_JDK_BUNDLE" ]; then + echo -n "JDK Bundle " + compare_file_types $THIS_JDK_BUNDLE $OTHER_JDK_BUNDLE $COMPARE_ROOT/jdk-bundle + echo -n "JRE Bundle " + compare_file_types $THIS_JRE_BUNDLE $OTHER_JRE_BUNDLE $COMPARE_ROOT/jre-bundle fi if [ -n "$THIS_BASE_DIR" ] && [ -n "$OTHER_BASE_DIR" ]; then - compare_all_execs $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir + compare_file_types $THIS_BASE_DIR $OTHER_BASE_DIR $COMPARE_ROOT/base_dir fi if [ -n "$THIS_DEPLOY_APPLET_PLUGIN_DIR" ] && [ -n "$OTHER_DEPLOY_APPLET_PLUGIN_DIR" ]; then echo -n "JavaAppletPlugin " - compare_all_execs $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin + compare_file_types $THIS_DEPLOY_APPLET_PLUGIN_DIR $OTHER_DEPLOY_APPLET_PLUGIN_DIR $COMPARE_ROOT/plugin fi if [ -n "$THIS_SPARKLE_DIR" ] && [ -n "$OTHER_SPARKLE_DIR" ]; then echo -n "Sparkle.framework " - compare_all_execs $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle + compare_file_types $THIS_SPARKLE_DIR $OTHER_SPARKLE_DIR $COMPARE_ROOT/sparkle fi fi diff --git a/make/scripts/compare_exceptions.sh.incl b/make/scripts/compare_exceptions.sh.incl index eab85d45541..455c74e987c 100644 --- a/make/scripts/compare_exceptions.sh.incl +++ b/make/scripts/compare_exceptions.sh.incl @@ -339,7 +339,7 @@ if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparcv9" ] DIS_DIFF_FILTER="$SED \ -e 's/^[0-9a-f]\{16\}/:/' \ - -e 's/^ *[0-9a-f]\{3,8\}:/ :/' \ + -e 's/^ *[0-9a-f]\{3,12\}:/ :/' \ -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: /' \ -e 's/\$[a-zA-Z0-9_\$]\{15\}\././' \ -e 's/, [0-9a-fx\-]\{1,8\}/, /g' \ diff --git a/src/java.base/share/native/libjava/System.c b/src/java.base/share/native/libjava/System.c index 48ae7942fbb..3a33f11797f 100644 --- a/src/java.base/share/native/libjava/System.c +++ b/src/java.base/share/native/libjava/System.c @@ -244,21 +244,8 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) PUTPROP(props, "line.separator", sprops->line_separator); /* - * user.language - * user.script, user.country, user.variant (if user's environment specifies them) - * file.encoding + * file encoding for stdout and stderr */ - PUTPROP(props, "user.language", sprops->language); - if (sprops->script) { - PUTPROP(props, "user.script", sprops->script); - } - if (sprops->country) { - PUTPROP(props, "user.country", sprops->country); - } - if (sprops->variant) { - PUTPROP(props, "user.variant", sprops->variant); - } - PUTPROP(props, "file.encoding", sprops->encoding); if (sprops->sun_stdout_encoding != NULL) { PUTPROP(props, "sun.stdout.encoding", sprops->sun_stdout_encoding); } @@ -314,7 +301,7 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) #endif /* !!! DO NOT call PUTPROP_ForPlatformNString before this line !!! - * !!! I18n properties have not been set up yet !!! + * !!! The platform native encoding for strings has not been set up yet !!! */ InitializeEncoding(env, sprops->sun_jnu_encoding); @@ -379,17 +366,6 @@ Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) PUTPROP(props, "sun.desktop", sprops->desktop); } - /* - * unset "user.language", "user.script", "user.country", and "user.variant" - * in order to tell whether the command line option "-DXXXX=YYYY" is - * specified or not. They will be reset in fillI18nProps() below. - */ - REMOVEPROP(props, "user.language"); - REMOVEPROP(props, "user.script"); - REMOVEPROP(props, "user.country"); - REMOVEPROP(props, "user.variant"); - REMOVEPROP(props, "file.encoding"); - ret = JVM_InitProperties(env, props); /* reconstruct i18n related properties */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java index 814d547c4c6..3308059cf03 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java @@ -828,7 +828,7 @@ public class Check { return buf.toList(); } - boolean checkDenotable(Type t) { + public boolean checkDenotable(Type t) { return denotableChecker.visit(t, null); } // where diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java index f6608139d2a..e582e7b4cb6 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java @@ -43,6 +43,7 @@ import com.sun.tools.javac.code.Directive.*; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type.*; import com.sun.tools.javac.code.Types.UniqueType; +import com.sun.tools.javac.comp.Check; import com.sun.tools.javac.file.PathFileObject; import com.sun.tools.javac.jvm.Pool.DynamicMethod; import com.sun.tools.javac.jvm.Pool.Method; @@ -101,6 +102,8 @@ public class ClassWriter extends ClassFile { /** Type utilities. */ private Types types; + private Check check; + /** * If true, class files will be written in module-specific subdirectories * of the CLASS_OUTPUT location. @@ -178,6 +181,7 @@ public class ClassWriter extends ClassFile { target = Target.instance(context); source = Source.instance(context); types = Types.instance(context); + check = Check.instance(context); fileManager = context.get(JavaFileManager.class); signatureGen = new CWSignatureGenerator(types); @@ -1294,10 +1298,10 @@ public class ClassWriter extends ClassFile { //where private boolean needsLocalVariableTypeEntry(Type t) { //a local variable needs a type-entry if its type T is generic - //(i.e. |T| != T) and if it's not an intersection type (not supported - //in signature attribute grammar) - return (!types.isSameType(t, types.erasure(t)) && - !t.isCompound()); + //(i.e. |T| != T) and if it's not an non-denotable type (non-denotable + // types are not supported in signature attribute grammar!) + return !types.isSameType(t, types.erasure(t)) && + check.checkDenotable(t); } void writeStackMap(Code code) { diff --git a/test/jdk/java/util/Locale/LocaleCmdOverrides.java b/test/jdk/java/util/Locale/LocaleCmdOverrides.java new file mode 100644 index 00000000000..07f1a66f4f7 --- /dev/null +++ b/test/jdk/java/util/Locale/LocaleCmdOverrides.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2018, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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. + */ + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.util.List; + +/* + * @test + * @modules java.management + * @summary verify that overriddes on the command line affect *.display and *.format properties + * @run main/othervm + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX + * -Duser.country=X1 + * -Duser.script=X2 + * -Duser.variant=X3 + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX -Duser.language.display=YY + * -Duser.country=X1 -Duser.country.display=Y1 + * -Duser.script=X2 -Duser.script.display=Y2 + * -Duser.variant=X3 -Duser.variant.display=Y3 + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX -Duser.language.display=YY -Duser.language.format=ZZ + * -Duser.country=X1 -Duser.country.display=Y1 -Duser.country.format=Z1 + * -Duser.script=X2 -Duser.script.display=Y2 -Duser.script.format=Z2 + * -Duser.variant=X3 -Duser.variant.display=Y3 -Duser.variant.format=Z3 + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX -Duser.language.format=ZZ + * -Duser.country=X1 -Duser.country.format=Z1 + * -Duser.script=X2 -Duser.script.format=Z2 + * -Duser.variant=X3 -Duser.variant.format=Z3 + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX -Duser.language.display=XX + * -Duser.country=X1 -Duser.country.display=X1 + * -Duser.script=X2 -Duser.script.display=X2 + * -Duser.variant=X3 -Duser.variant.display=X3 + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX -Duser.language.display=XX -Duser.language.format=XX + * -Duser.country=X1 -Duser.country.display=X1 -Duser.country.format=X1 + * -Duser.script=X2 -Duser.script.display=X2 -Duser.script.format=X2 + * -Duser.variant=X3 -Duser.variant.display=X3 -Duser.variant.format=X3 + * LocaleCmdOverrides + * @run main/othervm -Duser.language=XX -Duser.language.format=X1 + * -Duser.country.format=X1 + * -Duser.script.format=X2 + * -Duser.variant.format=X3 + * LocaleCmdOverrides + */ +public class LocaleCmdOverrides { + + // Language, country, script, variant + + public static void main(String[] args) { + Map props = commandLineDefines(); + System.out.printf("props: %s%n", props); + test("user.language", props); + test("user.country", props); + test("user.script", props); + test("user.variant", props); + } + + /* + * Check each of the properties for a given basename. + */ + static void test(String baseName, Map args) { + validateArg(baseName,"", args); + validateArg(baseName,".display", args); + validateArg(baseName,".format", args); + } + + // If an argument is -D defined, the corresponding property must be equal + static void validateArg(String name, String ext, Map args) { + String extName = name.concat(ext); + String arg = args.get(extName); + String prop = System.getProperty(extName); + if (arg == null && prop == null) { + System.out.printf("No values for %s%n", extName); + } else { + System.out.printf("validateArg %s: arg: %s, prop: %s%n", extName, arg, prop); + } + + if (arg != null) { + if (!Objects.equals(arg, prop)) { + throw new RuntimeException(extName + ": -D value should match property: " + + arg + " != " + prop); + } + } else if (prop != null) { + // no command line arg for extName and some value for prop + // Check that if a property is not overridden then it is not equal to the base + if (ext != null && !ext.isEmpty()) { + String value = System.getProperty(name); + if (Objects.equals(value, prop)) { + throw new RuntimeException(extName + " property should not be equals to " + + name + " property: " + prop); + } + } + } + } + + /** + * Extract the -D arguments from the command line and return a map of key, value. + * @return a map of key, values defined by -D on the command line. + */ + static HashMap commandLineDefines() { + HashMap props = new HashMap<>(); + RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); + List args = runtime.getInputArguments(); + System.out.printf("args: %s%n", args); + for (String arg : args) { + if (arg.startsWith("-Duser.")) { + String[] kv = arg.substring(2).split("="); + switch (kv.length) { + case 1: + props.put(kv[0], ""); + break; + case 2: + props.put(kv[0], kv[1]); + break; + default: + throw new IllegalArgumentException("Illegal property syntax: " + arg); + } + } + } + return props; + } +} diff --git a/test/langtools/tools/javac/T8199910.java b/test/langtools/tools/javac/T8199910.java new file mode 100644 index 00000000000..5bfff5c17bf --- /dev/null +++ b/test/langtools/tools/javac/T8199910.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2018, 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 8199910 + * @summary Compile variables of intersection type inferred by `var` with -g option + * @compile -g T8199910.java + */ +import java.util.List; + +class T8199910 { + T first(T... ts) { + return ts[0]; + } + + void m() { + var list1 = List.of("", 1); + var list2 = List.of(1, 2.0); + var a = first("", 1); + var b = first(1, 2.0); + } +} diff --git a/test/langtools/tools/javac/lvti/harness/LocalVariableInferenceTester.java b/test/langtools/tools/javac/lvti/harness/LocalVariableInferenceTester.java index 226a32727ea..937d4e168fc 100644 --- a/test/langtools/tools/javac/lvti/harness/LocalVariableInferenceTester.java +++ b/test/langtools/tools/javac/lvti/harness/LocalVariableInferenceTester.java @@ -80,12 +80,16 @@ public class LocalVariableInferenceTester { void compileAndCheck(JavaFileObject input) throws IOException { JavaCompiler c = ToolProvider.getSystemJavaCompiler(); - JavacTask task = (JavacTask) c.getTask(null, fm, null, null, null, Arrays.asList(input)); + JavacTask task = (JavacTask) c.getTask(null, fm, null, Arrays.asList("-g"), null, Arrays.asList(input)); JavacTrees trees = JavacTrees.instance(task); Types types = Types.instance(((JavacTaskImpl)task).getContext()); Iterable roots = task.parse(); - task.analyze(); //force attribution Log log = Log.instance(((JavacTaskImpl)task).getContext()); + //force code generation (to shake out non-denotable issues) + boolean hasClasses = task.generate().iterator().hasNext(); + if (!hasClasses) { + throw new AssertionError("Errors occurred during compilation!"); + } errors += log.nerrors; new LocalVarTypeChecker(trees, types).scan(roots, null); System.err.println("Checks executed: " + checks);