diff --git a/make/CompileDemos.gmk b/make/CompileDemos.gmk index 9339250c4fb..599ce9842e4 100644 --- a/make/CompileDemos.gmk +++ b/make/CompileDemos.gmk @@ -216,7 +216,7 @@ $(eval $(call SetupBuildDemo, SampleTree, \ )) $(eval $(call SetupBuildDemo, TableExample, \ - DISABLED_WARNINGS := rawtypes unchecked deprecation this-escape, \ + DISABLED_WARNINGS := rawtypes unchecked deprecation this-escape dangling-doc-comments, \ DEMO_SUBDIR := jfc, \ )) diff --git a/make/CompileToolsJdk.gmk b/make/CompileToolsJdk.gmk index 50ffe73a096..feba5d8a902 100644 --- a/make/CompileToolsJdk.gmk +++ b/make/CompileToolsJdk.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2024, 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 @@ -55,7 +55,7 @@ $(eval $(call SetupJavaCompilation, BUILD_TOOLS_JDK, \ build/tools/depend \ , \ BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes, \ - DISABLED_WARNINGS := options, \ + DISABLED_WARNINGS := dangling-doc-comments options, \ JAVAC_FLAGS := \ --add-exports java.desktop/sun.awt=ALL-UNNAMED \ --add-exports java.base/sun.text=ALL-UNNAMED \ diff --git a/make/GenerateLinkOptData.gmk b/make/GenerateLinkOptData.gmk index e7d6962fb79..576bc4190b9 100644 --- a/make/GenerateLinkOptData.gmk +++ b/make/GenerateLinkOptData.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2024, 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 @@ -43,6 +43,7 @@ $(eval $(call SetupJavaCompilation, CLASSLIST_JAR, \ SMALL_JAVA := false, \ SRC := $(TOPDIR)/make/jdk/src/classes, \ INCLUDES := build/tools/classlist, \ + DISABLED_WARNINGS := dangling-doc-comments, \ BIN := $(BUILDTOOLS_OUTPUTDIR)/classlist_classes, \ JAR := $(SUPPORT_OUTPUTDIR)/classlist.jar, \ )) diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4 index 1e9a5637ae5..8c91a2ccd33 100644 --- a/make/autoconf/jdk-options.m4 +++ b/make/autoconf/jdk-options.m4 @@ -491,7 +491,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_UNDEFINED_BEHAVIOR_SANITIZER], [ # GCC reports lots of likely false positives for stringop-truncation and format-overflow. # Silence them for now. - UBSAN_CHECKS="-fsanitize=undefined -fsanitize=float-divide-by-zero -fno-sanitize=shift-base" + UBSAN_CHECKS="-fsanitize=undefined -fsanitize=float-divide-by-zero -fno-sanitize=shift-base -fno-sanitize=alignment" UBSAN_CFLAGS="$UBSAN_CHECKS -Wno-stringop-truncation -Wno-format-overflow -fno-omit-frame-pointer -DUNDEFINED_BEHAVIOR_SANITIZER" UBSAN_LDFLAGS="$UBSAN_CHECKS" UTIL_ARG_ENABLE(NAME: ubsan, DEFAULT: false, RESULT: UBSAN_ENABLED, diff --git a/make/conf/github-actions.conf b/make/conf/github-actions.conf index 15d577fd1d5..86fd1feccb3 100644 --- a/make/conf/github-actions.conf +++ b/make/conf/github-actions.conf @@ -29,17 +29,17 @@ GTEST_VERSION=1.14.0 JTREG_VERSION=7.3.1+1 LINUX_X64_BOOT_JDK_EXT=tar.gz -LINUX_X64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22/sapmachine-jdk-22_linux-x64_bin.tar.gz -LINUX_X64_BOOT_JDK_SHA256=42c13834842b64e3a553aaee308b99802db81e48a0b7e0c87bf3a9791ce29d60 +LINUX_X64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22.0.1/sapmachine-jdk-22.0.1_linux-x64_bin.tar.gz +LINUX_X64_BOOT_JDK_SHA256=21794bbccd5bcfd4ef40d5a6b7ae7f43aea5311365f7470239e1899012329888 MACOS_X64_BOOT_JDK_EXT=tar.gz -MACOS_X64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22/sapmachine-jdk-22_macos-x64_bin.tar.gz -MACOS_X64_BOOT_JDK_SHA256=63f5c6ecb1aebea19892c740e0bed610a85376b0115566b83d34ded642d19d8a +MACOS_X64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22.0.1/sapmachine-jdk-22.0.1_macos-x64_bin.tar.gz +MACOS_X64_BOOT_JDK_SHA256=99d49029c3fd6afaf8630ddb6444e879b203fe50c868b2e24c6b738330ed9876 MACOS_AARCH64_BOOT_JDK_EXT=tar.gz -MACOS_AARCH64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22/sapmachine-jdk-22_macos-aarch64_bin.tar.gz -MACOS_AARCH64_BOOT_JDK_SHA256=ee55231c8d2da95c1be4f85361b4cca2d0f3d5b25e63c4b649b6c4b1c7a5d866 +MACOS_AARCH64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22.0.1/sapmachine-jdk-22.0.1_macos-aarch64_bin.tar.gz +MACOS_AARCH64_BOOT_JDK_SHA256=cce91a02f4a2c6cc7f6be169794df9b18d462f1daaa200b3475df7936929562c WINDOWS_X64_BOOT_JDK_EXT=zip -WINDOWS_X64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22/sapmachine-jdk-22_windows-x64_bin.zip -WINDOWS_X64_BOOT_JDK_SHA256=1f4e8d834ac3af6c49ea3d2260ab6e312175d56a3a98d65a47659bbbce497cb4 +WINDOWS_X64_BOOT_JDK_URL=https://github.com/SAP/SapMachine/releases/download/sapmachine-22.0.1/sapmachine-jdk-22.0.1_windows-x64_bin.zip +WINDOWS_X64_BOOT_JDK_SHA256=e0f11b9697f2cf6c8d04fadab1086c8bb5b3f0499c17b7d172dcbca9891f8dd5 diff --git a/make/data/cldr/LICENSE.txt b/make/data/cldr/LICENSE similarity index 95% rename from make/data/cldr/LICENSE.txt rename to make/data/cldr/LICENSE index 4c6a432d713..99bd0beafbb 100644 --- a/make/data/cldr/LICENSE.txt +++ b/make/data/cldr/LICENSE @@ -1,8 +1,8 @@ -UNICODE LICENSE V3 +UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE -Copyright © 2019-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR @@ -37,3 +37,5 @@ Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 diff --git a/make/data/cldr/README b/make/data/cldr/README deleted file mode 100644 index 16cb6ba56c7..00000000000 --- a/make/data/cldr/README +++ /dev/null @@ -1,4 +0,0 @@ -CLDR - Unicode Common Locale Data Repository -http://cldr.unicode.org - -CLDR version installed: 44 diff --git a/make/data/cldr/README-common.md b/make/data/cldr/README-common.md new file mode 100644 index 00000000000..cadf839fb26 --- /dev/null +++ b/make/data/cldr/README-common.md @@ -0,0 +1,10 @@ +# CLDR Common Data + +This zipfile contains [CLDR](http://cldr.unicode.org) Common Data. + +## LICENSE + +See [LICENSE.txt](./LICENSE.txt) + +>Copyright © 2019-2022 Unicode, Inc. All rights reserved. +>Distributed under the Terms of Use in https://www.unicode.org/copyright.html \ No newline at end of file diff --git a/make/data/cldr/common/bcp47/collation.xml b/make/data/cldr/common/bcp47/collation.xml index afbfa0079fd..bb51229ede1 100644 --- a/make/data/cldr/common/bcp47/collation.xml +++ b/make/data/cldr/common/bcp47/collation.xml @@ -21,7 +21,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + diff --git a/make/data/cldr/common/bcp47/currency.xml b/make/data/cldr/common/bcp47/currency.xml index f357a38dd2f..7b291fba785 100644 --- a/make/data/cldr/common/bcp47/currency.xml +++ b/make/data/cldr/common/bcp47/currency.xml @@ -291,6 +291,7 @@ For terms of use, see http://www.unicode.org/copyright.html + diff --git a/make/data/cldr/common/dtd/ldml.dtd b/make/data/cldr/common/dtd/ldml.dtd index 9b9b7b60cac..d968a6962d5 100644 --- a/make/data/cldr/common/dtd/ldml.dtd +++ b/make/data/cldr/common/dtd/ldml.dtd @@ -1,7 +1,7 @@ @@ -42,7 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + diff --git a/make/data/cldr/common/dtd/ldml.xsd b/make/data/cldr/common/dtd/ldml.xsd index 56a64a730a8..92a0f548286 100644 --- a/make/data/cldr/common/dtd/ldml.xsd +++ b/make/data/cldr/common/dtd/ldml.xsd @@ -5,9 +5,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> @@ -128,10 +128,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - + diff --git a/make/data/cldr/common/dtd/ldmlBCP47.dtd b/make/data/cldr/common/dtd/ldmlBCP47.dtd index 14ddc68d72f..f608a6e8a60 100644 --- a/make/data/cldr/common/dtd/ldmlBCP47.dtd +++ b/make/data/cldr/common/dtd/ldmlBCP47.dtd @@ -1,7 +1,7 @@ @@ -12,7 +12,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + diff --git a/make/data/cldr/common/dtd/ldmlBCP47.xsd b/make/data/cldr/common/dtd/ldmlBCP47.xsd index b38e4566df4..39d6cd2d2c6 100644 --- a/make/data/cldr/common/dtd/ldmlBCP47.xsd +++ b/make/data/cldr/common/dtd/ldmlBCP47.xsd @@ -5,9 +5,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> @@ -24,10 +24,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - + diff --git a/make/data/cldr/common/dtd/ldmlICU.dtd b/make/data/cldr/common/dtd/ldmlICU.dtd index e8abdedcbab..c6058c4c3b2 100644 --- a/make/data/cldr/common/dtd/ldmlICU.dtd +++ b/make/data/cldr/common/dtd/ldmlICU.dtd @@ -1,7 +1,7 @@ diff --git a/make/data/cldr/common/dtd/ldmlSupplemental.dtd b/make/data/cldr/common/dtd/ldmlSupplemental.dtd index 7841782b878..864e696e030 100644 --- a/make/data/cldr/common/dtd/ldmlSupplemental.dtd +++ b/make/data/cldr/common/dtd/ldmlSupplemental.dtd @@ -1,21 +1,21 @@ - + - + - + @@ -75,12 +75,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + - - + + + + + + @@ -388,6 +394,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + + + + + + + + + + + + @@ -432,6 +455,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + @@ -912,12 +938,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - + + + + + diff --git a/make/data/cldr/common/dtd/ldmlSupplemental.xsd b/make/data/cldr/common/dtd/ldmlSupplemental.xsd index 7c07d2b1b9e..2aeeecf1084 100644 --- a/make/data/cldr/common/dtd/ldmlSupplemental.xsd +++ b/make/data/cldr/common/dtd/ldmlSupplemental.xsd @@ -5,9 +5,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> @@ -28,6 +28,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -63,17 +64,17 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - + - + - + @@ -209,9 +210,11 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + - + + @@ -251,6 +254,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + @@ -919,6 +926,32 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + + + + + + + + + + + + + + + + + + + + @@ -976,6 +1009,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -991,6 +1025,8 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + @@ -2049,19 +2085,22 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + + + + diff --git a/make/data/cldr/common/main/aa.xml b/make/data/cldr/common/main/aa.xml index 9e4fba43ed0..bb823863fa4 100644 --- a/make/data/cldr/common/main/aa.xml +++ b/make/data/cldr/common/main/aa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/aa_DJ.xml b/make/data/cldr/common/main/aa_DJ.xml index f8f3194a14f..e5e7af3d720 100644 --- a/make/data/cldr/common/main/aa_DJ.xml +++ b/make/data/cldr/common/main/aa_DJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/aa_ER.xml b/make/data/cldr/common/main/aa_ER.xml index ea1daef97dc..d1d87be1704 100644 --- a/make/data/cldr/common/main/aa_ER.xml +++ b/make/data/cldr/common/main/aa_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/aa_ET.xml b/make/data/cldr/common/main/aa_ET.xml index 6ccfb6dad6b..3a8f936daf9 100644 --- a/make/data/cldr/common/main/aa_ET.xml +++ b/make/data/cldr/common/main/aa_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ab.xml b/make/data/cldr/common/main/ab.xml index 748b80ce388..0a0bf6d526e 100644 --- a/make/data/cldr/common/main/ab.xml +++ b/make/data/cldr/common/main/ab.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/af_ZA.xml b/make/data/cldr/common/main/af_ZA.xml index caa5bc3f19f..5d04978a1e8 100644 --- a/make/data/cldr/common/main/af_ZA.xml +++ b/make/data/cldr/common/main/af_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/agq.xml b/make/data/cldr/common/main/agq.xml index 29048780424..29ca92bb633 100644 --- a/make/data/cldr/common/main/agq.xml +++ b/make/data/cldr/common/main/agq.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/agq_CM.xml b/make/data/cldr/common/main/agq_CM.xml index 8bba291e7b3..4ed8914f419 100644 --- a/make/data/cldr/common/main/agq_CM.xml +++ b/make/data/cldr/common/main/agq_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ak.xml b/make/data/cldr/common/main/ak.xml index 57e67d88f2f..210bde48f91 100644 --- a/make/data/cldr/common/main/ak.xml +++ b/make/data/cldr/common/main/ak.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ak_GH.xml b/make/data/cldr/common/main/ak_GH.xml index d93cf2563fd..820e726a52c 100644 --- a/make/data/cldr/common/main/ak_GH.xml +++ b/make/data/cldr/common/main/ak_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/am.xml b/make/data/cldr/common/main/am.xml index c0f69016a30..d8ed339d21c 100644 --- a/make/data/cldr/common/main/am.xml +++ b/make/data/cldr/common/main/am.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/an.xml b/make/data/cldr/common/main/an.xml index 52a1d5be479..58d722c1821 100644 --- a/make/data/cldr/common/main/an.xml +++ b/make/data/cldr/common/main/an.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/an_ES.xml b/make/data/cldr/common/main/an_ES.xml index 03e10f9bda6..7e83c2651ea 100644 --- a/make/data/cldr/common/main/an_ES.xml +++ b/make/data/cldr/common/main/an_ES.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ann.xml b/make/data/cldr/common/main/ann.xml index 2be454cafbf..49486a7f08f 100644 --- a/make/data/cldr/common/main/ann.xml +++ b/make/data/cldr/common/main/ann.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ann_NG.xml b/make/data/cldr/common/main/ann_NG.xml index 30d805cf192..66709ee4860 100644 --- a/make/data/cldr/common/main/ann_NG.xml +++ b/make/data/cldr/common/main/ann_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/apc.xml b/make/data/cldr/common/main/apc.xml index 91484788d5a..1db7a71aa2d 100644 --- a/make/data/cldr/common/main/apc.xml +++ b/make/data/cldr/common/main/apc.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar.xml b/make/data/cldr/common/main/ar.xml index 25dbef48553..9d980918278 100644 --- a/make/data/cldr/common/main/ar.xml +++ b/make/data/cldr/common/main/ar.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_AE.xml b/make/data/cldr/common/main/ar_AE.xml index 0c13c9f3469..16529b39227 100644 --- a/make/data/cldr/common/main/ar_AE.xml +++ b/make/data/cldr/common/main/ar_AE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_BH.xml b/make/data/cldr/common/main/ar_BH.xml index 4fbcabf7767..c105c640666 100644 --- a/make/data/cldr/common/main/ar_BH.xml +++ b/make/data/cldr/common/main/ar_BH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_DJ.xml b/make/data/cldr/common/main/ar_DJ.xml index 9b56d7ed107..434afd02fac 100644 --- a/make/data/cldr/common/main/ar_DJ.xml +++ b/make/data/cldr/common/main/ar_DJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_DZ.xml b/make/data/cldr/common/main/ar_DZ.xml index 41c22b3822e..75594030bb0 100644 --- a/make/data/cldr/common/main/ar_DZ.xml +++ b/make/data/cldr/common/main/ar_DZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_EG.xml b/make/data/cldr/common/main/ar_EG.xml index 2959ab81a78..d135bfe0085 100644 --- a/make/data/cldr/common/main/ar_EG.xml +++ b/make/data/cldr/common/main/ar_EG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_EH.xml b/make/data/cldr/common/main/ar_EH.xml index f52fba4d9e3..881bb4af655 100644 --- a/make/data/cldr/common/main/ar_EH.xml +++ b/make/data/cldr/common/main/ar_EH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_ER.xml b/make/data/cldr/common/main/ar_ER.xml index e1952f9336f..954a1c05d9b 100644 --- a/make/data/cldr/common/main/ar_ER.xml +++ b/make/data/cldr/common/main/ar_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_IL.xml b/make/data/cldr/common/main/ar_IL.xml index 0e5f1f1561b..5fed505dbd6 100644 --- a/make/data/cldr/common/main/ar_IL.xml +++ b/make/data/cldr/common/main/ar_IL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_IQ.xml b/make/data/cldr/common/main/ar_IQ.xml index 0d2f1923a1f..0520aec07df 100644 --- a/make/data/cldr/common/main/ar_IQ.xml +++ b/make/data/cldr/common/main/ar_IQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_JO.xml b/make/data/cldr/common/main/ar_JO.xml index 76beed59cf6..59e71c756c8 100644 --- a/make/data/cldr/common/main/ar_JO.xml +++ b/make/data/cldr/common/main/ar_JO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_KM.xml b/make/data/cldr/common/main/ar_KM.xml index 543b940a627..ddb79577b6d 100644 --- a/make/data/cldr/common/main/ar_KM.xml +++ b/make/data/cldr/common/main/ar_KM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_KW.xml b/make/data/cldr/common/main/ar_KW.xml index b6614a87d18..845b88f9b7f 100644 --- a/make/data/cldr/common/main/ar_KW.xml +++ b/make/data/cldr/common/main/ar_KW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_LB.xml b/make/data/cldr/common/main/ar_LB.xml index ac3f61017fe..c048345b83f 100644 --- a/make/data/cldr/common/main/ar_LB.xml +++ b/make/data/cldr/common/main/ar_LB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_LY.xml b/make/data/cldr/common/main/ar_LY.xml index 1d8cd68a28b..cdae03aa3fb 100644 --- a/make/data/cldr/common/main/ar_LY.xml +++ b/make/data/cldr/common/main/ar_LY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_MA.xml b/make/data/cldr/common/main/ar_MA.xml index dc7b40ddcda..2db269ed2bf 100644 --- a/make/data/cldr/common/main/ar_MA.xml +++ b/make/data/cldr/common/main/ar_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_MR.xml b/make/data/cldr/common/main/ar_MR.xml index 3c5b1f2bf33..1d027ddd2b0 100644 --- a/make/data/cldr/common/main/ar_MR.xml +++ b/make/data/cldr/common/main/ar_MR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_OM.xml b/make/data/cldr/common/main/ar_OM.xml index 1471e968423..aba4c2d718d 100644 --- a/make/data/cldr/common/main/ar_OM.xml +++ b/make/data/cldr/common/main/ar_OM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_PS.xml b/make/data/cldr/common/main/ar_PS.xml index 3b42f22e1bd..8d815fa7aea 100644 --- a/make/data/cldr/common/main/ar_PS.xml +++ b/make/data/cldr/common/main/ar_PS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_QA.xml b/make/data/cldr/common/main/ar_QA.xml index 1c2c8febfa9..bf6acd6b0c4 100644 --- a/make/data/cldr/common/main/ar_QA.xml +++ b/make/data/cldr/common/main/ar_QA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_SA.xml b/make/data/cldr/common/main/ar_SA.xml index d93264e55b5..067dfa747a4 100644 --- a/make/data/cldr/common/main/ar_SA.xml +++ b/make/data/cldr/common/main/ar_SA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_SD.xml b/make/data/cldr/common/main/ar_SD.xml index e604376d98d..ca321a31d40 100644 --- a/make/data/cldr/common/main/ar_SD.xml +++ b/make/data/cldr/common/main/ar_SD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_SO.xml b/make/data/cldr/common/main/ar_SO.xml index 0c1a603dd71..f5ff04ffce6 100644 --- a/make/data/cldr/common/main/ar_SO.xml +++ b/make/data/cldr/common/main/ar_SO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_SS.xml b/make/data/cldr/common/main/ar_SS.xml index 2760e390bb4..a48c8164978 100644 --- a/make/data/cldr/common/main/ar_SS.xml +++ b/make/data/cldr/common/main/ar_SS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_SY.xml b/make/data/cldr/common/main/ar_SY.xml index 1cbd30b84d1..08c412f9ba0 100644 --- a/make/data/cldr/common/main/ar_SY.xml +++ b/make/data/cldr/common/main/ar_SY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_TD.xml b/make/data/cldr/common/main/ar_TD.xml index 97a3ea99b88..e3e3a7d22a4 100644 --- a/make/data/cldr/common/main/ar_TD.xml +++ b/make/data/cldr/common/main/ar_TD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_TN.xml b/make/data/cldr/common/main/ar_TN.xml index 853b0e52fec..d62cfba3157 100644 --- a/make/data/cldr/common/main/ar_TN.xml +++ b/make/data/cldr/common/main/ar_TN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ar_YE.xml b/make/data/cldr/common/main/ar_YE.xml index 8345af2df5b..453fd471a92 100644 --- a/make/data/cldr/common/main/ar_YE.xml +++ b/make/data/cldr/common/main/ar_YE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/arn.xml b/make/data/cldr/common/main/arn.xml index cbbc0837e2f..ad324bf5568 100644 --- a/make/data/cldr/common/main/arn.xml +++ b/make/data/cldr/common/main/arn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/arn_CL.xml b/make/data/cldr/common/main/arn_CL.xml index 105e0609de8..25b3f50ca37 100644 --- a/make/data/cldr/common/main/arn_CL.xml +++ b/make/data/cldr/common/main/arn_CL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/as.xml b/make/data/cldr/common/main/as.xml index 7b3ffc64abb..a86c2f45454 100644 --- a/make/data/cldr/common/main/as.xml +++ b/make/data/cldr/common/main/as.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/asa.xml b/make/data/cldr/common/main/asa.xml index f684a84d704..b7359144dc9 100644 --- a/make/data/cldr/common/main/asa.xml +++ b/make/data/cldr/common/main/asa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/asa_TZ.xml b/make/data/cldr/common/main/asa_TZ.xml index c1434d96272..9b70fcded72 100644 --- a/make/data/cldr/common/main/asa_TZ.xml +++ b/make/data/cldr/common/main/asa_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ast.xml b/make/data/cldr/common/main/ast.xml index d7d254866b7..aa3a3d6f652 100644 --- a/make/data/cldr/common/main/ast.xml +++ b/make/data/cldr/common/main/ast.xml @@ -1,8 +1,8 @@ - @@ -1208,7 +1208,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic orde de clasificación chinu simplificáu - GB2312 orde de clasificación de llista telefónica orde de clasificación pinyin - orde de clasificación reformáu gueta xeneral gueta por consonante Hangul d’aniciu orde de clasificación estándar @@ -3377,9 +3376,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora de {0} Hora braniega de {0} Hora estándar de {0} - - Santa Isabel - Hora coordinada universal @@ -3406,9 +3402,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Adelaida - - Currie - Bakú @@ -4370,11 +4363,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora braniega de Macáu - - - Hora de la Islla Macquarie - - Hora de Magadán @@ -4414,13 +4402,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora de Mawson - - - Hora del noroeste de Méxicu - Hora estándar del noroeste de Méxicu - Hora braniega del noroeste de Méxicu - - Hora del Pacíficu de Méxicu diff --git a/make/data/cldr/common/main/ast_ES.xml b/make/data/cldr/common/main/ast_ES.xml index 72d7634fed8..476f1892a4c 100644 --- a/make/data/cldr/common/main/ast_ES.xml +++ b/make/data/cldr/common/main/ast_ES.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az.xml b/make/data/cldr/common/main/az.xml index 08cd6d60b21..2eb5a1769ef 100644 --- a/make/data/cldr/common/main/az.xml +++ b/make/data/cldr/common/main/az.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Arab_IQ.xml b/make/data/cldr/common/main/az_Arab_IQ.xml index 27d806cf2a0..8445320375e 100644 --- a/make/data/cldr/common/main/az_Arab_IQ.xml +++ b/make/data/cldr/common/main/az_Arab_IQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Arab_IR.xml b/make/data/cldr/common/main/az_Arab_IR.xml index cc9305ae009..7ffa77c8b7b 100644 --- a/make/data/cldr/common/main/az_Arab_IR.xml +++ b/make/data/cldr/common/main/az_Arab_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Arab_TR.xml b/make/data/cldr/common/main/az_Arab_TR.xml index 45d76176e2d..f6fd51e08a8 100644 --- a/make/data/cldr/common/main/az_Arab_TR.xml +++ b/make/data/cldr/common/main/az_Arab_TR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Cyrl.xml b/make/data/cldr/common/main/az_Cyrl.xml index 906f8e7d0f2..1cc1e2beb92 100644 --- a/make/data/cldr/common/main/az_Cyrl.xml +++ b/make/data/cldr/common/main/az_Cyrl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Cyrl_AZ.xml b/make/data/cldr/common/main/az_Cyrl_AZ.xml index 0c23a7fc30c..0f167dc4f75 100644 --- a/make/data/cldr/common/main/az_Cyrl_AZ.xml +++ b/make/data/cldr/common/main/az_Cyrl_AZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Latn.xml b/make/data/cldr/common/main/az_Latn.xml index 69a2891e01c..81c4777cdc4 100644 --- a/make/data/cldr/common/main/az_Latn.xml +++ b/make/data/cldr/common/main/az_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/az_Latn_AZ.xml b/make/data/cldr/common/main/az_Latn_AZ.xml index f23b99aa94c..ceaf9de3eff 100644 --- a/make/data/cldr/common/main/az_Latn_AZ.xml +++ b/make/data/cldr/common/main/az_Latn_AZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ba.xml b/make/data/cldr/common/main/ba.xml index 372127a9384..e4fd7353647 100644 --- a/make/data/cldr/common/main/ba.xml +++ b/make/data/cldr/common/main/ba.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ba_RU.xml b/make/data/cldr/common/main/ba_RU.xml index 177674d93cf..b835b6839f7 100644 --- a/make/data/cldr/common/main/ba_RU.xml +++ b/make/data/cldr/common/main/ba_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bal.xml b/make/data/cldr/common/main/bal.xml index a5cd9ad9dd1..4b1b1f16696 100644 --- a/make/data/cldr/common/main/bal.xml +++ b/make/data/cldr/common/main/bal.xml @@ -1,8 +1,8 @@ - @@ -426,11 +426,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic لۆرڈ هئو اُسترالیائے گرماگی ساهت - - - ماکواریئے گیشّتگێن ساهت - - مَگَدَنئے ساهت @@ -438,13 +433,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic مَگَدَنئے گرماگی ساهت - - - شمالی مِکسیکۆئے ساهت - شمالی مِکسیکۆئے گیشّتگێن ساهت - شمالی مِکسیکۆئے گرماگی ساهت - - آرامزِری مِکسیکۆئے ساهت diff --git a/make/data/cldr/common/main/bal_Arab.xml b/make/data/cldr/common/main/bal_Arab.xml index a6fb072f7ef..9872b379b45 100644 --- a/make/data/cldr/common/main/bal_Arab.xml +++ b/make/data/cldr/common/main/bal_Arab.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bal_Arab_PK.xml b/make/data/cldr/common/main/bal_Arab_PK.xml index 0c75544898b..78d2338d90e 100644 --- a/make/data/cldr/common/main/bal_Arab_PK.xml +++ b/make/data/cldr/common/main/bal_Arab_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bal_Latn.xml b/make/data/cldr/common/main/bal_Latn.xml index 78bcb0e66a2..68f2f264bae 100644 --- a/make/data/cldr/common/main/bal_Latn.xml +++ b/make/data/cldr/common/main/bal_Latn.xml @@ -1,8 +1,8 @@ - @@ -419,11 +419,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ástréliáay, Ládhaway garmági wahd - - - Makwáriay anjári wahd - - Mágadánay wahd @@ -431,13 +426,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mágadánay garmági wahd - - - Shemálrónendi Meksikóay wahd - Górichánrónendi Meksikóay anjári wahd - Shemálrónendi Meksikóay garmági wahd - - Árámzeri Meksikóay wahd diff --git a/make/data/cldr/common/main/bal_Latn_PK.xml b/make/data/cldr/common/main/bal_Latn_PK.xml index 9bfffa1f977..4d8bb32b570 100644 --- a/make/data/cldr/common/main/bal_Latn_PK.xml +++ b/make/data/cldr/common/main/bal_Latn_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bas.xml b/make/data/cldr/common/main/bas.xml index 1e3a4fc4964..923b500ae36 100644 --- a/make/data/cldr/common/main/bas.xml +++ b/make/data/cldr/common/main/bas.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bas_CM.xml b/make/data/cldr/common/main/bas_CM.xml index 76905e9ea31..b3766fa7fe3 100644 --- a/make/data/cldr/common/main/bas_CM.xml +++ b/make/data/cldr/common/main/bas_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/be.xml b/make/data/cldr/common/main/be.xml index 200ac68cfe6..8c1ed8788d2 100644 --- a/make/data/cldr/common/main/be.xml +++ b/make/data/cldr/common/main/be.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/be_TARASK.xml b/make/data/cldr/common/main/be_TARASK.xml index 550857a75eb..e39083692d7 100644 --- a/make/data/cldr/common/main/be_TARASK.xml +++ b/make/data/cldr/common/main/be_TARASK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bem_ZM.xml b/make/data/cldr/common/main/bem_ZM.xml index a76f60b95ee..82360f3f853 100644 --- a/make/data/cldr/common/main/bem_ZM.xml +++ b/make/data/cldr/common/main/bem_ZM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bew.xml b/make/data/cldr/common/main/bew.xml index abad9435a21..30adaac310e 100644 --- a/make/data/cldr/common/main/bew.xml +++ b/make/data/cldr/common/main/bew.xml @@ -1,8 +1,8 @@ - @@ -3009,27 +3009,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Darussalam - - Usgorod - Kiip Akmesjid - - Saporijiah - Midwé Wék - - Jonsten - Angkorèt @@ -3652,11 +3643,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waktu Musim Pentèr Makao - - - Waktu Pulo Macquarie - - Waktu Magadan @@ -3696,13 +3682,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waktu Mawson - - - Waktu Mèksiko Lor-kulon - Waktu Pakem Mèksiko Lor-kulon - Waktu Musim Pentèr Mèksiko Lor-kulon - - Waktu Mèksiko Teduh diff --git a/make/data/cldr/common/main/bew_ID.xml b/make/data/cldr/common/main/bew_ID.xml index 14b6c21f07c..ce5a2c288b4 100644 --- a/make/data/cldr/common/main/bew_ID.xml +++ b/make/data/cldr/common/main/bew_ID.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bez.xml b/make/data/cldr/common/main/bez.xml index 8ed4b4ecf59..1ca290667bc 100644 --- a/make/data/cldr/common/main/bez.xml +++ b/make/data/cldr/common/main/bez.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bez_TZ.xml b/make/data/cldr/common/main/bez_TZ.xml index b9d80fc3684..d587ae72662 100644 --- a/make/data/cldr/common/main/bez_TZ.xml +++ b/make/data/cldr/common/main/bez_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bg.xml b/make/data/cldr/common/main/bg.xml index bb303d52d57..57e2140549b 100644 --- a/make/data/cldr/common/main/bg.xml +++ b/make/data/cldr/common/main/bg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgc.xml b/make/data/cldr/common/main/bgc.xml index 74cfb591f55..c34f081a1a8 100644 --- a/make/data/cldr/common/main/bgc.xml +++ b/make/data/cldr/common/main/bgc.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgc_IN.xml b/make/data/cldr/common/main/bgc_IN.xml index 5cc169e31d1..5d19790f3e9 100644 --- a/make/data/cldr/common/main/bgc_IN.xml +++ b/make/data/cldr/common/main/bgc_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgn.xml b/make/data/cldr/common/main/bgn.xml index fd2220ce03f..9d1daad06c6 100644 --- a/make/data/cldr/common/main/bgn.xml +++ b/make/data/cldr/common/main/bgn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgn_AE.xml b/make/data/cldr/common/main/bgn_AE.xml index 773bfd72b56..b9cb9a052d4 100644 --- a/make/data/cldr/common/main/bgn_AE.xml +++ b/make/data/cldr/common/main/bgn_AE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgn_AF.xml b/make/data/cldr/common/main/bgn_AF.xml index 53cc222ffaa..be65d4d117d 100644 --- a/make/data/cldr/common/main/bgn_AF.xml +++ b/make/data/cldr/common/main/bgn_AF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgn_IR.xml b/make/data/cldr/common/main/bgn_IR.xml index e4eea64176d..83f9ac9da11 100644 --- a/make/data/cldr/common/main/bgn_IR.xml +++ b/make/data/cldr/common/main/bgn_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgn_OM.xml b/make/data/cldr/common/main/bgn_OM.xml index 0155f7d6fb1..87fe449558c 100644 --- a/make/data/cldr/common/main/bgn_OM.xml +++ b/make/data/cldr/common/main/bgn_OM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bgn_PK.xml b/make/data/cldr/common/main/bgn_PK.xml index 456d8df2f1f..9b449ca80a5 100644 --- a/make/data/cldr/common/main/bgn_PK.xml +++ b/make/data/cldr/common/main/bgn_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bho.xml b/make/data/cldr/common/main/bho.xml index 03792404f48..a2fbfa63dfb 100644 --- a/make/data/cldr/common/main/bho.xml +++ b/make/data/cldr/common/main/bho.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bho_IN.xml b/make/data/cldr/common/main/bho_IN.xml index b57dc460653..650d36cc8e2 100644 --- a/make/data/cldr/common/main/bho_IN.xml +++ b/make/data/cldr/common/main/bho_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/blo.xml b/make/data/cldr/common/main/blo.xml index 868fc968dcf..f4f72e94d43 100644 --- a/make/data/cldr/common/main/blo.xml +++ b/make/data/cldr/common/main/blo.xml @@ -1,8 +1,8 @@ - @@ -1489,9 +1489,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Krɛstɔn - - Yɛloonaɩf - Ɛɖmɔntɔn @@ -1510,27 +1507,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rɛsoluut - - Rɛɩni Riifa - Raŋkɩn Ɩnlɛɛtɩ - - Sanɖɛɛr Baɩ - - - Nipigɔn - Torɔntoo Ikaluwiit - - Panyɩrtʊʊŋ - Mɔŋtɔn @@ -2323,15 +2308,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ɖarɛsalaam - - Usgɔrɔɖ - Kiyɛf - - Sapɔrɔsɩyɛ - Kampalaa @@ -2344,9 +2323,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Aɖak - - Jɔnstɔn - Aŋkɔraajɩ @@ -2996,11 +2972,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic akawoo kaakɔŋkɔŋɔ̀ gafʊbaka - - - Makarii kaAtukǝltǝna kaakɔŋkɔŋɔ̀ - - Magaɖan kaakɔŋkɔŋɔ̀ @@ -3040,13 +3011,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mɔsɔn kaakɔŋkɔŋɔ̀ - - - Mɛsik gʊpɛnɛ na gɩteŋshilelaŋ kʊfɔɔ nɩ kaakɔŋkɔŋɔ̀ - Mɛsik gʊpɛnɛ na gɩteŋshilelaŋ kʊfɔɔ nɩ kaakɔŋkɔŋɔ̀ ɖeiɖei - Mɛsik gʊpɛnɛ na gɩteŋshilelaŋ kʊfɔɔ nɩ kaakɔŋkɔŋɔ̀ gafʊbaka - - Mɛsik kapasifika kaakɔŋkɔŋɔ̀ diff --git a/make/data/cldr/common/main/blo_BJ.xml b/make/data/cldr/common/main/blo_BJ.xml index dd6e8ba598e..6c98cd14af3 100644 --- a/make/data/cldr/common/main/blo_BJ.xml +++ b/make/data/cldr/common/main/blo_BJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/blt.xml b/make/data/cldr/common/main/blt.xml index bc085ab3822..d794eb40b47 100644 --- a/make/data/cldr/common/main/blt.xml +++ b/make/data/cldr/common/main/blt.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/blt_VN.xml b/make/data/cldr/common/main/blt_VN.xml index 1746f69fb20..1b88b04e88c 100644 --- a/make/data/cldr/common/main/blt_VN.xml +++ b/make/data/cldr/common/main/blt_VN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bm.xml b/make/data/cldr/common/main/bm.xml index 116de1e5c4b..72c8c9915f8 100644 --- a/make/data/cldr/common/main/bm.xml +++ b/make/data/cldr/common/main/bm.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bm_ML.xml b/make/data/cldr/common/main/bm_ML.xml index 5536dc98f6d..0bea4c7f333 100644 --- a/make/data/cldr/common/main/bm_ML.xml +++ b/make/data/cldr/common/main/bm_ML.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bm_Nkoo.xml b/make/data/cldr/common/main/bm_Nkoo.xml index 1f4e1d5157b..2bc069dded5 100644 --- a/make/data/cldr/common/main/bm_Nkoo.xml +++ b/make/data/cldr/common/main/bm_Nkoo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bm_Nkoo_ML.xml b/make/data/cldr/common/main/bm_Nkoo_ML.xml index 3951e5f06a7..1154ba21bfb 100644 --- a/make/data/cldr/common/main/bm_Nkoo_ML.xml +++ b/make/data/cldr/common/main/bm_Nkoo_ML.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bn.xml b/make/data/cldr/common/main/bn.xml index 3d547b72ae7..8aaaeb16221 100644 --- a/make/data/cldr/common/main/bn.xml +++ b/make/data/cldr/common/main/bn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bn_IN.xml b/make/data/cldr/common/main/bn_IN.xml index ea2750e0af9..692ec6e7bc7 100644 --- a/make/data/cldr/common/main/bn_IN.xml +++ b/make/data/cldr/common/main/bn_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bo.xml b/make/data/cldr/common/main/bo.xml index 80cd0b7f928..cc6e160d830 100644 --- a/make/data/cldr/common/main/bo.xml +++ b/make/data/cldr/common/main/bo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bo_CN.xml b/make/data/cldr/common/main/bo_CN.xml index 8727c700111..468941b265b 100644 --- a/make/data/cldr/common/main/bo_CN.xml +++ b/make/data/cldr/common/main/bo_CN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bo_IN.xml b/make/data/cldr/common/main/bo_IN.xml index a2ed0e678d2..a9190c3a051 100644 --- a/make/data/cldr/common/main/bo_IN.xml +++ b/make/data/cldr/common/main/bo_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/br.xml b/make/data/cldr/common/main/br.xml index 39d71cd9f09..c299b613822 100644 --- a/make/data/cldr/common/main/br.xml +++ b/make/data/cldr/common/main/br.xml @@ -1,8 +1,8 @@ - @@ -1155,7 +1155,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic urzh rummañ sinaek eeunaet - GB2312 urzh rummañ al levr-pellgomz urzh rummañ pinyin - urzh rummañ adreizhet enklask hollek urzh rummañ standart urzh rummañ an tresoù @@ -3708,11 +3707,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic eur hañv Macau - - - eur Enez Macquarie - - eur Magadan @@ -3752,13 +3746,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic eur Mawson - - - eur Gwalarn Mecʼhiko - eur cʼhoañv Gwalarn Mecʼhiko - eur hañv Gwalarn Mecʼhiko - - eur an Habask mecʼhikan diff --git a/make/data/cldr/common/main/br_FR.xml b/make/data/cldr/common/main/br_FR.xml index b3c069557cd..38985b58329 100644 --- a/make/data/cldr/common/main/br_FR.xml +++ b/make/data/cldr/common/main/br_FR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/brx.xml b/make/data/cldr/common/main/brx.xml index de79ea76c86..e9a622735d1 100644 --- a/make/data/cldr/common/main/brx.xml +++ b/make/data/cldr/common/main/brx.xml @@ -1,8 +1,8 @@ - @@ -2078,9 +2078,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic मेलबौर्न - - करी - हबार्ट @@ -2234,9 +2231,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic क्रेस्टन - - येल्ल’नाईफ - एडमन्टन @@ -2255,30 +2249,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic रेजल्युत - - रैनी रिभार - रेनकिन इनलेट आतिककान - - थान्डार गाथोन - - - निपिग’न - टरन्ट’ इकालुईत - - पांग्नीरटुं - मक्ट’न @@ -3089,18 +3071,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic दार एस सलाम - - ऊज्ह’र’ड - कीभ सिम्फेर’प’ल - - झाप’र’झ्ये - काम्पाला @@ -3119,9 +3095,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic हनलुलु - - ज’नस्ट’न - एंकरेज @@ -3819,11 +3792,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic माकाऊ समर टाईम - - - माक्वारी द्वीप सम - - मागादान सम @@ -3863,13 +3831,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic मौसन सम - - - साहा-सोनाब मेक्सिक’ सम - साहा-सोनाब मेक्सिक’ थाखोआरि सम - साहा-सोनाब मेक्सिक’ सानारि सम - - मेक्सिक’नि पेसिफिक सम diff --git a/make/data/cldr/common/main/brx_IN.xml b/make/data/cldr/common/main/brx_IN.xml index 830883f22bc..1e20219d4e8 100644 --- a/make/data/cldr/common/main/brx_IN.xml +++ b/make/data/cldr/common/main/brx_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bs.xml b/make/data/cldr/common/main/bs.xml index 27bf53c54c2..5662ea08033 100644 --- a/make/data/cldr/common/main/bs.xml +++ b/make/data/cldr/common/main/bs.xml @@ -1,8 +1,8 @@ - @@ -2650,9 +2650,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мелбурн - - Курие - Хобарт @@ -2806,9 +2803,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Крестон - - Јелоунајф - Едмонтон @@ -2827,30 +2821,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ресолут - - Рејни Ривер - Ранкин Инлет Атикокан - - Тандер Беј - - - Нипигон - Торонто Иквалуит - - Пангниртунг - Монктон @@ -3658,18 +3640,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Дар-ес-Салам - - Ужгород - Кијев Симферопољ - - Запорожје - Кампала @@ -3688,9 +3664,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Хонолулу - - Џонстон - Енкориџ @@ -4385,11 +4358,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Макао летње рачунање вемена - - - Макверијско вријеме - - Магадан вријеме @@ -4429,13 +4397,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мосон вријеме - - - Сјеверномексичко вријеме - Сјеверномексичко стандардно вријеме - Сјеверномексичко љетње рачунање времена - - Мексичко пацифичко вријеме diff --git a/make/data/cldr/common/main/bs_Cyrl_BA.xml b/make/data/cldr/common/main/bs_Cyrl_BA.xml index eb1ae35df4b..051a01c7e9c 100644 --- a/make/data/cldr/common/main/bs_Cyrl_BA.xml +++ b/make/data/cldr/common/main/bs_Cyrl_BA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bs_Latn.xml b/make/data/cldr/common/main/bs_Latn.xml index 96bb934703e..a48060f5de6 100644 --- a/make/data/cldr/common/main/bs_Latn.xml +++ b/make/data/cldr/common/main/bs_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bs_Latn_BA.xml b/make/data/cldr/common/main/bs_Latn_BA.xml index 459f3d269c0..eb8626bd891 100644 --- a/make/data/cldr/common/main/bs_Latn_BA.xml +++ b/make/data/cldr/common/main/bs_Latn_BA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bss.xml b/make/data/cldr/common/main/bss.xml index d908632183b..509605db1b4 100644 --- a/make/data/cldr/common/main/bss.xml +++ b/make/data/cldr/common/main/bss.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/bss_CM.xml b/make/data/cldr/common/main/bss_CM.xml index be5edffb7d1..fa49ba19698 100644 --- a/make/data/cldr/common/main/bss_CM.xml +++ b/make/data/cldr/common/main/bss_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/byn.xml b/make/data/cldr/common/main/byn.xml index 35c3a7b783b..0eec9bde36e 100644 --- a/make/data/cldr/common/main/byn.xml +++ b/make/data/cldr/common/main/byn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/byn_ER.xml b/make/data/cldr/common/main/byn_ER.xml index 508caef4825..ff33c7038ab 100644 --- a/make/data/cldr/common/main/byn_ER.xml +++ b/make/data/cldr/common/main/byn_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ca.xml b/make/data/cldr/common/main/ca.xml index 7e4253d90fd..cd7cc403042 100644 --- a/make/data/cldr/common/main/ca.xml +++ b/make/data/cldr/common/main/ca.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ca_ES.xml b/make/data/cldr/common/main/ca_ES.xml index 296b05a0264..85b7785b1cc 100644 --- a/make/data/cldr/common/main/ca_ES.xml +++ b/make/data/cldr/common/main/ca_ES.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ca_ES_VALENCIA.xml b/make/data/cldr/common/main/ca_ES_VALENCIA.xml index d0fce06ed8e..9c0482f08ab 100644 --- a/make/data/cldr/common/main/ca_ES_VALENCIA.xml +++ b/make/data/cldr/common/main/ca_ES_VALENCIA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ca_FR.xml b/make/data/cldr/common/main/ca_FR.xml index 0ec859c10f3..5291f34d629 100644 --- a/make/data/cldr/common/main/ca_FR.xml +++ b/make/data/cldr/common/main/ca_FR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ca_IT.xml b/make/data/cldr/common/main/ca_IT.xml index 071a3ad5e54..4220b903733 100644 --- a/make/data/cldr/common/main/ca_IT.xml +++ b/make/data/cldr/common/main/ca_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cad.xml b/make/data/cldr/common/main/cad.xml index 66628cd5dd5..ff354198818 100644 --- a/make/data/cldr/common/main/cad.xml +++ b/make/data/cldr/common/main/cad.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cad_US.xml b/make/data/cldr/common/main/cad_US.xml index 1ca1eff9b5a..f3a8b989566 100644 --- a/make/data/cldr/common/main/cad_US.xml +++ b/make/data/cldr/common/main/cad_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cch.xml b/make/data/cldr/common/main/cch.xml index 03223204d2e..1dcd468a6fe 100644 --- a/make/data/cldr/common/main/cch.xml +++ b/make/data/cldr/common/main/cch.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cch_NG.xml b/make/data/cldr/common/main/cch_NG.xml index 9f11c337973..b703402cb08 100644 --- a/make/data/cldr/common/main/cch_NG.xml +++ b/make/data/cldr/common/main/cch_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ccp.xml b/make/data/cldr/common/main/ccp.xml index faae1ebd256..10a56431c72 100644 --- a/make/data/cldr/common/main/ccp.xml +++ b/make/data/cldr/common/main/ccp.xml @@ -1,8 +1,8 @@ - @@ -1042,7 +1042,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄜𑄮𑄚𑄴𑄝𑄪𑄇𑄴 𑄥𑄎𑄚 𑄢𑄳𑄦𑄧 𑄝𑄬𑄭𑄣𑄧𑄚 𑄛𑄨𑄚𑄨𑄚𑄴 𑄥𑄎𑄚 - 𑄢𑄨𑄜𑄧𑄟𑄴𑄓𑄨 𑄝𑄬𑄭𑄣𑄧𑄚 𑄃𑄧𑄎𑄧𑄃𑄧𑄌𑄴-𑄅𑄪𑄘𑄨𑄌𑄴𑄥𑄳𑄠 𑄖𑄮𑄉𑄚 𑄦𑄋𑄴𑄉𑄪𑄣𑄴 𑄛𑄧𑄖𑄴𑄗𑄧𑄟𑄴 𑄝𑄧𑄣𑄬𑄟𑄖𑄳𑄠𑄬 𑄦𑄧𑄢𑄧𑄇𑄴 𑄘𑄨𑄚𑄬𑄭 𑄖𑄮𑄉𑄚 𑄉𑄧𑄟𑄴 𑄘𑄮𑄣𑄴 𑄝𑄬𑄭𑄣𑄧𑄚 @@ -1932,9 +1931,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 𑄃𑄧𑄇𑄴𑄖𑄧 {0} 𑄘𑄨𑄝𑄪𑄌𑄴𑄎𑄳𑄠 𑄃𑄧𑄇𑄴𑄖𑄧𑄖𑄴 {0} 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧𑄖𑄴 - - 𑄥𑄚𑄴𑄖 𑄃𑄨𑄥𑄝𑄬𑄣𑄴 - 𑄘𑄇𑄴𑄘𑄨𑄠 𑄛𑄨𑄖𑄴𑄗𑄨𑄟𑄨𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 @@ -2057,9 +2053,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄟𑄬𑄣𑄴𑄝𑄢𑄴𑄚𑄴 - - 𑄇𑄨𑄃𑄪𑄢𑄨 - 𑄦𑄮𑄝𑄢𑄴𑄑𑄴 @@ -2213,9 +2206,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄇𑄳𑄢𑄨𑄌𑄴𑄑𑄚𑄴 - - 𑄃𑄨𑄠𑄬𑄣𑄮𑄚𑄭𑄜𑄴 - 𑄃𑄬𑄓𑄴𑄟𑄧𑄚𑄴𑄑𑄮𑄚𑄴 @@ -2234,30 +2224,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄢𑄬𑄥𑄮𑄣𑄪𑄑𑄴 - - 𑄣𑄬𑄭𑄚𑄨 𑄢𑄨𑄞𑄢𑄴 - 𑄢𑄳𑄠𑄋𑄴𑄇𑄨𑄚𑄴 𑄃𑄨𑄚𑄴𑄣𑄬𑄑𑄴 𑄇𑄮𑄢𑄣𑄴 𑄦𑄢𑄴𑄝𑄢𑄴 - - 𑄐𑄚𑄴𑄓𑄢𑄴 𑄝𑄬 - - - 𑄚𑄨𑄛𑄨𑄉𑄮𑄚𑄴 - 𑄑𑄮𑄢𑄧𑄚𑄴𑄑𑄮 𑄃𑄨𑄇𑄱𑄣𑄪𑄃𑄨𑄑𑄴 - - 𑄛𑄳𑄠𑄋𑄴𑄉𑄧𑄚𑄨𑄢𑄴𑄑𑄪𑄁 - 𑄟𑄧𑄋𑄴𑄑𑄮𑄚𑄴 @@ -3050,18 +3028,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄘𑄢𑄴 𑄃𑄬𑄌𑄴 𑄥𑄣𑄟𑄴 - - 𑄅𑄪𑄏𑄴𑄉𑄮𑄢𑄮𑄓𑄴 - 𑄇𑄨𑄠𑄬𑄞𑄴 𑄥𑄨𑄟𑄴𑄜𑄬𑄢𑄮𑄛𑄮𑄣𑄴 - - 𑄎𑄬𑄛𑄮𑄢𑄮𑄎𑄭𑄠𑄭 - 𑄇𑄟𑄴𑄛𑄣 @@ -3080,9 +3052,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄦𑄧𑄚𑄮𑄣𑄪𑄣𑄪 - - 𑄎𑄧𑄚𑄴𑄥𑄳𑄑𑄧𑄚𑄴 - 𑄃𑄬𑄚𑄴𑄇𑄮𑄢𑄬𑄌𑄴 @@ -3773,11 +3742,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄟𑄇𑄃𑄮 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 - - - 𑄟𑄳𑄠𑄇𑄴𑄇𑄪𑄢𑄨 𑄉𑄭 𑄉𑄭 𑄞𑄬𑄘 𑄃𑄧𑄇𑄴𑄖𑄧 - - 𑄟𑄳𑄠𑄉𑄓𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 @@ -3817,13 +3781,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄟𑄧𑄥𑄳𑄦𑄧𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 - - - 𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 - 𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 - 𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 - - 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 diff --git a/make/data/cldr/common/main/ccp_BD.xml b/make/data/cldr/common/main/ccp_BD.xml index 6c8cde12e61..4fbec9f8503 100644 --- a/make/data/cldr/common/main/ccp_BD.xml +++ b/make/data/cldr/common/main/ccp_BD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ccp_IN.xml b/make/data/cldr/common/main/ccp_IN.xml index 6950d8f5c29..8d2ca5ea261 100644 --- a/make/data/cldr/common/main/ccp_IN.xml +++ b/make/data/cldr/common/main/ccp_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ce.xml b/make/data/cldr/common/main/ce.xml index 26e0494c036..6a0fcd64320 100644 --- a/make/data/cldr/common/main/ce.xml +++ b/make/data/cldr/common/main/ce.xml @@ -1,8 +1,8 @@ - @@ -1250,9 +1250,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Санта-Изабел - Йоьвзуш йоцу гӀала @@ -1370,9 +1367,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мельбурн - - Керри - Хобарт @@ -1526,9 +1520,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Крестон - - Йеллоунайф - Эдмонтон @@ -1547,30 +1538,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Резолют - - Рейни-Ривер - Ранкин-Инлет Корал-Харбор - - Тандер-Бей - - - Нипигон - Торонто Икалуит - - Пангниртанг - Монктон @@ -2375,18 +2354,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Дар-эс-Салам - - Ужгород - Киев Симферополь - - Запорожье - Кампала @@ -2405,9 +2378,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гонолулу - - Джонстон - Анкоридж @@ -3043,11 +3013,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лорд-Хау, аьхкенан хан - - - Маккуори - - Магадан @@ -3087,13 +3052,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Моусон - - - Къилбаседа Американ Мексикан хан - Къилбаседа Американ Мексикан стандартан хан - Къилбаседа Американ Мексикан аьхкенан хан - - Тийна океанан Мексикан хан diff --git a/make/data/cldr/common/main/ce_RU.xml b/make/data/cldr/common/main/ce_RU.xml index 486fd760833..98ee73d5435 100644 --- a/make/data/cldr/common/main/ce_RU.xml +++ b/make/data/cldr/common/main/ce_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ceb.xml b/make/data/cldr/common/main/ceb.xml index 562381cbf94..814a72dfd44 100644 --- a/make/data/cldr/common/main/ceb.xml +++ b/make/data/cldr/common/main/ceb.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cgg.xml b/make/data/cldr/common/main/cgg.xml index 17a257a2f97..ce3e6c1724e 100644 --- a/make/data/cldr/common/main/cgg.xml +++ b/make/data/cldr/common/main/cgg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cgg_UG.xml b/make/data/cldr/common/main/cgg_UG.xml index c2c29625833..be094e50917 100644 --- a/make/data/cldr/common/main/cgg_UG.xml +++ b/make/data/cldr/common/main/cgg_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cho.xml b/make/data/cldr/common/main/cho.xml index 4d3cb27ada6..b82979f63cd 100644 --- a/make/data/cldr/common/main/cho.xml +++ b/make/data/cldr/common/main/cho.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cho_US.xml b/make/data/cldr/common/main/cho_US.xml index 7d860d2bed7..545a93f54a1 100644 --- a/make/data/cldr/common/main/cho_US.xml +++ b/make/data/cldr/common/main/cho_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/chr.xml b/make/data/cldr/common/main/chr.xml index 61d4fbe9c43..36c2aaad4c1 100644 --- a/make/data/cldr/common/main/chr.xml +++ b/make/data/cldr/common/main/chr.xml @@ -1,8 +1,8 @@ - @@ -2149,9 +2149,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎺᎵᏉᏁ - - ᎫᎵ - ᎰᏆᏘ @@ -2305,9 +2302,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏞᏍᏔᏂ - - ᏓᎶᏂᎨ ᎭᏰᏍᏗ - ᎡᏗᎹᏂᏔᏂ @@ -2326,30 +2320,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎴᏐᎷᏘ - - ᎠᎦᏍᎦ ᎤᏪᏴ - ᎴᏂᎩᏂ ᎢᏂᎴᏘ ᎠᏘᎪᎦᏂ - - ᎠᏴᏓᏆᎶᏍᎦ ᎡᏉᏄᎸᏗ - - - ᏂᏈᎪᏂ - ᏙᎳᎾᏙ ᎢᏆᎷᏱᏘ - - ᏆᏂᏂᏚᏂᎦ - ᎹᎾᏔᏂ @@ -3163,18 +3145,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ꮣ ᎡᏏ ᏌᎳᎻ - - ᎤᏍᎪᎶᏗ - ᎩᏫ ᏏᎻᏪᎶᏉᎵ - - ᏌᏉᎶᏌᏱ - ᎧᎻᏆᎳ @@ -3198,9 +3174,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎭᏃᎷᎷ - - ᏣᏂᏏᏂ - ᎠᏂᎪᎴᏥ @@ -3871,11 +3844,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎤᎬᏫᏳᎯ ᎭᏫ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒ - - - ᎹᏇᎵ ᎤᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ - - ᎹᎦᏓᏂ ᎠᏟᎢᎵᏒ @@ -3915,13 +3883,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎹᏌᏂ ᎠᏟᎢᎵᏒ - - - ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎠᏟᎢᎵᏒ - ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ - ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒ - - ᎠᏂᏍᏆᏂ ᏭᏕᎵᎬ ᎠᏟᎢᎵᏒ diff --git a/make/data/cldr/common/main/chr_US.xml b/make/data/cldr/common/main/chr_US.xml index 753f7ad5e50..c4765608100 100644 --- a/make/data/cldr/common/main/chr_US.xml +++ b/make/data/cldr/common/main/chr_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cic.xml b/make/data/cldr/common/main/cic.xml index 3714110a8c3..19ef45c939e 100644 --- a/make/data/cldr/common/main/cic.xml +++ b/make/data/cldr/common/main/cic.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cic_US.xml b/make/data/cldr/common/main/cic_US.xml index 3eaf1b33792..06358d5e3a9 100644 --- a/make/data/cldr/common/main/cic_US.xml +++ b/make/data/cldr/common/main/cic_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ckb.xml b/make/data/cldr/common/main/ckb.xml index dc05102053f..e657cfdd359 100644 --- a/make/data/cldr/common/main/ckb.xml +++ b/make/data/cldr/common/main/ckb.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ckb_IQ.xml b/make/data/cldr/common/main/ckb_IQ.xml index 867fc0f702b..d5566668311 100644 --- a/make/data/cldr/common/main/ckb_IQ.xml +++ b/make/data/cldr/common/main/ckb_IQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ckb_IR.xml b/make/data/cldr/common/main/ckb_IR.xml index 3baaa3bafb0..82e50bf7ebe 100644 --- a/make/data/cldr/common/main/ckb_IR.xml +++ b/make/data/cldr/common/main/ckb_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/co.xml b/make/data/cldr/common/main/co.xml index d4d846700fa..c3dc3a138e3 100644 --- a/make/data/cldr/common/main/co.xml +++ b/make/data/cldr/common/main/co.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/co_FR.xml b/make/data/cldr/common/main/co_FR.xml index b70e6839dce..7ec66b708a1 100644 --- a/make/data/cldr/common/main/co_FR.xml +++ b/make/data/cldr/common/main/co_FR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cs.xml b/make/data/cldr/common/main/cs.xml index b9d607310da..2b12c2e7923 100644 --- a/make/data/cldr/common/main/cs.xml +++ b/make/data/cldr/common/main/cs.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/csw.xml b/make/data/cldr/common/main/csw.xml index 0c69a7d45b3..aa49f5eb224 100644 --- a/make/data/cldr/common/main/csw.xml +++ b/make/data/cldr/common/main/csw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/csw_CA.xml b/make/data/cldr/common/main/csw_CA.xml index 28baa8fd8e0..8b68feb93f8 100644 --- a/make/data/cldr/common/main/csw_CA.xml +++ b/make/data/cldr/common/main/csw_CA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cu.xml b/make/data/cldr/common/main/cu.xml index fec2d5afa47..bd6ba061339 100644 --- a/make/data/cldr/common/main/cu.xml +++ b/make/data/cldr/common/main/cu.xml @@ -1,8 +1,8 @@ - @@ -492,18 +492,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic а҆на́дырь - - ᲂу҆́жградъ - кі́евъ сѷмферꙋ́поль - - запра́жїе - среднеамерїка́нское вре́мѧ diff --git a/make/data/cldr/common/main/cu_RU.xml b/make/data/cldr/common/main/cu_RU.xml index 120c8710823..746300296e0 100644 --- a/make/data/cldr/common/main/cu_RU.xml +++ b/make/data/cldr/common/main/cu_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cv.xml b/make/data/cldr/common/main/cv.xml index b91b17d85b0..ef9e1f2245a 100644 --- a/make/data/cldr/common/main/cv.xml +++ b/make/data/cldr/common/main/cv.xml @@ -1,8 +1,8 @@ - @@ -1257,9 +1257,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Крестон - - Йеллоунайф - Эдмонтон @@ -1278,30 +1275,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Резольют - - Рейни-Ривер - Ранкин-Инлет Корал-Харбор - - Тандер-Бей - - - Нипигон - Торонто Икалуит - - Пангниртанг - Монктон @@ -2109,18 +2094,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Дар-эс-Салам - - Ужгород - Киев Симферополь - - Запорожье - Кампала @@ -2136,9 +2115,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ном - - Джонстон - Анкоридж @@ -2774,11 +2750,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лорд-Хау ҫуллахи вӑхӑчӗ - - - Маккуори вӑхӑчӗ - - Магадан вӑхӑчӗ @@ -2818,13 +2789,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Моусон вӑхӑчӗ - - - Ҫурҫӗр-анӑҫ Мексика вӑхӑчӗ - Ҫурҫӗр-анӑҫ Мексика стандартлӑ вӑхӑчӗ - Ҫурҫӗр-анӑҫ Мексика ҫуллахи вӑхӑчӗ - - Мексика Лӑпкӑ океан вӑхӑчӗ diff --git a/make/data/cldr/common/main/cv_RU.xml b/make/data/cldr/common/main/cv_RU.xml index 79e419ecd2e..042cde46b8a 100644 --- a/make/data/cldr/common/main/cv_RU.xml +++ b/make/data/cldr/common/main/cv_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/cy.xml b/make/data/cldr/common/main/cy.xml index 5cb956fede0..d9883189a70 100644 --- a/make/data/cldr/common/main/cy.xml +++ b/make/data/cldr/common/main/cy.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/da.xml b/make/data/cldr/common/main/da.xml index 80277259bd2..1bb32216e19 100644 --- a/make/data/cldr/common/main/da.xml +++ b/make/data/cldr/common/main/da.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/da_GL.xml b/make/data/cldr/common/main/da_GL.xml index e61cbdb9568..290f091331f 100644 --- a/make/data/cldr/common/main/da_GL.xml +++ b/make/data/cldr/common/main/da_GL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dav.xml b/make/data/cldr/common/main/dav.xml index d5be35b12fe..7cd6e77a1c7 100644 --- a/make/data/cldr/common/main/dav.xml +++ b/make/data/cldr/common/main/dav.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dav_KE.xml b/make/data/cldr/common/main/dav_KE.xml index 15c94ce0e94..b317e2e51e7 100644 --- a/make/data/cldr/common/main/dav_KE.xml +++ b/make/data/cldr/common/main/dav_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de.xml b/make/data/cldr/common/main/de.xml index 5d7b3515abe..da9426b79f0 100644 --- a/make/data/cldr/common/main/de.xml +++ b/make/data/cldr/common/main/de.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de_BE.xml b/make/data/cldr/common/main/de_BE.xml index b9f95deb36d..65168659e95 100644 --- a/make/data/cldr/common/main/de_BE.xml +++ b/make/data/cldr/common/main/de_BE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de_CH.xml b/make/data/cldr/common/main/de_CH.xml index 7ab945a0a7b..db148685303 100644 --- a/make/data/cldr/common/main/de_CH.xml +++ b/make/data/cldr/common/main/de_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de_DE.xml b/make/data/cldr/common/main/de_DE.xml index 6b538e156d2..215f3071fb5 100644 --- a/make/data/cldr/common/main/de_DE.xml +++ b/make/data/cldr/common/main/de_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de_IT.xml b/make/data/cldr/common/main/de_IT.xml index 4c9900f4619..c02cf2d054a 100644 --- a/make/data/cldr/common/main/de_IT.xml +++ b/make/data/cldr/common/main/de_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de_LI.xml b/make/data/cldr/common/main/de_LI.xml index a088c592f08..f9d02706ab8 100644 --- a/make/data/cldr/common/main/de_LI.xml +++ b/make/data/cldr/common/main/de_LI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/de_LU.xml b/make/data/cldr/common/main/de_LU.xml index d6b0047899b..3090319548c 100644 --- a/make/data/cldr/common/main/de_LU.xml +++ b/make/data/cldr/common/main/de_LU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dje.xml b/make/data/cldr/common/main/dje.xml index e65a81575f7..72c95576a9e 100644 --- a/make/data/cldr/common/main/dje.xml +++ b/make/data/cldr/common/main/dje.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dje_NE.xml b/make/data/cldr/common/main/dje_NE.xml index a348258a672..8cbabd42fdb 100644 --- a/make/data/cldr/common/main/dje_NE.xml +++ b/make/data/cldr/common/main/dje_NE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/doi.xml b/make/data/cldr/common/main/doi.xml index 58c92dd73a6..025c806eff5 100644 --- a/make/data/cldr/common/main/doi.xml +++ b/make/data/cldr/common/main/doi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/doi_IN.xml b/make/data/cldr/common/main/doi_IN.xml index 5618f0f6ba2..941eaa5fda2 100644 --- a/make/data/cldr/common/main/doi_IN.xml +++ b/make/data/cldr/common/main/doi_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dsb.xml b/make/data/cldr/common/main/dsb.xml index a47e5c68f2b..e36b50c2e4d 100644 --- a/make/data/cldr/common/main/dsb.xml +++ b/make/data/cldr/common/main/dsb.xml @@ -1,8 +1,8 @@ - @@ -2536,15 +2536,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daressalam - - Užgorod - Kiew - - Saporižja - Taškent @@ -3075,11 +3069,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic lěśojski cas kupy Lord-Howe - - - cas kupy Macquarie - - Magadański cas @@ -3119,13 +3108,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson cas - - - Mexiski dłujkowjacorny cas - Mexiski dłujkowjacorny standardny cas - Mexiski dłujkowjacorny lěśojski cas - - Mexiski pacifiski cas diff --git a/make/data/cldr/common/main/dsb_DE.xml b/make/data/cldr/common/main/dsb_DE.xml index f43aa71ad41..312a235443e 100644 --- a/make/data/cldr/common/main/dsb_DE.xml +++ b/make/data/cldr/common/main/dsb_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dua.xml b/make/data/cldr/common/main/dua.xml index 1377547fbe3..0162040d704 100644 --- a/make/data/cldr/common/main/dua.xml +++ b/make/data/cldr/common/main/dua.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dua_CM.xml b/make/data/cldr/common/main/dua_CM.xml index c69387b038d..83e862a0269 100644 --- a/make/data/cldr/common/main/dua_CM.xml +++ b/make/data/cldr/common/main/dua_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dv.xml b/make/data/cldr/common/main/dv.xml index 278e2f1b802..c169fd9eb73 100644 --- a/make/data/cldr/common/main/dv.xml +++ b/make/data/cldr/common/main/dv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dv_MV.xml b/make/data/cldr/common/main/dv_MV.xml index 7d07ed90b72..3518ac6f4b2 100644 --- a/make/data/cldr/common/main/dv_MV.xml +++ b/make/data/cldr/common/main/dv_MV.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dyo.xml b/make/data/cldr/common/main/dyo.xml index c52eaf64850..43cc0b41066 100644 --- a/make/data/cldr/common/main/dyo.xml +++ b/make/data/cldr/common/main/dyo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dyo_SN.xml b/make/data/cldr/common/main/dyo_SN.xml index 12d37238e29..28753759b12 100644 --- a/make/data/cldr/common/main/dyo_SN.xml +++ b/make/data/cldr/common/main/dyo_SN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/dz.xml b/make/data/cldr/common/main/dz.xml index 5a58b42de98..b22ebf6b4cd 100644 --- a/make/data/cldr/common/main/dz.xml +++ b/make/data/cldr/common/main/dz.xml @@ -1,8 +1,8 @@ - @@ -1197,27 +1197,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic རི་སོ་ལིའུཊ - - རཱེ་ནི་རི་ཝར - རེན་ཀིན་ ཨིན་ལེཊ ཨ་ཏི་ཀོ་ཀཱན - - ཐན་ཌར་ བའེ - - - ནི་པི་གཱོན - ཊོ་རོན་ཊོ - - པེང་ནིར་ཏུང - མཱོངཀ་ཊོན @@ -1551,9 +1539,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ཝེཀ - - ཇཱོནསི་ཊོན - ཡ་ཀུ་ཏཏ diff --git a/make/data/cldr/common/main/dz_BT.xml b/make/data/cldr/common/main/dz_BT.xml index 9c159da4d70..b75cafed863 100644 --- a/make/data/cldr/common/main/dz_BT.xml +++ b/make/data/cldr/common/main/dz_BT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ebu.xml b/make/data/cldr/common/main/ebu.xml index 30c61237f80..5bccad8ed18 100644 --- a/make/data/cldr/common/main/ebu.xml +++ b/make/data/cldr/common/main/ebu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ebu_KE.xml b/make/data/cldr/common/main/ebu_KE.xml index 2d28398e8be..1be6fdd248f 100644 --- a/make/data/cldr/common/main/ebu_KE.xml +++ b/make/data/cldr/common/main/ebu_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ee.xml b/make/data/cldr/common/main/ee.xml index 4bf0edbd2bc..81b7f9cab68 100644 --- a/make/data/cldr/common/main/ee.xml +++ b/make/data/cldr/common/main/ee.xml @@ -1,8 +1,8 @@ - @@ -736,7 +736,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic chinagbe yeye ƒe ɖoɖomɔ nu fonegbalẽ me ɖoɖomɔ nu pinyin ɖoɖomɔ nu - nugbugbɔtoɖo ƒe ɖoɖomɔ nu nudidi hena zazã gbadza nudidi le hangul ƒe ɖoɖo gbãtɔ nu stroke ɖoɖomɔ nu @@ -1892,9 +1891,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Du manya - - Currie - British dzomeŋɔli gaƒoƒo me @@ -2493,11 +2489,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Makau ŋkekeme gaƒoƒome - - - Macquarie Island gaƒoƒo me - - Magadan gaƒoƒo me @@ -2537,13 +2528,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson gaƒoƒo me - - - Northwest Mexico gaƒoƒo me - Northwest Mexico nutome gaƒoƒo me - Northwest Mexico kele gaƒoƒo me - - Mexican Pacific gaƒoƒo me diff --git a/make/data/cldr/common/main/ee_GH.xml b/make/data/cldr/common/main/ee_GH.xml index 0bfd4e337d8..452647d5bd0 100644 --- a/make/data/cldr/common/main/ee_GH.xml +++ b/make/data/cldr/common/main/ee_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ee_TG.xml b/make/data/cldr/common/main/ee_TG.xml index 7ce3b1f73d7..4da0b5e63db 100644 --- a/make/data/cldr/common/main/ee_TG.xml +++ b/make/data/cldr/common/main/ee_TG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/el.xml b/make/data/cldr/common/main/el.xml index 4a521ac829c..9ad122deba5 100644 --- a/make/data/cldr/common/main/el.xml +++ b/make/data/cldr/common/main/el.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/el_GR.xml b/make/data/cldr/common/main/el_GR.xml index 63856dd3a15..486102f53d6 100644 --- a/make/data/cldr/common/main/el_GR.xml +++ b/make/data/cldr/common/main/el_GR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/el_POLYTON.xml b/make/data/cldr/common/main/el_POLYTON.xml index f1e4021e335..4ddfe8295c3 100644 --- a/make/data/cldr/common/main/el_POLYTON.xml +++ b/make/data/cldr/common/main/el_POLYTON.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en.xml b/make/data/cldr/common/main/en.xml index a2f2412d11a..3b65dba4424 100644 --- a/make/data/cldr/common/main/en.xml +++ b/make/data/cldr/common/main/en.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_AE.xml b/make/data/cldr/common/main/en_AE.xml index c4c26388be8..a06ca32f9d7 100644 --- a/make/data/cldr/common/main/en_AE.xml +++ b/make/data/cldr/common/main/en_AE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_AI.xml b/make/data/cldr/common/main/en_AI.xml index 44d2da10caa..570253439bb 100644 --- a/make/data/cldr/common/main/en_AI.xml +++ b/make/data/cldr/common/main/en_AI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_AS.xml b/make/data/cldr/common/main/en_AS.xml index e7fcacd23d7..da6ad816ab3 100644 --- a/make/data/cldr/common/main/en_AS.xml +++ b/make/data/cldr/common/main/en_AS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_AT.xml b/make/data/cldr/common/main/en_AT.xml index 552756c4412..f9ed67e12eb 100644 --- a/make/data/cldr/common/main/en_AT.xml +++ b/make/data/cldr/common/main/en_AT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_AU.xml b/make/data/cldr/common/main/en_AU.xml index a5ab40fba87..bc112f81d07 100644 --- a/make/data/cldr/common/main/en_AU.xml +++ b/make/data/cldr/common/main/en_AU.xml @@ -1,8 +1,8 @@ - @@ -218,9 +218,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic midday - am midday - pm midday diff --git a/make/data/cldr/common/main/en_BB.xml b/make/data/cldr/common/main/en_BB.xml index 8ecf506cbde..a42ddcee867 100644 --- a/make/data/cldr/common/main/en_BB.xml +++ b/make/data/cldr/common/main/en_BB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_BE.xml b/make/data/cldr/common/main/en_BE.xml index 200aea4694f..4f11b35c416 100644 --- a/make/data/cldr/common/main/en_BE.xml +++ b/make/data/cldr/common/main/en_BE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_BI.xml b/make/data/cldr/common/main/en_BI.xml index d32eb2e11f1..08c66ea876a 100644 --- a/make/data/cldr/common/main/en_BI.xml +++ b/make/data/cldr/common/main/en_BI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_BM.xml b/make/data/cldr/common/main/en_BM.xml index 4cd252a7a60..2751a7e6adb 100644 --- a/make/data/cldr/common/main/en_BM.xml +++ b/make/data/cldr/common/main/en_BM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_BS.xml b/make/data/cldr/common/main/en_BS.xml index b469a2612bc..606935e8738 100644 --- a/make/data/cldr/common/main/en_BS.xml +++ b/make/data/cldr/common/main/en_BS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_BW.xml b/make/data/cldr/common/main/en_BW.xml index 25b55e6c3d3..029a68bd483 100644 --- a/make/data/cldr/common/main/en_BW.xml +++ b/make/data/cldr/common/main/en_BW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_BZ.xml b/make/data/cldr/common/main/en_BZ.xml index d1a20602fea..bf6cd9c6cd1 100644 --- a/make/data/cldr/common/main/en_BZ.xml +++ b/make/data/cldr/common/main/en_BZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_CA.xml b/make/data/cldr/common/main/en_CA.xml index b2d5234f201..f5e62a7157c 100644 --- a/make/data/cldr/common/main/en_CA.xml +++ b/make/data/cldr/common/main/en_CA.xml @@ -1,8 +1,8 @@ - @@ -413,7 +413,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic mid - a.m. + am pm mor aft @@ -1350,13 +1350,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MVT - - - Northwest Mexico Time - Northwest Mexico Standard Time - Northwest Mexico Daylight Saving Time - - Mexican Pacific Time @@ -1529,7 +1522,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic US$ - US$ unknown currency diff --git a/make/data/cldr/common/main/en_CC.xml b/make/data/cldr/common/main/en_CC.xml index 0418a03b451..d7c89cceb05 100644 --- a/make/data/cldr/common/main/en_CC.xml +++ b/make/data/cldr/common/main/en_CC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_CH.xml b/make/data/cldr/common/main/en_CH.xml index 8de22161bb1..eb4b4052e0a 100644 --- a/make/data/cldr/common/main/en_CH.xml +++ b/make/data/cldr/common/main/en_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_CK.xml b/make/data/cldr/common/main/en_CK.xml index 927f073e02b..6b90814a581 100644 --- a/make/data/cldr/common/main/en_CK.xml +++ b/make/data/cldr/common/main/en_CK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_CM.xml b/make/data/cldr/common/main/en_CM.xml index 6c317a5cf58..9e88b643c8e 100644 --- a/make/data/cldr/common/main/en_CM.xml +++ b/make/data/cldr/common/main/en_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_CX.xml b/make/data/cldr/common/main/en_CX.xml index 9fa1fa250ef..f74d58fae8d 100644 --- a/make/data/cldr/common/main/en_CX.xml +++ b/make/data/cldr/common/main/en_CX.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_CY.xml b/make/data/cldr/common/main/en_CY.xml index 68e24327a4b..246e69e27a7 100644 --- a/make/data/cldr/common/main/en_CY.xml +++ b/make/data/cldr/common/main/en_CY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_DE.xml b/make/data/cldr/common/main/en_DE.xml index a23fa9e950a..e0a78572fb7 100644 --- a/make/data/cldr/common/main/en_DE.xml +++ b/make/data/cldr/common/main/en_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_DG.xml b/make/data/cldr/common/main/en_DG.xml index 3450900d046..afedbcd68f1 100644 --- a/make/data/cldr/common/main/en_DG.xml +++ b/make/data/cldr/common/main/en_DG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_DK.xml b/make/data/cldr/common/main/en_DK.xml index b8bfa5dadc7..7cfe98003a3 100644 --- a/make/data/cldr/common/main/en_DK.xml +++ b/make/data/cldr/common/main/en_DK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_DM.xml b/make/data/cldr/common/main/en_DM.xml index 4ac17acab51..4865025f358 100644 --- a/make/data/cldr/common/main/en_DM.xml +++ b/make/data/cldr/common/main/en_DM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_Dsrt.xml b/make/data/cldr/common/main/en_Dsrt.xml index 3c720f8498e..4bbce7fe942 100644 --- a/make/data/cldr/common/main/en_Dsrt.xml +++ b/make/data/cldr/common/main/en_Dsrt.xml @@ -1,8 +1,8 @@ - @@ -709,9 +709,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𐐐𐐪𐑌𐐲𐑊𐐭𐑊𐐭 - - 𐐖𐐪𐑌𐑅𐐻𐐲𐑌 - 𐐁𐑍𐐿𐐲𐑉𐐮𐐾 diff --git a/make/data/cldr/common/main/en_Dsrt_US.xml b/make/data/cldr/common/main/en_Dsrt_US.xml index f5d45057f16..1f5f650afba 100644 --- a/make/data/cldr/common/main/en_Dsrt_US.xml +++ b/make/data/cldr/common/main/en_Dsrt_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_ER.xml b/make/data/cldr/common/main/en_ER.xml index 5f7dd967eb6..73eb1839023 100644 --- a/make/data/cldr/common/main/en_ER.xml +++ b/make/data/cldr/common/main/en_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_FI.xml b/make/data/cldr/common/main/en_FI.xml index d1ea9bc084b..c5bd77f0004 100644 --- a/make/data/cldr/common/main/en_FI.xml +++ b/make/data/cldr/common/main/en_FI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_FJ.xml b/make/data/cldr/common/main/en_FJ.xml index 1b31f0bcef6..150d4c97926 100644 --- a/make/data/cldr/common/main/en_FJ.xml +++ b/make/data/cldr/common/main/en_FJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_FK.xml b/make/data/cldr/common/main/en_FK.xml index 95fdee069c6..0043263afab 100644 --- a/make/data/cldr/common/main/en_FK.xml +++ b/make/data/cldr/common/main/en_FK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_FM.xml b/make/data/cldr/common/main/en_FM.xml index f7563fc16eb..302122d86b9 100644 --- a/make/data/cldr/common/main/en_FM.xml +++ b/make/data/cldr/common/main/en_FM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GB.xml b/make/data/cldr/common/main/en_GB.xml index c633f865fa8..80f1237b319 100644 --- a/make/data/cldr/common/main/en_GB.xml +++ b/make/data/cldr/common/main/en_GB.xml @@ -1,8 +1,8 @@ - @@ -96,14 +96,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - am - pm - - - diff --git a/make/data/cldr/common/main/en_GD.xml b/make/data/cldr/common/main/en_GD.xml index c0b98e3aa57..ab54007ecca 100644 --- a/make/data/cldr/common/main/en_GD.xml +++ b/make/data/cldr/common/main/en_GD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GG.xml b/make/data/cldr/common/main/en_GG.xml index 7ac45fdb4b5..f5f305f14d7 100644 --- a/make/data/cldr/common/main/en_GG.xml +++ b/make/data/cldr/common/main/en_GG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GH.xml b/make/data/cldr/common/main/en_GH.xml index b59605c6760..360a5852f96 100644 --- a/make/data/cldr/common/main/en_GH.xml +++ b/make/data/cldr/common/main/en_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GI.xml b/make/data/cldr/common/main/en_GI.xml index e93b1ad6da1..86ebcd6d140 100644 --- a/make/data/cldr/common/main/en_GI.xml +++ b/make/data/cldr/common/main/en_GI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GM.xml b/make/data/cldr/common/main/en_GM.xml index ae5521a7a63..e56a540ba5b 100644 --- a/make/data/cldr/common/main/en_GM.xml +++ b/make/data/cldr/common/main/en_GM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GU.xml b/make/data/cldr/common/main/en_GU.xml index dbd7ef0561d..2da80b51ca7 100644 --- a/make/data/cldr/common/main/en_GU.xml +++ b/make/data/cldr/common/main/en_GU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_GY.xml b/make/data/cldr/common/main/en_GY.xml index 9434494aaee..01cae4613e8 100644 --- a/make/data/cldr/common/main/en_GY.xml +++ b/make/data/cldr/common/main/en_GY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_HK.xml b/make/data/cldr/common/main/en_HK.xml index fa80af6f140..55efa60afe4 100644 --- a/make/data/cldr/common/main/en_HK.xml +++ b/make/data/cldr/common/main/en_HK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_ID.xml b/make/data/cldr/common/main/en_ID.xml index dd1ef0173c2..d8967d4d32e 100644 --- a/make/data/cldr/common/main/en_ID.xml +++ b/make/data/cldr/common/main/en_ID.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_IE.xml b/make/data/cldr/common/main/en_IE.xml index c44748d4fdd..4d0cb66f64f 100644 --- a/make/data/cldr/common/main/en_IE.xml +++ b/make/data/cldr/common/main/en_IE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_IL.xml b/make/data/cldr/common/main/en_IL.xml index dc7b6dd7270..64e6712abf6 100644 --- a/make/data/cldr/common/main/en_IL.xml +++ b/make/data/cldr/common/main/en_IL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_IM.xml b/make/data/cldr/common/main/en_IM.xml index 298dc2119c4..e0cebdc97d7 100644 --- a/make/data/cldr/common/main/en_IM.xml +++ b/make/data/cldr/common/main/en_IM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_IN.xml b/make/data/cldr/common/main/en_IN.xml index 8a3de0b3eea..e92b09a0f35 100644 --- a/make/data/cldr/common/main/en_IN.xml +++ b/make/data/cldr/common/main/en_IN.xml @@ -1,8 +1,8 @@ - @@ -156,14 +156,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - am - pm - - - @@ -348,10 +340,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0T - 0T - 00T - 00T + 0K + 0K + 00K + 00K 0L 0L 00L @@ -362,10 +354,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 00Cr 000Cr 000Cr - 0TCr - 0TCr - 00TCr - 00TCr + 0KCr + 0KCr + 00KCr + 00KCr 0LCr 0LCr 00LCr @@ -392,14 +384,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤0T - ¤ 0T - ¤0T - ¤ 0T - ¤00T - ¤ 00T - ¤00T - ¤ 00T ¤0L ¤ 0L ¤0L @@ -420,14 +404,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ 000Cr ¤000Cr ¤ 000Cr - ¤0TCr - ¤ 0TCr - ¤0TCr - ¤ 0TCr - ¤00TCr - ¤ 00TCr - ¤00TCr - ¤ 00TCr + ¤0KCr + ¤ 0KCr + ¤0KCr + ¤ 0KCr + ¤00KCr + ¤ 00KCr + ¤00KCr + ¤ 00KCr ¤0LCr ¤ 0LCr ¤0LCr diff --git a/make/data/cldr/common/main/en_IO.xml b/make/data/cldr/common/main/en_IO.xml index 32bbc146b16..92a48e14017 100644 --- a/make/data/cldr/common/main/en_IO.xml +++ b/make/data/cldr/common/main/en_IO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_JE.xml b/make/data/cldr/common/main/en_JE.xml index 175301c5a9c..bb034325375 100644 --- a/make/data/cldr/common/main/en_JE.xml +++ b/make/data/cldr/common/main/en_JE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_JM.xml b/make/data/cldr/common/main/en_JM.xml index 7b7a8a906db..95d0f7ff446 100644 --- a/make/data/cldr/common/main/en_JM.xml +++ b/make/data/cldr/common/main/en_JM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_KE.xml b/make/data/cldr/common/main/en_KE.xml index 676869a71b1..1bf5307c0fa 100644 --- a/make/data/cldr/common/main/en_KE.xml +++ b/make/data/cldr/common/main/en_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_KI.xml b/make/data/cldr/common/main/en_KI.xml index 641b0c7b763..d0e791a7af9 100644 --- a/make/data/cldr/common/main/en_KI.xml +++ b/make/data/cldr/common/main/en_KI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_KN.xml b/make/data/cldr/common/main/en_KN.xml index 29f593b7cbc..e42abe1b6ca 100644 --- a/make/data/cldr/common/main/en_KN.xml +++ b/make/data/cldr/common/main/en_KN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_KY.xml b/make/data/cldr/common/main/en_KY.xml index c03f9e247ea..63702387fea 100644 --- a/make/data/cldr/common/main/en_KY.xml +++ b/make/data/cldr/common/main/en_KY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_LC.xml b/make/data/cldr/common/main/en_LC.xml index 8fd621102ee..e1f26e6c5f8 100644 --- a/make/data/cldr/common/main/en_LC.xml +++ b/make/data/cldr/common/main/en_LC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_LR.xml b/make/data/cldr/common/main/en_LR.xml index 4675a76a383..eb4bd35354e 100644 --- a/make/data/cldr/common/main/en_LR.xml +++ b/make/data/cldr/common/main/en_LR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_LS.xml b/make/data/cldr/common/main/en_LS.xml index 5f1b55ceb8d..1eae8537fa8 100644 --- a/make/data/cldr/common/main/en_LS.xml +++ b/make/data/cldr/common/main/en_LS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MG.xml b/make/data/cldr/common/main/en_MG.xml index db4d89f73ef..64b115b5eee 100644 --- a/make/data/cldr/common/main/en_MG.xml +++ b/make/data/cldr/common/main/en_MG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MH.xml b/make/data/cldr/common/main/en_MH.xml index 40f6bc0876e..6796e9192e0 100644 --- a/make/data/cldr/common/main/en_MH.xml +++ b/make/data/cldr/common/main/en_MH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MO.xml b/make/data/cldr/common/main/en_MO.xml index 2409398a4b0..d8d7f8b4c9a 100644 --- a/make/data/cldr/common/main/en_MO.xml +++ b/make/data/cldr/common/main/en_MO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MP.xml b/make/data/cldr/common/main/en_MP.xml index 0a5498907f7..7dc20583a0c 100644 --- a/make/data/cldr/common/main/en_MP.xml +++ b/make/data/cldr/common/main/en_MP.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MS.xml b/make/data/cldr/common/main/en_MS.xml index a51583748b7..8b050edc400 100644 --- a/make/data/cldr/common/main/en_MS.xml +++ b/make/data/cldr/common/main/en_MS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MT.xml b/make/data/cldr/common/main/en_MT.xml index 21e101d9b5d..c5a59d467ee 100644 --- a/make/data/cldr/common/main/en_MT.xml +++ b/make/data/cldr/common/main/en_MT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MU.xml b/make/data/cldr/common/main/en_MU.xml index ca5d10c48ee..415c9633f85 100644 --- a/make/data/cldr/common/main/en_MU.xml +++ b/make/data/cldr/common/main/en_MU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MV.xml b/make/data/cldr/common/main/en_MV.xml index c235cdf9290..ef0f012484e 100644 --- a/make/data/cldr/common/main/en_MV.xml +++ b/make/data/cldr/common/main/en_MV.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MW.xml b/make/data/cldr/common/main/en_MW.xml index 0106749d3a4..a082ea1e795 100644 --- a/make/data/cldr/common/main/en_MW.xml +++ b/make/data/cldr/common/main/en_MW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_MY.xml b/make/data/cldr/common/main/en_MY.xml index 260e4fabb8b..b781aba1310 100644 --- a/make/data/cldr/common/main/en_MY.xml +++ b/make/data/cldr/common/main/en_MY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NA.xml b/make/data/cldr/common/main/en_NA.xml index 6c466db1778..a805dda6fe4 100644 --- a/make/data/cldr/common/main/en_NA.xml +++ b/make/data/cldr/common/main/en_NA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NF.xml b/make/data/cldr/common/main/en_NF.xml index b8985e4780b..f0abbefd4a5 100644 --- a/make/data/cldr/common/main/en_NF.xml +++ b/make/data/cldr/common/main/en_NF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NG.xml b/make/data/cldr/common/main/en_NG.xml index 1cdbe002048..cfee35b5967 100644 --- a/make/data/cldr/common/main/en_NG.xml +++ b/make/data/cldr/common/main/en_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NL.xml b/make/data/cldr/common/main/en_NL.xml index 50e7cdf0e9f..ad11fd2356e 100644 --- a/make/data/cldr/common/main/en_NL.xml +++ b/make/data/cldr/common/main/en_NL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NR.xml b/make/data/cldr/common/main/en_NR.xml index 759f3d4e049..461a309c8e6 100644 --- a/make/data/cldr/common/main/en_NR.xml +++ b/make/data/cldr/common/main/en_NR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NU.xml b/make/data/cldr/common/main/en_NU.xml index 98e4b89097e..e1f57eb64b7 100644 --- a/make/data/cldr/common/main/en_NU.xml +++ b/make/data/cldr/common/main/en_NU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_NZ.xml b/make/data/cldr/common/main/en_NZ.xml index 7f81af30aa9..9fd2ea95156 100644 --- a/make/data/cldr/common/main/en_NZ.xml +++ b/make/data/cldr/common/main/en_NZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_PG.xml b/make/data/cldr/common/main/en_PG.xml index 97e223eac5c..0f630a113de 100644 --- a/make/data/cldr/common/main/en_PG.xml +++ b/make/data/cldr/common/main/en_PG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_PH.xml b/make/data/cldr/common/main/en_PH.xml index 26299daf2c6..5c556175331 100644 --- a/make/data/cldr/common/main/en_PH.xml +++ b/make/data/cldr/common/main/en_PH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_PK.xml b/make/data/cldr/common/main/en_PK.xml index ff0180fc0f8..3707a36e215 100644 --- a/make/data/cldr/common/main/en_PK.xml +++ b/make/data/cldr/common/main/en_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_PN.xml b/make/data/cldr/common/main/en_PN.xml index 2979154e92a..41dfaf5a2bc 100644 --- a/make/data/cldr/common/main/en_PN.xml +++ b/make/data/cldr/common/main/en_PN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_PR.xml b/make/data/cldr/common/main/en_PR.xml index c12e1a39ec6..c2a0b54bac2 100644 --- a/make/data/cldr/common/main/en_PR.xml +++ b/make/data/cldr/common/main/en_PR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_PW.xml b/make/data/cldr/common/main/en_PW.xml index 8edce18f4bf..0e6fc103956 100644 --- a/make/data/cldr/common/main/en_PW.xml +++ b/make/data/cldr/common/main/en_PW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_RW.xml b/make/data/cldr/common/main/en_RW.xml index 43c09b5c2cb..16cec039043 100644 --- a/make/data/cldr/common/main/en_RW.xml +++ b/make/data/cldr/common/main/en_RW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SB.xml b/make/data/cldr/common/main/en_SB.xml index 7f38a06f935..f7d8a49d231 100644 --- a/make/data/cldr/common/main/en_SB.xml +++ b/make/data/cldr/common/main/en_SB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SC.xml b/make/data/cldr/common/main/en_SC.xml index 3dfdfda7e60..80db50ef2ca 100644 --- a/make/data/cldr/common/main/en_SC.xml +++ b/make/data/cldr/common/main/en_SC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SD.xml b/make/data/cldr/common/main/en_SD.xml index 50bfa1cf5b7..9e937732564 100644 --- a/make/data/cldr/common/main/en_SD.xml +++ b/make/data/cldr/common/main/en_SD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SE.xml b/make/data/cldr/common/main/en_SE.xml index 7b05ba2e60e..2864cd90b2b 100644 --- a/make/data/cldr/common/main/en_SE.xml +++ b/make/data/cldr/common/main/en_SE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SG.xml b/make/data/cldr/common/main/en_SG.xml index ec7df565a7a..970adc78ac2 100644 --- a/make/data/cldr/common/main/en_SG.xml +++ b/make/data/cldr/common/main/en_SG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SH.xml b/make/data/cldr/common/main/en_SH.xml index e446a3d42da..70acafc3aaf 100644 --- a/make/data/cldr/common/main/en_SH.xml +++ b/make/data/cldr/common/main/en_SH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SI.xml b/make/data/cldr/common/main/en_SI.xml index 07e78e09328..3a1d997b448 100644 --- a/make/data/cldr/common/main/en_SI.xml +++ b/make/data/cldr/common/main/en_SI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SL.xml b/make/data/cldr/common/main/en_SL.xml index 3352baab3c4..f4a944bcf93 100644 --- a/make/data/cldr/common/main/en_SL.xml +++ b/make/data/cldr/common/main/en_SL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SS.xml b/make/data/cldr/common/main/en_SS.xml index 6aa773e99cf..c45a113af4b 100644 --- a/make/data/cldr/common/main/en_SS.xml +++ b/make/data/cldr/common/main/en_SS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SX.xml b/make/data/cldr/common/main/en_SX.xml index 414c9953914..c73851eb280 100644 --- a/make/data/cldr/common/main/en_SX.xml +++ b/make/data/cldr/common/main/en_SX.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_SZ.xml b/make/data/cldr/common/main/en_SZ.xml index c3cb2fbd804..085aa49bd18 100644 --- a/make/data/cldr/common/main/en_SZ.xml +++ b/make/data/cldr/common/main/en_SZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_Shaw.xml b/make/data/cldr/common/main/en_Shaw.xml index d5fc8c91d57..39f2e23af19 100644 --- a/make/data/cldr/common/main/en_Shaw.xml +++ b/make/data/cldr/common/main/en_Shaw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_Shaw_GB.xml b/make/data/cldr/common/main/en_Shaw_GB.xml index f5d1e58a311..2766c6c6ce2 100644 --- a/make/data/cldr/common/main/en_Shaw_GB.xml +++ b/make/data/cldr/common/main/en_Shaw_GB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_TC.xml b/make/data/cldr/common/main/en_TC.xml index 799d960c545..716b6c0dfa5 100644 --- a/make/data/cldr/common/main/en_TC.xml +++ b/make/data/cldr/common/main/en_TC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_TK.xml b/make/data/cldr/common/main/en_TK.xml index eea518c3b1e..2b4933cd43d 100644 --- a/make/data/cldr/common/main/en_TK.xml +++ b/make/data/cldr/common/main/en_TK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_TO.xml b/make/data/cldr/common/main/en_TO.xml index 46bf208ee24..3471fd370bc 100644 --- a/make/data/cldr/common/main/en_TO.xml +++ b/make/data/cldr/common/main/en_TO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_TT.xml b/make/data/cldr/common/main/en_TT.xml index a7997c035e8..f2cdc18acf0 100644 --- a/make/data/cldr/common/main/en_TT.xml +++ b/make/data/cldr/common/main/en_TT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_TV.xml b/make/data/cldr/common/main/en_TV.xml index 961d8bed22c..477b1b1edf8 100644 --- a/make/data/cldr/common/main/en_TV.xml +++ b/make/data/cldr/common/main/en_TV.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_TZ.xml b/make/data/cldr/common/main/en_TZ.xml index 10dfceecf00..1fb9d69f076 100644 --- a/make/data/cldr/common/main/en_TZ.xml +++ b/make/data/cldr/common/main/en_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_UG.xml b/make/data/cldr/common/main/en_UG.xml index 7c0b4340b8a..ffa4e478f08 100644 --- a/make/data/cldr/common/main/en_UG.xml +++ b/make/data/cldr/common/main/en_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_UM.xml b/make/data/cldr/common/main/en_UM.xml index be570e817df..90e040619f9 100644 --- a/make/data/cldr/common/main/en_UM.xml +++ b/make/data/cldr/common/main/en_UM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_US.xml b/make/data/cldr/common/main/en_US.xml index 9b090e68cd3..1098f0a192b 100644 --- a/make/data/cldr/common/main/en_US.xml +++ b/make/data/cldr/common/main/en_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_US_POSIX.xml b/make/data/cldr/common/main/en_US_POSIX.xml index 7b494c78f44..5a7864a4513 100644 --- a/make/data/cldr/common/main/en_US_POSIX.xml +++ b/make/data/cldr/common/main/en_US_POSIX.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_VC.xml b/make/data/cldr/common/main/en_VC.xml index e23f496b8af..5ced8633069 100644 --- a/make/data/cldr/common/main/en_VC.xml +++ b/make/data/cldr/common/main/en_VC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_VG.xml b/make/data/cldr/common/main/en_VG.xml index 10604d44a59..bff76dad8b9 100644 --- a/make/data/cldr/common/main/en_VG.xml +++ b/make/data/cldr/common/main/en_VG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_VI.xml b/make/data/cldr/common/main/en_VI.xml index 069b002404b..2d5800e3980 100644 --- a/make/data/cldr/common/main/en_VI.xml +++ b/make/data/cldr/common/main/en_VI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_VU.xml b/make/data/cldr/common/main/en_VU.xml index 7660e9cd47f..8d072e673b2 100644 --- a/make/data/cldr/common/main/en_VU.xml +++ b/make/data/cldr/common/main/en_VU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_WS.xml b/make/data/cldr/common/main/en_WS.xml index 8e2e243fd05..c0881e59da8 100644 --- a/make/data/cldr/common/main/en_WS.xml +++ b/make/data/cldr/common/main/en_WS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_ZA.xml b/make/data/cldr/common/main/en_ZA.xml index 20fce438ca2..7bc2afaeaba 100644 --- a/make/data/cldr/common/main/en_ZA.xml +++ b/make/data/cldr/common/main/en_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_ZM.xml b/make/data/cldr/common/main/en_ZM.xml index f784a772a7b..31d055396d6 100644 --- a/make/data/cldr/common/main/en_ZM.xml +++ b/make/data/cldr/common/main/en_ZM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/en_ZW.xml b/make/data/cldr/common/main/en_ZW.xml index 094ee09e5aa..415f5896a78 100644 --- a/make/data/cldr/common/main/en_ZW.xml +++ b/make/data/cldr/common/main/en_ZW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/eo.xml b/make/data/cldr/common/main/eo.xml index 11c4191eb7f..4373940cfca 100644 --- a/make/data/cldr/common/main/eo.xml +++ b/make/data/cldr/common/main/eo.xml @@ -1,8 +1,8 @@ - @@ -2690,18 +2690,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daresalamo - - Uĵhorodo - Kievo Simferopolo - - Zaporiĵo - Kampalo @@ -3231,11 +3225,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Howe (somera tempo) - - - makvor-insula tempo - - magadana tempo @@ -3255,13 +3244,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic maŭricia somera tempo - - - nordokcidenta meksika tempo - nordokcidenta meksika norma tempo - nordokcidenta meksika somera tempo - - pacifika meksika tempo diff --git a/make/data/cldr/common/main/eo_001.xml b/make/data/cldr/common/main/eo_001.xml index 74f71a9d7da..3092db7a06a 100644 --- a/make/data/cldr/common/main/eo_001.xml +++ b/make/data/cldr/common/main/eo_001.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es.xml b/make/data/cldr/common/main/es.xml index 2da0419dcac..b868d6c957b 100644 --- a/make/data/cldr/common/main/es.xml +++ b/make/data/cldr/common/main/es.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_BO.xml b/make/data/cldr/common/main/es_BO.xml index f807fb53906..b6090433440 100644 --- a/make/data/cldr/common/main/es_BO.xml +++ b/make/data/cldr/common/main/es_BO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_BR.xml b/make/data/cldr/common/main/es_BR.xml index 5bcd1e703fc..c98cd1291a4 100644 --- a/make/data/cldr/common/main/es_BR.xml +++ b/make/data/cldr/common/main/es_BR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_BZ.xml b/make/data/cldr/common/main/es_BZ.xml index 1ca6d551f1e..33864498795 100644 --- a/make/data/cldr/common/main/es_BZ.xml +++ b/make/data/cldr/common/main/es_BZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_CL.xml b/make/data/cldr/common/main/es_CL.xml index edfe0d580d0..f61c3a21a3d 100644 --- a/make/data/cldr/common/main/es_CL.xml +++ b/make/data/cldr/common/main/es_CL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_CO.xml b/make/data/cldr/common/main/es_CO.xml index 67783e7a7fc..431c17d8ca9 100644 --- a/make/data/cldr/common/main/es_CO.xml +++ b/make/data/cldr/common/main/es_CO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_CR.xml b/make/data/cldr/common/main/es_CR.xml index a4c7dbefc79..84375254780 100644 --- a/make/data/cldr/common/main/es_CR.xml +++ b/make/data/cldr/common/main/es_CR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_CU.xml b/make/data/cldr/common/main/es_CU.xml index b6688a39c12..13f190f8d8b 100644 --- a/make/data/cldr/common/main/es_CU.xml +++ b/make/data/cldr/common/main/es_CU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_DO.xml b/make/data/cldr/common/main/es_DO.xml index 56812b66e88..d5d68e617aa 100644 --- a/make/data/cldr/common/main/es_DO.xml +++ b/make/data/cldr/common/main/es_DO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_EA.xml b/make/data/cldr/common/main/es_EA.xml index dd6744aaa56..1de5b4a13c4 100644 --- a/make/data/cldr/common/main/es_EA.xml +++ b/make/data/cldr/common/main/es_EA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_EC.xml b/make/data/cldr/common/main/es_EC.xml index dabeb20239f..d2eb9494c2c 100644 --- a/make/data/cldr/common/main/es_EC.xml +++ b/make/data/cldr/common/main/es_EC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_ES.xml b/make/data/cldr/common/main/es_ES.xml index eb8bfa7e24a..0df424e4a51 100644 --- a/make/data/cldr/common/main/es_ES.xml +++ b/make/data/cldr/common/main/es_ES.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_GQ.xml b/make/data/cldr/common/main/es_GQ.xml index 1ddebd650aa..15c1dfd26ce 100644 --- a/make/data/cldr/common/main/es_GQ.xml +++ b/make/data/cldr/common/main/es_GQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_GT.xml b/make/data/cldr/common/main/es_GT.xml index 861f3c8b026..c24654ffe71 100644 --- a/make/data/cldr/common/main/es_GT.xml +++ b/make/data/cldr/common/main/es_GT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_HN.xml b/make/data/cldr/common/main/es_HN.xml index 35fdf1bde92..781e326acdd 100644 --- a/make/data/cldr/common/main/es_HN.xml +++ b/make/data/cldr/common/main/es_HN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_IC.xml b/make/data/cldr/common/main/es_IC.xml index ded49b4e780..2f9d5b339e0 100644 --- a/make/data/cldr/common/main/es_IC.xml +++ b/make/data/cldr/common/main/es_IC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_MX.xml b/make/data/cldr/common/main/es_MX.xml index b220b771097..6ff5d758521 100644 --- a/make/data/cldr/common/main/es_MX.xml +++ b/make/data/cldr/common/main/es_MX.xml @@ -1,8 +1,8 @@ - @@ -587,11 +587,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de las Islas Gilbert - - - hora de la isla Macquarie - - hora de las Islas Marshall diff --git a/make/data/cldr/common/main/es_NI.xml b/make/data/cldr/common/main/es_NI.xml index 30e62addfaa..c232a99bbd3 100644 --- a/make/data/cldr/common/main/es_NI.xml +++ b/make/data/cldr/common/main/es_NI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_PA.xml b/make/data/cldr/common/main/es_PA.xml index cb5e8a1bce5..033d71b624a 100644 --- a/make/data/cldr/common/main/es_PA.xml +++ b/make/data/cldr/common/main/es_PA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_PE.xml b/make/data/cldr/common/main/es_PE.xml index 1be590a4ba3..36da049e783 100644 --- a/make/data/cldr/common/main/es_PE.xml +++ b/make/data/cldr/common/main/es_PE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_PH.xml b/make/data/cldr/common/main/es_PH.xml index 1d022d74fd5..5ad142f2182 100644 --- a/make/data/cldr/common/main/es_PH.xml +++ b/make/data/cldr/common/main/es_PH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_PR.xml b/make/data/cldr/common/main/es_PR.xml index 2db1ea0bd47..21eec4a4930 100644 --- a/make/data/cldr/common/main/es_PR.xml +++ b/make/data/cldr/common/main/es_PR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_PY.xml b/make/data/cldr/common/main/es_PY.xml index 74af58fe04b..14a760ceef0 100644 --- a/make/data/cldr/common/main/es_PY.xml +++ b/make/data/cldr/common/main/es_PY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_SV.xml b/make/data/cldr/common/main/es_SV.xml index 1dae8dd6824..f1f72ef262a 100644 --- a/make/data/cldr/common/main/es_SV.xml +++ b/make/data/cldr/common/main/es_SV.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_US.xml b/make/data/cldr/common/main/es_US.xml index 330f5434fc7..192cd37c949 100644 --- a/make/data/cldr/common/main/es_US.xml +++ b/make/data/cldr/common/main/es_US.xml @@ -1,8 +1,8 @@ - @@ -530,11 +530,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora del Océano Índico - - - hora de la isla Macquarie - - hora de las islas Marquesas diff --git a/make/data/cldr/common/main/es_UY.xml b/make/data/cldr/common/main/es_UY.xml index df6ce01a60f..9413f6ad750 100644 --- a/make/data/cldr/common/main/es_UY.xml +++ b/make/data/cldr/common/main/es_UY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/es_VE.xml b/make/data/cldr/common/main/es_VE.xml index 3da59310136..790b39dc6ce 100644 --- a/make/data/cldr/common/main/es_VE.xml +++ b/make/data/cldr/common/main/es_VE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/et.xml b/make/data/cldr/common/main/et.xml index e0f3c46f7ca..d592b9a84ea 100644 --- a/make/data/cldr/common/main/et.xml +++ b/make/data/cldr/common/main/et.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/eu.xml b/make/data/cldr/common/main/eu.xml index f32831ffc88..05a24b1cd26 100644 --- a/make/data/cldr/common/main/eu.xml +++ b/make/data/cldr/common/main/eu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ewo.xml b/make/data/cldr/common/main/ewo.xml index 9d4eddd2827..b0aa0bd21bb 100644 --- a/make/data/cldr/common/main/ewo.xml +++ b/make/data/cldr/common/main/ewo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ewo_CM.xml b/make/data/cldr/common/main/ewo_CM.xml index ca40dbef826..c1ca412bec0 100644 --- a/make/data/cldr/common/main/ewo_CM.xml +++ b/make/data/cldr/common/main/ewo_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fa.xml b/make/data/cldr/common/main/fa.xml index 85f69c4d042..70b2b6af840 100644 --- a/make/data/cldr/common/main/fa.xml +++ b/make/data/cldr/common/main/fa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fa_IR.xml b/make/data/cldr/common/main/fa_IR.xml index f1c736a2708..6bd954fe747 100644 --- a/make/data/cldr/common/main/fa_IR.xml +++ b/make/data/cldr/common/main/fa_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff.xml b/make/data/cldr/common/main/ff.xml index a5d227fc334..d49da7dd73a 100644 --- a/make/data/cldr/common/main/ff.xml +++ b/make/data/cldr/common/main/ff.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm.xml b/make/data/cldr/common/main/ff_Adlm.xml index afd050cd485..397938de91c 100644 --- a/make/data/cldr/common/main/ff_Adlm.xml +++ b/make/data/cldr/common/main/ff_Adlm.xml @@ -1,8 +1,8 @@ - @@ -710,7 +710,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤄𞤢𞤸𞤢𞤥𞤢𞥄𞤧 𞤄𞤵𞥅𞤼𞤢𞥄𞤲 𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤄𞤵𞥅𞤾𞤫𞥅 - ‮𞤄𞤮𞤼𞤧𞤵𞤱𞤢𞥄𞤲𞤢 + 𞤄𞤮𞤼𞤧𞤵𞤱𞤢𞥄𞤲𞤢 𞤄𞤫𞤤𞤢𞤪𞤵𞥅𞤧 𞤄𞤫𞤤𞤭𞥅𞥁 𞤑𞤢𞤲𞤢𞤣𞤢𞥄 @@ -3392,9 +3392,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤃𞤫𞤤𞤦𞤵𞥅𞤪𞤲𞤵 - - 𞤑𞤵𞥅𞤪𞤭𞥅 - 𞤖𞤵𞥅𞤦𞤢𞤪𞤼𞤵 @@ -3548,9 +3545,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤑𞤪𞤫𞤧𞤼𞤮𞤲 - - 𞤒𞤫𞤤𞤮𞥅𞤲𞤢𞤴𞤬 - 𞤉𞤣𞤥𞤮𞤲𞤼𞤮𞤲 @@ -3569,30 +3563,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤈𞤭𞤧𞤮𞤤𞤵𞥅𞤼 - - 𞤈𞤫𞤲𞤭𞥅-𞤈𞤭𞤾𞤮𞥅 - 𞤈𞤢𞤲𞤳𞤭𞤲 𞤋𞤲𞤤𞤫𞤼 𞤀𞤼𞤭𞤳𞤮𞥅𞤳𞤢𞤲 - - 𞤚𞤵𞤲𞤣𞤮𞥅 𞤄𞤫𞥅 - - - 𞤐𞤭𞤨𞤭𞤺𞤮𞤲 - 𞤚𞤮𞤪𞤮𞤲𞤼𞤮𞥅 𞤋𞤳𞤢𞤤𞤵𞤱𞤭𞤼 - - 𞤆𞤢𞤲𞤺 - 𞤃𞤮𞤲𞤳𞤼𞤮𞥅𞤲 @@ -3789,7 +3771,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤐𞤵𞥅𞤳 - ‮𞤋𞤼𞥆𞤮𞤳𞤮𞤪𞤼𞤮𞥅𞤪𞤥𞤭𞥅𞤼 + 𞤋𞤼𞥆𞤮𞤳𞤮𞤪𞤼𞤮𞥅𞤪𞤥𞤭𞥅𞤼 𞤁𞤢𞥄𞤲𞤥𞤢𞤪𞤳𞥃𞤢𞥄𞤾𞤲 @@ -4403,18 +4385,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤁𞤢𞥄𞤪𞤫-𞤅𞤢𞤤𞤢𞥄𞤥𞤵 - - 𞤓𞥅𞤶𞤢𞤪𞤵𞥅𞤣𞤵 - 𞤑𞤭𞤴𞤫𞥅𞤾 𞤅𞤭𞤥𞤬𞤫𞤪𞤨𞤮𞥅𞤤 - - 𞤟𞤢𞤨𞤮𞤪𞤵𞥅𞥁 - 𞤑𞤢𞤥𞤨𞤢𞤤𞤢 @@ -4437,9 +4413,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤑𞤕𞤖 - - 𞤔𞤮𞤲𞤧𞤼𞤮𞤲 - 𞤀𞤲𞤧𞤮𞤪𞤢𞥄𞤶𞤵 @@ -5127,11 +5100,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤕𞤫𞥅𞤯𞤵 𞤃𞤢𞤳𞤢𞤱𞤮𞥅 - - - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤃𞤢𞤳𞤢𞥄𞤪𞤭 - - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤃𞤢𞤺𞤢𞤣𞤢𞤲 @@ -5171,13 +5139,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤃𞤢𞤱𞤧𞤮𞤲 - - - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤐𞤢𞤲𞤮-𞤸𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅 - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤢𞤱𞤪𞤵𞤲𞥋𞤣𞤫 𞤐𞤢𞤲𞤮-𞤸𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅 - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤕𞤫𞥅𞤯𞤵 𞤐𞤢𞤲𞤮-𞤸𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅 - - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤁𞤫𞤰𞥆𞤮 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅 diff --git a/make/data/cldr/common/main/ff_Adlm_BF.xml b/make/data/cldr/common/main/ff_Adlm_BF.xml index 3e9e0627b1e..90be5631993 100644 --- a/make/data/cldr/common/main/ff_Adlm_BF.xml +++ b/make/data/cldr/common/main/ff_Adlm_BF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_CM.xml b/make/data/cldr/common/main/ff_Adlm_CM.xml index 3fde1300b30..3761a7efe1d 100644 --- a/make/data/cldr/common/main/ff_Adlm_CM.xml +++ b/make/data/cldr/common/main/ff_Adlm_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_GH.xml b/make/data/cldr/common/main/ff_Adlm_GH.xml index 038a168fdd0..c3477d0486e 100644 --- a/make/data/cldr/common/main/ff_Adlm_GH.xml +++ b/make/data/cldr/common/main/ff_Adlm_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_GM.xml b/make/data/cldr/common/main/ff_Adlm_GM.xml index bcf7075379d..35fafdbe790 100644 --- a/make/data/cldr/common/main/ff_Adlm_GM.xml +++ b/make/data/cldr/common/main/ff_Adlm_GM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_GN.xml b/make/data/cldr/common/main/ff_Adlm_GN.xml index e3c897c0e99..d8c3db1a6ac 100644 --- a/make/data/cldr/common/main/ff_Adlm_GN.xml +++ b/make/data/cldr/common/main/ff_Adlm_GN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_GW.xml b/make/data/cldr/common/main/ff_Adlm_GW.xml index 91f2cd631fe..17ce40babac 100644 --- a/make/data/cldr/common/main/ff_Adlm_GW.xml +++ b/make/data/cldr/common/main/ff_Adlm_GW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_LR.xml b/make/data/cldr/common/main/ff_Adlm_LR.xml index 35e42c9f3d9..b6c231d0808 100644 --- a/make/data/cldr/common/main/ff_Adlm_LR.xml +++ b/make/data/cldr/common/main/ff_Adlm_LR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_MR.xml b/make/data/cldr/common/main/ff_Adlm_MR.xml index e3e8053e345..0887f910fe8 100644 --- a/make/data/cldr/common/main/ff_Adlm_MR.xml +++ b/make/data/cldr/common/main/ff_Adlm_MR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_NE.xml b/make/data/cldr/common/main/ff_Adlm_NE.xml index b87cd3b98ad..27ba7a82479 100644 --- a/make/data/cldr/common/main/ff_Adlm_NE.xml +++ b/make/data/cldr/common/main/ff_Adlm_NE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_NG.xml b/make/data/cldr/common/main/ff_Adlm_NG.xml index 2049af21619..2c41f8227de 100644 --- a/make/data/cldr/common/main/ff_Adlm_NG.xml +++ b/make/data/cldr/common/main/ff_Adlm_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_SL.xml b/make/data/cldr/common/main/ff_Adlm_SL.xml index 0e74f05fe3f..9f82db107c5 100644 --- a/make/data/cldr/common/main/ff_Adlm_SL.xml +++ b/make/data/cldr/common/main/ff_Adlm_SL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Adlm_SN.xml b/make/data/cldr/common/main/ff_Adlm_SN.xml index 685b6f6923c..c40e32bd727 100644 --- a/make/data/cldr/common/main/ff_Adlm_SN.xml +++ b/make/data/cldr/common/main/ff_Adlm_SN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn.xml b/make/data/cldr/common/main/ff_Latn.xml index d3c7025d8e5..935b75f4483 100644 --- a/make/data/cldr/common/main/ff_Latn.xml +++ b/make/data/cldr/common/main/ff_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_BF.xml b/make/data/cldr/common/main/ff_Latn_BF.xml index 6a7679a921a..e7e67942819 100644 --- a/make/data/cldr/common/main/ff_Latn_BF.xml +++ b/make/data/cldr/common/main/ff_Latn_BF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_CM.xml b/make/data/cldr/common/main/ff_Latn_CM.xml index e65cdd47bb1..58cb7f2cbbf 100644 --- a/make/data/cldr/common/main/ff_Latn_CM.xml +++ b/make/data/cldr/common/main/ff_Latn_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_GH.xml b/make/data/cldr/common/main/ff_Latn_GH.xml index d51d6a2845a..e41b64f1fd1 100644 --- a/make/data/cldr/common/main/ff_Latn_GH.xml +++ b/make/data/cldr/common/main/ff_Latn_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_GM.xml b/make/data/cldr/common/main/ff_Latn_GM.xml index 8e29e3085c2..201a089c5a9 100644 --- a/make/data/cldr/common/main/ff_Latn_GM.xml +++ b/make/data/cldr/common/main/ff_Latn_GM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_GN.xml b/make/data/cldr/common/main/ff_Latn_GN.xml index 05c35ae80e2..d24fcded069 100644 --- a/make/data/cldr/common/main/ff_Latn_GN.xml +++ b/make/data/cldr/common/main/ff_Latn_GN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_GW.xml b/make/data/cldr/common/main/ff_Latn_GW.xml index bd4cc979d2a..86129370658 100644 --- a/make/data/cldr/common/main/ff_Latn_GW.xml +++ b/make/data/cldr/common/main/ff_Latn_GW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_LR.xml b/make/data/cldr/common/main/ff_Latn_LR.xml index c4ae1b5cd00..54833258e68 100644 --- a/make/data/cldr/common/main/ff_Latn_LR.xml +++ b/make/data/cldr/common/main/ff_Latn_LR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_MR.xml b/make/data/cldr/common/main/ff_Latn_MR.xml index ed5cf9f5711..410874c3384 100644 --- a/make/data/cldr/common/main/ff_Latn_MR.xml +++ b/make/data/cldr/common/main/ff_Latn_MR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_NE.xml b/make/data/cldr/common/main/ff_Latn_NE.xml index dde07b1844e..36982866935 100644 --- a/make/data/cldr/common/main/ff_Latn_NE.xml +++ b/make/data/cldr/common/main/ff_Latn_NE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_NG.xml b/make/data/cldr/common/main/ff_Latn_NG.xml index d6c5f4bb5ce..5816f40592c 100644 --- a/make/data/cldr/common/main/ff_Latn_NG.xml +++ b/make/data/cldr/common/main/ff_Latn_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_SL.xml b/make/data/cldr/common/main/ff_Latn_SL.xml index c4589017208..0cbb05f7425 100644 --- a/make/data/cldr/common/main/ff_Latn_SL.xml +++ b/make/data/cldr/common/main/ff_Latn_SL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ff_Latn_SN.xml b/make/data/cldr/common/main/ff_Latn_SN.xml index 92d54286e83..af236d68ca2 100644 --- a/make/data/cldr/common/main/ff_Latn_SN.xml +++ b/make/data/cldr/common/main/ff_Latn_SN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fi.xml b/make/data/cldr/common/main/fi.xml index 6ad756f2dfe..137ee13e624 100644 --- a/make/data/cldr/common/main/fi.xml +++ b/make/data/cldr/common/main/fi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fil.xml b/make/data/cldr/common/main/fil.xml index 7959c590d7b..3ab1ed46273 100644 --- a/make/data/cldr/common/main/fil.xml +++ b/make/data/cldr/common/main/fil.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fo.xml b/make/data/cldr/common/main/fo.xml index 8d58f498685..ecb45b9a457 100644 --- a/make/data/cldr/common/main/fo.xml +++ b/make/data/cldr/common/main/fo.xml @@ -1,8 +1,8 @@ - @@ -2033,9 +2033,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} tíð {0} summartíð {0} vanlig tíð - - Santa Isabel - Samskipað heimstíð @@ -2047,9 +2044,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wien - - Currie - Bruxelles @@ -2186,9 +2180,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic São Tomé - - Uzhhorod - Kiev @@ -2704,11 +2695,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Howe summartíð - - - Macquariesoyggj tíð - - Magadan tíð @@ -2748,13 +2734,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson tíð - - - Northwest Mexico tíð - Northwest Mexico vanlig tíð - Northwest Mexico summartíð - - Mexican Pacific tíð diff --git a/make/data/cldr/common/main/fo_DK.xml b/make/data/cldr/common/main/fo_DK.xml index 474d7251214..7a060794f54 100644 --- a/make/data/cldr/common/main/fo_DK.xml +++ b/make/data/cldr/common/main/fo_DK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fo_FO.xml b/make/data/cldr/common/main/fo_FO.xml index c44b292d792..0d8f10b4dba 100644 --- a/make/data/cldr/common/main/fo_FO.xml +++ b/make/data/cldr/common/main/fo_FO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr.xml b/make/data/cldr/common/main/fr.xml index 4563ac55fb6..d5ace55980e 100644 --- a/make/data/cldr/common/main/fr.xml +++ b/make/data/cldr/common/main/fr.xml @@ -1,8 +1,8 @@ - @@ -16,7 +16,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic franco-provençal ancien haut-allemand gujarati - ao Îles Géorgie du Sud et Sandwich du Sud diff --git a/make/data/cldr/common/main/fr_BF.xml b/make/data/cldr/common/main/fr_BF.xml index 04b86314676..147d05e30e0 100644 --- a/make/data/cldr/common/main/fr_BF.xml +++ b/make/data/cldr/common/main/fr_BF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_BI.xml b/make/data/cldr/common/main/fr_BI.xml index 171c8bfe69d..621d814c755 100644 --- a/make/data/cldr/common/main/fr_BI.xml +++ b/make/data/cldr/common/main/fr_BI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_BJ.xml b/make/data/cldr/common/main/fr_BJ.xml index 4a69b82e63f..10ab208c340 100644 --- a/make/data/cldr/common/main/fr_BJ.xml +++ b/make/data/cldr/common/main/fr_BJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_BL.xml b/make/data/cldr/common/main/fr_BL.xml index 1378fbf1afa..313cdfa6439 100644 --- a/make/data/cldr/common/main/fr_BL.xml +++ b/make/data/cldr/common/main/fr_BL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_CA.xml b/make/data/cldr/common/main/fr_CA.xml index fab1d94773f..f4a523c6939 100644 --- a/make/data/cldr/common/main/fr_CA.xml +++ b/make/data/cldr/common/main/fr_CA.xml @@ -1,8 +1,8 @@ - @@ -152,7 +152,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ordre de tri chinois simplifié - GB2312 ordre de tri de l’annuaire ordre de tri pinyin - ordre de tri réformé Rechercher par consonne initiale en hangeul ordre de tri des traits ordre de tri traditionnel @@ -1526,13 +1525,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic heure avancée de Maurice - - - heure du Nord-Ouest du Mexique - heure normale du Nord-Ouest du Mexique - heure avancée du Nord-Ouest du Mexique - - heure du Pacifique mexicain @@ -2677,10 +2669,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} cal {0} cal - - {0} kcal - {0} kcal - {0} kJ {0} kJ diff --git a/make/data/cldr/common/main/fr_CD.xml b/make/data/cldr/common/main/fr_CD.xml index 85c1c16bb9d..2f522cc844f 100644 --- a/make/data/cldr/common/main/fr_CD.xml +++ b/make/data/cldr/common/main/fr_CD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_CF.xml b/make/data/cldr/common/main/fr_CF.xml index 63196bbe9fe..9cb186d2952 100644 --- a/make/data/cldr/common/main/fr_CF.xml +++ b/make/data/cldr/common/main/fr_CF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_CG.xml b/make/data/cldr/common/main/fr_CG.xml index 7a45a8376ae..e1a3b4a716a 100644 --- a/make/data/cldr/common/main/fr_CG.xml +++ b/make/data/cldr/common/main/fr_CG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_CH.xml b/make/data/cldr/common/main/fr_CH.xml index aec5ac678ae..5a168c97697 100644 --- a/make/data/cldr/common/main/fr_CH.xml +++ b/make/data/cldr/common/main/fr_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_CI.xml b/make/data/cldr/common/main/fr_CI.xml index 9ae53e7370e..90208c36bc6 100644 --- a/make/data/cldr/common/main/fr_CI.xml +++ b/make/data/cldr/common/main/fr_CI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_CM.xml b/make/data/cldr/common/main/fr_CM.xml index 6b087f5c2d1..6b436ac139c 100644 --- a/make/data/cldr/common/main/fr_CM.xml +++ b/make/data/cldr/common/main/fr_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_DJ.xml b/make/data/cldr/common/main/fr_DJ.xml index d746ae22152..1fc0c5046d9 100644 --- a/make/data/cldr/common/main/fr_DJ.xml +++ b/make/data/cldr/common/main/fr_DJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_DZ.xml b/make/data/cldr/common/main/fr_DZ.xml index 64d90983297..f807f785bee 100644 --- a/make/data/cldr/common/main/fr_DZ.xml +++ b/make/data/cldr/common/main/fr_DZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_FR.xml b/make/data/cldr/common/main/fr_FR.xml index b9ec553a9fc..aa2e0e5c0dd 100644 --- a/make/data/cldr/common/main/fr_FR.xml +++ b/make/data/cldr/common/main/fr_FR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_GA.xml b/make/data/cldr/common/main/fr_GA.xml index f8a10a73af3..71b364d15fa 100644 --- a/make/data/cldr/common/main/fr_GA.xml +++ b/make/data/cldr/common/main/fr_GA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_GF.xml b/make/data/cldr/common/main/fr_GF.xml index 0ac69d58128..5ede4983f33 100644 --- a/make/data/cldr/common/main/fr_GF.xml +++ b/make/data/cldr/common/main/fr_GF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_GN.xml b/make/data/cldr/common/main/fr_GN.xml index 4bedd27acc7..21062f9a659 100644 --- a/make/data/cldr/common/main/fr_GN.xml +++ b/make/data/cldr/common/main/fr_GN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_GP.xml b/make/data/cldr/common/main/fr_GP.xml index 9daf12c7950..60d21f8a045 100644 --- a/make/data/cldr/common/main/fr_GP.xml +++ b/make/data/cldr/common/main/fr_GP.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_GQ.xml b/make/data/cldr/common/main/fr_GQ.xml index 3b4d9ba6870..bd4a2e57271 100644 --- a/make/data/cldr/common/main/fr_GQ.xml +++ b/make/data/cldr/common/main/fr_GQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_HT.xml b/make/data/cldr/common/main/fr_HT.xml index 9264d4b22d6..67376463b43 100644 --- a/make/data/cldr/common/main/fr_HT.xml +++ b/make/data/cldr/common/main/fr_HT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_KM.xml b/make/data/cldr/common/main/fr_KM.xml index 4b4929d8ed9..4f37867f6b8 100644 --- a/make/data/cldr/common/main/fr_KM.xml +++ b/make/data/cldr/common/main/fr_KM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_LU.xml b/make/data/cldr/common/main/fr_LU.xml index 7d105961792..a4b2da9658b 100644 --- a/make/data/cldr/common/main/fr_LU.xml +++ b/make/data/cldr/common/main/fr_LU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MA.xml b/make/data/cldr/common/main/fr_MA.xml index da0ec56f128..9a6291f72f6 100644 --- a/make/data/cldr/common/main/fr_MA.xml +++ b/make/data/cldr/common/main/fr_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MC.xml b/make/data/cldr/common/main/fr_MC.xml index bfd995edf61..b0c3a56dbd4 100644 --- a/make/data/cldr/common/main/fr_MC.xml +++ b/make/data/cldr/common/main/fr_MC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MF.xml b/make/data/cldr/common/main/fr_MF.xml index ac2e8c17aaf..8e8faa565f2 100644 --- a/make/data/cldr/common/main/fr_MF.xml +++ b/make/data/cldr/common/main/fr_MF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MG.xml b/make/data/cldr/common/main/fr_MG.xml index 773cf447a34..24f4c01fd03 100644 --- a/make/data/cldr/common/main/fr_MG.xml +++ b/make/data/cldr/common/main/fr_MG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_ML.xml b/make/data/cldr/common/main/fr_ML.xml index b3ce944479a..92baa844d7b 100644 --- a/make/data/cldr/common/main/fr_ML.xml +++ b/make/data/cldr/common/main/fr_ML.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MQ.xml b/make/data/cldr/common/main/fr_MQ.xml index bfae71f5147..b0843cdfc3f 100644 --- a/make/data/cldr/common/main/fr_MQ.xml +++ b/make/data/cldr/common/main/fr_MQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MR.xml b/make/data/cldr/common/main/fr_MR.xml index 1b1b0325eae..c28494b741b 100644 --- a/make/data/cldr/common/main/fr_MR.xml +++ b/make/data/cldr/common/main/fr_MR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_MU.xml b/make/data/cldr/common/main/fr_MU.xml index 19280b8a7ae..a34ad049263 100644 --- a/make/data/cldr/common/main/fr_MU.xml +++ b/make/data/cldr/common/main/fr_MU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_NC.xml b/make/data/cldr/common/main/fr_NC.xml index a2d43be981d..5b37c39a95b 100644 --- a/make/data/cldr/common/main/fr_NC.xml +++ b/make/data/cldr/common/main/fr_NC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_NE.xml b/make/data/cldr/common/main/fr_NE.xml index 0a5a7940a89..e9326af410d 100644 --- a/make/data/cldr/common/main/fr_NE.xml +++ b/make/data/cldr/common/main/fr_NE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_PF.xml b/make/data/cldr/common/main/fr_PF.xml index 5586e2f523e..96285e8276e 100644 --- a/make/data/cldr/common/main/fr_PF.xml +++ b/make/data/cldr/common/main/fr_PF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_PM.xml b/make/data/cldr/common/main/fr_PM.xml index 55d4d1670d8..40ffe3e536e 100644 --- a/make/data/cldr/common/main/fr_PM.xml +++ b/make/data/cldr/common/main/fr_PM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_RE.xml b/make/data/cldr/common/main/fr_RE.xml index 4f33c169aae..f86d81a11e6 100644 --- a/make/data/cldr/common/main/fr_RE.xml +++ b/make/data/cldr/common/main/fr_RE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_RW.xml b/make/data/cldr/common/main/fr_RW.xml index 82baf8660ed..8040bdfa162 100644 --- a/make/data/cldr/common/main/fr_RW.xml +++ b/make/data/cldr/common/main/fr_RW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_SC.xml b/make/data/cldr/common/main/fr_SC.xml index ea5cc52cd57..c4cb4cf1788 100644 --- a/make/data/cldr/common/main/fr_SC.xml +++ b/make/data/cldr/common/main/fr_SC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_SN.xml b/make/data/cldr/common/main/fr_SN.xml index 124a6fc3d40..89343236f3f 100644 --- a/make/data/cldr/common/main/fr_SN.xml +++ b/make/data/cldr/common/main/fr_SN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_SY.xml b/make/data/cldr/common/main/fr_SY.xml index 6551fe91d4a..1dab23168f1 100644 --- a/make/data/cldr/common/main/fr_SY.xml +++ b/make/data/cldr/common/main/fr_SY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_TD.xml b/make/data/cldr/common/main/fr_TD.xml index 3c7a3996d34..eb5ab733d98 100644 --- a/make/data/cldr/common/main/fr_TD.xml +++ b/make/data/cldr/common/main/fr_TD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_TG.xml b/make/data/cldr/common/main/fr_TG.xml index 1d0e1469873..a01e06a4909 100644 --- a/make/data/cldr/common/main/fr_TG.xml +++ b/make/data/cldr/common/main/fr_TG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_TN.xml b/make/data/cldr/common/main/fr_TN.xml index 7b7beb64b29..fed2ed7807f 100644 --- a/make/data/cldr/common/main/fr_TN.xml +++ b/make/data/cldr/common/main/fr_TN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_VU.xml b/make/data/cldr/common/main/fr_VU.xml index 6299c4b0c89..f9eb38f20a3 100644 --- a/make/data/cldr/common/main/fr_VU.xml +++ b/make/data/cldr/common/main/fr_VU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_WF.xml b/make/data/cldr/common/main/fr_WF.xml index 8b3ed1a9676..e644869fdc3 100644 --- a/make/data/cldr/common/main/fr_WF.xml +++ b/make/data/cldr/common/main/fr_WF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fr_YT.xml b/make/data/cldr/common/main/fr_YT.xml index 43842e13fac..134c877e30c 100644 --- a/make/data/cldr/common/main/fr_YT.xml +++ b/make/data/cldr/common/main/fr_YT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/frr.xml b/make/data/cldr/common/main/frr.xml index 20fbfe261d8..71e59e401e4 100644 --- a/make/data/cldr/common/main/frr.xml +++ b/make/data/cldr/common/main/frr.xml @@ -1,8 +1,8 @@ - @@ -1900,15 +1900,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Taipee - - Uschhorod - Kiew - - Saporischja - Beulah, Nuurd Dakota @@ -2433,11 +2427,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Howe Somertidj - - - Macquarie Eilun Tidj - - Magadan Tidj @@ -2477,13 +2466,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson Tidj - - - Nuurdwaast Meksiko Tidj - Nuurdwaast Meksiko Standard Tidj - Nuurdwaast Meksiko Somertidj - - Meksiko Pasiifik Tidj diff --git a/make/data/cldr/common/main/frr_DE.xml b/make/data/cldr/common/main/frr_DE.xml index e5cebfe7e3e..e4dd611312f 100644 --- a/make/data/cldr/common/main/frr_DE.xml +++ b/make/data/cldr/common/main/frr_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fur.xml b/make/data/cldr/common/main/fur.xml index ec137e51b12..5f2858e9bd0 100644 --- a/make/data/cldr/common/main/fur.xml +++ b/make/data/cldr/common/main/fur.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fur_IT.xml b/make/data/cldr/common/main/fur_IT.xml index cf04181644d..fcc1dfb18b4 100644 --- a/make/data/cldr/common/main/fur_IT.xml +++ b/make/data/cldr/common/main/fur_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/fy.xml b/make/data/cldr/common/main/fy.xml index b83df95b056..1e47da09297 100644 --- a/make/data/cldr/common/main/fy.xml +++ b/make/data/cldr/common/main/fy.xml @@ -1,8 +1,8 @@ - @@ -2308,12 +2308,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Istanboel - - Oezjhorod - - - Zaporizja - Beulah, Noard-Dakota @@ -2900,11 +2894,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Macause simmertiid - - - Macquarie-eilânske tiid - - Magadan-tiid diff --git a/make/data/cldr/common/main/fy_NL.xml b/make/data/cldr/common/main/fy_NL.xml index 5cbe6c0bfc6..db5f697c8a3 100644 --- a/make/data/cldr/common/main/fy_NL.xml +++ b/make/data/cldr/common/main/fy_NL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ga.xml b/make/data/cldr/common/main/ga.xml index d1402226e4b..a4ee7b2efbd 100644 --- a/make/data/cldr/common/main/ga.xml +++ b/make/data/cldr/common/main/ga.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ga_IE.xml b/make/data/cldr/common/main/ga_IE.xml index 8fde2cd1280..3a7250e9763 100644 --- a/make/data/cldr/common/main/ga_IE.xml +++ b/make/data/cldr/common/main/ga_IE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gaa.xml b/make/data/cldr/common/main/gaa.xml index a48870a699a..83ffd48e86e 100644 --- a/make/data/cldr/common/main/gaa.xml +++ b/make/data/cldr/common/main/gaa.xml @@ -1,8 +1,8 @@ - @@ -900,9 +900,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ŋmeŋme Ni Ekumɔ - - Kurrie - Makwarie @@ -927,24 +924,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kreston - - Kakla Wuɔfɔ - Swift Karɛnt Kambridge Ŋshɔnine Bibioo - - Faa Ni Nɛɔ - Rankin Ŋshɔnine - - Sarawa Ŋshɔnine Bibioo - Ikaluit @@ -1276,13 +1264,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mauritius Be Yɛ Latsa Beiaŋ - - - Meziko Kooyi-Anaigbɛ Be - Meziko Kooyi-Anaigbɛ Be Yɛ Fɛi Beiaŋ - Meziko Kooyi-Anaigbɛ Be Yɛ Latsa Beiaŋ - - Meziko Pasifik Be diff --git a/make/data/cldr/common/main/gaa_GH.xml b/make/data/cldr/common/main/gaa_GH.xml index 94f9d0dd6d5..84715929253 100644 --- a/make/data/cldr/common/main/gaa_GH.xml +++ b/make/data/cldr/common/main/gaa_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gd.xml b/make/data/cldr/common/main/gd.xml index 5c8144a7ea1..fb8f5039aa2 100644 --- a/make/data/cldr/common/main/gd.xml +++ b/make/data/cldr/common/main/gd.xml @@ -1,8 +1,8 @@ - @@ -1321,7 +1321,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Òrdugh seòrsachaidh na Sìnise Simplichte - GB2312 Òrdugh seòrsachaidh nan leabhraichean-fòn Òrdugh seòrsachaidh Pinyin - Òrdugh seòrsachaidh ath-leasaichte Lorg coitcheann Lorg leis a’ chiad chonnrag Hangul Òrdugh seòrsachaidh stannardach @@ -3240,9 +3239,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tìde samhraidh: {0} Bun-àm: {0} - - Santa Isabel - Àm Uile-choitcheann Co-òrdanaichte @@ -3269,9 +3265,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Córdoba - - Currie - Sidni @@ -3332,9 +3325,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kangiqliniq - - Pangniqtuuq - Glasbaidh @@ -4278,11 +4268,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tìde samhraidh Macàthu - - - Àm Eilein MhicGuaire - - Àm Magadan @@ -4322,13 +4307,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àm Mhawson - - - Àm Mheagsago an Iar-thuath - Bun-àm Mheagsago an Iar-thuath - Tìde samhraidh Mheagsago an Iar-thuath - - Àm a’ Chuain Sèimh Mheagsago diff --git a/make/data/cldr/common/main/gd_GB.xml b/make/data/cldr/common/main/gd_GB.xml index 8ff9f1b50d3..1b81536ed80 100644 --- a/make/data/cldr/common/main/gd_GB.xml +++ b/make/data/cldr/common/main/gd_GB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gez.xml b/make/data/cldr/common/main/gez.xml index 30774449c23..bb405dabb87 100644 --- a/make/data/cldr/common/main/gez.xml +++ b/make/data/cldr/common/main/gez.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gez_ER.xml b/make/data/cldr/common/main/gez_ER.xml index c8df591a28e..f5b9ae7497e 100644 --- a/make/data/cldr/common/main/gez_ER.xml +++ b/make/data/cldr/common/main/gez_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gez_ET.xml b/make/data/cldr/common/main/gez_ET.xml index 84c9083021c..c9250811ec8 100644 --- a/make/data/cldr/common/main/gez_ET.xml +++ b/make/data/cldr/common/main/gez_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gl.xml b/make/data/cldr/common/main/gl.xml index 3666f14c540..cd29e464b50 100644 --- a/make/data/cldr/common/main/gl.xml +++ b/make/data/cldr/common/main/gl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gn.xml b/make/data/cldr/common/main/gn.xml index 9b385539ee7..a1a3df585db 100644 --- a/make/data/cldr/common/main/gn.xml +++ b/make/data/cldr/common/main/gn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gn_PY.xml b/make/data/cldr/common/main/gn_PY.xml index 03fbf31e5f8..87af65ad1c6 100644 --- a/make/data/cldr/common/main/gn_PY.xml +++ b/make/data/cldr/common/main/gn_PY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gsw.xml b/make/data/cldr/common/main/gsw.xml index ade9ff1fd05..0047e032028 100644 --- a/make/data/cldr/common/main/gsw.xml +++ b/make/data/cldr/common/main/gsw.xml @@ -1,8 +1,8 @@ - @@ -1701,15 +1701,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daressalam - - Uschgorod - Kiew - - Saporischja - Knox diff --git a/make/data/cldr/common/main/gsw_CH.xml b/make/data/cldr/common/main/gsw_CH.xml index 85465412257..8740af7b759 100644 --- a/make/data/cldr/common/main/gsw_CH.xml +++ b/make/data/cldr/common/main/gsw_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gsw_FR.xml b/make/data/cldr/common/main/gsw_FR.xml index a1c1009ee47..d90c3ea2e51 100644 --- a/make/data/cldr/common/main/gsw_FR.xml +++ b/make/data/cldr/common/main/gsw_FR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gsw_LI.xml b/make/data/cldr/common/main/gsw_LI.xml index b827f1bd238..e7eba946b71 100644 --- a/make/data/cldr/common/main/gsw_LI.xml +++ b/make/data/cldr/common/main/gsw_LI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gu.xml b/make/data/cldr/common/main/gu.xml index 0c4eaad1cce..4f33a197050 100644 --- a/make/data/cldr/common/main/gu.xml +++ b/make/data/cldr/common/main/gu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/guz.xml b/make/data/cldr/common/main/guz.xml index 81031de1e73..6e2b253a5d3 100644 --- a/make/data/cldr/common/main/guz.xml +++ b/make/data/cldr/common/main/guz.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/guz_KE.xml b/make/data/cldr/common/main/guz_KE.xml index f18f51b51ad..f7c8d95d03d 100644 --- a/make/data/cldr/common/main/guz_KE.xml +++ b/make/data/cldr/common/main/guz_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gv.xml b/make/data/cldr/common/main/gv.xml index 7644a2aec30..344a82417c2 100644 --- a/make/data/cldr/common/main/gv.xml +++ b/make/data/cldr/common/main/gv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/gv_IM.xml b/make/data/cldr/common/main/gv_IM.xml index f684c49d148..6a8d0ac45cc 100644 --- a/make/data/cldr/common/main/gv_IM.xml +++ b/make/data/cldr/common/main/gv_IM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ha.xml b/make/data/cldr/common/main/ha.xml index edb9c6d4fa1..554c18da427 100644 --- a/make/data/cldr/common/main/ha.xml +++ b/make/data/cldr/common/main/ha.xml @@ -1,8 +1,8 @@ - @@ -2097,11 +2097,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lokacin Rana na Vote Lord Howe - - - Lokacin Macquarie Island - - Lokacin Magadan @@ -2141,13 +2136,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lokacin Mawson - - - Lokacin Arewa Maso Yammacin Mekziko - Tsayayyen Lokacin Arewa Maso Yammacin Mekziko - Lokacin Rana na Arewa Maso Yammacin Mekziko - - Lokacin Mekziko Pacific diff --git a/make/data/cldr/common/main/ha_Arab.xml b/make/data/cldr/common/main/ha_Arab.xml index 99c65685221..06b6eafd72f 100644 --- a/make/data/cldr/common/main/ha_Arab.xml +++ b/make/data/cldr/common/main/ha_Arab.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ha_Arab_NG.xml b/make/data/cldr/common/main/ha_Arab_NG.xml index d46dbd178e4..de44776f657 100644 --- a/make/data/cldr/common/main/ha_Arab_NG.xml +++ b/make/data/cldr/common/main/ha_Arab_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ha_Arab_SD.xml b/make/data/cldr/common/main/ha_Arab_SD.xml index 6c1c8acb348..d36a89d5e5f 100644 --- a/make/data/cldr/common/main/ha_Arab_SD.xml +++ b/make/data/cldr/common/main/ha_Arab_SD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ha_GH.xml b/make/data/cldr/common/main/ha_GH.xml index 2d08c6b4045..f93141c71b4 100644 --- a/make/data/cldr/common/main/ha_GH.xml +++ b/make/data/cldr/common/main/ha_GH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ha_NE.xml b/make/data/cldr/common/main/ha_NE.xml index 53191fe4796..68391655af9 100644 --- a/make/data/cldr/common/main/ha_NE.xml +++ b/make/data/cldr/common/main/ha_NE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ha_NG.xml b/make/data/cldr/common/main/ha_NG.xml index eac780a4c92..1a42e43793a 100644 --- a/make/data/cldr/common/main/ha_NG.xml +++ b/make/data/cldr/common/main/ha_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/haw.xml b/make/data/cldr/common/main/haw.xml index 87a71e5c146..dadea206071 100644 --- a/make/data/cldr/common/main/haw.xml +++ b/make/data/cldr/common/main/haw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/haw_US.xml b/make/data/cldr/common/main/haw_US.xml index fc32a964cdd..5a37f908c1c 100644 --- a/make/data/cldr/common/main/haw_US.xml +++ b/make/data/cldr/common/main/haw_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/he.xml b/make/data/cldr/common/main/he.xml index fc7396f4f80..d64c80493ef 100644 --- a/make/data/cldr/common/main/he.xml +++ b/make/data/cldr/common/main/he.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hi.xml b/make/data/cldr/common/main/hi.xml index 533d1fd4fb3..33facd56c3b 100644 --- a/make/data/cldr/common/main/hi.xml +++ b/make/data/cldr/common/main/hi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hi_Latn.xml b/make/data/cldr/common/main/hi_Latn.xml index d2fd01e2e3e..935ec8e26b2 100644 --- a/make/data/cldr/common/main/hi_Latn.xml +++ b/make/data/cldr/common/main/hi_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hnj.xml b/make/data/cldr/common/main/hnj.xml index 671bf4da2a6..6492ca8dc35 100644 --- a/make/data/cldr/common/main/hnj.xml +++ b/make/data/cldr/common/main/hnj.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hnj_Hmnp.xml b/make/data/cldr/common/main/hnj_Hmnp.xml index 0572f3ad943..edf19bb8cdc 100644 --- a/make/data/cldr/common/main/hnj_Hmnp.xml +++ b/make/data/cldr/common/main/hnj_Hmnp.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hnj_Hmnp_US.xml b/make/data/cldr/common/main/hnj_Hmnp_US.xml index f49ef827699..34ff522c1fe 100644 --- a/make/data/cldr/common/main/hnj_Hmnp_US.xml +++ b/make/data/cldr/common/main/hnj_Hmnp_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hr.xml b/make/data/cldr/common/main/hr.xml index 3fe00831421..f028c3424bf 100644 --- a/make/data/cldr/common/main/hr.xml +++ b/make/data/cldr/common/main/hr.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hr_HR.xml b/make/data/cldr/common/main/hr_HR.xml index b0239a0cc51..34f898cb40d 100644 --- a/make/data/cldr/common/main/hr_HR.xml +++ b/make/data/cldr/common/main/hr_HR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hsb.xml b/make/data/cldr/common/main/hsb.xml index dbb0a470f2f..25fa9ffc62b 100644 --- a/make/data/cldr/common/main/hsb.xml +++ b/make/data/cldr/common/main/hsb.xml @@ -1,8 +1,8 @@ - @@ -2598,15 +2598,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daressalam - - Užgorod - Kiew - - Zaporižžja - Beulah, Sewjerna Dakota @@ -3146,11 +3140,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic lětni čas kupy Lord-Howe - - - čas kupy Macquarie - - Magadanski čas @@ -3190,13 +3179,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawsonski čas - - - mexiski sewjerozapadny čas - mexiski sewjerozapadny standardny čas - mexiski sewjerozapadny lětni čas - - mexiski pacifiski čas diff --git a/make/data/cldr/common/main/hsb_DE.xml b/make/data/cldr/common/main/hsb_DE.xml index e09bb1ca4d9..76e15d557b5 100644 --- a/make/data/cldr/common/main/hsb_DE.xml +++ b/make/data/cldr/common/main/hsb_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hu.xml b/make/data/cldr/common/main/hu.xml index 440cb73512e..878aeb9a439 100644 --- a/make/data/cldr/common/main/hu.xml +++ b/make/data/cldr/common/main/hu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/hy.xml b/make/data/cldr/common/main/hy.xml index b3da8cbdd09..91ecf144eaf 100644 --- a/make/data/cldr/common/main/hy.xml +++ b/make/data/cldr/common/main/hy.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ia.xml b/make/data/cldr/common/main/ia.xml index 8cb66c6c102..ce130ba71f2 100644 --- a/make/data/cldr/common/main/ia.xml +++ b/make/data/cldr/common/main/ia.xml @@ -1,8 +1,8 @@ - @@ -2607,11 +2607,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora estive de Lord Howe - - - hora del Insula Macquarie - - hora de Magadan @@ -2651,13 +2646,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Mawson - - - hora del nordwest de Mexico - hora normal del nordwest de Mexico - hora estive del nordwest de Mexico - - hora del Pacifico mexican diff --git a/make/data/cldr/common/main/ia_001.xml b/make/data/cldr/common/main/ia_001.xml index f38e98dad8d..54b31c5a82e 100644 --- a/make/data/cldr/common/main/ia_001.xml +++ b/make/data/cldr/common/main/ia_001.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/id.xml b/make/data/cldr/common/main/id.xml index 3221f9e10d0..db130766d0f 100644 --- a/make/data/cldr/common/main/id.xml +++ b/make/data/cldr/common/main/id.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ie.xml b/make/data/cldr/common/main/ie.xml index a2171c229a1..e40e8fad0c7 100644 --- a/make/data/cldr/common/main/ie.xml +++ b/make/data/cldr/common/main/ie.xml @@ -1,8 +1,8 @@ - @@ -1869,15 +1869,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Cambridge-Bay - - Rainy-River - Rankin-Inlet - - Thunder-Bay - Goose-Bay @@ -2245,11 +2239,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic témpor estival del Insul Lord-Howe - - - témpor del Insul Macquarie - - témpor del Marquesas @@ -2260,13 +2249,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic témpor del Insules Marshall - - - mexican nordwest témpor - mexican nordwest standard témpor - mexican nordwest estival témpor - - mexican pacific témpor diff --git a/make/data/cldr/common/main/ie_EE.xml b/make/data/cldr/common/main/ie_EE.xml index 8e986db8d87..5faf8528d1c 100644 --- a/make/data/cldr/common/main/ie_EE.xml +++ b/make/data/cldr/common/main/ie_EE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ig.xml b/make/data/cldr/common/main/ig.xml index 64a39d80003..4727e79a5fb 100644 --- a/make/data/cldr/common/main/ig.xml +++ b/make/data/cldr/common/main/ig.xml @@ -1,8 +1,8 @@ - @@ -1965,11 +1965,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Oge Ihe Lord Howe - - - Oge Macquarie Island - - Oge Magadan @@ -2009,13 +2004,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Oge Mawson - - - Oge Northwest Mexico - Oge Izugbe Northwest Mexico - Oge Ihe Northwest Mexico - - Oge Mexican Pacific diff --git a/make/data/cldr/common/main/ig_NG.xml b/make/data/cldr/common/main/ig_NG.xml index 981d0776e01..7704ec263eb 100644 --- a/make/data/cldr/common/main/ig_NG.xml +++ b/make/data/cldr/common/main/ig_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ii.xml b/make/data/cldr/common/main/ii.xml index 667876e03b0..36a24a5f767 100644 --- a/make/data/cldr/common/main/ii.xml +++ b/make/data/cldr/common/main/ii.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ii_CN.xml b/make/data/cldr/common/main/ii_CN.xml index d2e5e59adec..478dc23f82f 100644 --- a/make/data/cldr/common/main/ii_CN.xml +++ b/make/data/cldr/common/main/ii_CN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/io.xml b/make/data/cldr/common/main/io.xml index 7315536f016..f960e028b81 100644 --- a/make/data/cldr/common/main/io.xml +++ b/make/data/cldr/common/main/io.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/io_001.xml b/make/data/cldr/common/main/io_001.xml index 4057f84f647..b7b5f851ab2 100644 --- a/make/data/cldr/common/main/io_001.xml +++ b/make/data/cldr/common/main/io_001.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/is.xml b/make/data/cldr/common/main/is.xml index f491c68bf8f..ef7d71d4f7f 100644 --- a/make/data/cldr/common/main/is.xml +++ b/make/data/cldr/common/main/is.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/it.xml b/make/data/cldr/common/main/it.xml index 3056b4a77f0..0dce0245bf4 100644 --- a/make/data/cldr/common/main/it.xml +++ b/make/data/cldr/common/main/it.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/it_IT.xml b/make/data/cldr/common/main/it_IT.xml index 8afb7169c20..5f3342415d8 100644 --- a/make/data/cldr/common/main/it_IT.xml +++ b/make/data/cldr/common/main/it_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/it_SM.xml b/make/data/cldr/common/main/it_SM.xml index 447d74116b7..b30f7e0df51 100644 --- a/make/data/cldr/common/main/it_SM.xml +++ b/make/data/cldr/common/main/it_SM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/it_VA.xml b/make/data/cldr/common/main/it_VA.xml index 716bc0e0fc8..4ceb6fc0bff 100644 --- a/make/data/cldr/common/main/it_VA.xml +++ b/make/data/cldr/common/main/it_VA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/iu.xml b/make/data/cldr/common/main/iu.xml index 8878d2aef85..dbd87621f8c 100644 --- a/make/data/cldr/common/main/iu.xml +++ b/make/data/cldr/common/main/iu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/iu_CA.xml b/make/data/cldr/common/main/iu_CA.xml index e7fa1a5adb6..4e4a6931d38 100644 --- a/make/data/cldr/common/main/iu_CA.xml +++ b/make/data/cldr/common/main/iu_CA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/iu_Latn.xml b/make/data/cldr/common/main/iu_Latn.xml index c206d730238..51be22c08a1 100644 --- a/make/data/cldr/common/main/iu_Latn.xml +++ b/make/data/cldr/common/main/iu_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/iu_Latn_CA.xml b/make/data/cldr/common/main/iu_Latn_CA.xml index 5a51d0264eb..2ea5fc82a1c 100644 --- a/make/data/cldr/common/main/iu_Latn_CA.xml +++ b/make/data/cldr/common/main/iu_Latn_CA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ja.xml b/make/data/cldr/common/main/ja.xml index 711868e7356..7a43fd77aba 100644 --- a/make/data/cldr/common/main/ja.xml +++ b/make/data/cldr/common/main/ja.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jbo.xml b/make/data/cldr/common/main/jbo.xml index c3a346d762c..6f1a7601a5c 100644 --- a/make/data/cldr/common/main/jbo.xml +++ b/make/data/cldr/common/main/jbo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jbo_001.xml b/make/data/cldr/common/main/jbo_001.xml index 53bfbc897c3..ad6bd6ce3f9 100644 --- a/make/data/cldr/common/main/jbo_001.xml +++ b/make/data/cldr/common/main/jbo_001.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jgo.xml b/make/data/cldr/common/main/jgo.xml index f59811848c6..8fb4a321436 100644 --- a/make/data/cldr/common/main/jgo.xml +++ b/make/data/cldr/common/main/jgo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jgo_CM.xml b/make/data/cldr/common/main/jgo_CM.xml index c52e5776daa..28bcebccf52 100644 --- a/make/data/cldr/common/main/jgo_CM.xml +++ b/make/data/cldr/common/main/jgo_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jmc.xml b/make/data/cldr/common/main/jmc.xml index 3fa938326e5..d6f948f0e39 100644 --- a/make/data/cldr/common/main/jmc.xml +++ b/make/data/cldr/common/main/jmc.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jmc_TZ.xml b/make/data/cldr/common/main/jmc_TZ.xml index ca2a45bd09f..b0748810276 100644 --- a/make/data/cldr/common/main/jmc_TZ.xml +++ b/make/data/cldr/common/main/jmc_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/jv.xml b/make/data/cldr/common/main/jv.xml index b88d100392c..23fc8fdb8be 100644 --- a/make/data/cldr/common/main/jv.xml +++ b/make/data/cldr/common/main/jv.xml @@ -1,8 +1,8 @@ - @@ -1827,9 +1827,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kordoba - - Currie - Santa Barthelemy @@ -1851,12 +1848,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Teluk Cambridge - - Kali Rainy - - - Teluk Gludhug - Halifak @@ -2562,11 +2553,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Ketigo Lord Howe - - - Wektu Pulo Macquarie - - Wektu Magadan @@ -2606,13 +2592,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Mawson - - - Wektu Meksiko Lor-Kulon - Wektu Standar Meksiko Lor-Kulon - Wektu Ketigo Meksiko Lor-Kulon - - Wektu Pasifik Meksiko diff --git a/make/data/cldr/common/main/jv_ID.xml b/make/data/cldr/common/main/jv_ID.xml index 7888dba6d9d..95d195ca0fe 100644 --- a/make/data/cldr/common/main/jv_ID.xml +++ b/make/data/cldr/common/main/jv_ID.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ka.xml b/make/data/cldr/common/main/ka.xml index 0b03ecb2529..1d6f9f3d17d 100644 --- a/make/data/cldr/common/main/ka.xml +++ b/make/data/cldr/common/main/ka.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kab.xml b/make/data/cldr/common/main/kab.xml index afb43b18870..3ea9ec2647c 100644 --- a/make/data/cldr/common/main/kab.xml +++ b/make/data/cldr/common/main/kab.xml @@ -1,8 +1,8 @@ - @@ -2013,9 +2013,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Malburn - - Currie - Sidni @@ -3101,11 +3098,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Akud n Unebdu n Lord Howe - - - Akud n Markari - - Akud n Magadan @@ -3145,13 +3137,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Akud n Mawsun - - - Akud n ugafa amalu n Miksik - Akud amezday n ugafa amalu n Miksik - Akud n unebdu n ugafa amalu n Miksik - - Akud amelwi n Miksik diff --git a/make/data/cldr/common/main/kab_DZ.xml b/make/data/cldr/common/main/kab_DZ.xml index 5e66bcc2d06..9c5e9f6f9c1 100644 --- a/make/data/cldr/common/main/kab_DZ.xml +++ b/make/data/cldr/common/main/kab_DZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kaj.xml b/make/data/cldr/common/main/kaj.xml index 188cc0683c2..dd2f2d48a3b 100644 --- a/make/data/cldr/common/main/kaj.xml +++ b/make/data/cldr/common/main/kaj.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kaj_NG.xml b/make/data/cldr/common/main/kaj_NG.xml index 7c0b4540f6e..446af581cde 100644 --- a/make/data/cldr/common/main/kaj_NG.xml +++ b/make/data/cldr/common/main/kaj_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kam.xml b/make/data/cldr/common/main/kam.xml index 9c3a2a56b00..655615f74d0 100644 --- a/make/data/cldr/common/main/kam.xml +++ b/make/data/cldr/common/main/kam.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kam_KE.xml b/make/data/cldr/common/main/kam_KE.xml index aefe5a4576b..f77693e6a7d 100644 --- a/make/data/cldr/common/main/kam_KE.xml +++ b/make/data/cldr/common/main/kam_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kcg.xml b/make/data/cldr/common/main/kcg.xml index 77dd7ef0930..c5ac5715b48 100644 --- a/make/data/cldr/common/main/kcg.xml +++ b/make/data/cldr/common/main/kcg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kcg_NG.xml b/make/data/cldr/common/main/kcg_NG.xml index a9fe0f9c2b8..354b2ab3b37 100644 --- a/make/data/cldr/common/main/kcg_NG.xml +++ b/make/data/cldr/common/main/kcg_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kde.xml b/make/data/cldr/common/main/kde.xml index af759fb88c7..fb03f22a83d 100644 --- a/make/data/cldr/common/main/kde.xml +++ b/make/data/cldr/common/main/kde.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kde_TZ.xml b/make/data/cldr/common/main/kde_TZ.xml index 5c9ef9697a0..ae70dc44043 100644 --- a/make/data/cldr/common/main/kde_TZ.xml +++ b/make/data/cldr/common/main/kde_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kea.xml b/make/data/cldr/common/main/kea.xml index 048b61a318f..04bcbe2209f 100644 --- a/make/data/cldr/common/main/kea.xml +++ b/make/data/cldr/common/main/kea.xml @@ -1,8 +1,8 @@ - @@ -1872,13 +1872,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora di Veron di Avaí i Aleutas - - - Ora di Noroesti di Méxiku - Ora Padron di Noroesti di Méxiku - Ora di Veron di Noroesti di Méxiku - - Ora di Pasífiku Mexikanu diff --git a/make/data/cldr/common/main/kea_CV.xml b/make/data/cldr/common/main/kea_CV.xml index d089484b892..59bcc9a2ad2 100644 --- a/make/data/cldr/common/main/kea_CV.xml +++ b/make/data/cldr/common/main/kea_CV.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ken.xml b/make/data/cldr/common/main/ken.xml index 422b5d48a52..580019ec00e 100644 --- a/make/data/cldr/common/main/ken.xml +++ b/make/data/cldr/common/main/ken.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ken_CM.xml b/make/data/cldr/common/main/ken_CM.xml index e44002dbe2e..1e19cade921 100644 --- a/make/data/cldr/common/main/ken_CM.xml +++ b/make/data/cldr/common/main/ken_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kgp.xml b/make/data/cldr/common/main/kgp.xml index 8a53e582637..324afedcf68 100644 --- a/make/data/cldr/common/main/kgp.xml +++ b/make/data/cldr/common/main/kgp.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/khq.xml b/make/data/cldr/common/main/khq.xml index d75167023cf..b06fba711b4 100644 --- a/make/data/cldr/common/main/khq.xml +++ b/make/data/cldr/common/main/khq.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/khq_ML.xml b/make/data/cldr/common/main/khq_ML.xml index 0eff5232416..5087d6d1fdd 100644 --- a/make/data/cldr/common/main/khq_ML.xml +++ b/make/data/cldr/common/main/khq_ML.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ki.xml b/make/data/cldr/common/main/ki.xml index 6585f0fe811..f129f2e46d9 100644 --- a/make/data/cldr/common/main/ki.xml +++ b/make/data/cldr/common/main/ki.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ki_KE.xml b/make/data/cldr/common/main/ki_KE.xml index 7cf6f1d1695..c764864fc45 100644 --- a/make/data/cldr/common/main/ki_KE.xml +++ b/make/data/cldr/common/main/ki_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kk.xml b/make/data/cldr/common/main/kk.xml index 5150fb0accc..ae489aaef5a 100644 --- a/make/data/cldr/common/main/kk.xml +++ b/make/data/cldr/common/main/kk.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kkj.xml b/make/data/cldr/common/main/kkj.xml index 793b56e869d..a99945b5c0b 100644 --- a/make/data/cldr/common/main/kkj.xml +++ b/make/data/cldr/common/main/kkj.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kkj_CM.xml b/make/data/cldr/common/main/kkj_CM.xml index 7b5c801a4e6..19bd6fd1d94 100644 --- a/make/data/cldr/common/main/kkj_CM.xml +++ b/make/data/cldr/common/main/kkj_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kl.xml b/make/data/cldr/common/main/kl.xml index c8778848f02..187beece7db 100644 --- a/make/data/cldr/common/main/kl.xml +++ b/make/data/cldr/common/main/kl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kl_GL.xml b/make/data/cldr/common/main/kl_GL.xml index f4e119ea34c..26a85b6f95c 100644 --- a/make/data/cldr/common/main/kl_GL.xml +++ b/make/data/cldr/common/main/kl_GL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kln.xml b/make/data/cldr/common/main/kln.xml index 13ddba1c162..d882d25f75e 100644 --- a/make/data/cldr/common/main/kln.xml +++ b/make/data/cldr/common/main/kln.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kln_KE.xml b/make/data/cldr/common/main/kln_KE.xml index 22f9e2b5ef8..1b9cc26e504 100644 --- a/make/data/cldr/common/main/kln_KE.xml +++ b/make/data/cldr/common/main/kln_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/km.xml b/make/data/cldr/common/main/km.xml index 7e3266de618..5d34b428948 100644 --- a/make/data/cldr/common/main/km.xml +++ b/make/data/cldr/common/main/km.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kn.xml b/make/data/cldr/common/main/kn.xml index 7271c4da0b7..70d0994060e 100644 --- a/make/data/cldr/common/main/kn.xml +++ b/make/data/cldr/common/main/kn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ko.xml b/make/data/cldr/common/main/ko.xml index b9045c2d750..a50bf67f3f8 100644 --- a/make/data/cldr/common/main/ko.xml +++ b/make/data/cldr/common/main/ko.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ko_KP.xml b/make/data/cldr/common/main/ko_KP.xml index 3aa3e56b043..888b2928e53 100644 --- a/make/data/cldr/common/main/ko_KP.xml +++ b/make/data/cldr/common/main/ko_KP.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ko_KR.xml b/make/data/cldr/common/main/ko_KR.xml index 2b53ca45df1..087699e3d87 100644 --- a/make/data/cldr/common/main/ko_KR.xml +++ b/make/data/cldr/common/main/ko_KR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kok.xml b/make/data/cldr/common/main/kok.xml index 09a4979d066..f7dc54d0c5a 100644 --- a/make/data/cldr/common/main/kok.xml +++ b/make/data/cldr/common/main/kok.xml @@ -1,8 +1,8 @@ - @@ -1837,9 +1837,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic मेलबर्न - - क्युरी - होबार्ट @@ -1993,9 +1990,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic क्रेस्टोन - - यलोक्नायफ - ऍडमोंटन @@ -2014,30 +2008,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic रिसोल्युट - - पावसाळी न्हंय - रँकिन इनलॅट अतिकोकॉन - - थंडर बे - - - निपिगोन - टॉरंटो इकालुयीट - - पंगनिर्टुंग - मोंक्टॉन @@ -2851,18 +2833,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic दार इ सलाम - - उझगोरोड - कीव सिमफरोपोल - - झापोरोझे - काम्पाला @@ -2878,9 +2854,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic नोमे - - जॉन्स्टन - ऐंकरज @@ -3519,11 +3492,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic लॉर्ड होवे डेलायट वेळ - - - मॅक्वेरी आयलँड वेळ - - मगादान वेळ @@ -3563,13 +3531,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic मॉसन वेळ - - - वायव्य मेक्सिको वेळ - वायव्य मेक्सिको प्रमाणीत वेळ - वायव्य मेक्सिको डेलायट वेळ - - मेक्सिकन प्रशांत वेळ diff --git a/make/data/cldr/common/main/kok_IN.xml b/make/data/cldr/common/main/kok_IN.xml index 82baeca7fff..3703cee56b6 100644 --- a/make/data/cldr/common/main/kok_IN.xml +++ b/make/data/cldr/common/main/kok_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kpe.xml b/make/data/cldr/common/main/kpe.xml index 18f4623a160..8bceeab6893 100644 --- a/make/data/cldr/common/main/kpe.xml +++ b/make/data/cldr/common/main/kpe.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kpe_GN.xml b/make/data/cldr/common/main/kpe_GN.xml index 6bf6f082de0..520baa5999f 100644 --- a/make/data/cldr/common/main/kpe_GN.xml +++ b/make/data/cldr/common/main/kpe_GN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kpe_LR.xml b/make/data/cldr/common/main/kpe_LR.xml index c014fb185f4..cf2c35b0450 100644 --- a/make/data/cldr/common/main/kpe_LR.xml +++ b/make/data/cldr/common/main/kpe_LR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ks.xml b/make/data/cldr/common/main/ks.xml index 479d8703aa4..626e06c784d 100644 --- a/make/data/cldr/common/main/ks.xml +++ b/make/data/cldr/common/main/ks.xml @@ -1,8 +1,8 @@ - @@ -37,7 +37,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ایرو کونِیَن اَراپاہو اَراوَک - اسٲمۍ + اسٲمؠ ایسٹوٗریَن اَوارِک اَوَدی @@ -57,7 +57,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic بِنی سِکسِکا بَمبارا - بَنگٲلۍ + بَنگٲلؠ تِبتی بریٹَن برج @@ -113,14 +113,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ایکاجُک یوٗنٲنی ایلامایِٹ - اَنگیٖزۍ - آسٹریلیَن اَنگریٖزۍ - کینَڈِیٲیی اَنگریٖزۍ - بَرطانوی اَنگریٖزۍ - UK اَنٛگریٖزۍ - امریٖکی اَنٛگریٖزۍ - US اَنٛگریٖزۍ - وَسطی اَنگریٖزۍ + اَنگیٖزؠ + آسٹریلیَن اَنگریٖزؠ + کینَڈِیٲیی اَنگریٖزؠ + بَرطانوی اَنگریٖزؠ + UK اَنٛگریٖزؠ + امریٖکی اَنٛگریٖزؠ + US اَنٛگریٖزؠ + وَسطی اَنگریٖزؠ ایسپَرینٹو ہسپانوی لاطیٖنی امریٖکی ہسپانوی @@ -170,7 +170,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ہاوسا ہَیدا ہوایِیَن - عبرٲنۍ + عبرٲنؠ ہِندی ہِلیٖگینَن ہِتایِت @@ -196,7 +196,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic آیِسلینڈِک اِطالوی اِنُکتِتوٗ - جاپٲنۍ + جاپٲنؠ لوجبان جوڈیو فارسی جوڈیو عربی @@ -278,7 +278,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic مَنیپوٗری موہاک موسی - مَرٲٹھۍ + مَرٲٹھؠ مَلَے مَلتیٖس واریاہ زبان @@ -292,7 +292,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ناروییَن بوکمال شُمال ڈَبیل بۆنِم جٔرمَن - نیپٲلۍ + نیپٲلؠ نیواری ڈونگا نِیاس @@ -320,7 +320,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic اۆسیٹِک اۆسیج اوٹومَن تُرکِش - پَنجٲبۍ + پَنجٲبؠ پَنگاسِنَن پَہلَوی پَمپَنگا @@ -337,7 +337,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic برازیٖلی پُرتَگیٖز یوٗرپی پُرتَگیٖز کُویشُوا - راجِستھٲنۍ + راجِستھٲنؠ رَپانوی رَروٹونگَن رومانش @@ -423,7 +423,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic اُگارتِک یوٗکرینیٲیی یُمبُندوٗ - اَنزٲنۍ یا نَہ لَگہٕہار زبان + اَنزٲنؠ یا نَہ لَگہٕہار زبان اُردوٗ اُزبیک واے @@ -463,7 +463,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -491,13 +491,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + - + - + @@ -728,7 +728,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic اسرا ییل آیِل آف مین ہِندوستان - برطانوی بحرِ ہِندۍ علاقہٕ + برطانوی بحرِ ہِندؠ علاقہٕ ایٖراق ایٖران اَیِسلینڑ @@ -804,7 +804,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic پاکِستان پولینڈ سینٹ پیٖری تہٕ موکیلِیَن - پِٹکیرٕنۍ جٔزیٖرٕ + پِٹکیرٕنؠ جٔزیٖرٕ پٔرٹو رِکو فلسطینی علاقٕہ فلسطین @@ -890,22 +890,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic بعد وَقت وَسطی فرانس پؠٹھ ۱۶٠۶ تام مَشرِقی اَمریٖکا جٔمع کٔرِتھ تُرکی لاطیٖنی اَچھر - سین جارجِیو/بِلا بوٗلۍ + سین جارجِیو/بِلا بوٗلؠ آوازیات یوٗ پی اے آوازِیات - روٗسی زَبانہِ ہِنز لِپوواز بوٗلۍ + روٗسی زَبانہِ ہِنز لِپوواز بوٗلؠ اَکٔے لہجہٕ واجؠن زَبان - نؠٹِسون بوٗلۍ - نیجِوا بوٗلۍ - اُشیکو/اوسوجین بوٗلۍ + نؠٹِسون بوٗلؠ + نیجِوا بوٗلؠ + اُشیکو/اوسوجین بوٗلؠ واریاہ لہجہٕ واجؠن زَبان کَمپیوٗٹَر دُبارٕ دۄہراونہٕ آمُت عِلمہِ ہِجا روٗسی سوہو - سُکاٹِش مَیعٲری اَنگریٖزۍ + سُکاٹِش مَیعٲری اَنگریٖزؠ سِکوس - ثٹولوِزا/سولبِکا بوٗلۍ + ثٹولوِزا/سولبِکا بوٗلؠ تاراسکیٖوِکا علمہ ہِجاِ @@ -921,7 +921,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic اِسلٲمی کیلنڑَر اِسلٲمی اِجتمٲیی کیلنڑَر ISO-8601 کیلنڈر - جاپٲنۍ کیلنڑَر + جاپٲنؠ کیلنڑَر جموٗریٲتی چیٖنی کیلَنڑَر رؠوٲتی چیٖنی تِرتیٖب فون بُک تَرتیٖب @@ -951,7 +951,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - [ء آ أ ٲ ؤ ا ب پ ت ث ٹ ج چ ح خ د ذ ڈ ر ز ڑ ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں ھ ہ و ۄ ۆ ی ۍ ؠ ے] + [ء آ أ ٲ ؤ ا ب پ ت ث ٹ ج چ ح خ د ذ ڈ ر ز ڑ ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں ھ ہ و ۄ ۆ ی ؠ ے] [\u200E\u200F َ ُ ِ ٔ ٕ ٟ ٖ ٗ ئ] [\u200E \- ‑ , ٫ ٬ . % ‰ + 0۰ 1۱ 2۲ 3۳ 4۴ 5۵ 6۶ 7۷ 8۸ 9۹] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -989,7 +989,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - {0} پٮ۪ٹھۍ {1} + {0} پٮ۪ٹھؠ {1} @@ -997,7 +997,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - {0} پٮ۪ٹھۍ {1} + {0} پٮ۪ٹھؠ {1} @@ -1338,7 +1338,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - {0} پٮ۪ٹھۍ {1} + {0} پٮ۪ٹھؠ {1} @@ -1346,7 +1346,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - {0} پٮ۪ٹھۍ {1} + {0} پٮ۪ٹھؠ {1} @@ -1523,9 +1523,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic رؠتھ - پٔتِم ریتھۍ - یٕہ ریتھۍ - نو ریتھۍ + پٔتِم ریتھؠ + یٕہ ریتھؠ + نو ریتھؠ ہفتہٕ @@ -1683,9 +1683,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic مؠلبعارن - - کیوٗری - حۄبٲٹ @@ -1836,9 +1833,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic کریسٹن - - یؠلو نایِف - اؠڈمَنٹَن @@ -1857,30 +1851,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic رِسولیوٗٹ - - رینی رِوَر - رینکِن اِنلؠٹ اٹی کوکنٍ - - تھَنڈر خلیٖج - - - نِپِگَن - ٹورونٹو اِقالیوٗیِت - - پَنگنِرٹَنگ - مونکٹٕن @@ -2685,18 +2667,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic دارالسلام - - اُزگورود - کیٖو سِمفیروپول - - زَپوروزَے - کَمپالا @@ -2715,9 +2691,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ہونولو لو - - جانسٹَن - اَنکوراج @@ -3289,7 +3262,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ہِندوستٲنۍ اوشَن ٹائم + ہِندوستٲنؠ اوشَن ٹائم @@ -3314,8 +3287,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic - اِیٖرٲنۍ ٹایِم - اِیٖرٲنۍ سٹینڑاڑ ٹایِم + اِیٖرٲنؠ ٹایِم + اِیٖرٲنؠ سٹینڑاڑ ٹایِم اِیٖرٲنی سَمَر ٹایِم @@ -3335,9 +3308,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - جاپٲنۍ ٹایِم - جاپٲنۍ سٹینڈرڈ ٹایِم - جاپٲنۍ ڑےلایِٔٹ ٹایِم + جاپٲنؠ ٹایِم + جاپٲنؠ سٹینڈرڈ ٹایِم + جاپٲنؠ ڑےلایِٔٹ ٹایِم @@ -3444,13 +3417,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ماسَن ٹایِم - - - شُمال مغربی میکسیکو ٹائم - شُمال مغربی میکسیکو سٹینڈرڈ ٹائم - شُمال مغربی میکسیکو ڈے لائٹ ٹائم - - میکسیکن پیسیفک ٹائم @@ -3484,7 +3450,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - نؠپٲلۍ ٹایِم + نؠپٲلؠ ٹایِم @@ -4114,10 +4080,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic اِزرٲیِلی پاونڑ - اِزرٲیِلی نٔوۍ شؠقٕل + اِزرٲیِلی نٔوؠ شؠقٕل - ہِندُستٲنۍ رۄپَے + ہِندُستٲنؠ رۄپَے ایٖراقُک دیٖنار @@ -4324,7 +4290,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic پھِلِپایِٔن پؠسو - پاکِستٲنۍ رۄپَے + پاکِستٲنؠ رۄپَے پولِش زلوٹی diff --git a/make/data/cldr/common/main/ks_Arab.xml b/make/data/cldr/common/main/ks_Arab.xml index 4b51c1b6075..2a340e770c1 100644 --- a/make/data/cldr/common/main/ks_Arab.xml +++ b/make/data/cldr/common/main/ks_Arab.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ks_Arab_IN.xml b/make/data/cldr/common/main/ks_Arab_IN.xml index 383884fe755..6edd11a8d28 100644 --- a/make/data/cldr/common/main/ks_Arab_IN.xml +++ b/make/data/cldr/common/main/ks_Arab_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ks_Deva.xml b/make/data/cldr/common/main/ks_Deva.xml index a505f877ff1..9c7a3804207 100644 --- a/make/data/cldr/common/main/ks_Deva.xml +++ b/make/data/cldr/common/main/ks_Deva.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ks_Deva_IN.xml b/make/data/cldr/common/main/ks_Deva_IN.xml index 6c84915c0e7..4227f7302fc 100644 --- a/make/data/cldr/common/main/ks_Deva_IN.xml +++ b/make/data/cldr/common/main/ks_Deva_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ksb.xml b/make/data/cldr/common/main/ksb.xml index db35fd872d9..f2df1369f13 100644 --- a/make/data/cldr/common/main/ksb.xml +++ b/make/data/cldr/common/main/ksb.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ksb_TZ.xml b/make/data/cldr/common/main/ksb_TZ.xml index 9f90a8eba63..da76ac63cf1 100644 --- a/make/data/cldr/common/main/ksb_TZ.xml +++ b/make/data/cldr/common/main/ksb_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ksf.xml b/make/data/cldr/common/main/ksf.xml index e864e5aa9c2..4b0c73375eb 100644 --- a/make/data/cldr/common/main/ksf.xml +++ b/make/data/cldr/common/main/ksf.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ksf_CM.xml b/make/data/cldr/common/main/ksf_CM.xml index 095c2470c3b..08ed3a551ae 100644 --- a/make/data/cldr/common/main/ksf_CM.xml +++ b/make/data/cldr/common/main/ksf_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ksh.xml b/make/data/cldr/common/main/ksh.xml index a1928457fce..91c2227d0b4 100644 --- a/make/data/cldr/common/main/ksh.xml +++ b/make/data/cldr/common/main/ksh.xml @@ -1,8 +1,8 @@ - @@ -1558,12 +1558,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Istambul - - Uschjorod - - - Saporischschja - Honululu diff --git a/make/data/cldr/common/main/ksh_DE.xml b/make/data/cldr/common/main/ksh_DE.xml index fbbfae22929..b18a18bfc47 100644 --- a/make/data/cldr/common/main/ksh_DE.xml +++ b/make/data/cldr/common/main/ksh_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ku.xml b/make/data/cldr/common/main/ku.xml index eae730476ba..25b83ac71d2 100644 --- a/make/data/cldr/common/main/ku.xml +++ b/make/data/cldr/common/main/ku.xml @@ -1,8 +1,8 @@ - @@ -1033,9 +1033,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic G d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an' - G d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E - G d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E - G d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E + G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E G MMMM – MMMM y @@ -1393,9 +1393,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an' - d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E - d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E - d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E + d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E MMMM – MMMM y @@ -1991,15 +1991,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daruselam - - Ujgorod - Kîev - - Zaporojye - Beûlah, Dakotaya Bakur @@ -2577,11 +2571,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Havînê ya Lord Howeyê - - - Saeta Girava Macquarieyê - - Saeta Magadanê @@ -2621,29 +2610,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Mawsonê - - - Saeta Meksîkoya Bakurrojava - Saeta Standard a Meksîkoya Bakurrojava - Saeta Havînê ya Meksîkoya Bakurrojava - - - SMBR - SSMBR - SHMBR - - Saeta Pasîfîka Meksîkayê Saeta Standard a Pasîfîka Meksîkayê Saeta Havînê ya Pasîfîka Meksîkayê - - SPM - SSPM - SHPM - @@ -2782,11 +2754,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Saint Pierre û Miquelonê Saeta Havînê ya Saint Pierre û Miquelonê - - SSPM - SSSPM - SHSPM - diff --git a/make/data/cldr/common/main/ku_TR.xml b/make/data/cldr/common/main/ku_TR.xml index 73d2460200c..852a953e7a4 100644 --- a/make/data/cldr/common/main/ku_TR.xml +++ b/make/data/cldr/common/main/ku_TR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kw.xml b/make/data/cldr/common/main/kw.xml index 86d19c29d24..08ea8631d58 100644 --- a/make/data/cldr/common/main/kw.xml +++ b/make/data/cldr/common/main/kw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kw_GB.xml b/make/data/cldr/common/main/kw_GB.xml index 03eb5bb3666..271dc8fbdfd 100644 --- a/make/data/cldr/common/main/kw_GB.xml +++ b/make/data/cldr/common/main/kw_GB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv.xml b/make/data/cldr/common/main/kxv.xml index 8682339f2dd..94057d326aa 100644 --- a/make/data/cldr/common/main/kxv.xml +++ b/make/data/cldr/common/main/kxv.xml @@ -1,8 +1,8 @@ - @@ -1135,9 +1135,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic kresṭon - - yellonaip - eḍmonṭon @@ -1156,30 +1153,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic rejalyuṭ - - reni rivr - rankin inledṭ eṭikoken - - tanḍr be - - - nipigen - ṭoronṭo ikaluiṭ - - pangnirtung - monkṭon @@ -1987,18 +1972,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic dar es salaam - - ujhorod - kiyv simperopol - - japorjye - kmpala @@ -2014,9 +1993,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic nom - - johnsṭon - ankoraj @@ -2652,11 +2628,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic laṛ hawe ḍelāiṭ belā - - - makwārī dīp belā - - māgādan belā @@ -2696,13 +2667,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic māwosn belā - - - utar weḍā kūṇpū meksik belā - utar weḍā kūṇpū meksik mānānka belā - utar weḍā kūṇpū meksik ḍelāiṭ belā - - meksikān pesipic belā diff --git a/make/data/cldr/common/main/kxv_Deva.xml b/make/data/cldr/common/main/kxv_Deva.xml index ce4fd9a0462..70a746e6a45 100644 --- a/make/data/cldr/common/main/kxv_Deva.xml +++ b/make/data/cldr/common/main/kxv_Deva.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Deva_IN.xml b/make/data/cldr/common/main/kxv_Deva_IN.xml index c48747ae4f3..06f9b2a11ec 100644 --- a/make/data/cldr/common/main/kxv_Deva_IN.xml +++ b/make/data/cldr/common/main/kxv_Deva_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Latn.xml b/make/data/cldr/common/main/kxv_Latn.xml index 80edfd74b7b..d96d9162905 100644 --- a/make/data/cldr/common/main/kxv_Latn.xml +++ b/make/data/cldr/common/main/kxv_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Latn_IN.xml b/make/data/cldr/common/main/kxv_Latn_IN.xml index d76e6982ae7..fb1044bcca8 100644 --- a/make/data/cldr/common/main/kxv_Latn_IN.xml +++ b/make/data/cldr/common/main/kxv_Latn_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Orya.xml b/make/data/cldr/common/main/kxv_Orya.xml index 2e80de7ee33..948e43892dd 100644 --- a/make/data/cldr/common/main/kxv_Orya.xml +++ b/make/data/cldr/common/main/kxv_Orya.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Orya_IN.xml b/make/data/cldr/common/main/kxv_Orya_IN.xml index 590073986f7..cedd119b862 100644 --- a/make/data/cldr/common/main/kxv_Orya_IN.xml +++ b/make/data/cldr/common/main/kxv_Orya_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Telu.xml b/make/data/cldr/common/main/kxv_Telu.xml index c7b3dd3fabe..349281b4273 100644 --- a/make/data/cldr/common/main/kxv_Telu.xml +++ b/make/data/cldr/common/main/kxv_Telu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/kxv_Telu_IN.xml b/make/data/cldr/common/main/kxv_Telu_IN.xml index 31c2167ca3f..efd968cf3d1 100644 --- a/make/data/cldr/common/main/kxv_Telu_IN.xml +++ b/make/data/cldr/common/main/kxv_Telu_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ky.xml b/make/data/cldr/common/main/ky.xml index 8c5abd4c2c2..60781875fb6 100644 --- a/make/data/cldr/common/main/ky.xml +++ b/make/data/cldr/common/main/ky.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/la.xml b/make/data/cldr/common/main/la.xml index 186fdabaf64..ac6303dcfee 100644 --- a/make/data/cldr/common/main/la.xml +++ b/make/data/cldr/common/main/la.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/la_VA.xml b/make/data/cldr/common/main/la_VA.xml index c14b6ed224e..882936a2d11 100644 --- a/make/data/cldr/common/main/la_VA.xml +++ b/make/data/cldr/common/main/la_VA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lag.xml b/make/data/cldr/common/main/lag.xml index 2da4f1f861a..c24bb2857fe 100644 --- a/make/data/cldr/common/main/lag.xml +++ b/make/data/cldr/common/main/lag.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lag_TZ.xml b/make/data/cldr/common/main/lag_TZ.xml index 0f06bad908e..bbada3821da 100644 --- a/make/data/cldr/common/main/lag_TZ.xml +++ b/make/data/cldr/common/main/lag_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lb.xml b/make/data/cldr/common/main/lb.xml index a681ff1b741..3088a99f343 100644 --- a/make/data/cldr/common/main/lb.xml +++ b/make/data/cldr/common/main/lb.xml @@ -1,8 +1,8 @@ - @@ -1128,7 +1128,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Vereinfacht Chinesesch - GB2312 Telefonsbuch-Zortéierung Pinyin-Zortéierregelen - Reforméiert Zortéierreiefolleg Allgemeng Sich Sich no Ufanksbuschtawen aus dem koreaneschen Alphabet Standard Zortéierreiefolleg @@ -2342,15 +2341,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Taipeh - - Uschgorod - Kiew - - Saporischschja - Taschkent @@ -2887,11 +2880,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord-Howe-Summerzäit - - - Macquarieinsel-Zäit - - Magadan-Zäit @@ -2931,13 +2919,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson-Zäit - - - Nordwest-Mexiko-Zäit - Nordwest-Mexiko-Normalzäit - Nordwest-Mexiko-Summerzäit - - Mexikanesch Pazifikzäit diff --git a/make/data/cldr/common/main/lb_LU.xml b/make/data/cldr/common/main/lb_LU.xml index ea9fafdce7e..80db736f391 100644 --- a/make/data/cldr/common/main/lb_LU.xml +++ b/make/data/cldr/common/main/lb_LU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lg.xml b/make/data/cldr/common/main/lg.xml index e59e727aaf6..968e74f542d 100644 --- a/make/data/cldr/common/main/lg.xml +++ b/make/data/cldr/common/main/lg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lg_UG.xml b/make/data/cldr/common/main/lg_UG.xml index 9f794c81e5d..cb4923685dd 100644 --- a/make/data/cldr/common/main/lg_UG.xml +++ b/make/data/cldr/common/main/lg_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lij.xml b/make/data/cldr/common/main/lij.xml index d69c2e99c27..5ab1baa0174 100644 --- a/make/data/cldr/common/main/lij.xml +++ b/make/data/cldr/common/main/lij.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lkt_US.xml b/make/data/cldr/common/main/lkt_US.xml index 415769eea87..4351b161d3f 100644 --- a/make/data/cldr/common/main/lkt_US.xml +++ b/make/data/cldr/common/main/lkt_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lmo.xml b/make/data/cldr/common/main/lmo.xml index 3ca0e5c6e1d..b50fb89c66b 100644 --- a/make/data/cldr/common/main/lmo.xml +++ b/make/data/cldr/common/main/lmo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lmo_IT.xml b/make/data/cldr/common/main/lmo_IT.xml index ecc417479a4..6f3d11658bc 100644 --- a/make/data/cldr/common/main/lmo_IT.xml +++ b/make/data/cldr/common/main/lmo_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ln.xml b/make/data/cldr/common/main/ln.xml index 35d08f6c23b..6f6222fad2a 100644 --- a/make/data/cldr/common/main/ln.xml +++ b/make/data/cldr/common/main/ln.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ln_AO.xml b/make/data/cldr/common/main/ln_AO.xml index 6b2faf65b5c..09b1c3d2ea4 100644 --- a/make/data/cldr/common/main/ln_AO.xml +++ b/make/data/cldr/common/main/ln_AO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ln_CD.xml b/make/data/cldr/common/main/ln_CD.xml index 38c201d1ef3..7d2f2b7ed93 100644 --- a/make/data/cldr/common/main/ln_CD.xml +++ b/make/data/cldr/common/main/ln_CD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ln_CF.xml b/make/data/cldr/common/main/ln_CF.xml index ebe27cdaf37..694908121f5 100644 --- a/make/data/cldr/common/main/ln_CF.xml +++ b/make/data/cldr/common/main/ln_CF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ln_CG.xml b/make/data/cldr/common/main/ln_CG.xml index de4c31b22e9..51c8a9a07f8 100644 --- a/make/data/cldr/common/main/ln_CG.xml +++ b/make/data/cldr/common/main/ln_CG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lo.xml b/make/data/cldr/common/main/lo.xml index a7dd2f4db09..4bad8dcdf54 100644 --- a/make/data/cldr/common/main/lo.xml +++ b/make/data/cldr/common/main/lo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lrc.xml b/make/data/cldr/common/main/lrc.xml index c4799a2e68f..fc5ef7c2fe8 100644 --- a/make/data/cldr/common/main/lrc.xml +++ b/make/data/cldr/common/main/lrc.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lrc_IQ.xml b/make/data/cldr/common/main/lrc_IQ.xml index 522e4775657..28c931d4b5b 100644 --- a/make/data/cldr/common/main/lrc_IQ.xml +++ b/make/data/cldr/common/main/lrc_IQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lrc_IR.xml b/make/data/cldr/common/main/lrc_IR.xml index b081c2bba42..ba23a13e760 100644 --- a/make/data/cldr/common/main/lrc_IR.xml +++ b/make/data/cldr/common/main/lrc_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lt.xml b/make/data/cldr/common/main/lt.xml index 46cc9da0f69..3e2e2951e0a 100644 --- a/make/data/cldr/common/main/lt.xml +++ b/make/data/cldr/common/main/lt.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lu.xml b/make/data/cldr/common/main/lu.xml index dc6a9e6a394..94e964dd36f 100644 --- a/make/data/cldr/common/main/lu.xml +++ b/make/data/cldr/common/main/lu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lu_CD.xml b/make/data/cldr/common/main/lu_CD.xml index 7ba972ca5a5..826ad6749cd 100644 --- a/make/data/cldr/common/main/lu_CD.xml +++ b/make/data/cldr/common/main/lu_CD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/luo.xml b/make/data/cldr/common/main/luo.xml index 8b6f5d669c5..b60480e457a 100644 --- a/make/data/cldr/common/main/luo.xml +++ b/make/data/cldr/common/main/luo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/luo_KE.xml b/make/data/cldr/common/main/luo_KE.xml index 32ea5aee9da..053db7388d7 100644 --- a/make/data/cldr/common/main/luo_KE.xml +++ b/make/data/cldr/common/main/luo_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/luy.xml b/make/data/cldr/common/main/luy.xml index df6bd7d76ec..a3ec56ed28f 100644 --- a/make/data/cldr/common/main/luy.xml +++ b/make/data/cldr/common/main/luy.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/luy_KE.xml b/make/data/cldr/common/main/luy_KE.xml index 3721de263f0..e5b25757a59 100644 --- a/make/data/cldr/common/main/luy_KE.xml +++ b/make/data/cldr/common/main/luy_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/lv.xml b/make/data/cldr/common/main/lv.xml index 1c175ffc3a9..c8009e5b1dd 100644 --- a/make/data/cldr/common/main/lv.xml +++ b/make/data/cldr/common/main/lv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mai.xml b/make/data/cldr/common/main/mai.xml index 88234fe368c..2920468139f 100644 --- a/make/data/cldr/common/main/mai.xml +++ b/make/data/cldr/common/main/mai.xml @@ -1,8 +1,8 @@ - @@ -1733,9 +1733,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic क्रेस्टन - - येलोनाइफ - एडमोंटोन @@ -1754,30 +1751,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic रेसालूत - - रेनी रिवर - रेंकिन इनलेट अटिकोकन - - थंडर बे - - - निपिगान - टोरंटो इकालविट - - पैंगनिरटंग - मान्कटान @@ -2501,18 +2486,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic डारे सलाम - - उझोरोद - कीव सिम्फेरोपोल - - जपोरोजाए - कमपाला @@ -3092,11 +3071,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic लार्ड होबे डेलाइट टाइम - - - मेक्वैरी द्वीप टाइम - - मगादान टाइम @@ -3121,13 +3095,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic मारीशस समर टाइम - - - उत्तर-पश्चिमी मैक्सिको टाइम - उत्तर-पश्चिमी मैक्सिको मानक टाइम - उत्तर-पश्चिमी मैक्सिको डेलाइट टाइम - - मैक्सिकन पेसिफिक टाइम diff --git a/make/data/cldr/common/main/mai_IN.xml b/make/data/cldr/common/main/mai_IN.xml index 0a7af5039e4..5723c4896b9 100644 --- a/make/data/cldr/common/main/mai_IN.xml +++ b/make/data/cldr/common/main/mai_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mas.xml b/make/data/cldr/common/main/mas.xml index 23cb44b716d..3c9a16ba879 100644 --- a/make/data/cldr/common/main/mas.xml +++ b/make/data/cldr/common/main/mas.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mas_KE.xml b/make/data/cldr/common/main/mas_KE.xml index 5e2b2829a32..8fd05e37ceb 100644 --- a/make/data/cldr/common/main/mas_KE.xml +++ b/make/data/cldr/common/main/mas_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mas_TZ.xml b/make/data/cldr/common/main/mas_TZ.xml index 521840ff22f..9614975030f 100644 --- a/make/data/cldr/common/main/mas_TZ.xml +++ b/make/data/cldr/common/main/mas_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mdf.xml b/make/data/cldr/common/main/mdf.xml index e7b7651901f..23a1e567eab 100644 --- a/make/data/cldr/common/main/mdf.xml +++ b/make/data/cldr/common/main/mdf.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mdf_RU.xml b/make/data/cldr/common/main/mdf_RU.xml index e48359e322f..63f14c8e264 100644 --- a/make/data/cldr/common/main/mdf_RU.xml +++ b/make/data/cldr/common/main/mdf_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mer.xml b/make/data/cldr/common/main/mer.xml index 105b8d97b2a..d4bcbd8c1eb 100644 --- a/make/data/cldr/common/main/mer.xml +++ b/make/data/cldr/common/main/mer.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mer_KE.xml b/make/data/cldr/common/main/mer_KE.xml index 403ce5bca9b..6a9bf6854df 100644 --- a/make/data/cldr/common/main/mer_KE.xml +++ b/make/data/cldr/common/main/mer_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mfe.xml b/make/data/cldr/common/main/mfe.xml index 8a2f3072522..a7c8df749a7 100644 --- a/make/data/cldr/common/main/mfe.xml +++ b/make/data/cldr/common/main/mfe.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mfe_MU.xml b/make/data/cldr/common/main/mfe_MU.xml index c9cbc6f68e6..bc6821ba085 100644 --- a/make/data/cldr/common/main/mfe_MU.xml +++ b/make/data/cldr/common/main/mfe_MU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mg.xml b/make/data/cldr/common/main/mg.xml index 68cb2113a40..0174d0ea16a 100644 --- a/make/data/cldr/common/main/mg.xml +++ b/make/data/cldr/common/main/mg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mg_MG.xml b/make/data/cldr/common/main/mg_MG.xml index 21a1a7681c1..fc8aa9874fd 100644 --- a/make/data/cldr/common/main/mg_MG.xml +++ b/make/data/cldr/common/main/mg_MG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mgh.xml b/make/data/cldr/common/main/mgh.xml index ad70d89e373..5799a350ee5 100644 --- a/make/data/cldr/common/main/mgh.xml +++ b/make/data/cldr/common/main/mgh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mgh_MZ.xml b/make/data/cldr/common/main/mgh_MZ.xml index e59981df532..c220df1088f 100644 --- a/make/data/cldr/common/main/mgh_MZ.xml +++ b/make/data/cldr/common/main/mgh_MZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mgo.xml b/make/data/cldr/common/main/mgo.xml index 9ab489ad71d..66ac0625620 100644 --- a/make/data/cldr/common/main/mgo.xml +++ b/make/data/cldr/common/main/mgo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mgo_CM.xml b/make/data/cldr/common/main/mgo_CM.xml index c39835e66f6..493705ed806 100644 --- a/make/data/cldr/common/main/mgo_CM.xml +++ b/make/data/cldr/common/main/mgo_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mi.xml b/make/data/cldr/common/main/mi.xml index 75c01090e75..f06a7132a63 100644 --- a/make/data/cldr/common/main/mi.xml +++ b/make/data/cldr/common/main/mi.xml @@ -1,8 +1,8 @@ - @@ -1829,9 +1829,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kemureti Pei - - Whaitiri Pei - Tāroto @@ -2602,11 +2599,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wā Lord Howe Awatea - - - Wā o Te Moutere Makoare - - Wā Magadan @@ -2646,13 +2638,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wā Mawson - - - Wā Mēhiko ki te uru-mā-raki - Wā Arowhānui o Mēhiko ki te uru-mā-raki - Wā Awatea o Mēhiko ki te uru-mā-raki - - Wā Mēhiko Kiwa diff --git a/make/data/cldr/common/main/mi_NZ.xml b/make/data/cldr/common/main/mi_NZ.xml index bd33d3b7ada..93e252d8726 100644 --- a/make/data/cldr/common/main/mi_NZ.xml +++ b/make/data/cldr/common/main/mi_NZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mic.xml b/make/data/cldr/common/main/mic.xml index 5f65b3dd38c..55f82bd7442 100644 --- a/make/data/cldr/common/main/mic.xml +++ b/make/data/cldr/common/main/mic.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mic_CA.xml b/make/data/cldr/common/main/mic_CA.xml index 5b8852c7943..cbe2e9e703b 100644 --- a/make/data/cldr/common/main/mic_CA.xml +++ b/make/data/cldr/common/main/mic_CA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mk.xml b/make/data/cldr/common/main/mk.xml index f40588a7fec..638e9972a4b 100644 --- a/make/data/cldr/common/main/mk.xml +++ b/make/data/cldr/common/main/mk.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ml.xml b/make/data/cldr/common/main/ml.xml index 63a5082b080..f71f5745bf8 100644 --- a/make/data/cldr/common/main/ml.xml +++ b/make/data/cldr/common/main/ml.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mn.xml b/make/data/cldr/common/main/mn.xml index b5085945472..23d8dc9c83c 100644 --- a/make/data/cldr/common/main/mn.xml +++ b/make/data/cldr/common/main/mn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mn_Mong.xml b/make/data/cldr/common/main/mn_Mong.xml index 2fa8326078a..252ac0d5a1a 100644 --- a/make/data/cldr/common/main/mn_Mong.xml +++ b/make/data/cldr/common/main/mn_Mong.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mn_Mong_CN.xml b/make/data/cldr/common/main/mn_Mong_CN.xml index 9879d57fc7e..84aa98185f0 100644 --- a/make/data/cldr/common/main/mn_Mong_CN.xml +++ b/make/data/cldr/common/main/mn_Mong_CN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mn_Mong_MN.xml b/make/data/cldr/common/main/mn_Mong_MN.xml index f8b90fe6e11..d512403c7e1 100644 --- a/make/data/cldr/common/main/mn_Mong_MN.xml +++ b/make/data/cldr/common/main/mn_Mong_MN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mni.xml b/make/data/cldr/common/main/mni.xml index 811c2753be3..345427427f6 100644 --- a/make/data/cldr/common/main/mni.xml +++ b/make/data/cldr/common/main/mni.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mni_Beng.xml b/make/data/cldr/common/main/mni_Beng.xml index 4f6e71f8810..9efb5c5a59c 100644 --- a/make/data/cldr/common/main/mni_Beng.xml +++ b/make/data/cldr/common/main/mni_Beng.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mni_Beng_IN.xml b/make/data/cldr/common/main/mni_Beng_IN.xml index 880999fbe30..bf54e2ee0b5 100644 --- a/make/data/cldr/common/main/mni_Beng_IN.xml +++ b/make/data/cldr/common/main/mni_Beng_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mni_Mtei.xml b/make/data/cldr/common/main/mni_Mtei.xml index a92604804c7..c3f491dffb6 100644 --- a/make/data/cldr/common/main/mni_Mtei.xml +++ b/make/data/cldr/common/main/mni_Mtei.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mni_Mtei_IN.xml b/make/data/cldr/common/main/mni_Mtei_IN.xml index 40c5a7b54c6..7691ca713f2 100644 --- a/make/data/cldr/common/main/mni_Mtei_IN.xml +++ b/make/data/cldr/common/main/mni_Mtei_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/moh.xml b/make/data/cldr/common/main/moh.xml index dce1422a3d7..13db5330ce9 100644 --- a/make/data/cldr/common/main/moh.xml +++ b/make/data/cldr/common/main/moh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/moh_CA.xml b/make/data/cldr/common/main/moh_CA.xml index ed26e0c99fe..9f977507b81 100644 --- a/make/data/cldr/common/main/moh_CA.xml +++ b/make/data/cldr/common/main/moh_CA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mr.xml b/make/data/cldr/common/main/mr.xml index 26fc360e1d7..d19b803f5ce 100644 --- a/make/data/cldr/common/main/mr.xml +++ b/make/data/cldr/common/main/mr.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms.xml b/make/data/cldr/common/main/ms.xml index be6a9762eba..c1382176e51 100644 --- a/make/data/cldr/common/main/ms.xml +++ b/make/data/cldr/common/main/ms.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms_Arab_BN.xml b/make/data/cldr/common/main/ms_Arab_BN.xml index cfac2af9bcd..03b60d8dc3a 100644 --- a/make/data/cldr/common/main/ms_Arab_BN.xml +++ b/make/data/cldr/common/main/ms_Arab_BN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms_Arab_MY.xml b/make/data/cldr/common/main/ms_Arab_MY.xml index 31478d27c4a..bddd3315cb2 100644 --- a/make/data/cldr/common/main/ms_Arab_MY.xml +++ b/make/data/cldr/common/main/ms_Arab_MY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms_BN.xml b/make/data/cldr/common/main/ms_BN.xml index d8561e0bc36..d156f483167 100644 --- a/make/data/cldr/common/main/ms_BN.xml +++ b/make/data/cldr/common/main/ms_BN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms_ID.xml b/make/data/cldr/common/main/ms_ID.xml index 197b758147e..0ca7f5756c9 100644 --- a/make/data/cldr/common/main/ms_ID.xml +++ b/make/data/cldr/common/main/ms_ID.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms_MY.xml b/make/data/cldr/common/main/ms_MY.xml index 90b29f926c8..dda1253cdb5 100644 --- a/make/data/cldr/common/main/ms_MY.xml +++ b/make/data/cldr/common/main/ms_MY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ms_SG.xml b/make/data/cldr/common/main/ms_SG.xml index 4182f9d6c8b..f799e1eef9e 100644 --- a/make/data/cldr/common/main/ms_SG.xml +++ b/make/data/cldr/common/main/ms_SG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mt.xml b/make/data/cldr/common/main/mt.xml index 90630a2de8d..b9d33c5e0c7 100644 --- a/make/data/cldr/common/main/mt.xml +++ b/make/data/cldr/common/main/mt.xml @@ -1,8 +1,8 @@ - @@ -1720,9 +1720,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Vjenna - - Currie - Brussell diff --git a/make/data/cldr/common/main/mt_MT.xml b/make/data/cldr/common/main/mt_MT.xml index 1b7a403ebc2..b58fe9e5526 100644 --- a/make/data/cldr/common/main/mt_MT.xml +++ b/make/data/cldr/common/main/mt_MT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mua.xml b/make/data/cldr/common/main/mua.xml index ba906c36deb..da45b0d679b 100644 --- a/make/data/cldr/common/main/mua.xml +++ b/make/data/cldr/common/main/mua.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mua_CM.xml b/make/data/cldr/common/main/mua_CM.xml index 8af56d08795..caad2d7cc70 100644 --- a/make/data/cldr/common/main/mua_CM.xml +++ b/make/data/cldr/common/main/mua_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mus.xml b/make/data/cldr/common/main/mus.xml index 5aa33c03b94..c25ac4b0d9a 100644 --- a/make/data/cldr/common/main/mus.xml +++ b/make/data/cldr/common/main/mus.xml @@ -1,8 +1,8 @@ - @@ -19,8 +19,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic - [a c e f h i k l m n o p r s t u v w y ʼ] - [b d ē g j q z] + [a c eē f h i k l m n o p r s t u v w y ʼ] + [b d g j q z] [A C E F H I K L M N O P R S T U V W Y] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -73,13 +73,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Nettv Cako + Nettvʼcako Enhvteceskv Enhvteceskv Enhvyvtke Ennvrkvpv Ennvrkvpv Enhvyvtke Nak Okkoskv Nettv - Nettv Cakcuse + Nettv Cakʼcuse @@ -142,7 +142,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hvse - Nettv Cako + Nettvcako Nettv diff --git a/make/data/cldr/common/main/mus_US.xml b/make/data/cldr/common/main/mus_US.xml index 1f8591ec072..3c4734e80a6 100644 --- a/make/data/cldr/common/main/mus_US.xml +++ b/make/data/cldr/common/main/mus_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/my.xml b/make/data/cldr/common/main/my.xml index 84c3e543fd9..7fb0996ea9c 100644 --- a/make/data/cldr/common/main/my.xml +++ b/make/data/cldr/common/main/my.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/myv.xml b/make/data/cldr/common/main/myv.xml index c02306f8503..58c41e016ae 100644 --- a/make/data/cldr/common/main/myv.xml +++ b/make/data/cldr/common/main/myv.xml @@ -1,8 +1,8 @@ - @@ -508,18 +508,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Тайпей - - Ужгород - Киев Симферополь - - Запорожье - Бойси diff --git a/make/data/cldr/common/main/myv_RU.xml b/make/data/cldr/common/main/myv_RU.xml index da3bfc9a168..d14f2711c19 100644 --- a/make/data/cldr/common/main/myv_RU.xml +++ b/make/data/cldr/common/main/myv_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mzn.xml b/make/data/cldr/common/main/mzn.xml index 76e938f2196..599f5d52656 100644 --- a/make/data/cldr/common/main/mzn.xml +++ b/make/data/cldr/common/main/mzn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/mzn_IR.xml b/make/data/cldr/common/main/mzn_IR.xml index acda126e168..86f4ea58065 100644 --- a/make/data/cldr/common/main/mzn_IR.xml +++ b/make/data/cldr/common/main/mzn_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/naq.xml b/make/data/cldr/common/main/naq.xml index c2d393e7355..de8df9f5c99 100644 --- a/make/data/cldr/common/main/naq.xml +++ b/make/data/cldr/common/main/naq.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/naq_NA.xml b/make/data/cldr/common/main/naq_NA.xml index 2e4c49f5d0c..cfc526d85fb 100644 --- a/make/data/cldr/common/main/naq_NA.xml +++ b/make/data/cldr/common/main/naq_NA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nb.xml b/make/data/cldr/common/main/nb.xml index 5aa284e5240..e976bed763b 100644 --- a/make/data/cldr/common/main/nb.xml +++ b/make/data/cldr/common/main/nb.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nb_NO.xml b/make/data/cldr/common/main/nb_NO.xml index d7d07ed5600..884d9ab3fec 100644 --- a/make/data/cldr/common/main/nb_NO.xml +++ b/make/data/cldr/common/main/nb_NO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nb_SJ.xml b/make/data/cldr/common/main/nb_SJ.xml index a6e024c7f95..c4a140911c4 100644 --- a/make/data/cldr/common/main/nb_SJ.xml +++ b/make/data/cldr/common/main/nb_SJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nd.xml b/make/data/cldr/common/main/nd.xml index e2bd7af01bd..090794fb3fa 100644 --- a/make/data/cldr/common/main/nd.xml +++ b/make/data/cldr/common/main/nd.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nd_ZW.xml b/make/data/cldr/common/main/nd_ZW.xml index d311aada9fb..11463f23aa7 100644 --- a/make/data/cldr/common/main/nd_ZW.xml +++ b/make/data/cldr/common/main/nd_ZW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nds.xml b/make/data/cldr/common/main/nds.xml index 3e0ae0bea9e..9f827f0337d 100644 --- a/make/data/cldr/common/main/nds.xml +++ b/make/data/cldr/common/main/nds.xml @@ -1,8 +1,8 @@ - @@ -1554,12 +1554,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kamschatka - - Uschgorod - - - Saporoschje - New Salem, Noord-Dakota diff --git a/make/data/cldr/common/main/nds_DE.xml b/make/data/cldr/common/main/nds_DE.xml index 437a10b5387..b8080c1b38f 100644 --- a/make/data/cldr/common/main/nds_DE.xml +++ b/make/data/cldr/common/main/nds_DE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nds_NL.xml b/make/data/cldr/common/main/nds_NL.xml index 8f4ab54077a..c8b33f0cbb9 100644 --- a/make/data/cldr/common/main/nds_NL.xml +++ b/make/data/cldr/common/main/nds_NL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ne.xml b/make/data/cldr/common/main/ne.xml index f40f2e6bdc0..d48508040b6 100644 --- a/make/data/cldr/common/main/ne.xml +++ b/make/data/cldr/common/main/ne.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ne_NP.xml b/make/data/cldr/common/main/ne_NP.xml index 5bd9f42df74..47c6ac59d74 100644 --- a/make/data/cldr/common/main/ne_NP.xml +++ b/make/data/cldr/common/main/ne_NP.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl.xml b/make/data/cldr/common/main/nl.xml index faec9f164eb..8ff890e6dd5 100644 --- a/make/data/cldr/common/main/nl.xml +++ b/make/data/cldr/common/main/nl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl_BE.xml b/make/data/cldr/common/main/nl_BE.xml index 6aa80bb5ba6..36e44b41bc0 100644 --- a/make/data/cldr/common/main/nl_BE.xml +++ b/make/data/cldr/common/main/nl_BE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl_BQ.xml b/make/data/cldr/common/main/nl_BQ.xml index f6a7ff1ed45..fb89bec8b13 100644 --- a/make/data/cldr/common/main/nl_BQ.xml +++ b/make/data/cldr/common/main/nl_BQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl_CW.xml b/make/data/cldr/common/main/nl_CW.xml index 356769980c2..11c3f1a2f65 100644 --- a/make/data/cldr/common/main/nl_CW.xml +++ b/make/data/cldr/common/main/nl_CW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl_NL.xml b/make/data/cldr/common/main/nl_NL.xml index c1029d8f90a..1a40318fdf1 100644 --- a/make/data/cldr/common/main/nl_NL.xml +++ b/make/data/cldr/common/main/nl_NL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl_SR.xml b/make/data/cldr/common/main/nl_SR.xml index 4d87212fdbc..c3ae94252dd 100644 --- a/make/data/cldr/common/main/nl_SR.xml +++ b/make/data/cldr/common/main/nl_SR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nl_SX.xml b/make/data/cldr/common/main/nl_SX.xml index 362f8d5c9c1..e750bc82886 100644 --- a/make/data/cldr/common/main/nl_SX.xml +++ b/make/data/cldr/common/main/nl_SX.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nmg.xml b/make/data/cldr/common/main/nmg.xml index 340245d3698..1b0e1530bd7 100644 --- a/make/data/cldr/common/main/nmg.xml +++ b/make/data/cldr/common/main/nmg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nmg_CM.xml b/make/data/cldr/common/main/nmg_CM.xml index c31e6dc2d55..7cdc4c81e89 100644 --- a/make/data/cldr/common/main/nmg_CM.xml +++ b/make/data/cldr/common/main/nmg_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nn.xml b/make/data/cldr/common/main/nn.xml index 5e395043c29..3bdbc291fa5 100644 --- a/make/data/cldr/common/main/nn.xml +++ b/make/data/cldr/common/main/nn.xml @@ -1,8 +1,8 @@ - @@ -1422,13 +1422,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic mauritisk sommartid - - - tidssone for nordvestlege Mexico - normaltid for nordvestlege Mexico - sommartid for nordvestlege Mexico - - tidssone for den meksikanske stillehavskysten diff --git a/make/data/cldr/common/main/nn_NO.xml b/make/data/cldr/common/main/nn_NO.xml index c84a0bb5c90..8d15a18fed9 100644 --- a/make/data/cldr/common/main/nn_NO.xml +++ b/make/data/cldr/common/main/nn_NO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nnh.xml b/make/data/cldr/common/main/nnh.xml index c4998898298..9d7b4ab82e1 100644 --- a/make/data/cldr/common/main/nnh.xml +++ b/make/data/cldr/common/main/nnh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nnh_CM.xml b/make/data/cldr/common/main/nnh_CM.xml index f40f38c3363..e4be7d0bed3 100644 --- a/make/data/cldr/common/main/nnh_CM.xml +++ b/make/data/cldr/common/main/nnh_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/no.xml b/make/data/cldr/common/main/no.xml index 3546bb19b62..d92734444e5 100644 --- a/make/data/cldr/common/main/no.xml +++ b/make/data/cldr/common/main/no.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nqo_GN.xml b/make/data/cldr/common/main/nqo_GN.xml index 3bde714a333..18820b62e57 100644 --- a/make/data/cldr/common/main/nqo_GN.xml +++ b/make/data/cldr/common/main/nqo_GN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nr.xml b/make/data/cldr/common/main/nr.xml index b6a2e502f2c..12f2badb7a9 100644 --- a/make/data/cldr/common/main/nr.xml +++ b/make/data/cldr/common/main/nr.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nr_ZA.xml b/make/data/cldr/common/main/nr_ZA.xml index b009779e64c..a3d30e250b9 100644 --- a/make/data/cldr/common/main/nr_ZA.xml +++ b/make/data/cldr/common/main/nr_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nso.xml b/make/data/cldr/common/main/nso.xml index b783dfa44aa..2861eaab685 100644 --- a/make/data/cldr/common/main/nso.xml +++ b/make/data/cldr/common/main/nso.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nso_ZA.xml b/make/data/cldr/common/main/nso_ZA.xml index ae90284ca6b..dcb283d3b2c 100644 --- a/make/data/cldr/common/main/nso_ZA.xml +++ b/make/data/cldr/common/main/nso_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nus.xml b/make/data/cldr/common/main/nus.xml index e6244ed4d3f..fef478634ee 100644 --- a/make/data/cldr/common/main/nus.xml +++ b/make/data/cldr/common/main/nus.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nus_SS.xml b/make/data/cldr/common/main/nus_SS.xml index 57dc90e0f6f..8aa24a11103 100644 --- a/make/data/cldr/common/main/nus_SS.xml +++ b/make/data/cldr/common/main/nus_SS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nv.xml b/make/data/cldr/common/main/nv.xml index af444dad979..311f0fa810b 100644 --- a/make/data/cldr/common/main/nv.xml +++ b/make/data/cldr/common/main/nv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nv_US.xml b/make/data/cldr/common/main/nv_US.xml index fb4fee38263..09914927cd4 100644 --- a/make/data/cldr/common/main/nv_US.xml +++ b/make/data/cldr/common/main/nv_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ny.xml b/make/data/cldr/common/main/ny.xml index 3493063fb5d..54f19ee0fd1 100644 --- a/make/data/cldr/common/main/ny.xml +++ b/make/data/cldr/common/main/ny.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ny_MW.xml b/make/data/cldr/common/main/ny_MW.xml index acd7b467f2e..e8ac1b7925a 100644 --- a/make/data/cldr/common/main/ny_MW.xml +++ b/make/data/cldr/common/main/ny_MW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nyn.xml b/make/data/cldr/common/main/nyn.xml index f9f3867d0b5..cdb3cc3aa85 100644 --- a/make/data/cldr/common/main/nyn.xml +++ b/make/data/cldr/common/main/nyn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/nyn_UG.xml b/make/data/cldr/common/main/nyn_UG.xml index 5e90288970e..0594d79bfe9 100644 --- a/make/data/cldr/common/main/nyn_UG.xml +++ b/make/data/cldr/common/main/nyn_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/oc.xml b/make/data/cldr/common/main/oc.xml index 4f73324d5c5..9112d362b15 100644 --- a/make/data/cldr/common/main/oc.xml +++ b/make/data/cldr/common/main/oc.xml @@ -1,8 +1,8 @@ - @@ -1711,11 +1711,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora d’estiu de Lord Howe - - - ora de l’illa Macquarie - - ora de Magadan @@ -1755,13 +1750,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora de Mawson - - - ora del nòrd-èst de Mexic - ora estandarda del nòrd-èst de Mexic - ora d’estiu del nòrd-èst de Mexic - - ora del Pacific Mexican diff --git a/make/data/cldr/common/main/oc_ES.xml b/make/data/cldr/common/main/oc_ES.xml index 7553860522f..98fc4cca45e 100644 --- a/make/data/cldr/common/main/oc_ES.xml +++ b/make/data/cldr/common/main/oc_ES.xml @@ -1,8 +1,8 @@ - @@ -1230,9 +1230,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Simferòpol - - Zaporiyia - Beulah, Dakota deth Nòrd @@ -1671,11 +1668,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora des Espòrades Equatorials - - - ora dera Isla Macquarie - - ora de Magadan @@ -1700,13 +1692,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora d’estiu de Maurici - - - ora deth nòrd-èst de Mexic - ora estandard deth nòrd-èst de Mexic - ora d’estiu deth nòrd-èst de Mexic - - ora deth Pacífic de Mexic diff --git a/make/data/cldr/common/main/oc_FR.xml b/make/data/cldr/common/main/oc_FR.xml index bd648173ca5..6018774650a 100644 --- a/make/data/cldr/common/main/oc_FR.xml +++ b/make/data/cldr/common/main/oc_FR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/om.xml b/make/data/cldr/common/main/om.xml index 42cf179b2fa..673379b1e8a 100644 --- a/make/data/cldr/common/main/om.xml +++ b/make/data/cldr/common/main/om.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/om_ET.xml b/make/data/cldr/common/main/om_ET.xml index a307367f36b..c4215878f67 100644 --- a/make/data/cldr/common/main/om_ET.xml +++ b/make/data/cldr/common/main/om_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/om_KE.xml b/make/data/cldr/common/main/om_KE.xml index e9708ebea4c..5a9d5b20192 100644 --- a/make/data/cldr/common/main/om_KE.xml +++ b/make/data/cldr/common/main/om_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/or.xml b/make/data/cldr/common/main/or.xml index 24fb73de49b..a5680dfbb82 100644 --- a/make/data/cldr/common/main/or.xml +++ b/make/data/cldr/common/main/or.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/os.xml b/make/data/cldr/common/main/os.xml index a6e7e64b641..347fec989fa 100644 --- a/make/data/cldr/common/main/os.xml +++ b/make/data/cldr/common/main/os.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/os_GE.xml b/make/data/cldr/common/main/os_GE.xml index 20e78f85dba..fd327c6700d 100644 --- a/make/data/cldr/common/main/os_GE.xml +++ b/make/data/cldr/common/main/os_GE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/os_RU.xml b/make/data/cldr/common/main/os_RU.xml index 94c09c446ce..3653ce1d58b 100644 --- a/make/data/cldr/common/main/os_RU.xml +++ b/make/data/cldr/common/main/os_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/osa.xml b/make/data/cldr/common/main/osa.xml index 5527aacfb9e..43fc58c2334 100644 --- a/make/data/cldr/common/main/osa.xml +++ b/make/data/cldr/common/main/osa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/osa_US.xml b/make/data/cldr/common/main/osa_US.xml index 9056a39064d..961506955d0 100644 --- a/make/data/cldr/common/main/osa_US.xml +++ b/make/data/cldr/common/main/osa_US.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pa.xml b/make/data/cldr/common/main/pa.xml index 4336c600b8d..7e4c316934e 100644 --- a/make/data/cldr/common/main/pa.xml +++ b/make/data/cldr/common/main/pa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pa_Arab_PK.xml b/make/data/cldr/common/main/pa_Arab_PK.xml index 14d9e8cb434..b5fbaba6dd5 100644 --- a/make/data/cldr/common/main/pa_Arab_PK.xml +++ b/make/data/cldr/common/main/pa_Arab_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pa_Guru.xml b/make/data/cldr/common/main/pa_Guru.xml index 4481adce1bf..7404e53d47e 100644 --- a/make/data/cldr/common/main/pa_Guru.xml +++ b/make/data/cldr/common/main/pa_Guru.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pa_Guru_IN.xml b/make/data/cldr/common/main/pa_Guru_IN.xml index 6feaf212303..0373b1e6094 100644 --- a/make/data/cldr/common/main/pa_Guru_IN.xml +++ b/make/data/cldr/common/main/pa_Guru_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pap.xml b/make/data/cldr/common/main/pap.xml index 25f47f85795..c3fd361f473 100644 --- a/make/data/cldr/common/main/pap.xml +++ b/make/data/cldr/common/main/pap.xml @@ -1,8 +1,8 @@ - @@ -331,7 +331,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d MMM – d MMM y G - E, d MMM y G  – E, d MMM y G + E, d MMM y G – E, d MMM y G E, d MMM – E, d MMM y G E, d MMM y – E, d MMM y G @@ -616,7 +616,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic d–d MMM - d MMM  – d MMM + d MMM – d MMM E, d MMM – E, d MMM diff --git a/make/data/cldr/common/main/pap_AW.xml b/make/data/cldr/common/main/pap_AW.xml index 0b4b9f459e8..fe75adea332 100644 --- a/make/data/cldr/common/main/pap_AW.xml +++ b/make/data/cldr/common/main/pap_AW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pap_CW.xml b/make/data/cldr/common/main/pap_CW.xml index d3e92b3856d..30f9b0a6471 100644 --- a/make/data/cldr/common/main/pap_CW.xml +++ b/make/data/cldr/common/main/pap_CW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pcm.xml b/make/data/cldr/common/main/pcm.xml index f8db8811623..c35230097e0 100644 --- a/make/data/cldr/common/main/pcm.xml +++ b/make/data/cldr/common/main/pcm.xml @@ -1,8 +1,8 @@ - @@ -1779,9 +1779,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mẹ́lbọn - - Kọ́ri - Hóbat @@ -1926,9 +1923,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Krẹ́stọn - - Yẹ́lónaif - Ẹ́dmọ́ntọn @@ -1947,30 +1941,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rẹ́zólut - - Réní Ríva - Ránkín Ínlẹt Atíkókan - - Tọ́nda Bè - - - Nípígọn - Torónto Ikáluit - - Pangnírtung - Mọ́nktọn @@ -2748,18 +2730,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dar ẹ́s Salam - - Ọ́zhọrọd - Kiẹv Símfẹrópol - - Zaporózhia - Kampála @@ -2775,9 +2751,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Noom - - Jọ́nstun - Ánkọ́rej @@ -3410,11 +3383,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lọd Haú Délaít Taim - - - Makwuéí Aíland Taim - - Mágádan Taim @@ -3454,13 +3422,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mọ́sọn Taim - - - Nọ́twẹ́st Mẹ́ksíko Taim - Nọ́twẹ́st Mẹ́ksíko Fíksd Taim - Nọ́twẹ́st Mẹ́ksíko Délaít Taim - - Mẹ́ksíkó Pasífík Taim diff --git a/make/data/cldr/common/main/pcm_NG.xml b/make/data/cldr/common/main/pcm_NG.xml index 5d1bbae805a..83ecba1e4aa 100644 --- a/make/data/cldr/common/main/pcm_NG.xml +++ b/make/data/cldr/common/main/pcm_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pis.xml b/make/data/cldr/common/main/pis.xml index af211ba9a39..65d4c579ca4 100644 --- a/make/data/cldr/common/main/pis.xml +++ b/make/data/cldr/common/main/pis.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pis_SB.xml b/make/data/cldr/common/main/pis_SB.xml index 72e14ac3578..0463fa6cd0c 100644 --- a/make/data/cldr/common/main/pis_SB.xml +++ b/make/data/cldr/common/main/pis_SB.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pl.xml b/make/data/cldr/common/main/pl.xml index e77d953415e..81ae0f081be 100644 --- a/make/data/cldr/common/main/pl.xml +++ b/make/data/cldr/common/main/pl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/prg.xml b/make/data/cldr/common/main/prg.xml index 50fc4ff3893..2be8a674c6a 100644 --- a/make/data/cldr/common/main/prg.xml +++ b/make/data/cldr/common/main/prg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/prg_PL.xml b/make/data/cldr/common/main/prg_PL.xml index 6ac9dba73df..95506f645ed 100644 --- a/make/data/cldr/common/main/prg_PL.xml +++ b/make/data/cldr/common/main/prg_PL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ps.xml b/make/data/cldr/common/main/ps.xml index 4b6d562e084..6ab37082d49 100644 --- a/make/data/cldr/common/main/ps.xml +++ b/make/data/cldr/common/main/ps.xml @@ -1,8 +1,8 @@ - @@ -1859,9 +1859,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic میلبورن - - کرري - هوبارټ @@ -2015,9 +2012,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic کرسټون - - يلونايف - ایډمونټن @@ -2036,30 +2030,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ريسالوټ - - د باران باران - رينکن انلټ اتیکوکن - - تنډر بی - - - نیپګون - ټورنټو اقلیټ - - پينګنرچونګ - مونکټون @@ -2870,18 +2852,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic دار السلام - - یوژورډ - کیف سیمفروپول - - زاپوروژی - کمپاله @@ -2900,9 +2876,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic هینولولو - - جانسټن - اینکریج @@ -3538,11 +3511,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic لارډ هوي د ورځې روښانه وخت - - - مکواري ټاپو وخت - - ميګډان وخت @@ -3582,13 +3550,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ماوسن وخت - - - د شمال لویدیځ مکسیکو وخت - د شمال لویدیځ مکسیکو معیاري وخت - د شمال لویدیځ مکسیکو رڼا ورځې وخت - - مکسیکن پیسفک وخت diff --git a/make/data/cldr/common/main/ps_AF.xml b/make/data/cldr/common/main/ps_AF.xml index 03565b354ce..ba7f778fdc9 100644 --- a/make/data/cldr/common/main/ps_AF.xml +++ b/make/data/cldr/common/main/ps_AF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ps_PK.xml b/make/data/cldr/common/main/ps_PK.xml index 38a7c4d0ef7..ef66321643b 100644 --- a/make/data/cldr/common/main/ps_PK.xml +++ b/make/data/cldr/common/main/ps_PK.xml @@ -1,8 +1,8 @@ - @@ -202,11 +202,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic رب هاو د ورځے د رڼا وخت - - - د شمال لویدیځ مکسیکو رڼا ورځے وخت - - مکسیکن پیسفک رڼا ورځے وخت diff --git a/make/data/cldr/common/main/pt.xml b/make/data/cldr/common/main/pt.xml index 3386faf6bda..83930b83c24 100644 --- a/make/data/cldr/common/main/pt.xml +++ b/make/data/cldr/common/main/pt.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_BR.xml b/make/data/cldr/common/main/pt_BR.xml index 7b33b1da354..d56d9554f77 100644 --- a/make/data/cldr/common/main/pt_BR.xml +++ b/make/data/cldr/common/main/pt_BR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_CH.xml b/make/data/cldr/common/main/pt_CH.xml index a55d5c546b7..5b8ad6f5143 100644 --- a/make/data/cldr/common/main/pt_CH.xml +++ b/make/data/cldr/common/main/pt_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_CV.xml b/make/data/cldr/common/main/pt_CV.xml index 27562ab33b0..1d9d5db0e2d 100644 --- a/make/data/cldr/common/main/pt_CV.xml +++ b/make/data/cldr/common/main/pt_CV.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_GQ.xml b/make/data/cldr/common/main/pt_GQ.xml index 859448ceb3b..b9d78e6a6f1 100644 --- a/make/data/cldr/common/main/pt_GQ.xml +++ b/make/data/cldr/common/main/pt_GQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_GW.xml b/make/data/cldr/common/main/pt_GW.xml index 39a465e162c..bb9b77b7d96 100644 --- a/make/data/cldr/common/main/pt_GW.xml +++ b/make/data/cldr/common/main/pt_GW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_LU.xml b/make/data/cldr/common/main/pt_LU.xml index 60c6bb06fb6..c4ca53f2af2 100644 --- a/make/data/cldr/common/main/pt_LU.xml +++ b/make/data/cldr/common/main/pt_LU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_MO.xml b/make/data/cldr/common/main/pt_MO.xml index 5982c44b432..a5806b02ca4 100644 --- a/make/data/cldr/common/main/pt_MO.xml +++ b/make/data/cldr/common/main/pt_MO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_MZ.xml b/make/data/cldr/common/main/pt_MZ.xml index 6c9a3b16690..b056c0ac5d5 100644 --- a/make/data/cldr/common/main/pt_MZ.xml +++ b/make/data/cldr/common/main/pt_MZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_PT.xml b/make/data/cldr/common/main/pt_PT.xml index 32345e1c47e..54bbe87de2a 100644 --- a/make/data/cldr/common/main/pt_PT.xml +++ b/make/data/cldr/common/main/pt_PT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/pt_TL.xml b/make/data/cldr/common/main/pt_TL.xml index 32f76a2743b..488246ffbde 100644 --- a/make/data/cldr/common/main/pt_TL.xml +++ b/make/data/cldr/common/main/pt_TL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/qu.xml b/make/data/cldr/common/main/qu.xml index c6b3e71d36b..f6994d2832b 100644 --- a/make/data/cldr/common/main/qu.xml +++ b/make/data/cldr/common/main/qu.xml @@ -1,8 +1,8 @@ - @@ -1505,9 +1505,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Adelaida - - Currie - Sidney @@ -2271,11 +2268,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora de Verano de Lord Howe - - - Hora de Isla Macquarie - - Hora de Magadan @@ -2315,13 +2307,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora de Mawson - - - Hora Estandar de Verano de México - Hora Estandar del Noroeste de México - Hora de Verano del Noroeste de México - - Hora del Pacífico Mexicano diff --git a/make/data/cldr/common/main/qu_BO.xml b/make/data/cldr/common/main/qu_BO.xml index cdfcca85645..7eba6f91da0 100644 --- a/make/data/cldr/common/main/qu_BO.xml +++ b/make/data/cldr/common/main/qu_BO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/qu_EC.xml b/make/data/cldr/common/main/qu_EC.xml index 754bb8c91e3..2cfdf0b5e0a 100644 --- a/make/data/cldr/common/main/qu_EC.xml +++ b/make/data/cldr/common/main/qu_EC.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/qu_PE.xml b/make/data/cldr/common/main/qu_PE.xml index 534932b04b8..7018e5d4942 100644 --- a/make/data/cldr/common/main/qu_PE.xml +++ b/make/data/cldr/common/main/qu_PE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/quc.xml b/make/data/cldr/common/main/quc.xml index 9a33eca95db..a30a30b9b7e 100644 --- a/make/data/cldr/common/main/quc.xml +++ b/make/data/cldr/common/main/quc.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/quc_GT.xml b/make/data/cldr/common/main/quc_GT.xml index 2c64b467b7d..1a1549c4b9b 100644 --- a/make/data/cldr/common/main/quc_GT.xml +++ b/make/data/cldr/common/main/quc_GT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/raj.xml b/make/data/cldr/common/main/raj.xml index d3286df9f9b..55569ec849c 100644 --- a/make/data/cldr/common/main/raj.xml +++ b/make/data/cldr/common/main/raj.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/raj_IN.xml b/make/data/cldr/common/main/raj_IN.xml index 37d9b4cbc5d..a2e6c9c10c5 100644 --- a/make/data/cldr/common/main/raj_IN.xml +++ b/make/data/cldr/common/main/raj_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rhg.xml b/make/data/cldr/common/main/rhg.xml index 530c8f0be75..f100e9155f2 100644 --- a/make/data/cldr/common/main/rhg.xml +++ b/make/data/cldr/common/main/rhg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rhg_Rohg.xml b/make/data/cldr/common/main/rhg_Rohg.xml index 351938d4f6d..f88501c90b1 100644 --- a/make/data/cldr/common/main/rhg_Rohg.xml +++ b/make/data/cldr/common/main/rhg_Rohg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rhg_Rohg_BD.xml b/make/data/cldr/common/main/rhg_Rohg_BD.xml index 9cd4f6428ba..97fcdfdc9fd 100644 --- a/make/data/cldr/common/main/rhg_Rohg_BD.xml +++ b/make/data/cldr/common/main/rhg_Rohg_BD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rhg_Rohg_MM.xml b/make/data/cldr/common/main/rhg_Rohg_MM.xml index 1a5e3a3b9d8..516f2632466 100644 --- a/make/data/cldr/common/main/rhg_Rohg_MM.xml +++ b/make/data/cldr/common/main/rhg_Rohg_MM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rif.xml b/make/data/cldr/common/main/rif.xml index 5fc7882b682..f76062cca82 100644 --- a/make/data/cldr/common/main/rif.xml +++ b/make/data/cldr/common/main/rif.xml @@ -1,8 +1,8 @@ - @@ -1288,13 +1288,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n haway-alucyan - - - akud n sennej i lɣerb n miksiku - akud anaway n sennej i lɣerb n miksiku - akud n uzil n sennej i lɣerb n miksiku - - akud n pasifik amiksikan diff --git a/make/data/cldr/common/main/rif_MA.xml b/make/data/cldr/common/main/rif_MA.xml index b099abe9ca4..cb1758ce486 100644 --- a/make/data/cldr/common/main/rif_MA.xml +++ b/make/data/cldr/common/main/rif_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rm.xml b/make/data/cldr/common/main/rm.xml index efabbdb3fd0..0b7bc117042 100644 --- a/make/data/cldr/common/main/rm.xml +++ b/make/data/cldr/common/main/rm.xml @@ -1,8 +1,8 @@ - @@ -2002,12 +2002,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daressalam - - Uschhorod - - - Saporischja - Alasca diff --git a/make/data/cldr/common/main/rm_CH.xml b/make/data/cldr/common/main/rm_CH.xml index 3fa28bb6ffc..89fa47c46fc 100644 --- a/make/data/cldr/common/main/rm_CH.xml +++ b/make/data/cldr/common/main/rm_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rn.xml b/make/data/cldr/common/main/rn.xml index 4e9893319d6..b9863f0374b 100644 --- a/make/data/cldr/common/main/rn.xml +++ b/make/data/cldr/common/main/rn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rn_BI.xml b/make/data/cldr/common/main/rn_BI.xml index 2cc7c75231c..5d22cd47227 100644 --- a/make/data/cldr/common/main/rn_BI.xml +++ b/make/data/cldr/common/main/rn_BI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ro.xml b/make/data/cldr/common/main/ro.xml index 1de4dede84f..633dacc18c1 100644 --- a/make/data/cldr/common/main/ro.xml +++ b/make/data/cldr/common/main/ro.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ro_RO.xml b/make/data/cldr/common/main/ro_RO.xml index afa4e5f5439..ffa86ea3d2d 100644 --- a/make/data/cldr/common/main/ro_RO.xml +++ b/make/data/cldr/common/main/ro_RO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rof.xml b/make/data/cldr/common/main/rof.xml index c69cf20abd3..c174f7f1a01 100644 --- a/make/data/cldr/common/main/rof.xml +++ b/make/data/cldr/common/main/rof.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rof_TZ.xml b/make/data/cldr/common/main/rof_TZ.xml index f5738ee3f34..4edf5689c7e 100644 --- a/make/data/cldr/common/main/rof_TZ.xml +++ b/make/data/cldr/common/main/rof_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/root.xml b/make/data/cldr/common/main/root.xml index 56cf38d18d4..12c883da38f 100644 --- a/make/data/cldr/common/main/root.xml +++ b/make/data/cldr/common/main/root.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ru_KG.xml b/make/data/cldr/common/main/ru_KG.xml index ada0ba6f8de..52d7a7b1999 100644 --- a/make/data/cldr/common/main/ru_KG.xml +++ b/make/data/cldr/common/main/ru_KG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ru_KZ.xml b/make/data/cldr/common/main/ru_KZ.xml index 6bf4132802a..af683f7fe06 100644 --- a/make/data/cldr/common/main/ru_KZ.xml +++ b/make/data/cldr/common/main/ru_KZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ru_MD.xml b/make/data/cldr/common/main/ru_MD.xml index 9640c522c41..f4a39c6903b 100644 --- a/make/data/cldr/common/main/ru_MD.xml +++ b/make/data/cldr/common/main/ru_MD.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ru_RU.xml b/make/data/cldr/common/main/ru_RU.xml index 1e78c6fc019..aa008c5f446 100644 --- a/make/data/cldr/common/main/ru_RU.xml +++ b/make/data/cldr/common/main/ru_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ru_UA.xml b/make/data/cldr/common/main/ru_UA.xml index ce9396a0f38..2b45e4bf7fc 100644 --- a/make/data/cldr/common/main/ru_UA.xml +++ b/make/data/cldr/common/main/ru_UA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rw.xml b/make/data/cldr/common/main/rw.xml index c62908a7d75..b2e103528ac 100644 --- a/make/data/cldr/common/main/rw.xml +++ b/make/data/cldr/common/main/rw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rw_RW.xml b/make/data/cldr/common/main/rw_RW.xml index 89525f3cf27..3884fab8cf2 100644 --- a/make/data/cldr/common/main/rw_RW.xml +++ b/make/data/cldr/common/main/rw_RW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rwk.xml b/make/data/cldr/common/main/rwk.xml index 31977128ac3..9a32f8431e7 100644 --- a/make/data/cldr/common/main/rwk.xml +++ b/make/data/cldr/common/main/rwk.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/rwk_TZ.xml b/make/data/cldr/common/main/rwk_TZ.xml index 12f3bbf8d0d..93a91aee965 100644 --- a/make/data/cldr/common/main/rwk_TZ.xml +++ b/make/data/cldr/common/main/rwk_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sa.xml b/make/data/cldr/common/main/sa.xml index dc6ed4ee206..d65097b3366 100644 --- a/make/data/cldr/common/main/sa.xml +++ b/make/data/cldr/common/main/sa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sa_IN.xml b/make/data/cldr/common/main/sa_IN.xml index 628f1753f19..dec966c92af 100644 --- a/make/data/cldr/common/main/sa_IN.xml +++ b/make/data/cldr/common/main/sa_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sah.xml b/make/data/cldr/common/main/sah.xml index 1b683a56db4..5d89d39f07b 100644 --- a/make/data/cldr/common/main/sah.xml +++ b/make/data/cldr/common/main/sah.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sah_RU.xml b/make/data/cldr/common/main/sah_RU.xml index 20a8d235330..6ea7810b7bf 100644 --- a/make/data/cldr/common/main/sah_RU.xml +++ b/make/data/cldr/common/main/sah_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/saq.xml b/make/data/cldr/common/main/saq.xml index 587b3e8c9ad..8c975679f0f 100644 --- a/make/data/cldr/common/main/saq.xml +++ b/make/data/cldr/common/main/saq.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/saq_KE.xml b/make/data/cldr/common/main/saq_KE.xml index a6de1faba63..f2781b159ac 100644 --- a/make/data/cldr/common/main/saq_KE.xml +++ b/make/data/cldr/common/main/saq_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sat.xml b/make/data/cldr/common/main/sat.xml index 0319b7a4db6..49b72a15b46 100644 --- a/make/data/cldr/common/main/sat.xml +++ b/make/data/cldr/common/main/sat.xml @@ -1,8 +1,8 @@ - @@ -1478,9 +1478,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᱠᱨᱮᱥᱴᱚᱱ - - ᱭᱮᱞᱚᱱᱟᱭᱤᱯᱷ - ᱮᱰᱢᱚᱱᱴᱚᱱ @@ -1499,30 +1496,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᱨᱤᱥᱚᱞᱭᱩᱴ - - ᱨᱚᱱᱤ ᱜᱟᱰᱟ - ᱨᱟᱱᱠᱤᱱ ᱤᱱᱞᱮᱴ ᱟᱴᱤᱠᱚᱠᱟᱱ - - ᱛᱷᱚᱱᱰᱚᱨ ᱵᱮ - - - ᱱᱤᱯᱤᱜᱚᱱ - ᱴᱚᱨᱚᱱᱴᱚ ᱤᱠᱟᱞᱩᱣᱤᱛ - - ᱯᱟᱝᱱᱤᱨᱛᱩᱝ - ᱢᱚᱱᱠᱴᱚᱱ @@ -1874,13 +1859,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᱦᱟᱣᱟᱭᱤᱼᱟᱞᱮᱣᱴᱤᱭᱟᱱ ᱥᱤᱧᱟᱜ ᱚᱠᱛᱚ - - - ᱮᱛᱚᱢᱯᱟᱪᱮ ᱢᱚᱠᱥᱤᱠᱚ ᱚᱠᱛᱚ - ᱮᱛᱚᱢᱯᱟᱪᱮ ᱢᱚᱠᱥᱤᱠᱚ ᱢᱟᱱᱚᱠ ᱚᱠᱛᱚ - ᱮᱛᱚᱢᱯᱟᱪᱮ ᱢᱚᱠᱥᱤᱠᱚ ᱥᱤᱧᱟᱜ ᱚᱠᱛᱚ - - ᱢᱮᱠᱥᱤᱠᱟᱱ ᱯᱨᱚᱥᱟᱱᱛ ᱚᱠᱛᱚ diff --git a/make/data/cldr/common/main/sat_Deva.xml b/make/data/cldr/common/main/sat_Deva.xml index c8982731025..30961e3dfdc 100644 --- a/make/data/cldr/common/main/sat_Deva.xml +++ b/make/data/cldr/common/main/sat_Deva.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sat_Deva_IN.xml b/make/data/cldr/common/main/sat_Deva_IN.xml index 9b343ae6dcf..be00da78a9a 100644 --- a/make/data/cldr/common/main/sat_Deva_IN.xml +++ b/make/data/cldr/common/main/sat_Deva_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sat_Olck.xml b/make/data/cldr/common/main/sat_Olck.xml index 9f3daa45f22..806495ec77c 100644 --- a/make/data/cldr/common/main/sat_Olck.xml +++ b/make/data/cldr/common/main/sat_Olck.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sat_Olck_IN.xml b/make/data/cldr/common/main/sat_Olck_IN.xml index 8d83f9eac06..5f5bc27ec07 100644 --- a/make/data/cldr/common/main/sat_Olck_IN.xml +++ b/make/data/cldr/common/main/sat_Olck_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sbp.xml b/make/data/cldr/common/main/sbp.xml index f4f989c4bbb..898598f848c 100644 --- a/make/data/cldr/common/main/sbp.xml +++ b/make/data/cldr/common/main/sbp.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sbp_TZ.xml b/make/data/cldr/common/main/sbp_TZ.xml index fb4716fd808..dcab5b8450a 100644 --- a/make/data/cldr/common/main/sbp_TZ.xml +++ b/make/data/cldr/common/main/sbp_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sc.xml b/make/data/cldr/common/main/sc.xml index f3ef123869e..90a1d00f3f5 100644 --- a/make/data/cldr/common/main/sc.xml +++ b/make/data/cldr/common/main/sc.xml @@ -1,8 +1,8 @@ - @@ -1106,7 +1106,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ordinamentu de su tzinesu semplificadu - GB2312 ordinamentu de s’elencu telefònicu ordinamentu pinyin - ordinamentu riformadu chirca genèrica chirca pro consonante hangul initziale ordinamentu istandard @@ -2963,9 +2962,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tucumán - - Currie - Daca @@ -3834,11 +3830,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora legale de Macao - - - Ora de s’Ìsula Macquarie - - Ora de Magadan @@ -3878,13 +3869,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora de Mawson - - - Ora de su Mèssicu nord-otzidentale - Ora istandard de su Mèssicu nord-otzidentale - Ora legale de su Mèssicu nord-otzidentale - - Ora de su Patzìficu (Mèssicu) diff --git a/make/data/cldr/common/main/sc_IT.xml b/make/data/cldr/common/main/sc_IT.xml index 6612a65e577..376c0399cca 100644 --- a/make/data/cldr/common/main/sc_IT.xml +++ b/make/data/cldr/common/main/sc_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/scn.xml b/make/data/cldr/common/main/scn.xml index cc4c1655aa6..a9a1c3499b3 100644 --- a/make/data/cldr/common/main/scn.xml +++ b/make/data/cldr/common/main/scn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/scn_IT.xml b/make/data/cldr/common/main/scn_IT.xml index fac9de008ce..54c0c33495b 100644 --- a/make/data/cldr/common/main/scn_IT.xml +++ b/make/data/cldr/common/main/scn_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sd.xml b/make/data/cldr/common/main/sd.xml index acc7d27ae9a..80e51753dc4 100644 --- a/make/data/cldr/common/main/sd.xml +++ b/make/data/cldr/common/main/sd.xml @@ -1,8 +1,8 @@ - @@ -1642,9 +1642,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ميلبورن - - ڪري - هوبارٽ @@ -1798,9 +1795,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ڪريسٽن - - ييلو نائيف - ايڊمونٽن @@ -1819,30 +1813,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ريزوليوٽ - - ريني رور - رينڪن انليٽ اٽيڪوڪن - - ٿنڊر بي - - - نپيگان - ٽورنٽو اڪالوئٽ - - پینگنرٽنگ - مانڪٽن @@ -2656,18 +2638,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic دارالسلام - - ازهارڊ - ڪِيو سمفروپول - - زيپروزهايا - ڪمپالا @@ -2686,9 +2662,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic هونو لولو - - جانسٹن - اينڪريج @@ -3324,11 +3297,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic لورڊ هووي جي ڏينهن جو وقت - - - مڪوائري آئي لينڊ جو وقت - - مگادان جو وقت @@ -3368,13 +3336,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic مائوسن جو وقت - - - شمالي مغربي ميڪسيڪو جو وقت - شمالي مغربي ميڪسيڪو جو معياري وقت - شمالي مغربي ميڪسيڪو جي ڏينهن جو وقت - - ميڪسيڪن پيسيفڪ وقت diff --git a/make/data/cldr/common/main/sd_Arab.xml b/make/data/cldr/common/main/sd_Arab.xml index 52b15d2a2fe..1844976e26f 100644 --- a/make/data/cldr/common/main/sd_Arab.xml +++ b/make/data/cldr/common/main/sd_Arab.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sd_Arab_PK.xml b/make/data/cldr/common/main/sd_Arab_PK.xml index d68902c97ba..f123030ec5a 100644 --- a/make/data/cldr/common/main/sd_Arab_PK.xml +++ b/make/data/cldr/common/main/sd_Arab_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sd_Deva.xml b/make/data/cldr/common/main/sd_Deva.xml index 4c2a39458d9..741db721386 100644 --- a/make/data/cldr/common/main/sd_Deva.xml +++ b/make/data/cldr/common/main/sd_Deva.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sd_Deva_IN.xml b/make/data/cldr/common/main/sd_Deva_IN.xml index ad3ad7e5f74..6406ca40a47 100644 --- a/make/data/cldr/common/main/sd_Deva_IN.xml +++ b/make/data/cldr/common/main/sd_Deva_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sdh.xml b/make/data/cldr/common/main/sdh.xml index cd72fed82ef..860747bd424 100644 --- a/make/data/cldr/common/main/sdh.xml +++ b/make/data/cldr/common/main/sdh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sdh_IQ.xml b/make/data/cldr/common/main/sdh_IQ.xml index 3cc33628c03..73b71829b57 100644 --- a/make/data/cldr/common/main/sdh_IQ.xml +++ b/make/data/cldr/common/main/sdh_IQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sdh_IR.xml b/make/data/cldr/common/main/sdh_IR.xml index bd375ccdb19..7752d73ac19 100644 --- a/make/data/cldr/common/main/sdh_IR.xml +++ b/make/data/cldr/common/main/sdh_IR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/se.xml b/make/data/cldr/common/main/se.xml index 4eab45b582b..343d2d6caa5 100644 --- a/make/data/cldr/common/main/se.xml +++ b/make/data/cldr/common/main/se.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/se_FI.xml b/make/data/cldr/common/main/se_FI.xml index fa0ae699737..2683caed235 100644 --- a/make/data/cldr/common/main/se_FI.xml +++ b/make/data/cldr/common/main/se_FI.xml @@ -1,8 +1,8 @@ - @@ -1674,11 +1674,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Howe geasseáigi - - - MacQuarie sullo áigi - - Magadana áigi @@ -1718,13 +1713,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawsona áigi - - - Oarjedavvi-Meksiko áigi - Oarjedavvi-Meksiko dálveáigi - Oarjedavvi-Meksiko geasseáigi - - Meksiko Jáskesábi áigi diff --git a/make/data/cldr/common/main/se_NO.xml b/make/data/cldr/common/main/se_NO.xml index ede5d5d5b18..12bdb6a17b9 100644 --- a/make/data/cldr/common/main/se_NO.xml +++ b/make/data/cldr/common/main/se_NO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/se_SE.xml b/make/data/cldr/common/main/se_SE.xml index 47754ec19cf..99d52c3ab3e 100644 --- a/make/data/cldr/common/main/se_SE.xml +++ b/make/data/cldr/common/main/se_SE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/seh.xml b/make/data/cldr/common/main/seh.xml index a25d21db6f9..2815843850f 100644 --- a/make/data/cldr/common/main/seh.xml +++ b/make/data/cldr/common/main/seh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/seh_MZ.xml b/make/data/cldr/common/main/seh_MZ.xml index 789f9e0805f..857a4e4e0fa 100644 --- a/make/data/cldr/common/main/seh_MZ.xml +++ b/make/data/cldr/common/main/seh_MZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ses.xml b/make/data/cldr/common/main/ses.xml index 49dfccecc71..9189d74e8f3 100644 --- a/make/data/cldr/common/main/ses.xml +++ b/make/data/cldr/common/main/ses.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ses_ML.xml b/make/data/cldr/common/main/ses_ML.xml index 63e4cbb986c..d0fe59700fd 100644 --- a/make/data/cldr/common/main/ses_ML.xml +++ b/make/data/cldr/common/main/ses_ML.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sg.xml b/make/data/cldr/common/main/sg.xml index 43f25cd19bc..c40349f2e99 100644 --- a/make/data/cldr/common/main/sg.xml +++ b/make/data/cldr/common/main/sg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sg_CF.xml b/make/data/cldr/common/main/sg_CF.xml index 61b2edae564..6318b0fdf4c 100644 --- a/make/data/cldr/common/main/sg_CF.xml +++ b/make/data/cldr/common/main/sg_CF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shi.xml b/make/data/cldr/common/main/shi.xml index 3246a1bc838..b7b64363ad0 100644 --- a/make/data/cldr/common/main/shi.xml +++ b/make/data/cldr/common/main/shi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shi_Latn.xml b/make/data/cldr/common/main/shi_Latn.xml index 175582f02e6..8d762fe15e7 100644 --- a/make/data/cldr/common/main/shi_Latn.xml +++ b/make/data/cldr/common/main/shi_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shi_Latn_MA.xml b/make/data/cldr/common/main/shi_Latn_MA.xml index 4bb2f4006f4..e28483d26ea 100644 --- a/make/data/cldr/common/main/shi_Latn_MA.xml +++ b/make/data/cldr/common/main/shi_Latn_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shi_Tfng.xml b/make/data/cldr/common/main/shi_Tfng.xml index a56ba98a82c..fa97b50b8c1 100644 --- a/make/data/cldr/common/main/shi_Tfng.xml +++ b/make/data/cldr/common/main/shi_Tfng.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shi_Tfng_MA.xml b/make/data/cldr/common/main/shi_Tfng_MA.xml index 7ad4ef236b7..63001b5c7fb 100644 --- a/make/data/cldr/common/main/shi_Tfng_MA.xml +++ b/make/data/cldr/common/main/shi_Tfng_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shn.xml b/make/data/cldr/common/main/shn.xml index e13c174e7f0..4235172f367 100644 --- a/make/data/cldr/common/main/shn.xml +++ b/make/data/cldr/common/main/shn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shn_MM.xml b/make/data/cldr/common/main/shn_MM.xml index 3433e268995..ae944bf3420 100644 --- a/make/data/cldr/common/main/shn_MM.xml +++ b/make/data/cldr/common/main/shn_MM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/shn_TH.xml b/make/data/cldr/common/main/shn_TH.xml index 9a6819b9544..32a425c9b40 100644 --- a/make/data/cldr/common/main/shn_TH.xml +++ b/make/data/cldr/common/main/shn_TH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/si.xml b/make/data/cldr/common/main/si.xml index 3da1a79f82c..86ef2737c6e 100644 --- a/make/data/cldr/common/main/si.xml +++ b/make/data/cldr/common/main/si.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sid.xml b/make/data/cldr/common/main/sid.xml index 3716786521b..a92e68a3459 100644 --- a/make/data/cldr/common/main/sid.xml +++ b/make/data/cldr/common/main/sid.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sid_ET.xml b/make/data/cldr/common/main/sid_ET.xml index f628f2fb25a..29b629c4df4 100644 --- a/make/data/cldr/common/main/sid_ET.xml +++ b/make/data/cldr/common/main/sid_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sk.xml b/make/data/cldr/common/main/sk.xml index be0ac9cb76d..3fbeec27ddb 100644 --- a/make/data/cldr/common/main/sk.xml +++ b/make/data/cldr/common/main/sk.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/skr.xml b/make/data/cldr/common/main/skr.xml index c8687dc4722..88729169b8e 100644 --- a/make/data/cldr/common/main/skr.xml +++ b/make/data/cldr/common/main/skr.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/skr_PK.xml b/make/data/cldr/common/main/skr_PK.xml index 2227710bbc4..b2614bad2be 100644 --- a/make/data/cldr/common/main/skr_PK.xml +++ b/make/data/cldr/common/main/skr_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sl.xml b/make/data/cldr/common/main/sl.xml index 3aa91aca4bc..b0fb8038a8b 100644 --- a/make/data/cldr/common/main/sl.xml +++ b/make/data/cldr/common/main/sl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sma.xml b/make/data/cldr/common/main/sma.xml index 5d902dd5eb8..56337ccc8f4 100644 --- a/make/data/cldr/common/main/sma.xml +++ b/make/data/cldr/common/main/sma.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sma_NO.xml b/make/data/cldr/common/main/sma_NO.xml index 12559efffb3..16ee062d37c 100644 --- a/make/data/cldr/common/main/sma_NO.xml +++ b/make/data/cldr/common/main/sma_NO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sma_SE.xml b/make/data/cldr/common/main/sma_SE.xml index 183903b78aa..600fb9fe6ac 100644 --- a/make/data/cldr/common/main/sma_SE.xml +++ b/make/data/cldr/common/main/sma_SE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/smj.xml b/make/data/cldr/common/main/smj.xml index e17b382a4e3..2f2d71927e9 100644 --- a/make/data/cldr/common/main/smj.xml +++ b/make/data/cldr/common/main/smj.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/smj_NO.xml b/make/data/cldr/common/main/smj_NO.xml index a2dc043987b..c1bfae31c23 100644 --- a/make/data/cldr/common/main/smj_NO.xml +++ b/make/data/cldr/common/main/smj_NO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/smj_SE.xml b/make/data/cldr/common/main/smj_SE.xml index a4187d0be90..2d14ac2865f 100644 --- a/make/data/cldr/common/main/smj_SE.xml +++ b/make/data/cldr/common/main/smj_SE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/smn.xml b/make/data/cldr/common/main/smn.xml index 58388534b73..d6e4b544b1a 100644 --- a/make/data/cldr/common/main/smn.xml +++ b/make/data/cldr/common/main/smn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/smn_FI.xml b/make/data/cldr/common/main/smn_FI.xml index 8c54143bb10..04fc344983a 100644 --- a/make/data/cldr/common/main/smn_FI.xml +++ b/make/data/cldr/common/main/smn_FI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sms.xml b/make/data/cldr/common/main/sms.xml index 7930636d844..8d57359d4c8 100644 --- a/make/data/cldr/common/main/sms.xml +++ b/make/data/cldr/common/main/sms.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sms_FI.xml b/make/data/cldr/common/main/sms_FI.xml index 91056a71a5e..07c7be6f7e8 100644 --- a/make/data/cldr/common/main/sms_FI.xml +++ b/make/data/cldr/common/main/sms_FI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sn.xml b/make/data/cldr/common/main/sn.xml index 50e8b24856f..006c7d0b14b 100644 --- a/make/data/cldr/common/main/sn.xml +++ b/make/data/cldr/common/main/sn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sn_ZW.xml b/make/data/cldr/common/main/sn_ZW.xml index 2883241e470..4aa04059c50 100644 --- a/make/data/cldr/common/main/sn_ZW.xml +++ b/make/data/cldr/common/main/sn_ZW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/so.xml b/make/data/cldr/common/main/so.xml index 724b401732b..f2d5323c230 100644 --- a/make/data/cldr/common/main/so.xml +++ b/make/data/cldr/common/main/so.xml @@ -1,8 +1,8 @@ - @@ -1027,7 +1027,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Isku hagaajinta Farta shiineeska Isku hagaajinta foonbuuga Isku hagaajinta Pinyin - Isku hagaajinta Reformed Raadinta Guud Raadinta Shibanaha Hangul Amarka Kala Soocidda Caadiga ah @@ -2758,9 +2757,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Melboon - - Kuriy - Hubaart @@ -2890,9 +2886,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Karestoon - - Yelowneyf - Iswift Karent @@ -2908,27 +2901,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Resoluut - - Reyni Rifer - Raankin Inleet Atikokaan - - Tanda Baay - - - Nibiigoon - Iqaaluut - - Bangnirtuung - Moonktoon @@ -3616,27 +3597,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Daresalaam - - Usgorod - Kiyeef Simferobol - - Saborosey - Kambaala Noom - - Joonston - Anjorage @@ -4316,11 +4288,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waqtiga Dharaarta ee Lod How - - - Waqtiga Makquwariy Aylaan - - Watiga Magedan @@ -4360,13 +4327,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waqtiga Mawson - - - Waqtiga Waqooyi-Galbeed Meksiko - Waqtiga Caadiga Ah ee Waqooyi-Galbeed Meksiko - Waqtiga Dharaarta ee Waqooyi-Galbeed Meksiko - - Waqtiga Baasifikada Meksiko diff --git a/make/data/cldr/common/main/so_DJ.xml b/make/data/cldr/common/main/so_DJ.xml index 7b369738b2d..fdcc7fea0e1 100644 --- a/make/data/cldr/common/main/so_DJ.xml +++ b/make/data/cldr/common/main/so_DJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/so_ET.xml b/make/data/cldr/common/main/so_ET.xml index 2c5f270fd53..8829571b928 100644 --- a/make/data/cldr/common/main/so_ET.xml +++ b/make/data/cldr/common/main/so_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/so_KE.xml b/make/data/cldr/common/main/so_KE.xml index 7c2b020044c..f117c320940 100644 --- a/make/data/cldr/common/main/so_KE.xml +++ b/make/data/cldr/common/main/so_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/so_SO.xml b/make/data/cldr/common/main/so_SO.xml index 5bf9d753c0c..a576aff8c65 100644 --- a/make/data/cldr/common/main/so_SO.xml +++ b/make/data/cldr/common/main/so_SO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sq.xml b/make/data/cldr/common/main/sq.xml index 9c6871e4f93..ccffdff0a04 100644 --- a/make/data/cldr/common/main/sq.xml +++ b/make/data/cldr/common/main/sq.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sq_MK.xml b/make/data/cldr/common/main/sq_MK.xml index 9e98620ffee..1b195b20744 100644 --- a/make/data/cldr/common/main/sq_MK.xml +++ b/make/data/cldr/common/main/sq_MK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sq_XK.xml b/make/data/cldr/common/main/sq_XK.xml index 96570d04036..a876cedc6ae 100644 --- a/make/data/cldr/common/main/sq_XK.xml +++ b/make/data/cldr/common/main/sq_XK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr.xml b/make/data/cldr/common/main/sr.xml index a92f8ddbffe..3b6e777f96b 100644 --- a/make/data/cldr/common/main/sr.xml +++ b/make/data/cldr/common/main/sr.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr_Cyrl_BA.xml b/make/data/cldr/common/main/sr_Cyrl_BA.xml index e29c6634342..18516d2272d 100644 --- a/make/data/cldr/common/main/sr_Cyrl_BA.xml +++ b/make/data/cldr/common/main/sr_Cyrl_BA.xml @@ -1,8 +1,8 @@ - @@ -80,7 +80,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic редослијед сортирања у рјечнику подразумијевани Unicode редослијед сортирања фонетски редослијед сортирања - реформисани редослијед сортирања претрага опште намјене стандардни редослијед сортирања редослијед сортирања радикалних потеза @@ -1082,11 +1081,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лорд Хов, љетње вријеме - - - острво Маквори вријеме - - Магадан вријеме @@ -1126,13 +1120,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мосон вријеме - - - Сјеверозападни Мексико - Сјеверозападни Мексико, стандардно вријеме - Сјеверозападни Мексико, летње вријеме - - Мексички Пацифик diff --git a/make/data/cldr/common/main/sr_Cyrl_ME.xml b/make/data/cldr/common/main/sr_Cyrl_ME.xml index b6888b6ea04..038894034b8 100644 --- a/make/data/cldr/common/main/sr_Cyrl_ME.xml +++ b/make/data/cldr/common/main/sr_Cyrl_ME.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr_Cyrl_RS.xml b/make/data/cldr/common/main/sr_Cyrl_RS.xml index 31863ae9d74..7006e981801 100644 --- a/make/data/cldr/common/main/sr_Cyrl_RS.xml +++ b/make/data/cldr/common/main/sr_Cyrl_RS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr_Cyrl_XK.xml b/make/data/cldr/common/main/sr_Cyrl_XK.xml index 102831214b2..0d2afec0266 100644 --- a/make/data/cldr/common/main/sr_Cyrl_XK.xml +++ b/make/data/cldr/common/main/sr_Cyrl_XK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr_Latn.xml b/make/data/cldr/common/main/sr_Latn.xml index 87f6bbf4949..277db9469f7 100644 --- a/make/data/cldr/common/main/sr_Latn.xml +++ b/make/data/cldr/common/main/sr_Latn.xml @@ -1,8 +1,8 @@ - @@ -1115,7 +1115,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sortiranje kao telefonski imenik fonetski redosled sortiranja pinjin sortiranje - reformisani redosled sortiranja pretraga opšte namene Pretraga prema hangul početnom suglasniku standardni redosled sortiranja @@ -2673,9 +2672,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, letnje vreme {0}, standardno vreme - - Santa Izabel - Koordinisano univerzalno vreme @@ -2798,9 +2794,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Melburn - - Kari - Hobart @@ -2954,9 +2947,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kreston - - Jelounajf - Edmonton @@ -2975,30 +2965,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Resolut - - Rejni River - Rankin Inlet Koral Harbur - - Tander Bej - - - Nipigon - Toronto Ikvaluit - - Pangnirtung - Monkton @@ -3812,18 +3790,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dar-es-Salam - - Užgorod - Kijev Simferopolj - - Zaporožje - Kampala @@ -3842,9 +3814,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Honolulu - - Džonston - Enkoridž @@ -4557,11 +4526,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Makao letnje računanje vremena - - - Ostrvo Makveri vreme - - Magadan vreme @@ -4601,13 +4565,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Moson vreme - - - Severozapadni Meksiko - Severozapadni Meksiko, standardno vreme - Severozapadni Meksiko, letnje vreme - - Meksički Pacifik diff --git a/make/data/cldr/common/main/sr_Latn_BA.xml b/make/data/cldr/common/main/sr_Latn_BA.xml index 1bd4f55afe0..9dd83baddbb 100644 --- a/make/data/cldr/common/main/sr_Latn_BA.xml +++ b/make/data/cldr/common/main/sr_Latn_BA.xml @@ -1,8 +1,8 @@ - @@ -80,7 +80,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic redoslijed sortiranja u rječniku podrazumijevani Unicode redoslijed sortiranja fonetski redoslijed sortiranja - reformisani redoslijed sortiranja pretraga opšte namjene standardni redoslijed sortiranja redoslijed sortiranja radikalnih poteza @@ -1082,11 +1081,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Hov, ljetnje vrijeme - - - ostrvo Makvori vrijeme - - Magadan vrijeme @@ -1126,13 +1120,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Moson vrijeme - - - Sjeverozapadni Meksiko - Sjeverozapadni Meksiko, standardno vrijeme - Sjeverozapadni Meksiko, letnje vrijeme - - Meksički Pacifik diff --git a/make/data/cldr/common/main/sr_Latn_ME.xml b/make/data/cldr/common/main/sr_Latn_ME.xml index 5853439f3c6..be0b66fc070 100644 --- a/make/data/cldr/common/main/sr_Latn_ME.xml +++ b/make/data/cldr/common/main/sr_Latn_ME.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr_Latn_RS.xml b/make/data/cldr/common/main/sr_Latn_RS.xml index aace7e587ab..04102a3a7d6 100644 --- a/make/data/cldr/common/main/sr_Latn_RS.xml +++ b/make/data/cldr/common/main/sr_Latn_RS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sr_Latn_XK.xml b/make/data/cldr/common/main/sr_Latn_XK.xml index 4d342567f76..f655d5dbe82 100644 --- a/make/data/cldr/common/main/sr_Latn_XK.xml +++ b/make/data/cldr/common/main/sr_Latn_XK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ss.xml b/make/data/cldr/common/main/ss.xml index 37807457ad1..c86a4a9c653 100644 --- a/make/data/cldr/common/main/ss.xml +++ b/make/data/cldr/common/main/ss.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ss_SZ.xml b/make/data/cldr/common/main/ss_SZ.xml index fa930615ead..440f7ef0f89 100644 --- a/make/data/cldr/common/main/ss_SZ.xml +++ b/make/data/cldr/common/main/ss_SZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ss_ZA.xml b/make/data/cldr/common/main/ss_ZA.xml index 9e512c4d8b1..f57011adf51 100644 --- a/make/data/cldr/common/main/ss_ZA.xml +++ b/make/data/cldr/common/main/ss_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ssy.xml b/make/data/cldr/common/main/ssy.xml index 02e4380d812..ec9d3508fe4 100644 --- a/make/data/cldr/common/main/ssy.xml +++ b/make/data/cldr/common/main/ssy.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ssy_ER.xml b/make/data/cldr/common/main/ssy_ER.xml index 33924045617..0953fc3c828 100644 --- a/make/data/cldr/common/main/ssy_ER.xml +++ b/make/data/cldr/common/main/ssy_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/st.xml b/make/data/cldr/common/main/st.xml index 95f066593d2..6ecdf2d3a01 100644 --- a/make/data/cldr/common/main/st.xml +++ b/make/data/cldr/common/main/st.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/st_LS.xml b/make/data/cldr/common/main/st_LS.xml index 5b5f213072e..508573ff653 100644 --- a/make/data/cldr/common/main/st_LS.xml +++ b/make/data/cldr/common/main/st_LS.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/st_ZA.xml b/make/data/cldr/common/main/st_ZA.xml index 8457779ae89..c575262cfe5 100644 --- a/make/data/cldr/common/main/st_ZA.xml +++ b/make/data/cldr/common/main/st_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/su.xml b/make/data/cldr/common/main/su.xml index d3699a0431e..57eec539131 100644 --- a/make/data/cldr/common/main/su.xml +++ b/make/data/cldr/common/main/su.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/su_Latn.xml b/make/data/cldr/common/main/su_Latn.xml index 34ea37e137c..65f70aab8cb 100644 --- a/make/data/cldr/common/main/su_Latn.xml +++ b/make/data/cldr/common/main/su_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/su_Latn_ID.xml b/make/data/cldr/common/main/su_Latn_ID.xml index 1f7b36a1c37..fdac0d2c9e3 100644 --- a/make/data/cldr/common/main/su_Latn_ID.xml +++ b/make/data/cldr/common/main/su_Latn_ID.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sv.xml b/make/data/cldr/common/main/sv.xml index ddaf56ef0e2..72eabf6da6a 100644 --- a/make/data/cldr/common/main/sv.xml +++ b/make/data/cldr/common/main/sv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sv_FI.xml b/make/data/cldr/common/main/sv_FI.xml index b218456e062..5d651579c59 100644 --- a/make/data/cldr/common/main/sv_FI.xml +++ b/make/data/cldr/common/main/sv_FI.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sv_SE.xml b/make/data/cldr/common/main/sv_SE.xml index c72518baabc..de404ba5273 100644 --- a/make/data/cldr/common/main/sv_SE.xml +++ b/make/data/cldr/common/main/sv_SE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sw.xml b/make/data/cldr/common/main/sw.xml index 01f309baa3d..163277ea1d7 100644 --- a/make/data/cldr/common/main/sw.xml +++ b/make/data/cldr/common/main/sw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sw_KE.xml b/make/data/cldr/common/main/sw_KE.xml index c37448e8370..cae0a900b0e 100644 --- a/make/data/cldr/common/main/sw_KE.xml +++ b/make/data/cldr/common/main/sw_KE.xml @@ -1,8 +1,8 @@ - @@ -719,11 +719,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saa za Majira ya Joto za Krasnoyarsk - - - Saa za Makwuarie - - Saa za Magadan @@ -748,13 +743,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saa za Majira ya Joto za Morisi - - - Saa za Kaskazini Magharibi mwa Meksiko - Saa za Wastani za Kaskazini Magharibi mwa Meksiko - Saa za Mchana za Kaskazini Magharibi mwa Meksiko - - Saa za Ulaanbataar diff --git a/make/data/cldr/common/main/sw_TZ.xml b/make/data/cldr/common/main/sw_TZ.xml index 93bba6d4019..0f77a90f4f2 100644 --- a/make/data/cldr/common/main/sw_TZ.xml +++ b/make/data/cldr/common/main/sw_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/sw_UG.xml b/make/data/cldr/common/main/sw_UG.xml index 9ccb845a124..97567fa2564 100644 --- a/make/data/cldr/common/main/sw_UG.xml +++ b/make/data/cldr/common/main/sw_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/syr.xml b/make/data/cldr/common/main/syr.xml index e73f1ba1517..a3c6a63ea11 100644 --- a/make/data/cldr/common/main/syr.xml +++ b/make/data/cldr/common/main/syr.xml @@ -1,8 +1,8 @@ - @@ -932,7 +932,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܫܒܘܥܐ w ܕܫܢܬܐ Y - {0}  –  {1} + {0} – {1} y G – y G y – y G @@ -1550,9 +1550,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܟܪܝܣܬܘܢ - - ܝܠܘܢܝܦ - ܐܕܡܘܢܬܘܢ @@ -1571,30 +1568,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܪܝܣܘܠܘܬ - - ܢܗܪܐ ܕܪܥܢܝ - ܪܐܢܟܢ ܐܢܠܝܬ ܐܬܝܟܘܟܐܢ - - ܬܐܢܕܐܪ ܒܐܝ - - - ܢܝܦܝܓܘܢ - ܬܘܪܘܢܬܘ ܐܝܩܠܘܝܬ - - ܦܐܢܓܢܝܪܬܘܢܓ - ܡܘܢܟܬܘܢ @@ -2405,18 +2390,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܕܐܪ ܫܠܡܐ - - ܐܘܙܓܘܪܘܕ - ܟܝܝܒ ܣܡܦܪܘܦܠ - - ܙܐܦܘܪܝܓܝ - ܟܐܡܦܐܠܐ @@ -2432,9 +2411,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܢܘܡ - - ܓܘܢܣܬܘܢ - ܐܢܟܘܪܓ @@ -3134,11 +3110,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܡܐܟܐܘ - - - ܥܕܢܐ ܕܓܙܪܬܐ ܡܐܟܐܘܪܝ - - ܥܕܢܐ ܕܡܐܓܐܕܐܢ @@ -3178,13 +3149,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܥܕܢܐ ܕܡܐܘܣܘܢ - - - ܥܕܢܐ ܓܪܒܝ ܡܥܪܒ ܡܟܣܝܩܘ - ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܓܪܒܝ ܡܥܪܒ ܡܟܣܝܩܘ - ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܓܪܒܝ ܡܥܪܒ ܡܟܣܝܩܘ - - ܥܕܢܐ ܕܡܟܣܝܩܘ ܫܝܢܝܬܐ diff --git a/make/data/cldr/common/main/syr_IQ.xml b/make/data/cldr/common/main/syr_IQ.xml index 01741894830..c70f4db66ab 100644 --- a/make/data/cldr/common/main/syr_IQ.xml +++ b/make/data/cldr/common/main/syr_IQ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/syr_SY.xml b/make/data/cldr/common/main/syr_SY.xml index 7a342c7a419..4260f446630 100644 --- a/make/data/cldr/common/main/syr_SY.xml +++ b/make/data/cldr/common/main/syr_SY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/szl.xml b/make/data/cldr/common/main/szl.xml index 3b601e77a3b..232e3f91bb5 100644 --- a/make/data/cldr/common/main/szl.xml +++ b/make/data/cldr/common/main/szl.xml @@ -1,8 +1,8 @@ - @@ -1613,9 +1613,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wiedyń - - Currie - Maarianhamina @@ -2134,18 +2131,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tajpej - - Użgorod - Kijōw Symferopol - - Zaporoże - Beulah, Pōłnocno Dakota @@ -2713,13 +2704,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wyspy Marshalla - - - Meksyk Pōłnocno-Zachodni - Meksyk Pōłnocno-Zachodni (sztandardowy czas) - Meksyk Pōłnocno-Zachodni (latowy czas) - - Meksyk (czas pacyficzny) diff --git a/make/data/cldr/common/main/szl_PL.xml b/make/data/cldr/common/main/szl_PL.xml index bb8c99c383c..f7d6bb206a8 100644 --- a/make/data/cldr/common/main/szl_PL.xml +++ b/make/data/cldr/common/main/szl_PL.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ta.xml b/make/data/cldr/common/main/ta.xml index 12d1a33cc80..922853f2c13 100644 --- a/make/data/cldr/common/main/ta.xml +++ b/make/data/cldr/common/main/ta.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ta_LK.xml b/make/data/cldr/common/main/ta_LK.xml index fb4f6f1f29d..f6fac9f6b17 100644 --- a/make/data/cldr/common/main/ta_LK.xml +++ b/make/data/cldr/common/main/ta_LK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ta_MY.xml b/make/data/cldr/common/main/ta_MY.xml index 55a55c25d6d..a893525396a 100644 --- a/make/data/cldr/common/main/ta_MY.xml +++ b/make/data/cldr/common/main/ta_MY.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ta_SG.xml b/make/data/cldr/common/main/ta_SG.xml index e274aa65866..9b3acf30d75 100644 --- a/make/data/cldr/common/main/ta_SG.xml +++ b/make/data/cldr/common/main/ta_SG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/te.xml b/make/data/cldr/common/main/te.xml index 22469578916..91e75e220ee 100644 --- a/make/data/cldr/common/main/te.xml +++ b/make/data/cldr/common/main/te.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/teo.xml b/make/data/cldr/common/main/teo.xml index 7cc175b207d..d1a6b911446 100644 --- a/make/data/cldr/common/main/teo.xml +++ b/make/data/cldr/common/main/teo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/teo_KE.xml b/make/data/cldr/common/main/teo_KE.xml index 460b0b12a7c..40e34580b1f 100644 --- a/make/data/cldr/common/main/teo_KE.xml +++ b/make/data/cldr/common/main/teo_KE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/teo_UG.xml b/make/data/cldr/common/main/teo_UG.xml index 2f531c0a412..f2659738cfb 100644 --- a/make/data/cldr/common/main/teo_UG.xml +++ b/make/data/cldr/common/main/teo_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tg.xml b/make/data/cldr/common/main/tg.xml index ada229a23d3..b721ac4f440 100644 --- a/make/data/cldr/common/main/tg.xml +++ b/make/data/cldr/common/main/tg.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tg_TJ.xml b/make/data/cldr/common/main/tg_TJ.xml index 096cf9f2a19..6b8d827b269 100644 --- a/make/data/cldr/common/main/tg_TJ.xml +++ b/make/data/cldr/common/main/tg_TJ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/th.xml b/make/data/cldr/common/main/th.xml index 99d8c8a696b..21624f3245b 100644 --- a/make/data/cldr/common/main/th.xml +++ b/make/data/cldr/common/main/th.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ti.xml b/make/data/cldr/common/main/ti.xml index 287ad6ac7dd..cec0852764d 100644 --- a/make/data/cldr/common/main/ti.xml +++ b/make/data/cldr/common/main/ti.xml @@ -1,8 +1,8 @@ - @@ -1615,9 +1615,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic መልበርን - - ኩሪ - ሆባርት @@ -1771,9 +1768,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ክረስተን - - የለውናይፍ - ኤድመንተን @@ -1792,30 +1786,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ረዞሉት - - ረይኒ ሪቨር - ራንኪን ኢንለት ኣቲኮካን - - ዛንደር በይ - - - ኒፒጎን - ቶሮንቶ ኢቃልዊት - - ፓንግኒርተንግ - ሞንክተን @@ -2629,18 +2611,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ዳር ኤስ ሳላም - - ኡዝጎሮድ - ክየቭ ሲምፈሮፖል - - ዛፖሪዥያ - ካምፓላ @@ -2659,9 +2635,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ሆኖሉሉ - - ጆንስተን - ኣንኮረጅ diff --git a/make/data/cldr/common/main/ti_ER.xml b/make/data/cldr/common/main/ti_ER.xml index 44e206c8249..4ee2721cf46 100644 --- a/make/data/cldr/common/main/ti_ER.xml +++ b/make/data/cldr/common/main/ti_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ti_ET.xml b/make/data/cldr/common/main/ti_ET.xml index 8aa6cc47d11..ec8c7604eb8 100644 --- a/make/data/cldr/common/main/ti_ET.xml +++ b/make/data/cldr/common/main/ti_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tig.xml b/make/data/cldr/common/main/tig.xml index 2eecec45382..d59e6eb4a68 100644 --- a/make/data/cldr/common/main/tig.xml +++ b/make/data/cldr/common/main/tig.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tig_ER.xml b/make/data/cldr/common/main/tig_ER.xml index 4a946eb9da7..66096312894 100644 --- a/make/data/cldr/common/main/tig_ER.xml +++ b/make/data/cldr/common/main/tig_ER.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tk.xml b/make/data/cldr/common/main/tk.xml index df81503b8ee..f97a3d7b2d7 100644 --- a/make/data/cldr/common/main/tk.xml +++ b/make/data/cldr/common/main/tk.xml @@ -1,8 +1,8 @@ - @@ -2154,9 +2154,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} wagty {0} tomusky wagty {0} standart wagty - - Santa-Izabel - Utgaşdyrylýan ähliumumy wagt @@ -2258,9 +2255,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Melburn - - Kerri - Sidneý @@ -2369,9 +2363,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kreston - - Ýellounaýf - Swift-Karent @@ -2384,21 +2375,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rezolýut - - Reýni-Riwer - Rankin-Inlet - - Tander-Beý - Ikaluit - - Pangnirtang - Monkton @@ -3006,15 +2988,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dar-es-Salam - - Užgorod - Kiýew - - Zaporožýe - Midueý @@ -3030,9 +3006,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gonolulu - - Jonston - Ankoridž @@ -3642,11 +3615,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord-Hau tomusky wagty - - - Makkuori adasy wagty - - Magadan wagty @@ -3686,13 +3654,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mouson wagty - - - Demirgazyk-günbatar Meksika wagty - Demirgazyk-günbatar Meksika standart wagty - Demirgazyk-günbatar Meksika tomusky wagty - - Meksikan Ýuwaş umman wagty diff --git a/make/data/cldr/common/main/tk_TM.xml b/make/data/cldr/common/main/tk_TM.xml index 84a74cc655b..4a14ee3ade1 100644 --- a/make/data/cldr/common/main/tk_TM.xml +++ b/make/data/cldr/common/main/tk_TM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tn.xml b/make/data/cldr/common/main/tn.xml index c6f1c4b44d3..7618674e353 100644 --- a/make/data/cldr/common/main/tn.xml +++ b/make/data/cldr/common/main/tn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tn_BW.xml b/make/data/cldr/common/main/tn_BW.xml index 9a07e5f9c3c..ec774774ade 100644 --- a/make/data/cldr/common/main/tn_BW.xml +++ b/make/data/cldr/common/main/tn_BW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tn_ZA.xml b/make/data/cldr/common/main/tn_ZA.xml index d0a698ebd79..a4675dc9514 100644 --- a/make/data/cldr/common/main/tn_ZA.xml +++ b/make/data/cldr/common/main/tn_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/to.xml b/make/data/cldr/common/main/to.xml index da45f39b3e6..841da2c8d95 100644 --- a/make/data/cldr/common/main/to.xml +++ b/make/data/cldr/common/main/to.xml @@ -1,8 +1,8 @@ - @@ -2688,9 +2688,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Taimi {0} {0} Taimi liliu {0} Taimi totonu - - Santa Isabel - taimi fakaemāmani @@ -2711,9 +2708,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Melipoane - - Currie - Senē @@ -2854,9 +2848,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sao Tomé - - Uzhhorod - Kiev @@ -2874,9 +2865,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Honolulu - - Sionesitoni - Niu ʻIoke @@ -3456,11 +3444,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic houa fakamakau taimi liliu - - - houa fakamotumakuali - - houa fakalūsia-makatani @@ -3500,13 +3483,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic houa fakamausoni - - - houa fakamekisikou-tokelauhihifo - houa fakamekisikou-tokelauhihifo taimi totonu - houa fakamekisikou-tokelauhihifo taimi liliu - - houa fakamekisikou-pasifika diff --git a/make/data/cldr/common/main/to_TO.xml b/make/data/cldr/common/main/to_TO.xml index 901ddb9da91..bc46c596dd2 100644 --- a/make/data/cldr/common/main/to_TO.xml +++ b/make/data/cldr/common/main/to_TO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tok.xml b/make/data/cldr/common/main/tok.xml index 9b0f50216db..65fee38557a 100644 --- a/make/data/cldr/common/main/tok.xml +++ b/make/data/cldr/common/main/tok.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tok_001.xml b/make/data/cldr/common/main/tok_001.xml index 69d31266dd5..d70868f3cff 100644 --- a/make/data/cldr/common/main/tok_001.xml +++ b/make/data/cldr/common/main/tok_001.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tpi.xml b/make/data/cldr/common/main/tpi.xml index 2b2d74642cd..97e55f31e31 100644 --- a/make/data/cldr/common/main/tpi.xml +++ b/make/data/cldr/common/main/tpi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tpi_PG.xml b/make/data/cldr/common/main/tpi_PG.xml index 59c299a7362..42a5bfe3851 100644 --- a/make/data/cldr/common/main/tpi_PG.xml +++ b/make/data/cldr/common/main/tpi_PG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tr.xml b/make/data/cldr/common/main/tr.xml index c26ea7a401a..e597dbb5cf6 100644 --- a/make/data/cldr/common/main/tr.xml +++ b/make/data/cldr/common/main/tr.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tr_TR.xml b/make/data/cldr/common/main/tr_TR.xml index 87c10bb8eec..b5f4f6b9907 100644 --- a/make/data/cldr/common/main/tr_TR.xml +++ b/make/data/cldr/common/main/tr_TR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/trv.xml b/make/data/cldr/common/main/trv.xml index 3675a5afcea..648691d9274 100644 --- a/make/data/cldr/common/main/trv.xml +++ b/make/data/cldr/common/main/trv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/trv_TW.xml b/make/data/cldr/common/main/trv_TW.xml index f8194882dcf..a29c48baf71 100644 --- a/make/data/cldr/common/main/trv_TW.xml +++ b/make/data/cldr/common/main/trv_TW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/trw.xml b/make/data/cldr/common/main/trw.xml index 4a63b955632..2226a7d3c3f 100644 --- a/make/data/cldr/common/main/trw.xml +++ b/make/data/cldr/common/main/trw.xml @@ -1,8 +1,8 @@ - @@ -1211,9 +1211,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ملبورن - - کیوری - ہوبارٹ @@ -1367,9 +1364,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic کریسٹون - - ایلو نائف - ایڈمونٹن @@ -1388,30 +1382,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ریزولیوٹ - - رینی ریور - رینکن انلیٹ اٹیکوکن - - تھنڈر بے - - - نپیگون - ٹورنٹو ایکالوئٹ - - پینگنِرٹنگ - مونکٹن @@ -2219,18 +2201,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic دار السلام - - ازہوراڈ - کیو سمفروپول - - زیپوروزائی - کیمپالا @@ -2246,9 +2222,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic نوم - - جانسٹن - اینکریج @@ -2884,11 +2857,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic لارڈ ہووے ڈے لائٹ ٹائم - - - مکوآری آئلینڈ سی وَخ - - میگیدن ٹائم @@ -2928,13 +2896,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ماؤسن ٹائم - - - شمال مغربی میکسیکو ٹائم - شمال مغربی میکسیکو اسٹینڈرڈ ٹائم - شمال مغربی میکسیکو ڈے لائٹ ٹائم - - میکسیکن پیسفک ٹائم diff --git a/make/data/cldr/common/main/trw_PK.xml b/make/data/cldr/common/main/trw_PK.xml index c7ddcf83557..ac600521497 100644 --- a/make/data/cldr/common/main/trw_PK.xml +++ b/make/data/cldr/common/main/trw_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ts.xml b/make/data/cldr/common/main/ts.xml index d7859e46b9c..c9d2049c577 100644 --- a/make/data/cldr/common/main/ts.xml +++ b/make/data/cldr/common/main/ts.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ts_ZA.xml b/make/data/cldr/common/main/ts_ZA.xml index 4cb6219d8d8..7b5b0040d33 100644 --- a/make/data/cldr/common/main/ts_ZA.xml +++ b/make/data/cldr/common/main/ts_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tt.xml b/make/data/cldr/common/main/tt.xml index 8b8f6056fd9..d616a87b68b 100644 --- a/make/data/cldr/common/main/tt.xml +++ b/make/data/cldr/common/main/tt.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tt_RU.xml b/make/data/cldr/common/main/tt_RU.xml index 512891763ae..457e22723e5 100644 --- a/make/data/cldr/common/main/tt_RU.xml +++ b/make/data/cldr/common/main/tt_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/twq.xml b/make/data/cldr/common/main/twq.xml index 162b1324198..879b928c211 100644 --- a/make/data/cldr/common/main/twq.xml +++ b/make/data/cldr/common/main/twq.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/twq_NE.xml b/make/data/cldr/common/main/twq_NE.xml index f8d6bfcb8d8..4cd326ae69f 100644 --- a/make/data/cldr/common/main/twq_NE.xml +++ b/make/data/cldr/common/main/twq_NE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tyv.xml b/make/data/cldr/common/main/tyv.xml index 466f67311d5..cb00198bf97 100644 --- a/make/data/cldr/common/main/tyv.xml +++ b/make/data/cldr/common/main/tyv.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tyv_RU.xml b/make/data/cldr/common/main/tyv_RU.xml index 34585945091..1968e81a13a 100644 --- a/make/data/cldr/common/main/tyv_RU.xml +++ b/make/data/cldr/common/main/tyv_RU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tzm.xml b/make/data/cldr/common/main/tzm.xml index 49805934e90..00c6f99b2fd 100644 --- a/make/data/cldr/common/main/tzm.xml +++ b/make/data/cldr/common/main/tzm.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/tzm_MA.xml b/make/data/cldr/common/main/tzm_MA.xml index f91625c497e..bf1595b3bde 100644 --- a/make/data/cldr/common/main/tzm_MA.xml +++ b/make/data/cldr/common/main/tzm_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ug.xml b/make/data/cldr/common/main/ug.xml index 487e699b1d4..3b5bab65654 100644 --- a/make/data/cldr/common/main/ug.xml +++ b/make/data/cldr/common/main/ug.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/uk.xml b/make/data/cldr/common/main/uk.xml index 223699ba04e..74b4fe9fd0b 100644 --- a/make/data/cldr/common/main/uk.xml +++ b/make/data/cldr/common/main/uk.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ur.xml b/make/data/cldr/common/main/ur.xml index 9db822ec560..53f27ecf32d 100644 --- a/make/data/cldr/common/main/ur.xml +++ b/make/data/cldr/common/main/ur.xml @@ -1,8 +1,8 @@ - @@ -383,11 +383,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic کرغستان ٹائم - - - مکوآری آئلینڈ ٹائم - - مالدیپ ٹائم diff --git a/make/data/cldr/common/main/ur_PK.xml b/make/data/cldr/common/main/ur_PK.xml index eb15e80ecfa..15a06e36430 100644 --- a/make/data/cldr/common/main/ur_PK.xml +++ b/make/data/cldr/common/main/ur_PK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/uz.xml b/make/data/cldr/common/main/uz.xml index 2f759633d49..647f507ab45 100644 --- a/make/data/cldr/common/main/uz.xml +++ b/make/data/cldr/common/main/uz.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/uz_Arab_AF.xml b/make/data/cldr/common/main/uz_Arab_AF.xml index e1d987d3f17..2811c51a34d 100644 --- a/make/data/cldr/common/main/uz_Arab_AF.xml +++ b/make/data/cldr/common/main/uz_Arab_AF.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/uz_Cyrl.xml b/make/data/cldr/common/main/uz_Cyrl.xml index 84f031b3ba5..e40915dfde9 100644 --- a/make/data/cldr/common/main/uz_Cyrl.xml +++ b/make/data/cldr/common/main/uz_Cyrl.xml @@ -1,8 +1,8 @@ - @@ -1762,11 +1762,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лорд Хове кундузги вақти - - - Маквари ороли вақти - - Магадан вақти diff --git a/make/data/cldr/common/main/uz_Cyrl_UZ.xml b/make/data/cldr/common/main/uz_Cyrl_UZ.xml index 7275b67c2e3..661662e2a54 100644 --- a/make/data/cldr/common/main/uz_Cyrl_UZ.xml +++ b/make/data/cldr/common/main/uz_Cyrl_UZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/uz_Latn.xml b/make/data/cldr/common/main/uz_Latn.xml index df98fe2f66a..751b7b9ad9d 100644 --- a/make/data/cldr/common/main/uz_Latn.xml +++ b/make/data/cldr/common/main/uz_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/uz_Latn_UZ.xml b/make/data/cldr/common/main/uz_Latn_UZ.xml index f1601335ce8..186352fa45c 100644 --- a/make/data/cldr/common/main/uz_Latn_UZ.xml +++ b/make/data/cldr/common/main/uz_Latn_UZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vai.xml b/make/data/cldr/common/main/vai.xml index 95876167bed..44e89b1a1dd 100644 --- a/make/data/cldr/common/main/vai.xml +++ b/make/data/cldr/common/main/vai.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vai_Latn.xml b/make/data/cldr/common/main/vai_Latn.xml index cfa87ac1fd0..5a3fe8b92d6 100644 --- a/make/data/cldr/common/main/vai_Latn.xml +++ b/make/data/cldr/common/main/vai_Latn.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vai_Latn_LR.xml b/make/data/cldr/common/main/vai_Latn_LR.xml index a346f6da827..35c079808c8 100644 --- a/make/data/cldr/common/main/vai_Latn_LR.xml +++ b/make/data/cldr/common/main/vai_Latn_LR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vai_Vaii.xml b/make/data/cldr/common/main/vai_Vaii.xml index f3dab1614ff..ff8d2dddc32 100644 --- a/make/data/cldr/common/main/vai_Vaii.xml +++ b/make/data/cldr/common/main/vai_Vaii.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vai_Vaii_LR.xml b/make/data/cldr/common/main/vai_Vaii_LR.xml index 1ef82ace8b7..8d2a6a96a83 100644 --- a/make/data/cldr/common/main/vai_Vaii_LR.xml +++ b/make/data/cldr/common/main/vai_Vaii_LR.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ve.xml b/make/data/cldr/common/main/ve.xml index df005fed71e..bba30a59a3d 100644 --- a/make/data/cldr/common/main/ve.xml +++ b/make/data/cldr/common/main/ve.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/ve_ZA.xml b/make/data/cldr/common/main/ve_ZA.xml index d55f653225d..4f4702d3e87 100644 --- a/make/data/cldr/common/main/ve_ZA.xml +++ b/make/data/cldr/common/main/ve_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vec.xml b/make/data/cldr/common/main/vec.xml index 52d35c8a787..73db662b48b 100644 --- a/make/data/cldr/common/main/vec.xml +++ b/make/data/cldr/common/main/vec.xml @@ -1,8 +1,8 @@ - @@ -1763,9 +1763,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tinpu - - Pang - S. Joani @@ -2215,18 +2212,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dar es Salam - - Ùzgorod - Kiev Sinferòpoli - - Zaporija - Kanpala @@ -2236,9 +2227,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Atolo Wake - - Atolo Johnston - Los Àngeles @@ -2811,11 +2799,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora d’istà de l’Ìzola Lord Howe - - - Ora de l’Ìzola Macquarie - - Ora de Magadan @@ -2855,13 +2838,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora de Mawson - - - Ora de’l Mèsego nord osidentale - Ora normale de’l Mèsego nord osidentale - Ora d’istà de’l Mèsego nord osidentale - - Ora de’l Mèsego de’l Pasìfego diff --git a/make/data/cldr/common/main/vec_IT.xml b/make/data/cldr/common/main/vec_IT.xml index ee6861ddd28..7105959d47a 100644 --- a/make/data/cldr/common/main/vec_IT.xml +++ b/make/data/cldr/common/main/vec_IT.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vi.xml b/make/data/cldr/common/main/vi.xml index 2918de18bcc..29c6d094fb1 100644 --- a/make/data/cldr/common/main/vi.xml +++ b/make/data/cldr/common/main/vi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vmw.xml b/make/data/cldr/common/main/vmw.xml index 83f19e6428f..659a9e4e4f4 100644 --- a/make/data/cldr/common/main/vmw.xml +++ b/make/data/cldr/common/main/vmw.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vmw_MZ.xml b/make/data/cldr/common/main/vmw_MZ.xml index 8bf4bc264f2..3c6f3b580be 100644 --- a/make/data/cldr/common/main/vmw_MZ.xml +++ b/make/data/cldr/common/main/vmw_MZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vo.xml b/make/data/cldr/common/main/vo.xml index 779ae87acf1..f3ab9dc93e1 100644 --- a/make/data/cldr/common/main/vo.xml +++ b/make/data/cldr/common/main/vo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vo_001.xml b/make/data/cldr/common/main/vo_001.xml index 93848d5accd..489080db299 100644 --- a/make/data/cldr/common/main/vo_001.xml +++ b/make/data/cldr/common/main/vo_001.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vun.xml b/make/data/cldr/common/main/vun.xml index 65f77ebff44..8f618cd9c67 100644 --- a/make/data/cldr/common/main/vun.xml +++ b/make/data/cldr/common/main/vun.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/vun_TZ.xml b/make/data/cldr/common/main/vun_TZ.xml index 7e4002959d9..e7380551a6a 100644 --- a/make/data/cldr/common/main/vun_TZ.xml +++ b/make/data/cldr/common/main/vun_TZ.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wa.xml b/make/data/cldr/common/main/wa.xml index 09cc554c0d6..cf82dc51b86 100644 --- a/make/data/cldr/common/main/wa.xml +++ b/make/data/cldr/common/main/wa.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wa_BE.xml b/make/data/cldr/common/main/wa_BE.xml index 1b6bab96e0c..b3851d6d65d 100644 --- a/make/data/cldr/common/main/wa_BE.xml +++ b/make/data/cldr/common/main/wa_BE.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wae.xml b/make/data/cldr/common/main/wae.xml index 801cb0e21a2..b4f505481b0 100644 --- a/make/data/cldr/common/main/wae.xml +++ b/make/data/cldr/common/main/wae.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wae_CH.xml b/make/data/cldr/common/main/wae_CH.xml index 074f749dcd1..1476edb9eba 100644 --- a/make/data/cldr/common/main/wae_CH.xml +++ b/make/data/cldr/common/main/wae_CH.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wal.xml b/make/data/cldr/common/main/wal.xml index 38c85b68f91..a01abdb2fdc 100644 --- a/make/data/cldr/common/main/wal.xml +++ b/make/data/cldr/common/main/wal.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wal_ET.xml b/make/data/cldr/common/main/wal_ET.xml index 6c199c58faf..7b327c11634 100644 --- a/make/data/cldr/common/main/wal_ET.xml +++ b/make/data/cldr/common/main/wal_ET.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wbp.xml b/make/data/cldr/common/main/wbp.xml index 6e1003e173f..567d70cc058 100644 --- a/make/data/cldr/common/main/wbp.xml +++ b/make/data/cldr/common/main/wbp.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wbp_AU.xml b/make/data/cldr/common/main/wbp_AU.xml index 04068cc1078..c4eb9cd398c 100644 --- a/make/data/cldr/common/main/wbp_AU.xml +++ b/make/data/cldr/common/main/wbp_AU.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wo.xml b/make/data/cldr/common/main/wo.xml index 1eb9bea5abb..fec199e1615 100644 --- a/make/data/cldr/common/main/wo.xml +++ b/make/data/cldr/common/main/wo.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/wo_SN.xml b/make/data/cldr/common/main/wo_SN.xml index 2ccabce5fde..4404a070ba3 100644 --- a/make/data/cldr/common/main/wo_SN.xml +++ b/make/data/cldr/common/main/wo_SN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/xh.xml b/make/data/cldr/common/main/xh.xml index 9d3d8aca861..2f2b457805b 100644 --- a/make/data/cldr/common/main/xh.xml +++ b/make/data/cldr/common/main/xh.xml @@ -1,8 +1,8 @@ - @@ -1180,9 +1180,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic São Tomé - - Uzhhorod - Ho Chi Minh City @@ -1692,11 +1689,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Howe Daylight Time - - - Macquarie Island Time - - Magadan Time @@ -1736,13 +1728,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson Time - - - Northwest Mexico Time - Northwest Mexico Standard Time - Northwest Mexico Daylight Time - - Mexican Pacific Time diff --git a/make/data/cldr/common/main/xh_ZA.xml b/make/data/cldr/common/main/xh_ZA.xml index 147e9f55bd6..9b9f1627eb8 100644 --- a/make/data/cldr/common/main/xh_ZA.xml +++ b/make/data/cldr/common/main/xh_ZA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/xnr.xml b/make/data/cldr/common/main/xnr.xml index d4050236532..1869a6f5f8c 100644 --- a/make/data/cldr/common/main/xnr.xml +++ b/make/data/cldr/common/main/xnr.xml @@ -1,8 +1,8 @@ - @@ -1829,11 +1829,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic लॉर्ड होवे दे ध्याड़े दे उजाले दा टैम - - - मक्वारी टापू दा टैम - - मागादान दा टैम @@ -1873,13 +1868,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic माव्सन दा टैम - - - उत्तर पश्चिमी मेक्सिको दा टैम - उत्तर पश्चिमी मेक्सिको दा मानक टैम - उत्तर पश्चिमी मेक्सिको दे ध्याड़े दे उजाले दा टैम - - मेक्सिकन प्रशांत दा टैम diff --git a/make/data/cldr/common/main/xnr_IN.xml b/make/data/cldr/common/main/xnr_IN.xml index c9a676fb782..09931f3aa1b 100644 --- a/make/data/cldr/common/main/xnr_IN.xml +++ b/make/data/cldr/common/main/xnr_IN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/xog.xml b/make/data/cldr/common/main/xog.xml index e9373ae2cba..08454c0f076 100644 --- a/make/data/cldr/common/main/xog.xml +++ b/make/data/cldr/common/main/xog.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/xog_UG.xml b/make/data/cldr/common/main/xog_UG.xml index a1d12dd6af2..0b882fe9ea5 100644 --- a/make/data/cldr/common/main/xog_UG.xml +++ b/make/data/cldr/common/main/xog_UG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yav.xml b/make/data/cldr/common/main/yav.xml index bbd335e8f90..855051df41d 100644 --- a/make/data/cldr/common/main/yav.xml +++ b/make/data/cldr/common/main/yav.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yav_CM.xml b/make/data/cldr/common/main/yav_CM.xml index 65036387dee..1539a1e7285 100644 --- a/make/data/cldr/common/main/yav_CM.xml +++ b/make/data/cldr/common/main/yav_CM.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yi.xml b/make/data/cldr/common/main/yi.xml index c839c8096ac..412fd89a515 100644 --- a/make/data/cldr/common/main/yi.xml +++ b/make/data/cldr/common/main/yi.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yi_UA.xml b/make/data/cldr/common/main/yi_UA.xml index 2641e12ee71..bf85c1e0b17 100644 --- a/make/data/cldr/common/main/yi_UA.xml +++ b/make/data/cldr/common/main/yi_UA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yo.xml b/make/data/cldr/common/main/yo.xml index a2a4e3cf453..fc47ed7e251 100644 --- a/make/data/cldr/common/main/yo.xml +++ b/make/data/cldr/common/main/yo.xml @@ -1,8 +1,8 @@ - @@ -1683,9 +1683,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ìlú Kírẹstọ́ọ̀nù - - ìlú Yelonáfù - ìlú Edmonton @@ -1704,30 +1701,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ìlú Resolútì - - ìlú Raini Rifà - ìlú Rankin Inlet ìlú àtikọkàn - - ìlú Omi Thunder - - - ìlú Nipigoni - ìlú Toronto ìlú Iqaluit - - ìlú Panituni - ìlú Montoni @@ -2475,11 +2460,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lord Howe Daylight Time - - - Macquarie Island Time - - Magadan Time @@ -2519,13 +2499,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mawson Time - - - Àkókò Apá Ìwọ̀ Oorùn Mẹ́ṣíkò - Àkókò Àfẹnukò Apá Ìwọ̀ Oorùn Mẹ́ṣíkò - Àkókò Ojúmọmọ Apá Ìwọ̀ Oorùn Mẹ́ṣíkò - - Àkókò Pásífíìkì Mẹ́ṣíkò diff --git a/make/data/cldr/common/main/yo_BJ.xml b/make/data/cldr/common/main/yo_BJ.xml index db83646cf1b..df46c47d32b 100644 --- a/make/data/cldr/common/main/yo_BJ.xml +++ b/make/data/cldr/common/main/yo_BJ.xml @@ -1,8 +1,8 @@ - @@ -898,13 +898,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àkókò Ooru Máríshúshì - - - Àkókò Apá Ìwɔ̀ Oorùn Mɛ́shíkò - Àkókò Àfɛnukò Apá Ìwɔ̀ Oorùn Mɛ́shíkò - Àkókò Ojúmɔmɔ Apá Ìwɔ̀ Oorùn Mɛ́shíkò - - Àkókò Pásífíìkì Mɛ́shíkò diff --git a/make/data/cldr/common/main/yo_NG.xml b/make/data/cldr/common/main/yo_NG.xml index 4c27ff826f4..43a18174b67 100644 --- a/make/data/cldr/common/main/yo_NG.xml +++ b/make/data/cldr/common/main/yo_NG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yrl.xml b/make/data/cldr/common/main/yrl.xml index bf2340383d0..2d876b6c3c8 100644 --- a/make/data/cldr/common/main/yrl.xml +++ b/make/data/cldr/common/main/yrl.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yrl_CO.xml b/make/data/cldr/common/main/yrl_CO.xml index 827622c77ce..a0b060a17ab 100644 --- a/make/data/cldr/common/main/yrl_CO.xml +++ b/make/data/cldr/common/main/yrl_CO.xml @@ -1,8 +1,8 @@ - @@ -1258,7 +1258,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 電話簿排序 發音排序 拼音排序 - 改良排序 一般用途搜尋 韓文子音排序 標準排序 @@ -3250,9 +3249,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}時間 {0}夏令時間 {0}標準時間 - - 聖伊薩貝爾 - 協調世界時間 @@ -3375,9 +3371,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 墨爾本 - - 克黎 - 荷巴特 @@ -3531,9 +3524,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 克雷斯頓 - - 耶洛奈夫 - 艾德蒙吞 @@ -3552,30 +3542,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 羅斯魯特 - - 雨河鎮 - 蘭今灣 阿蒂科肯 - - 珊德灣 - - - 尼皮岡 - 多倫多 伊魁特 - - 潘尼爾東 - 蒙克頓 @@ -4389,18 +4367,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic 沙蘭港 - - 烏茲哥洛 - 基輔 辛非洛浦 - - 札波羅結 - 坎帕拉 @@ -4419,9 +4391,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 檀香山 - - 強斯頓 - 安克拉治 @@ -5121,11 +5090,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 澳門夏令時間 - - - 麥覺理時間 - - 馬加丹時間 @@ -5165,13 +5129,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 莫森時間 - - - 墨西哥西北部時間 - 墨西哥西北部標準時間 - 墨西哥西北部夏令時間 - - 墨西哥太平洋時間 diff --git a/make/data/cldr/common/main/yue_Hans.xml b/make/data/cldr/common/main/yue_Hans.xml index 8c1bbf61819..b730d5cbc84 100644 --- a/make/data/cldr/common/main/yue_Hans.xml +++ b/make/data/cldr/common/main/yue_Hans.xml @@ -1,8 +1,8 @@ - @@ -1259,7 +1259,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 电话簿排序 发音排序 拼音排序 - 改良排序 一般用途搜寻 韩文子音排序 标准排序 @@ -3256,9 +3255,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}时间 - - 圣伊萨贝尔 - 协调世界时间 @@ -3381,9 +3377,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 墨尔本 - - 克黎 - 荷巴特 @@ -3537,9 +3530,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 克雷斯顿 - - 耶洛奈夫 - 艾德蒙吞 @@ -3558,30 +3548,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 罗斯鲁特 - - 雨河镇 - 兰今湾 阿蒂科肯 - - 珊德湾 - - - 尼皮冈 - 多伦多 伊魁特 - - 潘尼尔东 - 蒙克顿 @@ -4395,18 +4373,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic 沙兰港 - - 乌兹哥洛 - 基辅 辛非洛浦 - - 札波罗结 - 坎帕拉 @@ -4425,9 +4397,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 檀香山 - - 强斯顿 - 安克拉治 @@ -5127,11 +5096,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 澳门夏令时间 - - - 麦觉理时间 - - 马加丹时间 @@ -5171,13 +5135,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 莫森时间 - - - 墨西哥西北部时间 - 墨西哥西北部标准时间 - 墨西哥西北部夏令时间 - - 墨西哥太平洋时间 diff --git a/make/data/cldr/common/main/yue_Hans_CN.xml b/make/data/cldr/common/main/yue_Hans_CN.xml index 2be260a7927..5a0f87470d0 100644 --- a/make/data/cldr/common/main/yue_Hans_CN.xml +++ b/make/data/cldr/common/main/yue_Hans_CN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yue_Hant.xml b/make/data/cldr/common/main/yue_Hant.xml index 4f24496922e..f34cd5b4287 100644 --- a/make/data/cldr/common/main/yue_Hant.xml +++ b/make/data/cldr/common/main/yue_Hant.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/yue_Hant_HK.xml b/make/data/cldr/common/main/yue_Hant_HK.xml index 56a6841fe58..24920c69cd5 100644 --- a/make/data/cldr/common/main/yue_Hant_HK.xml +++ b/make/data/cldr/common/main/yue_Hant_HK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/za.xml b/make/data/cldr/common/main/za.xml index 7510c24301b..d6b56c0fedd 100644 --- a/make/data/cldr/common/main/za.xml +++ b/make/data/cldr/common/main/za.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/za_CN.xml b/make/data/cldr/common/main/za_CN.xml index 2c53062950f..83256fd63a5 100644 --- a/make/data/cldr/common/main/za_CN.xml +++ b/make/data/cldr/common/main/za_CN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zgh.xml b/make/data/cldr/common/main/zgh.xml index 785ca3aea00..a2492602028 100644 --- a/make/data/cldr/common/main/zgh.xml +++ b/make/data/cldr/common/main/zgh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zgh_MA.xml b/make/data/cldr/common/main/zgh_MA.xml index 239605f578d..d068734cd5f 100644 --- a/make/data/cldr/common/main/zgh_MA.xml +++ b/make/data/cldr/common/main/zgh_MA.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh.xml b/make/data/cldr/common/main/zh.xml index 566c10d3d98..1dcdedd1f6c 100644 --- a/make/data/cldr/common/main/zh.xml +++ b/make/data/cldr/common/main/zh.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh_Hans_CN.xml b/make/data/cldr/common/main/zh_Hans_CN.xml index d0269d75cc3..fcdea0e9e42 100644 --- a/make/data/cldr/common/main/zh_Hans_CN.xml +++ b/make/data/cldr/common/main/zh_Hans_CN.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh_Hans_HK.xml b/make/data/cldr/common/main/zh_Hans_HK.xml index 759b3927384..f94dae7db8c 100644 --- a/make/data/cldr/common/main/zh_Hans_HK.xml +++ b/make/data/cldr/common/main/zh_Hans_HK.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh_Hans_MO.xml b/make/data/cldr/common/main/zh_Hans_MO.xml index 1fb246cac5e..16d25d5eeed 100644 --- a/make/data/cldr/common/main/zh_Hans_MO.xml +++ b/make/data/cldr/common/main/zh_Hans_MO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh_Hans_SG.xml b/make/data/cldr/common/main/zh_Hans_SG.xml index 8f0eb4b99fe..5c85bf323f1 100644 --- a/make/data/cldr/common/main/zh_Hans_SG.xml +++ b/make/data/cldr/common/main/zh_Hans_SG.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh_Hant.xml b/make/data/cldr/common/main/zh_Hant.xml index f266c62ea84..0d2228ccbe1 100644 --- a/make/data/cldr/common/main/zh_Hant.xml +++ b/make/data/cldr/common/main/zh_Hant.xml @@ -1,8 +1,8 @@ - @@ -209,7 +209,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 繁體中文排序 (Big5) 詞典排序 簡體中文排序 (GB2312) - 改革版排序 英制 美制 天城體數字 @@ -1106,9 +1105,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 阿德萊德 - - 卡里 - 荷伯特 @@ -1181,18 +1177,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 道森灣 - - 黃刀鎮 - 愛民頓 - - 雷灣 - - - 尼皮貢 - 哈利法克斯 @@ -1481,18 +1468,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic 達累斯薩拉姆 - - 烏日哥羅德 - 威克島 埃達克 - - 約翰斯頓環礁 - 安克雷奇 @@ -1660,11 +1641,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 科斯雷時間 - - - 麥夸里群島時間 - - 馬爾代夫時間 diff --git a/make/data/cldr/common/main/zh_Hant_MO.xml b/make/data/cldr/common/main/zh_Hant_MO.xml index 156b27ece4d..f941bdd6b45 100644 --- a/make/data/cldr/common/main/zh_Hant_MO.xml +++ b/make/data/cldr/common/main/zh_Hant_MO.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zh_Hant_TW.xml b/make/data/cldr/common/main/zh_Hant_TW.xml index 03fb15fed07..35382c2bf79 100644 --- a/make/data/cldr/common/main/zh_Hant_TW.xml +++ b/make/data/cldr/common/main/zh_Hant_TW.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/main/zu.xml b/make/data/cldr/common/main/zu.xml index 06ac46d877c..94f8e15c8ed 100644 --- a/make/data/cldr/common/main/zu.xml +++ b/make/data/cldr/common/main/zu.xml @@ -1,8 +1,8 @@ - diff --git a/make/data/cldr/common/properties/coverageLevels.txt b/make/data/cldr/common/properties/coverageLevels.txt index fc4a5d31df7..3a2bb78c703 100644 --- a/make/data/cldr/common/properties/coverageLevels.txt +++ b/make/data/cldr/common/properties/coverageLevels.txt @@ -144,7 +144,6 @@ th ; modern ; Thai ti ; basic ; Tigrinya tk ; modern ; Turkmen to ; basic ; Tongan -tok ; basic ; Toki Pona tr ; modern ; Turkish tt ; basic ; Tatar ug ; basic ; Uyghur diff --git a/make/data/cldr/common/supplemental/coverageLevels.xml b/make/data/cldr/common/supplemental/coverageLevels.xml index 81e3af8c00f..457cdc18660 100644 --- a/make/data/cldr/common/supplemental/coverageLevels.xml +++ b/make/data/cldr/common/supplemental/coverageLevels.xml @@ -54,9 +54,9 @@ For terms of use, see http://www.unicode.org/copyright.html - + - + @@ -115,7 +115,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -130,7 +129,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -262,7 +261,6 @@ For terms of use, see http://www.unicode.org/copyright.html - diff --git a/make/data/cldr/common/supplemental/languageGroup.xml b/make/data/cldr/common/supplemental/languageGroup.xml index fcb764ccb64..1b24bd291e4 100644 --- a/make/data/cldr/common/supplemental/languageGroup.xml +++ b/make/data/cldr/common/supplemental/languageGroup.xml @@ -1,8 +1,8 @@ - @@ -11,7 +11,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic bbh bfw bru brv hre irr kdt ktv kuf mkh mmj mun ncq ngt nyl oog pac phg ply sct sss tth tto zng aal ber btf bvw bxe cdc ckq cop cus glo hdy hig hss hwo jaf kbz kul kvj mes mlw mmf omv sem tdk tsh ttr xdm aaq abe alq arp atj ats bla chy ciw cr crj crk crl crm crr csw del dep etc kic mez mia mic mjy moe nnt nsk oj ojb ojc ojs ojw otw pim pot pqm psy qyp sac sjw unm wam xlb xlo xnt xpq - aaa aab aba abi abm abn abo abr abu acd acp ada ade adj adq adu afn afu agb agc agq aha ahl ahp aik aiy ajg ak akd akf akp aku ala anf ann anv anw any aqd aqk asg asj ass ati ato aug avi avn awc ayb ayg ayi ayu azo bab bad bai bax bba bbk bbp bbs bcb bce bcg bci bcn bcs bcv bcz bda bdj bdt bec beh bes bfd bfl bfo bga bgf bgj bgu bif bim bin biv bjg bjt bju bkc bkm ble blo bly bme bmf bmq bnt bnz boe bok bom bov box bqa bqj brm brt bsc bse bsp bsx btc bud buy buz bvi bvj bwh bwj bwy byb byc byf byj bzv bzw bzz cae cbj cbo cbq ccg cch ccj cfd cib cko cli cll cou cpn cry cwt dag dai dam dbg dbi dbt dbu dbv dbw dds deg deq dga dgb dgd dgi dir djm dmb dmm doh doo dop doy dtk dtm dto dts dtu dur duz dya dyi dym dyo dza ebg ebr ee efa efi ega ego ehu eja eka eke eki ekp ekr elm ema emn enn env enw eot epi erh esm etb ets etu etx evh eza eze fah fak fal fam fap fer ff fir fll fni fod fon fub fue fuf fuh fuj fum fuq fuv gaa gba gbg gbh gbp gbq gbr gbs gbx gby gdi ged gej gel geq gix gjn gke gkn glc gmd gmm gmz gnh gnz gol gox goy grh gsl gso gur guw gux gvm gwa gwx gye gyg hag hhr hoe ibb ibe ibm ibn ibr ich idc ide idr ids idu ig igb igl ihi ijo iki ikk iko ikw ilv iqw ish isi iso isu itm its itw izr izz jab jer jid jmr jms jni juh juk juo juw kaj kbp kcc kcg kcj kdh kdm kdx kdz kef ken kes keu kez kfl kfn kgt khj kia kid kkm kku klc klk klo kma kmi kmy knf knp kou kov kow kph kpk kpl kpo kqg kqk kqm kqs krh kro krp krx ksa kss kub kvm kxb kye kza kzc kzr lan lar las ldg ldh ldm ldq lee lef lgq lia lip lma lmp lns lob lof lro luq mae mbv mcj mcs mcu mdd mea mfc mfd mff mfn mfq mfv mgj mgn mgo mhk mij mkl mko mlo moj mor mos mql mru msj msw mtk mua muc muo mxl myg myj myk mzk mzm mzv mzw naj nat naw nbm nbo nbp nbr nbv nbw ncr ncu ndd ndi ndr ndt ndv ndz ned nfr nfu nga ngb nge ngg nhu nie nin njr nko nkq nku nkz nlu nmj nmr nmz nnu nnw noy nqk nsc nti ntm nuh nup nuv nyb nza nzi nzz obu oda odu ofu ogb ogc ogg ogo ogu okb oke oku opa orx otr pbl pbo pbp pcn pil pmb png pnl pnq pny pnz pug pwb pym res ruy saf sav scv sde sev sfw sha shw shz sig sil snf snj snw soy spp sqm srr ssl swf sxw tbm tbz tcd tde tdl tem tfi tgw tgy thy tik tiq tiv tkq tnr toz tsp tsw ttb tug tui tuz tvd twn uda uiv ukw ula umm urh usk uta uth utr uya vag vit vor vut wbf wci wem wib wlx wo wof wom wrn wss wwa www xab xkb xoc xrb xsm xsn xwe xwl yam yay yaz yba ybj ybl yer yky yng ynq yo zna + aaa aab aba abi abm abn abo abr abu acd acp ada ade adj adq adu afn afu agb agc agq aha ahl ahp aik aiy ajg ak akd akf akp aku ala anf ann anv anw any aqd aqk asg asj ass ati ato aug avi avn awc ayb ayg ayi ayu azo bab bad bai bax bba bbk bbp bbs bcb bce bcg bci bcn bcs bcv bcz bda bdj bdt bec beh bes bfd bfl bfo bga bgf bgj bgu bif bim bin biv bjg bjt bju bkc bkm ble blo bly bme bmf bmq bnt bnz boe bok bom bov box bqa bqj brm brt bsc bse bsp bsx btc bud buy buz bvi bvj bwh bwj bwy byb byc byf byj bzv bzw bzz cae cbj cbo cbq ccg cch ccj cfd cib cko cli cll cou cpn cry cwt dag dai dam dbg dbi dbt dbu dbv dbw dds deg deq dga dgb dgd dgi dir djm dmb dmm doh doo dop doy dtk dtm dto dts dtu dur duz dya dyi dym dyo dza ebg ebr ee efa efi ega ego ehu eja eka eke eki ekp ekr elm ema emn enn env enw eot epi erh esm etb ets etu etx evh eza eze fah fak fal fam fap fer ff fir fll fni fod fon fub fue fuf fuh fuj fum fuq fuv gaa gba gbg gbh gbp gbq gbr gbs gbx gby gdi ged gej gel geq gix gjn gke gkn glc gmd gmm gmz gnh gnz gol gox goy grh gsl gso gur guw gux gvm gwa gwx gye gyg hag hhr hoe ibb ibe ibm ibn ibr ich idc ide idr ids idu ig igb igl ihi ijo iki ikk iko ikw ilv iqw ish isi iso isu itm its itw izr izz jab jer jid jmr jms jni juh juk juo juw kaj kbp kcc kcg kcj kdh kdm kdx kdz kef ken kes keu kez kfl kfn kgt khj kia kid kkm kku klc klk klo kma kmi kmy knf knp kou kov kow kph kpk kpl kpo kqg kqk kqm kqs krh kro krp kss kub kvm kxb kye kza kzc kzr lan lar las ldg ldh ldm ldq lee lef lgq lia lip lma lmp lns lob lof lro luq mae mbv mcj mcs mcu mdd mea mfc mfd mff mfn mfq mfv mgj mgn mgo mhk mij mkl mko mlo moj mor mos mql mru msj msw mtk mua muc muo mxl myg myj myk mzk mzm mzv mzw naj nat naw nbm nbo nbp nbr nbv nbw ncr ncu ndd ndi ndr ndt ndv ndz ned nfr nfu nga ngb nge ngg nhu nie nin njr nko nkq nku nkz nlu nmj nmr nmz nnu nnw noy nqk nsc nti ntm nuh nup nuv nyb nza nzi nzz obu oda odu ofu ogb ogc ogg ogo ogu okb oke oku opa orx otr pbl pbo pbp pcn pil pmb png pnl pnq pny pnz pug pwb pym res rsw ruy saf sav scv sde sev sfw sha shw shz sig sil snf snj snw soy spp sqm srr ssl swf sxw tbm tbz tcd tde tdl tem tfi tgw tgy thy tik tiq tiv tkq tnr toz tsp tsw ttb tug tui tuz tvd twn uda uiv ukw ula umm urh usk uta uth utr uya vag vit vor vut wbf wci wem wib wlx wo wof wom wrn wss wwa www xab xkb xoc xrb xsm xsn xwe xwl yam yay yaz yba ybj ybl yer yky yng ynq yo zna apj apk apl apm apw nv alc alg wiy yur @@ -19,7 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic aht apa bcr bea caf chp clc coq crx den dgr gce gwi haa hup ing kkz koy ktw kuu mvb qwt scs sek srs taa tau tcb tce tfn tgx tht tol ttm tuu txc wlk xup aru cul dny jaa pad swx adg adt aea aer aid alh aly amx amy amz ant ard are avm awg awk axe axl ayd bck bdy bia bjb bjy bpt bxi bxj bxn bym bzr dax dbl dda ddj dhg dhl dhr dhu dhx dif dja djb djd djf dji djr dmd dmw drl dth dwu dwy dyn dyy dze eaa fln gbb gbd gbu gbw gdc gdh gdj gdt ggd gia gih gjm gko gll gni gnl gnn gnr gtu gue guf gvn gvy gwm gwu gyf gyy hrp iin ikr jan jao jay jbi jig jui kbe kdd kgl kgs kjn kkp kky kld ktd ktg kux kuy lby lja ljw lku llj lnj lnw mem mep mpj mvl mwf mwp nam nay nbj ngk nha nhf nji nju nly nmv nnr nrk nrl ntg ntj nwg nwo nxn nys nyt nyx okg olk pit piu pjt pkn pnj pnv pnw pti rbp rit rkw rnr rrt rsm rxd rxw tbh tgz thd tju tjw typ ugb uky umd umg ump urf uwa vka vku vma vmb vml vmu wbp wbt wbv wdj wdk wdu wga wgg wgu wgy wie wig wih wij wik wim wkw wky wmb wmi wmt wnm wnn wrb wrg wrh wri wrl wrm wrw wth wua wyb wyi xbb xbe xbg xbp xby xda xdk xgd xgg xgi xgm xgw xjb xmh xmp xmy xni xnk xnu xny xpa xpj xpt xrd xrg xth xul xut xwd xwj xwk xwt xww xya xyj xyk xyt xyy yda yga yia yii yij yil ylr ynd yrm yry yty yub ywg yww yxg yxl zku zmc zmk zmu zmv - aca ame aox apu arw avo bae brg bvv bwi cab cbb ccc cjo cni cot cox cpc crb cuj gae gqn guc ign inp kav kgm kpc mcb mht mmh mpd mpw mzx not pab pbg pib pio plu pnk rgr sar tae ter tnq trn unk wap wau xir yaw ycn yvt + aca ame aox apu arw avo bae brg bvv bwi cab cbb ccc cjo cni cot cox cpc crb cuj gae gqn guc ign inp kav kpc mcb mht mmh mpd mpw mzx not pab pbg pib pio plu pnk rgr sar tae ter tnq trn unk wap wau xir yaw ycn yvt chl cok com crn cup hch hop lui mfy mnr nah ncx nhi npl ntp ood opt pao par pia ser shh stp tac tar tbu tcu tep thh tla tub twr ute var xaw xgf xpo yaq bjo kuw lna lnl mnh nue tor bbj bko byv fmp jgo nla nnh nnz nwe xmg ybb @@ -31,7 +31,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic arh brn bzd cbg chb cjp cuk gut gym kog kvn mbp mot pay rma sab tbn tfr tnb tnd ab abq ady kbd uby jge ka lzz oge sva xmf - ajw anc ank bcw bcy bde bdm bdn bid bol bta bvf bvh bwr bwu bxq ckl cky cla daa dbb dbq dot dwa fie fkk fli gab gde gdk gdu gea gek gew gid gis giz glw gnd gqa grd gwn ha hed hia hna jeu jie jim jmb jmi juu kai kcs ker kil kna kof kot kpa kqx kso ksq kuh kvf kvi ldd lln lme maf mcn mcw mew mfl mif mkf mlj mmy moz mpg mpi mpk mqb mse msv mug muj muy mxf mxu nbh ndm ngi ngw ngx nja nnc nnn pbi pip piy plj pqa saa say scw sir sok sor sur swq swy tak tan tax tmc trj ubi udl xed xmj zah zaz zbu zim ziz zns zrn zua zuy + ajw anc ank bcw bcy bde bdm bdn bid bol bta bvf bvh bwr bwu bxq ckl cky cla daa dbb dbq dot dwa fie fkk fli gab gde gdk gdu gea gek gew gid gis giz glw gnd gqa grd gwn ha hed hia hna jeu jie jim jmb jmi juu kai kcs ker kil kna kof kot kpa kqx kso ksq kuh kvf kvi ldd lln lme maf mcn mcw mew mfl mif mkf mlj mmy moz mpg mpi mpk mqb mse msv mug muj muy mxf mxu nbh ndm ngi ngw ngx nja nnc nnn pbi pip piy pqa pze saa say scw sir sok sor sur swq swy tak tan tax tmc trj tvi ubi udl xed xmj zah zaz zbu zim ziz zns zrn zuy ari cad kii paw wic br cnx cy ga gd gv kw mga nrc obt oco owl pgl sga sth wlm xbm xcb xce xga xlp xpi ace cja cje cjm hro huq ibh jra ocm rad rgs rog @@ -90,10 +90,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic an ast ca cbk co cpf cpp dlm drc egl es ext fax fr frc frm fro frp fur gl ist it itk lad lij lld lmo mwl mxi nap nrf oc osp pcd pld pln pml pms pro pt rgn rm ro ruo rup ruq sc scn sdc sdn sdt sro vec wa xno zrp blc cea cjh clm col coo cow crd fla hur lil lut nok oka ptw qun sec shs ska slh sno spo squ str thp til twa ach adh alz anu atu bdi bfa bxb byg dau ddd dib din dip diw dks enb eyo jum kdj keo kln koe kpz liu lky loh lot lpx lth luo mas mfz mqu mur muz mym niq njl nnj nsg nub nus oki omt pko saq sgc shj shk soh suq tbi tcc tec teo teq tex toq tuv tuy ukv xel xwg zmo - aao abh acm acq acy aeb aec agj aii ajp akk am amw apc apd ar arc arq ary auz ayl ayn ayp bhm bhn dlk egy fif gdq gez gru har hbo he hoh hrt inm ior jpa jrb jye kqd lhs mey mid mt mvz mys myz oar obm phn rzh sgw shu shv smp sqr sqt syc syr ti tig tru uga wle xaa xeb xha xhd xna xpu xqt xsa yhd zwa + aao abh acm acq acy aeb aec agj aii akk am amw apc apd ar arc arq ary auz ayl ayn ayp bhm bhn dlk egy fif gdq gez gru har hbo he hoh hrt inm ior jpa jrb jye kqd lhs mey mid mt mvz mys myz oar obm phn rzh sgw shu shv smp sqr sqt syc syr ti tig tru uga wle xaa xeb xha xhd xna xpu xqt xsa yhd zwa ncs asb bll chc cmm cro dak hid iow ksk lkt mhq ofo oma osa qua sto tta win xwc - acn aeu ahk aim anm aot aph atb aub bap bfc bgg bgr bhj biu brd bxd byh byo byw bzi cdf cdm cfm ckh ckn clj clk cmr cnc cng cnh cnk csh csj ctd cth ctn cur cuw cvg dao der dhi dis drq dus emg enu ero ers gnb goe gqi grt hle hmr hni hpo ii jee jih jiu jiy jkr jnl jya kac kaf kar kdq kfw kgj kif kip kix kjl kjz kkt kle klr kmm ktp lax lbg lbr lep lgh lhi lhp lhu lif lis lkc llh lmh lov lpo lrr lsh lsi lus lwm mhu mjw mni mpz mrh mro muk mxj my nbe nbi nbu ncd new njb njh njm njn njo nkb nkd nkf nkh nki nma nme nmo nmy nng nnl nnp nos npb npg nph npo npu nre nri nru nsf nsm nty nwc nxq nzm obr pck phh pho phq pkh pmi pmj pmx pub pum pzn qvy qxs raa rab raf rah raq rau rav ria rji rki rmz rtc ruh sch sdp sgk sgp shl sjl slt smh smt ssk suv suz sxg taj tbq tcl tco tcz tdg tdh tge thf tij tji tjs tmk tpe tro trp tvn txg txo ugo usi vap vay weu wme wuh xac ybh ybi ych ycl ycp yig yim yiq yiv ykt ylo ymc ymd ymi ymq ymx ymz yna ypa yph ypn ypo ypp ypz ysd ysp ysy ytl ywl ywq ywt zal zhx zkd zkn zkr zom + acn aeu ahk aim anm aot aph atb aub bap bfc bgg bgr bhj biu brd bxd byh byo byw bzi cdf cdm cfm ckh ckn clj clk cmr cnc cng cnh cnk csh csj ctd cth ctn cur cuw cvg dao der dhi dis drq dus emg enu ero ers gnb goe gqi grt hle hmr hni hpo ii jee jih jiu jiy jkr jnl jya kac kaf kar kdq kfw kgj kif kip kix kjl kjz kkt kle klr kmm ktp lax lbg lbr lep lgh lhi lhp lhu lif lis lkc llh lmh lov lpo lrr lsh lsi lus lwm mhu mjw mni mpz mrh mro muk mxj my nbe nbi nbu ncd new njb njh njm njn njo nkb nkd nkf nkh nki nma nme nmo nmy nng nnl nnp nos npb npg nph npo npu nre nri nru nsf nsm nty nwc nxq nzm obr pck phh pho phq pkh pmi pmj pmx pub pum pzn qvy qxs raa rab raf rah raq rau rav ria rji rki rmz rtc ruh sch sdp sgk sgp shl sjl slt smh smt ssk suv suz sxg taj tbq tcl tco tcz tdg tdh tge thf tij tji tjs tpe tro trp tvn txg txo ugo usi vap vay weu wme wuh xac ybh ybi ych ycl ycp yig yim yiq yiv ykt ylo ymc ymd ymi ymq ymx ymz yna ypa yph ypn ypo ypp ypz ysd ysp ysy ytl ywl ywq ywt zal zhx zkd zkn zkr zom rsk zle zls zlw se sia sjd sje sjk sjt sju sma smj smn sms ddn dje dsq hmb kcy khq ses tda tst twq @@ -101,11 +101,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic enf enh mtm nio sel xas yrk aho aio blt eee kht ksu lo nod nrr nut pdi phk shn soa tdd th thi tnu tpo tsl tyj tyr tyz za zch zeh zln zlq adi adl adx apt bee bft bfu bo bqh bro brx cda cdn cgk chx dka drd dre duu dz dzl ghe ghh ght gro gvr gyo hut jda jna jul kbg kfk kgy khg kkf kte kzq lae lbf lbj lhm lkh loy mrg nbt neh njz nmm npa nun ola ole prx rgk rnp sbu scp scu sgt sip skj spt syw tgf tgj ths tpq tsj tsk ttz twm xct xkf xkz xns xsr xzh zau - aib alt atv az azb ba bgx chg cjs clw crh cv dlg gag ili jct kaa kdr kim kjh kk klj kmz krc kum ky nog ota otk oui qwm qxq sah slq slr sty tk tr tt tyv ug uum uz uzs xbo xpc xqa ybe zkh zkz + aib alt atv az azb ba bgx chg cjs clw crh cv dlg gag ili jct kaa kdr kim kjh kk klj kmz krc kum ky nog ota otk oui qwm qxq sah slr sty tk tr tt tyv ug uum uz uzs xbo xpc xqa ybe zkh zkz aan ait ama api aqz arr arx asn asu aux avv awe awt cin cod eme gn gnw gub gui gun guq gvj gvo gyr jor jua jur kay kgk kpn ktn kuq kyr kyz mav mdz mnd mpu msp myu nhd omg oym paf pah pak pog psm pta pto skf srq sru taf tpj tpk tpn tpr tpw tqb twt urb uru urz wir wyr xaj xiy xmo yrl yuq ain trk xgn xhc zkt eve evn gld juc mnc neg oaa oac orh sjo ude ulc - fiu hu kca mns omk rts syd xcv ykg yux zkb + fiu hu kca mns omk rts syd xcv ykg yux dtd has hei kwk myh nuk dsb hsb bua bxm bxu cmg dta kxs mhj mjg mn mvf peh sce xal xng xwo yuy diff --git a/make/data/cldr/common/supplemental/languageInfo.xml b/make/data/cldr/common/supplemental/languageInfo.xml index 3c550dca0fe..bca787901a0 100644 --- a/make/data/cldr/common/supplemental/languageInfo.xml +++ b/make/data/cldr/common/supplemental/languageInfo.xml @@ -167,7 +167,6 @@ For terms of use, see http://www.unicode.org/copyright.html - diff --git a/make/data/cldr/common/supplemental/likelySubtags.xml b/make/data/cldr/common/supplemental/likelySubtags.xml index 1a13b214fe2..0a60322deef 100644 --- a/make/data/cldr/common/supplemental/likelySubtags.xml +++ b/make/data/cldr/common/supplemental/likelySubtags.xml @@ -1,9 +1,9 @@ - + @@ -1658,9 +1658,9 @@ not be patched by hand, as any changes made in that fashion may be lost. - + - + @@ -1724,9 +1724,9 @@ not be patched by hand, as any changes made in that fashion may be lost. - + - + @@ -1872,9 +1872,9 @@ not be patched by hand, as any changes made in that fashion may be lost. - + - + @@ -2880,7 +2880,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -5043,7 +5042,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -5267,7 +5265,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6467,7 +6464,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6872,7 +6868,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6956,7 +6951,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -7015,6 +7009,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -7164,6 +7159,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -7372,7 +7368,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -7562,7 +7557,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -7775,7 +7769,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -7919,6 +7912,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -8483,7 +8477,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -8747,7 +8740,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -8841,7 +8833,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - diff --git a/make/data/cldr/common/supplemental/metaZones.xml b/make/data/cldr/common/supplemental/metaZones.xml index 0beb757cacb..e8098c9c0c8 100644 --- a/make/data/cldr/common/supplemental/metaZones.xml +++ b/make/data/cldr/common/supplemental/metaZones.xml @@ -402,7 +402,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -596,9 +597,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - @@ -626,11 +624,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - - @@ -653,9 +646,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - @@ -679,9 +669,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - @@ -700,7 +687,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -734,9 +722,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - @@ -759,9 +744,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - @@ -774,7 +756,12 @@ For terms of use, see http://www.unicode.org/copyright.html - + + + + + + @@ -815,7 +802,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -1024,7 +1012,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -1156,9 +1145,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - @@ -1370,10 +1356,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - @@ -1398,10 +1380,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - @@ -1489,10 +1467,6 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - @@ -1629,7 +1603,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -1776,6 +1749,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -1816,7 +1790,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -1825,7 +1798,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -1962,6 +1934,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -1990,7 +1963,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -1998,7 +1970,6 @@ For terms of use, see http://www.unicode.org/copyright.html - diff --git a/make/data/cldr/common/supplemental/ordinals.xml b/make/data/cldr/common/supplemental/ordinals.xml index fd210e6fa68..58f7b016340 100644 --- a/make/data/cldr/common/supplemental/ordinals.xml +++ b/make/data/cldr/common/supplemental/ordinals.xml @@ -3,7 +3,7 @@ diff --git a/make/data/cldr/common/supplemental/pluralRanges.xml b/make/data/cldr/common/supplemental/pluralRanges.xml index 02161f9cf30..25621072bcd 100644 --- a/make/data/cldr/common/supplemental/pluralRanges.xml +++ b/make/data/cldr/common/supplemental/pluralRanges.xml @@ -3,7 +3,7 @@ diff --git a/make/data/cldr/common/supplemental/subdivisions.xml b/make/data/cldr/common/supplemental/subdivisions.xml index 1a2fe3da176..fbcfb8e2e25 100644 --- a/make/data/cldr/common/supplemental/subdivisions.xml +++ b/make/data/cldr/common/supplemental/subdivisions.xml @@ -3,7 +3,7 @@ - @@ -2874,7 +2875,6 @@ XXX Code for transations where no currency is involved - @@ -3192,7 +3192,7 @@ XXX Code for transations where no currency is involved - + @@ -5423,7 +5423,7 @@ XXX Code for transations where no currency is involved - + @@ -5434,15 +5434,11 @@ XXX Code for transations where no currency is involved - - + - - - diff --git a/make/data/cldr/common/supplemental/supplementalMetadata.xml b/make/data/cldr/common/supplemental/supplementalMetadata.xml index d80cdfa3ab9..971acfaa27b 100644 --- a/make/data/cldr/common/supplemental/supplementalMetadata.xml +++ b/make/data/cldr/common/supplemental/supplementalMetadata.xml @@ -537,6 +537,18 @@ For terms of use, see http://www.unicode.org/copyright.html + + + + + + + + + + + + @@ -1797,6 +1809,16 @@ For terms of use, see http://www.unicode.org/copyright.html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -308,6 +342,8 @@ For terms of use, see http://www.unicode.org/copyright.html + + diff --git a/make/data/cldr/common/supplemental/windowsZones.xml b/make/data/cldr/common/supplemental/windowsZones.xml index b49266ef9e3..a81d0beb83c 100644 --- a/make/data/cldr/common/supplemental/windowsZones.xml +++ b/make/data/cldr/common/supplemental/windowsZones.xml @@ -30,7 +30,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -49,7 +48,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -75,7 +74,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -97,7 +96,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -133,7 +132,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -421,7 +420,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -538,7 +537,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -570,13 +570,12 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + - @@ -710,7 +709,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + diff --git a/make/devkit/createJMHBundle.sh b/make/devkit/createJMHBundle.sh index c3c97947dab..889b7f914a4 100644 --- a/make/devkit/createJMHBundle.sh +++ b/make/devkit/createJMHBundle.sh @@ -1,6 +1,6 @@ #!/bin/bash -e # -# Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2018, 2024, 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 @@ -29,6 +29,7 @@ JMH_VERSION=1.37 COMMONS_MATH3_VERSION=3.6.1 JOPT_SIMPLE_VERSION=5.0.4 +MAVEN_MIRROR=${MAVEN_MIRROR:-https://repo.maven.apache.org/maven2} BUNDLE_NAME=jmh-$JMH_VERSION.tar.gz @@ -41,9 +42,9 @@ cd $JAR_DIR rm -f * fetchJar() { - url="https://repo.maven.apache.org/maven2/$1/$2/$3/$2-$3.jar" + url="${MAVEN_MIRROR}/$1/$2/$3/$2-$3.jar" if command -v curl > /dev/null; then - curl -O --fail $url + curl -OL --fail $url elif command -v wget > /dev/null; then wget $url else diff --git a/make/modules/java.desktop/Java.gmk b/make/modules/java.desktop/Java.gmk index 66ef88dcf14..7cc9cf47034 100644 --- a/make/modules/java.desktop/Java.gmk +++ b/make/modules/java.desktop/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += lossy-conversions this-escape +DISABLED_WARNINGS_java += dangling-doc-comments lossy-conversions this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' COPY += .gif .png .wav .txt .xml .css .pf diff --git a/make/modules/java.management/Java.gmk b/make/modules/java.management/Java.gmk index 781370b2e18..7a337946cd7 100644 --- a/make/modules/java.management/Java.gmk +++ b/make/modules/java.management/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.naming/Java.gmk b/make/modules/java.naming/Java.gmk index a7ade637af5..207329f5944 100644 --- a/make/modules/java.naming/Java.gmk +++ b/make/modules/java.naming/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.security.jgss/Java.gmk b/make/modules/java.security.jgss/Java.gmk index 781370b2e18..7a337946cd7 100644 --- a/make/modules/java.security.jgss/Java.gmk +++ b/make/modules/java.security.jgss/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.security.sasl/Java.gmk b/make/modules/java.security.sasl/Java.gmk index 269a1195b6a..136b311a827 100644 --- a/make/modules/java.security.sasl/Java.gmk +++ b/make/modules/java.security.sasl/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2023, 2024, 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 @@ -23,4 +23,4 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape diff --git a/make/modules/java.sql.rowset/Java.gmk b/make/modules/java.sql.rowset/Java.gmk index 2dc60515a1b..9f430a7121b 100644 --- a/make/modules/java.sql.rowset/Java.gmk +++ b/make/modules/java.sql.rowset/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,6 +23,8 @@ # questions. # +DISABLED_WARNINGS_java += dangling-doc-comments this-escape + DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' CLEAN_FILES += $(wildcard \ diff --git a/make/modules/java.sql/Java.gmk b/make/modules/java.sql/Java.gmk index 781370b2e18..7a337946cd7 100644 --- a/make/modules/java.sql/Java.gmk +++ b/make/modules/java.sql/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.xml.crypto/Java.gmk b/make/modules/java.xml.crypto/Java.gmk index 53e282aca27..9ee19c8c302 100644 --- a/make/modules/java.xml.crypto/Java.gmk +++ b/make/modules/java.xml.crypto/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.xml/Java.gmk b/make/modules/java.xml/Java.gmk index cf6f1753f1c..22c1dde2c2b 100644 --- a/make/modules/java.xml/Java.gmk +++ b/make/modules/java.xml/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += lossy-conversions this-escape +DISABLED_WARNINGS_java += dangling-doc-comments lossy-conversions this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:$(call CommaList, javax.xml.catalog javax.xml.datatype \ javax.xml.transform javax.xml.validation javax.xml.xpath)' diff --git a/make/modules/jdk.accessibility/Java.gmk b/make/modules/jdk.accessibility/Java.gmk new file mode 100644 index 00000000000..fc8b2f832d7 --- /dev/null +++ b/make/modules/jdk.accessibility/Java.gmk @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments diff --git a/make/modules/jdk.crypto.cryptoki/Java.gmk b/make/modules/jdk.crypto.cryptoki/Java.gmk new file mode 100644 index 00000000000..fc8b2f832d7 --- /dev/null +++ b/make/modules/jdk.crypto.cryptoki/Java.gmk @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments diff --git a/make/modules/jdk.hotspot.agent/Java.gmk b/make/modules/jdk.hotspot.agent/Java.gmk index 52cb0c8d91a..333d28a5aa0 100644 --- a/make/modules/jdk.hotspot.agent/Java.gmk +++ b/make/modules/jdk.hotspot.agent/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -24,5 +24,5 @@ # DISABLED_WARNINGS_java += rawtypes serial cast static overrides \ - fallthrough this-escape + dangling-doc-comments fallthrough this-escape COPY += .gif .png .properties diff --git a/make/modules/jdk.internal.le/Java.gmk b/make/modules/jdk.internal.le/Java.gmk index 75d99b8d2bb..4c952b63574 100644 --- a/make/modules/jdk.internal.le/Java.gmk +++ b/make/modules/jdk.internal.le/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,6 +23,6 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape COPY += .properties .caps .txt diff --git a/make/modules/jdk.internal.vm.ci/Java.gmk b/make/modules/jdk.internal.vm.ci/Java.gmk index 0dd5af1f3ea..6bf8ad5e74c 100644 --- a/make/modules/jdk.internal.vm.ci/Java.gmk +++ b/make/modules/jdk.internal.vm.ci/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,7 +23,7 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape # -parameters provides method's parameters information in class file, # JVMCI compilers make use of that information for various sanity checks. diff --git a/make/modules/jdk.jdi/Java.gmk b/make/modules/jdk.jdi/Java.gmk index 2e7cf805bc0..12ec29986b9 100644 --- a/make/modules/jdk.jdi/Java.gmk +++ b/make/modules/jdk.jdi/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,6 +23,8 @@ # questions. # +DISABLED_WARNINGS_java += dangling-doc-comments this-escape + EXCLUDES += \ com/sun/tools/example/debug/bdi \ com/sun/tools/example/debug/event \ diff --git a/make/modules/jdk.jfr/Java.gmk b/make/modules/jdk.jfr/Java.gmk index 207256fde20..d07f9117c2d 100644 --- a/make/modules/jdk.jfr/Java.gmk +++ b/make/modules/jdk.jfr/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ -23,6 +23,6 @@ # questions. # -DISABLED_WARNINGS_java += exports +DISABLED_WARNINGS_java += dangling-doc-comments exports COPY := .xsd .xml .dtd .ini JAVAC_FLAGS := -XDstringConcat=inline diff --git a/make/modules/jdk.security.auth/Java.gmk b/make/modules/jdk.security.auth/Java.gmk new file mode 100644 index 00000000000..fc8b2f832d7 --- /dev/null +++ b/make/modules/jdk.security.auth/Java.gmk @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments diff --git a/make/modules/jdk.zipfs/Java.gmk b/make/modules/jdk.zipfs/Java.gmk new file mode 100644 index 00000000000..0771884172f --- /dev/null +++ b/make/modules/jdk.zipfs/Java.gmk @@ -0,0 +1,27 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments + diff --git a/make/test/BuildTestLib.gmk b/make/test/BuildTestLib.gmk index 00642a1e7cf..d48f263f6f9 100644 --- a/make/test/BuildTestLib.gmk +++ b/make/test/BuildTestLib.gmk @@ -64,7 +64,7 @@ $(eval $(call SetupJavaCompilation, BUILD_TEST_LIB_JAR, \ BIN := $(TEST_LIB_SUPPORT)/test-lib_classes, \ HEADERS := $(TEST_LIB_SUPPORT)/test-lib_headers, \ JAR := $(TEST_LIB_SUPPORT)/test-lib.jar, \ - DISABLED_WARNINGS := try deprecation rawtypes unchecked serial cast removal preview, \ + DISABLED_WARNINGS := try deprecation rawtypes unchecked serial cast removal preview dangling-doc-comments, \ JAVAC_FLAGS := --add-exports java.base/sun.security.util=ALL-UNNAMED \ --add-exports java.base/jdk.internal.classfile=ALL-UNNAMED \ --add-exports java.base/jdk.internal.classfile.attribute=ALL-UNNAMED \ diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad index 402cdb8a30c..bb7f7370c5f 100644 --- a/src/hotspot/cpu/aarch64/aarch64.ad +++ b/src/hotspot/cpu/aarch64/aarch64.ad @@ -1126,10 +1126,6 @@ extern RegMask _NO_SPECIAL_REG32_mask; extern RegMask _NO_SPECIAL_REG_mask; extern RegMask _NO_SPECIAL_PTR_REG_mask; -// Figure out which register class each belongs in: rc_int, rc_float or -// rc_stack. -enum RC { rc_bad, rc_int, rc_float, rc_predicate, rc_stack }; - class CallStubImpl { //-------------------------------------------------------------- diff --git a/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp index 070c685a07b..62414611cce 100644 --- a/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp @@ -34,6 +34,10 @@ #include "runtime/jniHandles.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#ifdef COMPILER2 +#include "code/vmreg.inline.hpp" +#include "gc/shared/c2/barrierSetC2.hpp" +#endif // COMPILER2 #define __ masm-> @@ -419,3 +423,204 @@ void BarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register __ load_klass(obj, obj); // get klass __ cbz(obj, error); // if klass is null it is broken } + +#ifdef COMPILER2 + +OptoReg::Name BarrierSetAssembler::encode_float_vector_register_size(const Node* node, OptoReg::Name opto_reg) { + switch (node->ideal_reg()) { + case Op_RegF: + // No need to refine. The original encoding is already fine to distinguish. + assert(opto_reg % 4 == 0, "Float register should only occupy a single slot"); + break; + // Use different encoding values of the same fp/vector register to help distinguish different sizes. + // Such as V16. The OptoReg::name and its corresponding slot value are + // "V16": 64, "V16_H": 65, "V16_J": 66, "V16_K": 67. + case Op_RegD: + case Op_VecD: + opto_reg &= ~3; + opto_reg |= 1; + break; + case Op_VecX: + opto_reg &= ~3; + opto_reg |= 2; + break; + case Op_VecA: + opto_reg &= ~3; + opto_reg |= 3; + break; + default: + assert(false, "unexpected ideal register"); + ShouldNotReachHere(); + } + return opto_reg; +} + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { + if (!OptoReg::is_reg(opto_reg)) { + return OptoReg::Bad; + } + + const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + if (vm_reg->is_FloatRegister()) { + opto_reg = encode_float_vector_register_size(node, opto_reg); + } + + return opto_reg; +} + +#undef __ +#define __ _masm-> + +void SaveLiveRegisters::initialize(BarrierStubC2* stub) { + int index = -1; + GrowableArray registers; + VMReg prev_vm_reg = VMRegImpl::Bad(); + + RegMaskIterator rmi(stub->live()); + while (rmi.has_next()) { + OptoReg::Name opto_reg = rmi.next(); + VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + + if (vm_reg->is_Register()) { + // GPR may have one or two slots in regmask + // Determine whether the current vm_reg is the same physical register as the previous one + if (is_same_register(vm_reg, prev_vm_reg)) { + registers.at(index)._slots++; + } else { + RegisterData reg_data = { vm_reg, 1 }; + index = registers.append(reg_data); + } + } else if (vm_reg->is_FloatRegister()) { + // We have size encoding in OptoReg of stub->live() + // After encoding, float/neon/sve register has only one slot in regmask + // Decode it to get the actual size + VMReg vm_reg_base = vm_reg->as_FloatRegister()->as_VMReg(); + int slots = decode_float_vector_register_size(opto_reg); + RegisterData reg_data = { vm_reg_base, slots }; + index = registers.append(reg_data); + } else if (vm_reg->is_PRegister()) { + // PRegister has only one slot in regmask + RegisterData reg_data = { vm_reg, 1 }; + index = registers.append(reg_data); + } else { + assert(false, "Unknown register type"); + ShouldNotReachHere(); + } + prev_vm_reg = vm_reg; + } + + // Record registers that needs to be saved/restored + for (GrowableArrayIterator it = registers.begin(); it != registers.end(); ++it) { + RegisterData reg_data = *it; + VMReg vm_reg = reg_data._reg; + int slots = reg_data._slots; + if (vm_reg->is_Register()) { + assert(slots == 1 || slots == 2, "Unexpected register save size"); + _gp_regs += RegSet::of(vm_reg->as_Register()); + } else if (vm_reg->is_FloatRegister()) { + if (slots == 1 || slots == 2) { + _fp_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); + } else if (slots == 4) { + _neon_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); + } else { + assert(slots == Matcher::scalable_vector_reg_size(T_FLOAT), "Unexpected register save size"); + _sve_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); + } + } else { + assert(vm_reg->is_PRegister() && slots == 1, "Unknown register type"); + _p_regs += PRegSet::of(vm_reg->as_PRegister()); + } + } + + // Remove C-ABI SOE registers, scratch regs and _ref register that will be updated + if (stub->result() != noreg) { + _gp_regs -= RegSet::range(r19, r30) + RegSet::of(r8, r9, stub->result()); + } else { + _gp_regs -= RegSet::range(r19, r30) + RegSet::of(r8, r9); + } + + // Remove C-ABI SOE fp registers + _fp_regs -= FloatRegSet::range(v8, v15); +} + +enum RC SaveLiveRegisters::rc_class(VMReg reg) { + if (reg->is_reg()) { + if (reg->is_Register()) { + return rc_int; + } else if (reg->is_FloatRegister()) { + return rc_float; + } else if (reg->is_PRegister()) { + return rc_predicate; + } + } + if (reg->is_stack()) { + return rc_stack; + } + return rc_bad; +} + +bool SaveLiveRegisters::is_same_register(VMReg reg1, VMReg reg2) { + if (reg1 == reg2) { + return true; + } + if (rc_class(reg1) == rc_class(reg2)) { + if (reg1->is_Register()) { + return reg1->as_Register() == reg2->as_Register(); + } else if (reg1->is_FloatRegister()) { + return reg1->as_FloatRegister() == reg2->as_FloatRegister(); + } else if (reg1->is_PRegister()) { + return reg1->as_PRegister() == reg2->as_PRegister(); + } + } + return false; +} + +int SaveLiveRegisters::decode_float_vector_register_size(OptoReg::Name opto_reg) { + switch (opto_reg & 3) { + case 0: + return 1; + case 1: + return 2; + case 2: + return 4; + case 3: + return Matcher::scalable_vector_reg_size(T_FLOAT); + default: + ShouldNotReachHere(); + return 0; + } +} + +SaveLiveRegisters::SaveLiveRegisters(MacroAssembler* masm, BarrierStubC2* stub) + : _masm(masm), + _gp_regs(), + _fp_regs(), + _neon_regs(), + _sve_regs(), + _p_regs() { + + // Figure out what registers to save/restore + initialize(stub); + + // Save registers + __ push(_gp_regs, sp); + __ push_fp(_fp_regs, sp, MacroAssembler::PushPopFp); + __ push_fp(_neon_regs, sp, MacroAssembler::PushPopNeon); + __ push_fp(_sve_regs, sp, MacroAssembler::PushPopSVE); + __ push_p(_p_regs, sp); +} + +SaveLiveRegisters::~SaveLiveRegisters() { + // Restore registers + __ pop_p(_p_regs, sp); + __ pop_fp(_sve_regs, sp, MacroAssembler::PushPopSVE); + __ pop_fp(_neon_regs, sp, MacroAssembler::PushPopNeon); + __ pop_fp(_fp_regs, sp, MacroAssembler::PushPopFp); + + // External runtime call may clobber ptrue reg + __ reinitialize_ptrue(); + + __ pop(_gp_regs, sp); +} + +#endif // COMPILER2 diff --git a/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.hpp index bfe9df86850..8dc475e0597 100644 --- a/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.hpp @@ -30,6 +30,12 @@ #include "gc/shared/barrierSetNMethod.hpp" #include "memory/allocation.hpp" #include "oops/access.hpp" +#ifdef COMPILER2 +#include "opto/optoreg.hpp" + +class BarrierStubC2; +class Node; +#endif // COMPILER2 enum class NMethodPatchingType { stw_instruction_and_data_patch, @@ -129,6 +135,54 @@ class BarrierSetAssembler: public CHeapObj { static address patching_epoch_addr(); static void clear_patching_epoch(); static void increment_patching_epoch(); + +#ifdef COMPILER2 + OptoReg::Name encode_float_vector_register_size(const Node* node, + OptoReg::Name opto_reg); + OptoReg::Name refine_register(const Node* node, + OptoReg::Name opto_reg); +#endif // COMPILER2 +}; + +#ifdef COMPILER2 + +// This class saves and restores the registers that need to be preserved across +// the runtime call represented by a given C2 barrier stub. Use as follows: +// { +// SaveLiveRegisters save(masm, stub); +// .. +// __ blr(...); +// .. +// } +class SaveLiveRegisters { +private: + struct RegisterData { + VMReg _reg; + int _slots; // slots occupied once pushed into stack + + // Used by GrowableArray::find() + bool operator == (const RegisterData& other) { + return _reg == other._reg; + } + }; + + MacroAssembler* const _masm; + RegSet _gp_regs; + FloatRegSet _fp_regs; + FloatRegSet _neon_regs; + FloatRegSet _sve_regs; + PRegSet _p_regs; + + static enum RC rc_class(VMReg reg); + static bool is_same_register(VMReg reg1, VMReg reg2); + static int decode_float_vector_register_size(OptoReg::Name opto_reg); + +public: + void initialize(BarrierStubC2* stub); + SaveLiveRegisters(MacroAssembler* masm, BarrierStubC2* stub); + ~SaveLiveRegisters(); }; +#endif // COMPILER2 + #endif // CPU_AARCH64_GC_SHARED_BARRIERSETASSEMBLER_AARCH64_HPP diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp index b8f4a2f2439..466e77a4460 100644 --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp @@ -1081,224 +1081,6 @@ void ZBarrierSetAssembler::generate_c1_store_barrier_runtime_stub(StubAssembler* #ifdef COMPILER2 -OptoReg::Name ZBarrierSetAssembler::encode_float_vector_register_size(const Node* node, OptoReg::Name opto_reg) { - switch (node->ideal_reg()) { - case Op_RegF: - // No need to refine. The original encoding is already fine to distinguish. - assert(opto_reg % 4 == 0, "Float register should only occupy a single slot"); - break; - // Use different encoding values of the same fp/vector register to help distinguish different sizes. - // Such as V16. The OptoReg::name and its corresponding slot value are - // "V16": 64, "V16_H": 65, "V16_J": 66, "V16_K": 67. - case Op_RegD: - case Op_VecD: - opto_reg &= ~3; - opto_reg |= 1; - break; - case Op_VecX: - opto_reg &= ~3; - opto_reg |= 2; - break; - case Op_VecA: - opto_reg &= ~3; - opto_reg |= 3; - break; - default: - assert(false, "unexpected ideal register"); - ShouldNotReachHere(); - } - return opto_reg; -} - -OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { - if (!OptoReg::is_reg(opto_reg)) { - return OptoReg::Bad; - } - - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if (vm_reg->is_FloatRegister()) { - opto_reg = encode_float_vector_register_size(node, opto_reg); - } - - return opto_reg; -} - -#undef __ -#define __ _masm-> - -class ZSaveLiveRegisters { -private: - struct RegisterData { - VMReg _reg; - int _slots; // slots occupied once pushed into stack - - // Used by GrowableArray::find() - bool operator == (const RegisterData& other) { - return _reg == other._reg; - } - }; - - MacroAssembler* const _masm; - RegSet _gp_regs; - FloatRegSet _fp_regs; - FloatRegSet _neon_regs; - FloatRegSet _sve_regs; - PRegSet _p_regs; - -public: - void initialize(ZBarrierStubC2* stub) { - int index = -1; - GrowableArray registers; - VMReg prev_vm_reg = VMRegImpl::Bad(); - - RegMaskIterator rmi(stub->live()); - while (rmi.has_next()) { - OptoReg::Name opto_reg = rmi.next(); - VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - - if (vm_reg->is_Register()) { - // GPR may have one or two slots in regmask - // Determine whether the current vm_reg is the same physical register as the previous one - if (is_same_register(vm_reg, prev_vm_reg)) { - registers.at(index)._slots++; - } else { - RegisterData reg_data = { vm_reg, 1 }; - index = registers.append(reg_data); - } - } else if (vm_reg->is_FloatRegister()) { - // We have size encoding in OptoReg of stub->live() - // After encoding, float/neon/sve register has only one slot in regmask - // Decode it to get the actual size - VMReg vm_reg_base = vm_reg->as_FloatRegister()->as_VMReg(); - int slots = decode_float_vector_register_size(opto_reg); - RegisterData reg_data = { vm_reg_base, slots }; - index = registers.append(reg_data); - } else if (vm_reg->is_PRegister()) { - // PRegister has only one slot in regmask - RegisterData reg_data = { vm_reg, 1 }; - index = registers.append(reg_data); - } else { - assert(false, "Unknown register type"); - ShouldNotReachHere(); - } - prev_vm_reg = vm_reg; - } - - // Record registers that needs to be saved/restored - for (GrowableArrayIterator it = registers.begin(); it != registers.end(); ++it) { - RegisterData reg_data = *it; - VMReg vm_reg = reg_data._reg; - int slots = reg_data._slots; - if (vm_reg->is_Register()) { - assert(slots == 1 || slots == 2, "Unexpected register save size"); - _gp_regs += RegSet::of(vm_reg->as_Register()); - } else if (vm_reg->is_FloatRegister()) { - if (slots == 1 || slots == 2) { - _fp_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); - } else if (slots == 4) { - _neon_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); - } else { - assert(slots == Matcher::scalable_vector_reg_size(T_FLOAT), "Unexpected register save size"); - _sve_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); - } - } else { - assert(vm_reg->is_PRegister() && slots == 1, "Unknown register type"); - _p_regs += PRegSet::of(vm_reg->as_PRegister()); - } - } - - // Remove C-ABI SOE registers, scratch regs and _ref register that will be updated - if (stub->result() != noreg) { - _gp_regs -= RegSet::range(r19, r30) + RegSet::of(r8, r9, stub->result()); - } else { - _gp_regs -= RegSet::range(r19, r30) + RegSet::of(r8, r9); - } - - // Remove C-ABI SOE fp registers - _fp_regs -= FloatRegSet::range(v8, v15); - } - - static enum RC rc_class(VMReg reg) { - if (reg->is_reg()) { - if (reg->is_Register()) { - return rc_int; - } else if (reg->is_FloatRegister()) { - return rc_float; - } else if (reg->is_PRegister()) { - return rc_predicate; - } - } - if (reg->is_stack()) { - return rc_stack; - } - return rc_bad; - } - - static bool is_same_register(VMReg reg1, VMReg reg2) { - if (reg1 == reg2) { - return true; - } - if (rc_class(reg1) == rc_class(reg2)) { - if (reg1->is_Register()) { - return reg1->as_Register() == reg2->as_Register(); - } else if (reg1->is_FloatRegister()) { - return reg1->as_FloatRegister() == reg2->as_FloatRegister(); - } else if (reg1->is_PRegister()) { - return reg1->as_PRegister() == reg2->as_PRegister(); - } - } - return false; - } - - static int decode_float_vector_register_size(OptoReg::Name opto_reg) { - switch (opto_reg & 3) { - case 0: - return 1; - case 1: - return 2; - case 2: - return 4; - case 3: - return Matcher::scalable_vector_reg_size(T_FLOAT); - default: - ShouldNotReachHere(); - return 0; - } - } - - ZSaveLiveRegisters(MacroAssembler* masm, ZBarrierStubC2* stub) - : _masm(masm), - _gp_regs(), - _fp_regs(), - _neon_regs(), - _sve_regs(), - _p_regs() { - - // Figure out what registers to save/restore - initialize(stub); - - // Save registers - __ push(_gp_regs, sp); - __ push_fp(_fp_regs, sp, MacroAssembler::PushPopFp); - __ push_fp(_neon_regs, sp, MacroAssembler::PushPopNeon); - __ push_fp(_sve_regs, sp, MacroAssembler::PushPopSVE); - __ push_p(_p_regs, sp); - } - - ~ZSaveLiveRegisters() { - // Restore registers - __ pop_p(_p_regs, sp); - __ pop_fp(_sve_regs, sp, MacroAssembler::PushPopSVE); - __ pop_fp(_neon_regs, sp, MacroAssembler::PushPopNeon); - __ pop_fp(_fp_regs, sp, MacroAssembler::PushPopFp); - - // External runtime call may clobber ptrue reg - __ reinitialize_ptrue(); - - __ pop(_gp_regs, sp); - } -}; - #undef __ #define __ _masm-> @@ -1368,7 +1150,7 @@ void ZBarrierSetAssembler::generate_c2_load_barrier_stub(MacroAssembler* masm, Z } { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); ZSetupArguments setup_arguments(masm, stub); __ mov(rscratch1, stub->slow_path()); __ blr(rscratch1); @@ -1400,7 +1182,7 @@ void ZBarrierSetAssembler::generate_c2_store_barrier_stub(MacroAssembler* masm, __ bind(slow); { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); __ lea(c_rarg0, stub->ref_addr()); if (stub->is_native()) { diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp index 705dcc61a62..2f716140ed1 100644 --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp @@ -187,12 +187,6 @@ class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase { #endif // COMPILER1 #ifdef COMPILER2 - OptoReg::Name encode_float_vector_register_size(const Node* node, - OptoReg::Name opto_reg); - - OptoReg::Name refine_register(const Node* node, - OptoReg::Name opto_reg); - void generate_c2_load_barrier_stub(MacroAssembler* masm, ZLoadBarrierStubC2* stub) const; void generate_c2_store_barrier_stub(MacroAssembler* masm, diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp index da38f1d12e7..5fea0b8d925 100644 --- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp @@ -1778,6 +1778,8 @@ void InterpreterMacroAssembler::load_field_entry(Register cache, Register index, ldr(cache, Address(rcpool, ConstantPoolCache::field_entries_offset())); add(cache, cache, Array::base_offset_in_bytes()); lea(cache, Address(cache, index)); + // Prevents stale data from being read after the bytecode is patched to the fast bytecode + membar(MacroAssembler::LoadLoad); } void InterpreterMacroAssembler::load_method_entry(Register cache, Register index, int bcp_offset) { diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index 8eb2000359c..b90b5862ee5 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -1560,11 +1560,7 @@ void MacroAssembler::check_klass_subtype_slow_path(Register sub_klass, } #ifndef PRODUCT - mov(rscratch2, (address)&SharedRuntime::_partial_subtype_ctr); - Address pst_counter_addr(rscratch2); - ldr(rscratch1, pst_counter_addr); - add(rscratch1, rscratch1, 1); - str(rscratch1, pst_counter_addr); + incrementw(ExternalAddress((address)&SharedRuntime::_partial_subtype_ctr)); #endif //PRODUCT // We will consult the secondary-super array. diff --git a/src/hotspot/cpu/aarch64/register_aarch64.hpp b/src/hotspot/cpu/aarch64/register_aarch64.hpp index 44892e61e2a..3c2571eb4a3 100644 --- a/src/hotspot/cpu/aarch64/register_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/register_aarch64.hpp @@ -403,4 +403,7 @@ inline Register as_Register(FloatRegister reg) { return as_Register(reg->encoding()); } +// High-level register class of an OptoReg or a VMReg register. +enum RC { rc_bad, rc_int, rc_float, rc_predicate, rc_stack }; + #endif // CPU_AARCH64_REGISTER_AARCH64_HPP diff --git a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp index 29b95fdb2dd..8d207b3f665 100644 --- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp @@ -86,10 +86,7 @@ class StubGenerator: public StubCodeGenerator { #define inc_counter_np(counter) ((void)0) #else void inc_counter_np_(uint& counter) { - __ lea(rscratch2, ExternalAddress((address)&counter)); - __ ldrw(rscratch1, Address(rscratch2)); - __ addw(rscratch1, rscratch1, 1); - __ strw(rscratch1, Address(rscratch2)); + __ incrementw(ExternalAddress((address)&counter)); } #define inc_counter_np(counter) \ BLOCK_COMMENT("inc_counter " #counter); \ diff --git a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp index eaaefb55f36..f32a4ee7372 100644 --- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp @@ -2355,7 +2355,9 @@ void TemplateTable::load_resolved_field_entry(Register obj, __ load_unsigned_byte(flags, Address(cache, in_bytes(ResolvedFieldEntry::flags_offset()))); // TOS state - __ load_unsigned_byte(tos_state, Address(cache, in_bytes(ResolvedFieldEntry::type_offset()))); + if (tos_state != noreg) { + __ load_unsigned_byte(tos_state, Address(cache, in_bytes(ResolvedFieldEntry::type_offset()))); + } // Klass overwrite register if (is_static) { @@ -3069,13 +3071,9 @@ void TemplateTable::fast_storefield(TosState state) // access constant pool cache __ load_field_entry(r2, r1); - __ push(r0); - // R1: field offset, R2: TOS, R3: flags - load_resolved_field_entry(r2, r2, r0, r1, r3); - __ pop(r0); - // Must prevent reordering of the following cp cache loads with bytecode load - __ membar(MacroAssembler::LoadLoad); + // R1: field offset, R2: field holder, R3: flags + load_resolved_field_entry(r2, r2, noreg, r1, r3); { Label notVolatile; @@ -3163,9 +3161,6 @@ void TemplateTable::fast_accessfield(TosState state) // access constant pool cache __ load_field_entry(r2, r1); - // Must prevent reordering of the following cp cache loads with bytecode load - __ membar(MacroAssembler::LoadLoad); - __ load_sized_value(r1, Address(r2, in_bytes(ResolvedFieldEntry::field_offset_offset())), sizeof(int), true /*is_signed*/); __ load_unsigned_byte(r3, Address(r2, in_bytes(ResolvedFieldEntry::flags_offset()))); diff --git a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp index 9329876b808..a4e7f35ec81 100644 --- a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp @@ -242,3 +242,11 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm) { __ bind(skip); __ block_comment("nmethod_barrier end"); } + +#ifdef COMPILER2 + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { + Unimplemented(); // This must be implemented to support late barrier expansion. +} + +#endif // COMPILER2 diff --git a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.hpp b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.hpp index 37e0c6525f3..ae51a054540 100644 --- a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.hpp +++ b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.hpp @@ -28,6 +28,12 @@ #include "asm/macroAssembler.hpp" #include "memory/allocation.hpp" #include "oops/access.hpp" +#ifdef COMPILER2 +#include "code/vmreg.hpp" +#include "opto/optoreg.hpp" + +class Node; +#endif // COMPILER2 enum class NMethodPatchingType { stw_instruction_and_data_patch, @@ -62,6 +68,11 @@ class BarrierSetAssembler: public CHeapObj { virtual void barrier_stubs_init() {} virtual NMethodPatchingType nmethod_patching_type() { return NMethodPatchingType::stw_instruction_and_data_patch; } virtual void nmethod_entry_barrier(MacroAssembler* masm); + +#ifdef COMPILER2 + OptoReg::Name refine_register(const Node* node, + OptoReg::Name opto_reg); +#endif // COMPILER2 }; #endif // CPU_ARM_GC_SHARED_BARRIERSETASSEMBLER_ARM_HPP diff --git a/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp index f15e79534a2..3bb205d659f 100644 --- a/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp @@ -34,6 +34,9 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "utilities/macros.hpp" +#ifdef COMPILER2 +#include "gc/shared/c2/barrierSetC2.hpp" +#endif // COMPILER2 #define __ masm-> @@ -259,3 +262,119 @@ void BarrierSetAssembler::c2i_entry_barrier(MacroAssembler *masm, Register tmp1, void BarrierSetAssembler::check_oop(MacroAssembler *masm, Register oop, const char* msg) { __ verify_oop(oop, msg); } + +#ifdef COMPILER2 + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) const { + if (!OptoReg::is_reg(opto_reg)) { + return OptoReg::Bad; + } + + VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + if ((vm_reg->is_Register() || vm_reg ->is_FloatRegister()) && (opto_reg & 1) != 0) { + return OptoReg::Bad; + } + + return opto_reg; +} + +#undef __ +#define __ _masm-> + +SaveLiveRegisters::SaveLiveRegisters(MacroAssembler *masm, BarrierStubC2 *stub) + : _masm(masm), _reg_mask(stub->live()), _result_reg(stub->result()) { + + const int register_save_size = iterate_over_register_mask(ACTION_COUNT_ONLY) * BytesPerWord; + _frame_size = align_up(register_save_size, frame::alignment_in_bytes) + + frame::native_abi_reg_args_size; + + __ save_LR_CR(R0); + __ push_frame(_frame_size, R0); + + iterate_over_register_mask(ACTION_SAVE, _frame_size); +} + +SaveLiveRegisters::~SaveLiveRegisters() { + iterate_over_register_mask(ACTION_RESTORE, _frame_size); + + __ addi(R1_SP, R1_SP, _frame_size); + __ restore_LR_CR(R0); +} + +int SaveLiveRegisters::iterate_over_register_mask(IterationAction action, int offset) { + int reg_save_index = 0; + RegMaskIterator live_regs_iterator(_reg_mask); + + while(live_regs_iterator.has_next()) { + const OptoReg::Name opto_reg = live_regs_iterator.next(); + + // Filter out stack slots (spilled registers, i.e., stack-allocated registers). + if (!OptoReg::is_reg(opto_reg)) { + continue; + } + + const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + if (vm_reg->is_Register()) { + Register std_reg = vm_reg->as_Register(); + + // '_result_reg' will hold the end result of the operation. Its content must thus not be preserved. + if (std_reg == _result_reg) { + continue; + } + + if (std_reg->encoding() >= R2->encoding() && std_reg->encoding() <= R12->encoding()) { + reg_save_index++; + + if (action == ACTION_SAVE) { + _masm->std(std_reg, offset - reg_save_index * BytesPerWord, R1_SP); + } else if (action == ACTION_RESTORE) { + _masm->ld(std_reg, offset - reg_save_index * BytesPerWord, R1_SP); + } else { + assert(action == ACTION_COUNT_ONLY, "Sanity"); + } + } + } else if (vm_reg->is_FloatRegister()) { + FloatRegister fp_reg = vm_reg->as_FloatRegister(); + if (fp_reg->encoding() >= F0->encoding() && fp_reg->encoding() <= F13->encoding()) { + reg_save_index++; + + if (action == ACTION_SAVE) { + _masm->stfd(fp_reg, offset - reg_save_index * BytesPerWord, R1_SP); + } else if (action == ACTION_RESTORE) { + _masm->lfd(fp_reg, offset - reg_save_index * BytesPerWord, R1_SP); + } else { + assert(action == ACTION_COUNT_ONLY, "Sanity"); + } + } + } else if (vm_reg->is_ConditionRegister()) { + // NOP. Conditions registers are covered by save_LR_CR + } else if (vm_reg->is_VectorSRegister()) { + assert(SuperwordUseVSX, "or should not reach here"); + VectorSRegister vs_reg = vm_reg->as_VectorSRegister(); + if (vs_reg->encoding() >= VSR32->encoding() && vs_reg->encoding() <= VSR51->encoding()) { + reg_save_index += 2; + + Register spill_addr = R0; + if (action == ACTION_SAVE) { + _masm->addi(spill_addr, R1_SP, offset - reg_save_index * BytesPerWord); + _masm->stxvd2x(vs_reg, spill_addr); + } else if (action == ACTION_RESTORE) { + _masm->addi(spill_addr, R1_SP, offset - reg_save_index * BytesPerWord); + _masm->lxvd2x(vs_reg, spill_addr); + } else { + assert(action == ACTION_COUNT_ONLY, "Sanity"); + } + } + } else { + if (vm_reg->is_SpecialRegister()) { + fatal("Special registers are unsupported. Found register %s", vm_reg->name()); + } else { + fatal("Register type is not known"); + } + } + } + + return reg_save_index; +} + +#endif // COMPILER2 diff --git a/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.hpp b/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.hpp index eeb5dcce940..d70fce77acc 100644 --- a/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.hpp @@ -29,6 +29,14 @@ #include "asm/macroAssembler.hpp" #include "memory/allocation.hpp" #include "oops/access.hpp" +#ifdef COMPILER2 +#include "code/vmreg.hpp" +#include "opto/optoreg.hpp" +#include "opto/regmask.hpp" + +class BarrierStubC2; +class Node; +#endif // COMPILER2 enum class NMethodPatchingType { stw_instruction_and_data_patch, @@ -71,6 +79,43 @@ class BarrierSetAssembler: public CHeapObj { virtual void c2i_entry_barrier(MacroAssembler* masm, Register tmp1, Register tmp2, Register tmp3); virtual void check_oop(MacroAssembler *masm, Register oop, const char* msg); + +#ifdef COMPILER2 + OptoReg::Name refine_register(const Node* node, OptoReg::Name opto_reg) const; +#endif // COMPILER2 +}; + +#ifdef COMPILER2 + +// This class saves and restores the registers that need to be preserved across +// the runtime call represented by a given C2 barrier stub. Use as follows: +// { +// SaveLiveRegisters save(masm, stub); +// .. +// __ call_VM_leaf(...); +// .. +// } +class SaveLiveRegisters { + MacroAssembler* _masm; + RegMask _reg_mask; + Register _result_reg; + int _frame_size; + + public: + SaveLiveRegisters(MacroAssembler *masm, BarrierStubC2 *stub); + + ~SaveLiveRegisters(); + + private: + enum IterationAction : int { + ACTION_SAVE, + ACTION_RESTORE, + ACTION_COUNT_ONLY + }; + + int iterate_over_register_mask(IterationAction action, int offset = 0); }; +#endif // COMPILER2 + #endif // CPU_PPC_GC_SHARED_BARRIERSETASSEMBLER_PPC_HPP diff --git a/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp index 9ed47b688ff..5696b78eba8 100644 --- a/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp @@ -838,132 +838,6 @@ void ZBarrierSetAssembler::generate_c1_store_barrier_runtime_stub(StubAssembler* #ifdef COMPILER2 -OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) const { - if (!OptoReg::is_reg(opto_reg)) { - return OptoReg::Bad; - } - - VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if ((vm_reg->is_Register() || vm_reg ->is_FloatRegister()) && (opto_reg & 1) != 0) { - return OptoReg::Bad; - } - - return opto_reg; -} - -#define __ _masm-> - -class ZSaveLiveRegisters { - MacroAssembler* _masm; - RegMask _reg_mask; - Register _result_reg; - int _frame_size; - - public: - ZSaveLiveRegisters(MacroAssembler *masm, ZBarrierStubC2 *stub) - : _masm(masm), _reg_mask(stub->live()), _result_reg(stub->result()) { - - const int register_save_size = iterate_over_register_mask(ACTION_COUNT_ONLY) * BytesPerWord; - _frame_size = align_up(register_save_size, frame::alignment_in_bytes) - + frame::native_abi_reg_args_size; - - __ save_LR_CR(R0); - __ push_frame(_frame_size, R0); - - iterate_over_register_mask(ACTION_SAVE, _frame_size); - } - - ~ZSaveLiveRegisters() { - iterate_over_register_mask(ACTION_RESTORE, _frame_size); - - __ addi(R1_SP, R1_SP, _frame_size); - __ restore_LR_CR(R0); - } - - private: - enum IterationAction : int { - ACTION_SAVE, - ACTION_RESTORE, - ACTION_COUNT_ONLY - }; - - int iterate_over_register_mask(IterationAction action, int offset = 0) { - int reg_save_index = 0; - RegMaskIterator live_regs_iterator(_reg_mask); - - while(live_regs_iterator.has_next()) { - const OptoReg::Name opto_reg = live_regs_iterator.next(); - - // Filter out stack slots (spilled registers, i.e., stack-allocated registers). - if (!OptoReg::is_reg(opto_reg)) { - continue; - } - - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if (vm_reg->is_Register()) { - Register std_reg = vm_reg->as_Register(); - - // '_result_reg' will hold the end result of the operation. Its content must thus not be preserved. - if (std_reg == _result_reg) { - continue; - } - - if (std_reg->encoding() >= R2->encoding() && std_reg->encoding() <= R12->encoding()) { - reg_save_index++; - - if (action == ACTION_SAVE) { - _masm->std(std_reg, offset - reg_save_index * BytesPerWord, R1_SP); - } else if (action == ACTION_RESTORE) { - _masm->ld(std_reg, offset - reg_save_index * BytesPerWord, R1_SP); - } else { - assert(action == ACTION_COUNT_ONLY, "Sanity"); - } - } - } else if (vm_reg->is_FloatRegister()) { - FloatRegister fp_reg = vm_reg->as_FloatRegister(); - if (fp_reg->encoding() >= F0->encoding() && fp_reg->encoding() <= F13->encoding()) { - reg_save_index++; - - if (action == ACTION_SAVE) { - _masm->stfd(fp_reg, offset - reg_save_index * BytesPerWord, R1_SP); - } else if (action == ACTION_RESTORE) { - _masm->lfd(fp_reg, offset - reg_save_index * BytesPerWord, R1_SP); - } else { - assert(action == ACTION_COUNT_ONLY, "Sanity"); - } - } - } else if (vm_reg->is_ConditionRegister()) { - // NOP. Conditions registers are covered by save_LR_CR - } else if (vm_reg->is_VectorSRegister()) { - assert(SuperwordUseVSX, "or should not reach here"); - VectorSRegister vs_reg = vm_reg->as_VectorSRegister(); - if (vs_reg->encoding() >= VSR32->encoding() && vs_reg->encoding() <= VSR51->encoding()) { - reg_save_index += 2; - - Register spill_addr = R0; - if (action == ACTION_SAVE) { - _masm->addi(spill_addr, R1_SP, offset - reg_save_index * BytesPerWord); - _masm->stxvd2x(vs_reg, spill_addr); - } else if (action == ACTION_RESTORE) { - _masm->addi(spill_addr, R1_SP, offset - reg_save_index * BytesPerWord); - _masm->lxvd2x(vs_reg, spill_addr); - } else { - assert(action == ACTION_COUNT_ONLY, "Sanity"); - } - } - } else { - if (vm_reg->is_SpecialRegister()) { - fatal("Special registers are unsupported. Found register %s", vm_reg->name()); - } else { - fatal("Register type is not known"); - } - } - } - - return reg_save_index; - } -}; - #undef __ #define __ _masm-> @@ -1024,7 +898,7 @@ void ZBarrierSetAssembler::generate_c2_load_barrier_stub(MacroAssembler* masm, Z assert_different_registers(ref, ref_addr.base()); { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); ZSetupArguments setup_arguments(masm, stub); __ call_VM_leaf(stub->slow_path()); @@ -1063,7 +937,7 @@ void ZBarrierSetAssembler::generate_c2_store_barrier_stub(MacroAssembler* masm, __ bind(slow); { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); __ add(R3_ARG1, ind_or_offs, rbase); if (stub->is_native()) { __ call_VM_leaf(ZBarrierSetRuntime::store_barrier_on_native_oop_field_without_healing_addr(), R3_ARG1); diff --git a/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.hpp b/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.hpp index 7aca78db7d0..fcfc0f91533 100644 --- a/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.hpp @@ -105,8 +105,6 @@ class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase { #endif // COMPILER1 #ifdef COMPILER2 - OptoReg::Name refine_register(const Node* node, OptoReg::Name opto_reg) const; - void generate_c2_load_barrier_stub(MacroAssembler* masm, ZLoadBarrierStubC2* stub) const; void generate_c2_store_barrier_stub(MacroAssembler* masm, ZStoreBarrierStubC2* stub) const; diff --git a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp index 1ac1fc18f1e..f411a5572c7 100644 --- a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp @@ -35,6 +35,9 @@ #include "runtime/jniHandles.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#ifdef COMPILER2 +#include "gc/shared/c2/barrierSetC2.hpp" +#endif // COMPILER2 #define __ masm-> @@ -372,3 +375,72 @@ void BarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register __ load_klass(obj, obj, tmp1); // get klass __ beqz(obj, error); // if klass is null it is broken } + +#ifdef COMPILER2 + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { + if (!OptoReg::is_reg(opto_reg)) { + return OptoReg::Bad; + } + + const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + if (vm_reg->is_FloatRegister()) { + return opto_reg & ~1; + } + + return opto_reg; +} + +#undef __ +#define __ _masm-> + +void SaveLiveRegisters::initialize(BarrierStubC2* stub) { + // Record registers that needs to be saved/restored + RegMaskIterator rmi(stub->live()); + while (rmi.has_next()) { + const OptoReg::Name opto_reg = rmi.next(); + if (OptoReg::is_reg(opto_reg)) { + const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + if (vm_reg->is_Register()) { + _gp_regs += RegSet::of(vm_reg->as_Register()); + } else if (vm_reg->is_FloatRegister()) { + _fp_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); + } else if (vm_reg->is_VectorRegister()) { + const VMReg vm_reg_base = OptoReg::as_VMReg(opto_reg & ~(VectorRegister::max_slots_per_register - 1)); + _vp_regs += VectorRegSet::of(vm_reg_base->as_VectorRegister()); + } else { + fatal("Unknown register type"); + } + } + } + + // Remove C-ABI SOE registers, tmp regs and _ref register that will be updated + if (stub->result() != noreg) { + _gp_regs -= RegSet::range(x18, x27) + RegSet::of(x2) + RegSet::of(x8, x9) + RegSet::of(x5, stub->result()); + } else { + _gp_regs -= RegSet::range(x18, x27) + RegSet::of(x2, x5) + RegSet::of(x8, x9); + } +} + +SaveLiveRegisters::SaveLiveRegisters(MacroAssembler* masm, BarrierStubC2* stub) + : _masm(masm), + _gp_regs(), + _fp_regs(), + _vp_regs() { + // Figure out what registers to save/restore + initialize(stub); + + // Save registers + __ push_reg(_gp_regs, sp); + __ push_fp(_fp_regs, sp); + __ push_v(_vp_regs, sp); +} + +SaveLiveRegisters::~SaveLiveRegisters() { + // Restore registers + __ pop_v(_vp_regs, sp); + __ pop_fp(_fp_regs, sp); + __ pop_reg(_gp_regs, sp); +} + +#endif // COMPILER2 diff --git a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.hpp b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.hpp index d20c7fb1824..eb0801d237f 100644 --- a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.hpp @@ -31,6 +31,12 @@ #include "gc/shared/barrierSetNMethod.hpp" #include "memory/allocation.hpp" #include "oops/access.hpp" +#ifdef COMPILER2 +#include "opto/optoreg.hpp" + +class BarrierStubC2; +class Node; +#endif // COMPILER2 enum class NMethodPatchingType { stw_instruction_and_data_patch, @@ -106,6 +112,36 @@ class BarrierSetAssembler: public CHeapObj { static address patching_epoch_addr(); static void clear_patching_epoch(); static void increment_patching_epoch(); + +#ifdef COMPILER2 + OptoReg::Name refine_register(const Node* node, + OptoReg::Name opto_reg); +#endif // COMPILER2 +}; + +#ifdef COMPILER2 + +// This class saves and restores the registers that need to be preserved across +// the runtime call represented by a given C2 barrier stub. Use as follows: +// { +// SaveLiveRegisters save(masm, stub); +// .. +// __ jalr(...); +// .. +// } +class SaveLiveRegisters { +private: + MacroAssembler* const _masm; + RegSet _gp_regs; + FloatRegSet _fp_regs; + VectorRegSet _vp_regs; + +public: + void initialize(BarrierStubC2* stub); + SaveLiveRegisters(MacroAssembler* masm, BarrierStubC2* stub); + ~SaveLiveRegisters(); }; +#endif // COMPILER2 + #endif // CPU_RISCV_GC_SHARED_BARRIERSETASSEMBLER_RISCV_HPP diff --git a/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp index d0a28144225..7f7f19957e9 100644 --- a/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp @@ -642,80 +642,9 @@ void ZBarrierSetAssembler::patch_barrier_relocation(address addr, int format) { #ifdef COMPILER2 -OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { - if (!OptoReg::is_reg(opto_reg)) { - return OptoReg::Bad; - } - - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if (vm_reg->is_FloatRegister()) { - return opto_reg & ~1; - } - - return opto_reg; -} - #undef __ #define __ _masm-> -class ZSaveLiveRegisters { -private: - MacroAssembler* const _masm; - RegSet _gp_regs; - FloatRegSet _fp_regs; - VectorRegSet _vp_regs; - -public: - void initialize(ZBarrierStubC2* stub) { - // Record registers that needs to be saved/restored - RegMaskIterator rmi(stub->live()); - while (rmi.has_next()) { - const OptoReg::Name opto_reg = rmi.next(); - if (OptoReg::is_reg(opto_reg)) { - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if (vm_reg->is_Register()) { - _gp_regs += RegSet::of(vm_reg->as_Register()); - } else if (vm_reg->is_FloatRegister()) { - _fp_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); - } else if (vm_reg->is_VectorRegister()) { - const VMReg vm_reg_base = OptoReg::as_VMReg(opto_reg & ~(VectorRegister::max_slots_per_register - 1)); - _vp_regs += VectorRegSet::of(vm_reg_base->as_VectorRegister()); - } else { - fatal("Unknown register type"); - } - } - } - - // Remove C-ABI SOE registers, tmp regs and _ref register that will be updated - if (stub->result() != noreg) { - _gp_regs -= RegSet::range(x18, x27) + RegSet::of(x2) + RegSet::of(x8, x9) + RegSet::of(x5, stub->result()); - } else { - _gp_regs -= RegSet::range(x18, x27) + RegSet::of(x2, x5) + RegSet::of(x8, x9); - } - } - - ZSaveLiveRegisters(MacroAssembler* masm, ZBarrierStubC2* stub) - : _masm(masm), - _gp_regs(), - _fp_regs(), - _vp_regs() { - // Figure out what registers to save/restore - initialize(stub); - - // Save registers - __ push_reg(_gp_regs, sp); - __ push_fp(_fp_regs, sp); - __ push_v(_vp_regs, sp); - } - - ~ZSaveLiveRegisters() { - // Restore registers - __ pop_v(_vp_regs, sp); - __ pop_fp(_fp_regs, sp); - __ pop_reg(_gp_regs, sp); - } -}; - class ZSetupArguments { private: MacroAssembler* const _masm; @@ -781,7 +710,7 @@ void ZBarrierSetAssembler::generate_c2_load_barrier_stub(MacroAssembler* masm, Z } { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); ZSetupArguments setup_arguments(masm, stub); __ mv(t0, stub->slow_path()); __ jalr(t0); @@ -813,7 +742,7 @@ void ZBarrierSetAssembler::generate_c2_store_barrier_stub(MacroAssembler* masm, __ bind(slow); { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); __ la(c_rarg0, stub->ref_addr()); if (stub->is_native()) { diff --git a/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.hpp b/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.hpp index 4597949d189..ef7d1c41e0e 100644 --- a/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.hpp @@ -166,9 +166,6 @@ class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase { #endif // COMPILER1 #ifdef COMPILER2 - OptoReg::Name refine_register(const Node* node, - OptoReg::Name opto_reg); - void generate_c2_load_barrier_stub(MacroAssembler* masm, ZLoadBarrierStubC2* stub) const; void generate_c2_store_barrier_stub(MacroAssembler* masm, diff --git a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp index a770482b121..c5f97b60c42 100644 --- a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp +++ b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp @@ -1881,6 +1881,8 @@ void InterpreterMacroAssembler::load_field_entry(Register cache, Register index, ld(cache, Address(xcpool, ConstantPoolCache::field_entries_offset())); add(cache, cache, Array::base_offset_in_bytes()); add(cache, cache, index); + // Prevents stale data from being read after the bytecode is patched to the fast bytecode + membar(MacroAssembler::LoadLoad); } void InterpreterMacroAssembler::get_method_counters(Register method, diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 01a367a46ea..7869d6156e5 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -73,6 +73,7 @@ source %{ return false; } break; + case Op_LoadVectorGather: case Op_LoadVectorGatherMasked: if (is_subword_type(bt)) { return false; @@ -81,6 +82,15 @@ source %{ case Op_VectorCastHF2F: case Op_VectorCastF2HF: return UseZvfh; + case Op_VectorLoadShuffle: + case Op_VectorRearrange: + // vlen >= 4 is required, because min vector size for byte is 4 on riscv, + // VectorLoadShuffle is from byte to X, so it requires vlen >= 4. + // VectorRearrange depends on VectorLoadShuffle, so it also requires vlen >= 4. + if (vlen < 4) { + return false; + } + break; default: break; } @@ -3560,6 +3570,41 @@ instruct vmask_reinterpret_diff_esize(vRegMask dst, vRegMask_V0 src, vReg tmp) % ins_pipe(pipe_slow); %} +// ------------------------------ Vector shuffle ------------------------------- + +instruct loadshuffleB(vReg dst) %{ + predicate(Matcher::vector_element_basic_type(n) == T_BYTE); + match(Set dst (VectorLoadShuffle dst)); + format %{ "loadshuffleB $dst, $dst" %} + ins_encode %{ + // For T_BYTE, no need to do anything + %} + ins_pipe(pipe_class_empty); +%} + +instruct loadshuffleX(vReg dst, vReg src) %{ + predicate(Matcher::vector_element_basic_type(n) == T_DOUBLE || + Matcher::vector_element_basic_type(n) == T_LONG || + Matcher::vector_element_basic_type(n) == T_FLOAT || + Matcher::vector_element_basic_type(n) == T_INT || + Matcher::vector_element_basic_type(n) == T_SHORT); + match(Set dst (VectorLoadShuffle src)); + effect(TEMP_DEF dst); + format %{ "loadshuffleX $dst, $src" %} + ins_encode %{ + BasicType bt = Matcher::vector_element_basic_type(this); + __ vsetvli_helper(bt, Matcher::vector_length(this)); + if (bt == T_SHORT) { + __ vzext_vf2(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + } else if (bt == T_FLOAT || bt == T_INT) { + __ vzext_vf4(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + } else { // bt == T_DOUBLE || bt == T_LONG + __ vzext_vf8(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + } + %} + ins_pipe(pipe_slow); +%} + // ------------------------------ Vector rearrange ----------------------------- instruct rearrange(vReg dst, vReg src, vReg shuffle) %{ diff --git a/src/hotspot/cpu/riscv/templateTable_riscv.cpp b/src/hotspot/cpu/riscv/templateTable_riscv.cpp index 6240e4b4b50..5c72ddc9f81 100644 --- a/src/hotspot/cpu/riscv/templateTable_riscv.cpp +++ b/src/hotspot/cpu/riscv/templateTable_riscv.cpp @@ -2272,7 +2272,9 @@ void TemplateTable::load_resolved_field_entry(Register obj, __ load_unsigned_byte(flags, Address(cache, in_bytes(ResolvedFieldEntry::flags_offset()))); // TOS state - __ load_unsigned_byte(tos_state, Address(cache, in_bytes(ResolvedFieldEntry::type_offset()))); + if (tos_state != noreg) { + __ load_unsigned_byte(tos_state, Address(cache, in_bytes(ResolvedFieldEntry::type_offset()))); + } // Klass overwrite register if (is_static) { @@ -3036,13 +3038,9 @@ void TemplateTable::fast_storefield(TosState state) { // access constant pool cache __ load_field_entry(x12, x11); - __ push_reg(x10); - // X11: field offset, X12: TOS, X13: flags - load_resolved_field_entry(x12, x12, x10, x11, x13); - __ pop_reg(x10); - // Must prevent reordering of the following cp cache loads with bytecode load - __ membar(MacroAssembler::LoadLoad); + // X11: field offset, X12: field holder, X13: flags + load_resolved_field_entry(x12, x12, noreg, x11, x13); { Label notVolatile; @@ -3133,9 +3131,6 @@ void TemplateTable::fast_accessfield(TosState state) { // access constant pool cache __ load_field_entry(x12, x11); - // Must prevent reordering of the following cp cache loads with bytecode load - __ membar(MacroAssembler::LoadLoad); - __ load_sized_value(x11, Address(x12, in_bytes(ResolvedFieldEntry::field_offset_offset())), sizeof(int), true /*is_signed*/); __ load_unsigned_byte(x13, Address(x12, in_bytes(ResolvedFieldEntry::flags_offset()))); diff --git a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp index 480af074a4c..d3457916bc9 100644 --- a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp @@ -147,3 +147,11 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm) { // Fall through to method body. __ block_comment("} nmethod_entry_barrier (nmethod_entry_barrier)"); } + +#ifdef COMPILER2 + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { + Unimplemented(); // This must be implemented to support late barrier expansion. +} + +#endif // COMPILER2 diff --git a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.hpp b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.hpp index b0f7233812b..f83bbb864ea 100644 --- a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.hpp +++ b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.hpp @@ -29,6 +29,12 @@ #include "asm/macroAssembler.hpp" #include "memory/allocation.hpp" #include "oops/access.hpp" +#ifdef COMPILER2 +#include "code/vmreg.hpp" +#include "opto/optoreg.hpp" + +class Node; +#endif // COMPILER2 class InterpreterMacroAssembler; @@ -52,6 +58,11 @@ class BarrierSetAssembler: public CHeapObj { virtual void nmethod_entry_barrier(MacroAssembler* masm); virtual void barrier_stubs_init() {} + +#ifdef COMPILER2 + OptoReg::Name refine_register(const Node* node, + OptoReg::Name opto_reg); +#endif // COMPILER2 }; #endif // CPU_S390_GC_SHARED_BARRIERSETASSEMBLER_S390_HPP diff --git a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp index f09e1c92162..a06fde061f8 100644 --- a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp @@ -34,6 +34,9 @@ #include "runtime/jniHandles.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#ifdef COMPILER2 +#include "gc/shared/c2/barrierSetC2.hpp" +#endif // COMPILER2 #define __ masm-> @@ -488,3 +491,280 @@ void BarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register __ testptr(obj, obj); __ jcc(Assembler::zero, error); // if klass is null it is broken } + +#ifdef COMPILER2 + +#ifdef _LP64 + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { + if (!OptoReg::is_reg(opto_reg)) { + return OptoReg::Bad; + } + + const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + if (vm_reg->is_XMMRegister()) { + opto_reg &= ~15; + switch (node->ideal_reg()) { + case Op_VecX: + opto_reg |= 2; + break; + case Op_VecY: + opto_reg |= 4; + break; + case Op_VecZ: + opto_reg |= 8; + break; + default: + opto_reg |= 1; + break; + } + } + + return opto_reg; +} + +// We use the vec_spill_helper from the x86.ad file to avoid reinventing this wheel +extern void vec_spill_helper(C2_MacroAssembler *masm, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +#undef __ +#define __ _masm-> + +int SaveLiveRegisters::xmm_compare_register_size(XMMRegisterData* left, XMMRegisterData* right) { + if (left->_size == right->_size) { + return 0; + } + + return (left->_size < right->_size) ? -1 : 1; +} + +int SaveLiveRegisters::xmm_slot_size(OptoReg::Name opto_reg) { + // The low order 4 bytes denote what size of the XMM register is live + return (opto_reg & 15) << 3; +} + +uint SaveLiveRegisters::xmm_ideal_reg_for_size(int reg_size) { + switch (reg_size) { + case 8: + return Op_VecD; + case 16: + return Op_VecX; + case 32: + return Op_VecY; + case 64: + return Op_VecZ; + default: + fatal("Invalid register size %d", reg_size); + return 0; + } +} + +bool SaveLiveRegisters::xmm_needs_vzeroupper() const { + return _xmm_registers.is_nonempty() && _xmm_registers.at(0)._size > 16; +} + +void SaveLiveRegisters::xmm_register_save(const XMMRegisterData& reg_data) { + const OptoReg::Name opto_reg = OptoReg::as_OptoReg(reg_data._reg->as_VMReg()); + const uint ideal_reg = xmm_ideal_reg_for_size(reg_data._size); + _spill_offset -= reg_data._size; + C2_MacroAssembler c2_masm(__ code()); + vec_spill_helper(&c2_masm, false /* is_load */, _spill_offset, opto_reg, ideal_reg, tty); +} + +void SaveLiveRegisters::xmm_register_restore(const XMMRegisterData& reg_data) { + const OptoReg::Name opto_reg = OptoReg::as_OptoReg(reg_data._reg->as_VMReg()); + const uint ideal_reg = xmm_ideal_reg_for_size(reg_data._size); + C2_MacroAssembler c2_masm(__ code()); + vec_spill_helper(&c2_masm, true /* is_load */, _spill_offset, opto_reg, ideal_reg, tty); + _spill_offset += reg_data._size; +} + +void SaveLiveRegisters::gp_register_save(Register reg) { + _spill_offset -= 8; + __ movq(Address(rsp, _spill_offset), reg); +} + +void SaveLiveRegisters::opmask_register_save(KRegister reg) { + _spill_offset -= 8; + __ kmov(Address(rsp, _spill_offset), reg); +} + +void SaveLiveRegisters::gp_register_restore(Register reg) { + __ movq(reg, Address(rsp, _spill_offset)); + _spill_offset += 8; +} + +void SaveLiveRegisters::opmask_register_restore(KRegister reg) { + __ kmov(reg, Address(rsp, _spill_offset)); + _spill_offset += 8; +} + +void SaveLiveRegisters::initialize(BarrierStubC2* stub) { + // Create mask of caller saved registers that need to + // be saved/restored if live + RegMask caller_saved; + caller_saved.Insert(OptoReg::as_OptoReg(rax->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(rcx->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(rdx->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(rsi->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(rdi->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r8->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r9->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r10->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r11->as_VMReg())); + + if (stub->result() != noreg) { + caller_saved.Remove(OptoReg::as_OptoReg(stub->result()->as_VMReg())); + } + + // Create mask of live registers + RegMask live = stub->live(); + + int gp_spill_size = 0; + int opmask_spill_size = 0; + int xmm_spill_size = 0; + + // Record registers that needs to be saved/restored + RegMaskIterator rmi(live); + while (rmi.has_next()) { + const OptoReg::Name opto_reg = rmi.next(); + const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + + if (vm_reg->is_Register()) { + if (caller_saved.Member(opto_reg)) { + _gp_registers.append(vm_reg->as_Register()); + gp_spill_size += 8; + } + } else if (vm_reg->is_KRegister()) { + // All opmask registers are caller saved, thus spill the ones + // which are live. + if (_opmask_registers.find(vm_reg->as_KRegister()) == -1) { + _opmask_registers.append(vm_reg->as_KRegister()); + opmask_spill_size += 8; + } + } else if (vm_reg->is_XMMRegister()) { + // We encode in the low order 4 bits of the opto_reg, how large part of the register is live + const VMReg vm_reg_base = OptoReg::as_VMReg(opto_reg & ~15); + const int reg_size = xmm_slot_size(opto_reg); + const XMMRegisterData reg_data = { vm_reg_base->as_XMMRegister(), reg_size }; + const int reg_index = _xmm_registers.find(reg_data); + if (reg_index == -1) { + // Not previously appended + _xmm_registers.append(reg_data); + xmm_spill_size += reg_size; + } else { + // Previously appended, update size + const int reg_size_prev = _xmm_registers.at(reg_index)._size; + if (reg_size > reg_size_prev) { + _xmm_registers.at_put(reg_index, reg_data); + xmm_spill_size += reg_size - reg_size_prev; + } + } + } else { + fatal("Unexpected register type"); + } + } + + // Sort by size, largest first + _xmm_registers.sort(xmm_compare_register_size); + + // On Windows, the caller reserves stack space for spilling register arguments + const int arg_spill_size = frame::arg_reg_save_area_bytes; + + // Stack pointer must be 16 bytes aligned for the call + _spill_offset = _spill_size = align_up(xmm_spill_size + gp_spill_size + opmask_spill_size + arg_spill_size, 16); +} + +SaveLiveRegisters::SaveLiveRegisters(MacroAssembler* masm, BarrierStubC2* stub) + : _masm(masm), + _gp_registers(), + _opmask_registers(), + _xmm_registers(), + _spill_size(0), + _spill_offset(0) { + + // + // Stack layout after registers have been spilled: + // + // | ... | original rsp, 16 bytes aligned + // ------------------ + // | zmm0 high | + // | ... | + // | zmm0 low | 16 bytes aligned + // | ... | + // | ymm1 high | + // | ... | + // | ymm1 low | 16 bytes aligned + // | ... | + // | xmmN high | + // | ... | + // | xmmN low | 8 bytes aligned + // | reg0 | 8 bytes aligned + // | reg1 | + // | ... | + // | regN | new rsp, if 16 bytes aligned + // | | else new rsp, 16 bytes aligned + // ------------------ + // + + // Figure out what registers to save/restore + initialize(stub); + + // Allocate stack space + if (_spill_size > 0) { + __ subptr(rsp, _spill_size); + } + + // Save XMM/YMM/ZMM registers + for (int i = 0; i < _xmm_registers.length(); i++) { + xmm_register_save(_xmm_registers.at(i)); + } + + if (xmm_needs_vzeroupper()) { + __ vzeroupper(); + } + + // Save general purpose registers + for (int i = 0; i < _gp_registers.length(); i++) { + gp_register_save(_gp_registers.at(i)); + } + + // Save opmask registers + for (int i = 0; i < _opmask_registers.length(); i++) { + opmask_register_save(_opmask_registers.at(i)); + } +} + +SaveLiveRegisters::~SaveLiveRegisters() { + // Restore opmask registers + for (int i = _opmask_registers.length() - 1; i >= 0; i--) { + opmask_register_restore(_opmask_registers.at(i)); + } + + // Restore general purpose registers + for (int i = _gp_registers.length() - 1; i >= 0; i--) { + gp_register_restore(_gp_registers.at(i)); + } + + __ vzeroupper(); + + // Restore XMM/YMM/ZMM registers + for (int i = _xmm_registers.length() - 1; i >= 0; i--) { + xmm_register_restore(_xmm_registers.at(i)); + } + + // Free stack space + if (_spill_size > 0) { + __ addptr(rsp, _spill_size); + } +} + +#else // !_LP64 + +OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { + Unimplemented(); // This must be implemented to support late barrier expansion. +} + +#endif // _LP64 + +#endif // COMPILER2 diff --git a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.hpp b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.hpp index a2f2d86f46a..a74d5cc7676 100644 --- a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.hpp @@ -28,7 +28,12 @@ #include "asm/macroAssembler.hpp" #include "memory/allocation.hpp" #include "oops/access.hpp" +#ifdef COMPILER2 +#include "opto/optoreg.hpp" +class BarrierStubC2; +class Node; +#endif // COMPILER2 class InterpreterMacroAssembler; class BarrierSetAssembler: public CHeapObj { @@ -106,6 +111,63 @@ class BarrierSetAssembler: public CHeapObj { virtual void c2i_entry_barrier(MacroAssembler* masm); virtual void check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& error); + +#ifdef COMPILER2 + OptoReg::Name refine_register(const Node* node, + OptoReg::Name opto_reg); +#endif // COMPILER2 +}; + +#ifdef COMPILER2 + +#ifdef _LP64 + +// This class saves and restores the registers that need to be preserved across +// the runtime call represented by a given C2 barrier stub. Use as follows: +// { +// SaveLiveRegisters save(masm, stub); +// .. +// __ call(RuntimeAddress(...); +// .. +// } +class SaveLiveRegisters { +private: + struct XMMRegisterData { + XMMRegister _reg; + int _size; + + // Used by GrowableArray::find() + bool operator == (const XMMRegisterData& other) { + return _reg == other._reg; + } + }; + + MacroAssembler* const _masm; + GrowableArray _gp_registers; + GrowableArray _opmask_registers; + GrowableArray _xmm_registers; + int _spill_size; + int _spill_offset; + + static int xmm_compare_register_size(XMMRegisterData* left, XMMRegisterData* right); + static int xmm_slot_size(OptoReg::Name opto_reg); + static uint xmm_ideal_reg_for_size(int reg_size); + bool xmm_needs_vzeroupper() const; + void xmm_register_save(const XMMRegisterData& reg_data); + void xmm_register_restore(const XMMRegisterData& reg_data); + void gp_register_save(Register reg); + void opmask_register_save(KRegister reg); + void gp_register_restore(Register reg); + void opmask_register_restore(KRegister reg); + void initialize(BarrierStubC2* stub); + +public: + SaveLiveRegisters(MacroAssembler* masm, BarrierStubC2* stub); + ~SaveLiveRegisters(); }; +#endif // _LP64 + +#endif // COMPILER2 + #endif // CPU_X86_GC_SHARED_BARRIERSETASSEMBLER_X86_HPP diff --git a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp index 5f0b73bf23f..f5f0d6c8841 100644 --- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp @@ -1156,290 +1156,9 @@ void ZBarrierSetAssembler::generate_c1_store_barrier_runtime_stub(StubAssembler* #ifdef COMPILER2 -OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { - if (!OptoReg::is_reg(opto_reg)) { - return OptoReg::Bad; - } - - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if (vm_reg->is_XMMRegister()) { - opto_reg &= ~15; - switch (node->ideal_reg()) { - case Op_VecX: - opto_reg |= 2; - break; - case Op_VecY: - opto_reg |= 4; - break; - case Op_VecZ: - opto_reg |= 8; - break; - default: - opto_reg |= 1; - break; - } - } - - return opto_reg; -} - -// We use the vec_spill_helper from the x86.ad file to avoid reinventing this wheel -extern void vec_spill_helper(C2_MacroAssembler *masm, bool is_load, - int stack_offset, int reg, uint ireg, outputStream* st); - #undef __ #define __ _masm-> -class ZSaveLiveRegisters { -private: - struct XMMRegisterData { - XMMRegister _reg; - int _size; - - // Used by GrowableArray::find() - bool operator == (const XMMRegisterData& other) { - return _reg == other._reg; - } - }; - - MacroAssembler* const _masm; - GrowableArray _gp_registers; - GrowableArray _opmask_registers; - GrowableArray _xmm_registers; - int _spill_size; - int _spill_offset; - - static int xmm_compare_register_size(XMMRegisterData* left, XMMRegisterData* right) { - if (left->_size == right->_size) { - return 0; - } - - return (left->_size < right->_size) ? -1 : 1; - } - - static int xmm_slot_size(OptoReg::Name opto_reg) { - // The low order 4 bytes denote what size of the XMM register is live - return (opto_reg & 15) << 3; - } - - static uint xmm_ideal_reg_for_size(int reg_size) { - switch (reg_size) { - case 8: - return Op_VecD; - case 16: - return Op_VecX; - case 32: - return Op_VecY; - case 64: - return Op_VecZ; - default: - fatal("Invalid register size %d", reg_size); - return 0; - } - } - - bool xmm_needs_vzeroupper() const { - return _xmm_registers.is_nonempty() && _xmm_registers.at(0)._size > 16; - } - - void xmm_register_save(const XMMRegisterData& reg_data) { - const OptoReg::Name opto_reg = OptoReg::as_OptoReg(reg_data._reg->as_VMReg()); - const uint ideal_reg = xmm_ideal_reg_for_size(reg_data._size); - _spill_offset -= reg_data._size; - C2_MacroAssembler c2_masm(__ code()); - vec_spill_helper(&c2_masm, false /* is_load */, _spill_offset, opto_reg, ideal_reg, tty); - } - - void xmm_register_restore(const XMMRegisterData& reg_data) { - const OptoReg::Name opto_reg = OptoReg::as_OptoReg(reg_data._reg->as_VMReg()); - const uint ideal_reg = xmm_ideal_reg_for_size(reg_data._size); - C2_MacroAssembler c2_masm(__ code()); - vec_spill_helper(&c2_masm, true /* is_load */, _spill_offset, opto_reg, ideal_reg, tty); - _spill_offset += reg_data._size; - } - - void gp_register_save(Register reg) { - _spill_offset -= 8; - __ movq(Address(rsp, _spill_offset), reg); - } - - void opmask_register_save(KRegister reg) { - _spill_offset -= 8; - __ kmov(Address(rsp, _spill_offset), reg); - } - - void gp_register_restore(Register reg) { - __ movq(reg, Address(rsp, _spill_offset)); - _spill_offset += 8; - } - - void opmask_register_restore(KRegister reg) { - __ kmov(reg, Address(rsp, _spill_offset)); - _spill_offset += 8; - } - - void initialize(ZBarrierStubC2* stub) { - // Create mask of caller saved registers that need to - // be saved/restored if live - RegMask caller_saved; - caller_saved.Insert(OptoReg::as_OptoReg(rax->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(rcx->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(rdx->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(rsi->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(rdi->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(r8->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(r9->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(r10->as_VMReg())); - caller_saved.Insert(OptoReg::as_OptoReg(r11->as_VMReg())); - - if (stub->result() != noreg) { - caller_saved.Remove(OptoReg::as_OptoReg(stub->result()->as_VMReg())); - } - - // Create mask of live registers - RegMask live = stub->live(); - - int gp_spill_size = 0; - int opmask_spill_size = 0; - int xmm_spill_size = 0; - - // Record registers that needs to be saved/restored - RegMaskIterator rmi(live); - while (rmi.has_next()) { - const OptoReg::Name opto_reg = rmi.next(); - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - - if (vm_reg->is_Register()) { - if (caller_saved.Member(opto_reg)) { - _gp_registers.append(vm_reg->as_Register()); - gp_spill_size += 8; - } - } else if (vm_reg->is_KRegister()) { - // All opmask registers are caller saved, thus spill the ones - // which are live. - if (_opmask_registers.find(vm_reg->as_KRegister()) == -1) { - _opmask_registers.append(vm_reg->as_KRegister()); - opmask_spill_size += 8; - } - } else if (vm_reg->is_XMMRegister()) { - // We encode in the low order 4 bits of the opto_reg, how large part of the register is live - const VMReg vm_reg_base = OptoReg::as_VMReg(opto_reg & ~15); - const int reg_size = xmm_slot_size(opto_reg); - const XMMRegisterData reg_data = { vm_reg_base->as_XMMRegister(), reg_size }; - const int reg_index = _xmm_registers.find(reg_data); - if (reg_index == -1) { - // Not previously appended - _xmm_registers.append(reg_data); - xmm_spill_size += reg_size; - } else { - // Previously appended, update size - const int reg_size_prev = _xmm_registers.at(reg_index)._size; - if (reg_size > reg_size_prev) { - _xmm_registers.at_put(reg_index, reg_data); - xmm_spill_size += reg_size - reg_size_prev; - } - } - } else { - fatal("Unexpected register type"); - } - } - - // Sort by size, largest first - _xmm_registers.sort(xmm_compare_register_size); - - // On Windows, the caller reserves stack space for spilling register arguments - const int arg_spill_size = frame::arg_reg_save_area_bytes; - - // Stack pointer must be 16 bytes aligned for the call - _spill_offset = _spill_size = align_up(xmm_spill_size + gp_spill_size + opmask_spill_size + arg_spill_size, 16); - } - -public: - ZSaveLiveRegisters(MacroAssembler* masm, ZBarrierStubC2* stub) - : _masm(masm), - _gp_registers(), - _opmask_registers(), - _xmm_registers(), - _spill_size(0), - _spill_offset(0) { - - // - // Stack layout after registers have been spilled: - // - // | ... | original rsp, 16 bytes aligned - // ------------------ - // | zmm0 high | - // | ... | - // | zmm0 low | 16 bytes aligned - // | ... | - // | ymm1 high | - // | ... | - // | ymm1 low | 16 bytes aligned - // | ... | - // | xmmN high | - // | ... | - // | xmmN low | 8 bytes aligned - // | reg0 | 8 bytes aligned - // | reg1 | - // | ... | - // | regN | new rsp, if 16 bytes aligned - // | | else new rsp, 16 bytes aligned - // ------------------ - // - - // Figure out what registers to save/restore - initialize(stub); - - // Allocate stack space - if (_spill_size > 0) { - __ subptr(rsp, _spill_size); - } - - // Save XMM/YMM/ZMM registers - for (int i = 0; i < _xmm_registers.length(); i++) { - xmm_register_save(_xmm_registers.at(i)); - } - - if (xmm_needs_vzeroupper()) { - __ vzeroupper(); - } - - // Save general purpose registers - for (int i = 0; i < _gp_registers.length(); i++) { - gp_register_save(_gp_registers.at(i)); - } - - // Save opmask registers - for (int i = 0; i < _opmask_registers.length(); i++) { - opmask_register_save(_opmask_registers.at(i)); - } - } - - ~ZSaveLiveRegisters() { - // Restore opmask registers - for (int i = _opmask_registers.length() - 1; i >= 0; i--) { - opmask_register_restore(_opmask_registers.at(i)); - } - - // Restore general purpose registers - for (int i = _gp_registers.length() - 1; i >= 0; i--) { - gp_register_restore(_gp_registers.at(i)); - } - - __ vzeroupper(); - - // Restore XMM/YMM/ZMM registers - for (int i = _xmm_registers.length() - 1; i >= 0; i--) { - xmm_register_restore(_xmm_registers.at(i)); - } - - // Free stack space - if (_spill_size > 0) { - __ addptr(rsp, _spill_size); - } - } -}; - class ZSetupArguments { private: MacroAssembler* const _masm; @@ -1504,7 +1223,7 @@ void ZBarrierSetAssembler::generate_c2_load_barrier_stub(MacroAssembler* masm, Z __ movptr(stub->ref(), stub->ref_addr()); { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); ZSetupArguments setup_arguments(masm, stub); __ call(RuntimeAddress(stub->slow_path())); } @@ -1534,7 +1253,7 @@ void ZBarrierSetAssembler::generate_c2_store_barrier_stub(MacroAssembler* masm, __ bind(slow); { - ZSaveLiveRegisters save_live_registers(masm, stub); + SaveLiveRegisters save_live_registers(masm, stub); __ lea(c_rarg0, stub->ref_addr()); if (stub->is_native()) { diff --git a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp index 752cff0125d..7c3716ba0da 100644 --- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp @@ -164,9 +164,6 @@ class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase { #endif // COMPILER1 #ifdef COMPILER2 - OptoReg::Name refine_register(const Node* node, - OptoReg::Name opto_reg); - void generate_c2_load_barrier_stub(MacroAssembler* masm, ZLoadBarrierStubC2* stub) const; void generate_c2_store_barrier_stub(MacroAssembler* masm, diff --git a/src/hotspot/cpu/x86/templateTable_x86.cpp b/src/hotspot/cpu/x86/templateTable_x86.cpp index 664cd86d486..248055337d8 100644 --- a/src/hotspot/cpu/x86/templateTable_x86.cpp +++ b/src/hotspot/cpu/x86/templateTable_x86.cpp @@ -3495,7 +3495,7 @@ void TemplateTable::fast_storefield(TosState state) { __ push(rax); __ load_field_entry(rcx, rax); load_resolved_field_entry(noreg, cache, rax, rbx, rdx); - // RBX: field offset, RCX: RAX: TOS, RDX: flags + // RBX: field offset, RAX: TOS, RDX: flags __ andl(rdx, (1 << ResolvedFieldEntry::is_volatile_shift)); __ pop(rax); diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 7bbae30c832..8c9bbfc3592 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -10249,7 +10249,7 @@ instruct mask_opers_evex(kReg dst, kReg src1, kReg src2, kReg kscratch) %{ ins_encode %{ const MachNode* mask1 = static_cast(this->in(this->operand_index($src1))); const MachNode* mask2 = static_cast(this->in(this->operand_index($src2))); - assert(0 == Type::cmp(mask1->bottom_type(), mask2->bottom_type()), ""); + assert(Type::equals(mask1->bottom_type(), mask2->bottom_type()), "Mask types must be equal"); uint masklen = Matcher::vector_length(this); masklen = (masklen < 16 && !VM_Version::supports_avx512dq()) ? 16 : masklen; __ masked_op(this->ideal_Opcode(), masklen, $dst$$KRegister, $src1$$KRegister, $src2$$KRegister); diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp index 71a9aa576ea..1925357e1b4 100644 --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -2059,15 +2059,6 @@ size_t os::vm_min_address() { return _vm_min_address_default; } -// Used to convert frequent JVM_Yield() to nops -bool os::dont_yield() { - return DontYieldALot; -} - -void os::naked_yield() { - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff --git a/src/hotspot/os/aix/porting_aix.cpp b/src/hotspot/os/aix/porting_aix.cpp index c06d4ad9a7f..ac0cc8d53d8 100644 --- a/src/hotspot/os/aix/porting_aix.cpp +++ b/src/hotspot/os/aix/porting_aix.cpp @@ -906,10 +906,11 @@ struct TableLocker { ~TableLocker() { pthread_mutex_unlock(&g_handletable_mutex); } }; struct handletableentry{ - void* handle; - ino64_t inode; - dev64_t devid; - uint refcount; + void* handle; + ino64_t inode; + dev64_t devid; + char* member; + uint refcount; }; constexpr unsigned init_num_handles = 128; static unsigned max_handletable = 0; @@ -1049,6 +1050,14 @@ void* Aix_dlopen(const char* filename, int Flags, const char** error_report) { return nullptr; } else { + // extract member string if exist duplicate it and store pointer of it + // if member does not exist store nullptr + char* member = nullptr; + const char* substr; + if (filename[strlen(filename) - 1] == ')' && (substr = strrchr(filename, '('))) { + member = os::strdup(substr); + } + unsigned i = 0; TableLocker lock; // check if library belonging to filename is already loaded. @@ -1056,7 +1065,10 @@ void* Aix_dlopen(const char* filename, int Flags, const char** error_report) { for (i = 0; i < g_handletable_used; i++) { if ((p_handletable + i)->handle && (p_handletable + i)->inode == libstat.st_ino && - (p_handletable + i)->devid == libstat.st_dev) { + (p_handletable + i)->devid == libstat.st_dev && + (((p_handletable + i)->member == nullptr && member == nullptr) || + ((p_handletable + i)->member != nullptr && member != nullptr && + strcmp((p_handletable + i)->member, member) == 0))) { (p_handletable + i)->refcount++; result = (p_handletable + i)->handle; break; @@ -1084,6 +1096,7 @@ void* Aix_dlopen(const char* filename, int Flags, const char** error_report) { (p_handletable + i)->handle = result; (p_handletable + i)->inode = libstat.st_ino; (p_handletable + i)->devid = libstat.st_dev; + (p_handletable + i)->member = member; (p_handletable + i)->refcount = 1; } else { @@ -1131,7 +1144,7 @@ bool os::pd_dll_unload(void* libhandle, char* ebuf, int ebuflen) { // while in the second case we simply have to nag. res = (0 == ::dlclose(libhandle)); if (!res) { - // error analysis when dlopen fails + // error analysis when dlclose fails const char* error_report = ::dlerror(); if (error_report == nullptr) { error_report = "dlerror returned no error description"; @@ -1145,7 +1158,11 @@ bool os::pd_dll_unload(void* libhandle, char* ebuf, int ebuflen) { if (i < g_handletable_used) { if (res) { // First case: libhandle was found (with refcount == 0) and ::dlclose successful, - // so delete entry from array + // so delete entry from array (do not forget to free member-string space if member exists) + if ((p_handletable + i)->member) { + os::free((p_handletable + i)->member); + (p_handletable + i)->member = nullptr; + } g_handletable_used--; // If the entry was the last one of the array, the previous g_handletable_used-- // is sufficient to remove the entry from the array, otherwise we move the last diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index ca4a77d2b4a..17b52bc1efa 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -1936,15 +1936,6 @@ size_t os::vm_min_address() { #endif } -// Used to convert frequent JVM_Yield() to nops -bool os::dont_yield() { - return DontYieldALot; -} - -void os::naked_yield() { - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 6391210d9a8..919084dcaea 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -4397,25 +4397,6 @@ size_t os::vm_min_address() { return value; } -// Used to convert frequent JVM_Yield() to nops -bool os::dont_yield() { - return DontYieldALot; -} - -// Linux CFS scheduler (since 2.6.23) does not guarantee sched_yield(2) will -// actually give up the CPU. Since skip buddy (v2.6.28): -// -// * Sets the yielding task as skip buddy for current CPU's run queue. -// * Picks next from run queue, if empty, picks a skip buddy (can be the yielding task). -// * Clears skip buddies for this run queue (yielding task no longer a skip buddy). -// -// An alternative is calling os::naked_short_nanosleep with a small number to avoid -// getting re-scheduled immediately. -// -void os::naked_yield() { - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff --git a/src/hotspot/os/posix/os_posix.cpp b/src/hotspot/os/posix/os_posix.cpp index 76a6080305b..a18a633002c 100644 --- a/src/hotspot/os/posix/os_posix.cpp +++ b/src/hotspot/os/posix/os_posix.cpp @@ -854,6 +854,14 @@ void os::_exit(int num) { ALLOW_C_FUNCTION(::_exit, ::_exit(num);) } +bool os::dont_yield() { + return DontYieldALot; +} + +void os::naked_yield() { + sched_yield(); +} + // Builds a platform dependent Agent_OnLoad_ function name // which is used to find statically linked in agents. // Parameters: diff --git a/src/hotspot/os/posix/signals_posix.cpp b/src/hotspot/os/posix/signals_posix.cpp index 5172853ecd5..a9d3bb9284c 100644 --- a/src/hotspot/os/posix/signals_posix.cpp +++ b/src/hotspot/os/posix/signals_posix.cpp @@ -614,7 +614,6 @@ int JVM_HANDLE_XXX_SIGNAL(int sig, siginfo_t* info, if (NativeDeoptInstruction::is_deopt_at(pc)) { CodeBlob* cb = CodeCache::find_blob(pc); if (cb != nullptr && cb->is_nmethod()) { - MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, t);) // can call PcDescCache::add_pc_desc nmethod* nm = cb->as_nmethod(); assert(nm->insts_contains_inclusive(pc), ""); address deopt = nm->is_method_handle_return(pc) ? diff --git a/src/hotspot/share/adlc/adlparse.cpp b/src/hotspot/share/adlc/adlparse.cpp index 48dea8804f3..033e8d26ca7 100644 --- a/src/hotspot/share/adlc/adlparse.cpp +++ b/src/hotspot/share/adlc/adlparse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -5225,7 +5225,7 @@ void ADLParser::skipws_common(bool do_preproc) { if (*_ptr == '\n') { // keep proper track of new lines if (!do_preproc) break; // let caller handle the newline next_line(); - _ptr = _curline; next = _ptr + 1; + _ptr = _curline; if (_ptr != nullptr) next = _ptr + 1; } else if ((*_ptr == '/') && (*next == '/')) // C++ comment do { _ptr++; next++; } while(*_ptr != '\n'); // So go to end of line diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index ee57e11f932..26d393d06db 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -110,6 +110,11 @@ #endif +// Cast from int value to narrow type +#define CHECKED_CAST(result, T, thing) \ + result = static_cast(thing); \ + assert(static_cast(result) == thing, "failed: %d != %d", static_cast(result), thing); + //--------------------------------------------------------------------------------- // NMethod statistics // They are printed under various flags, including: @@ -121,26 +126,28 @@ // and make it simpler to print from the debugger. struct java_nmethod_stats_struct { uint nmethod_count; - uint total_size; + uint total_nm_size; + uint total_immut_size; uint relocation_size; uint consts_size; uint insts_size; uint stub_size; - uint scopes_data_size; - uint scopes_pcs_size; + uint oops_size; + uint metadata_size; uint dependencies_size; - uint handler_table_size; uint nul_chk_table_size; + uint handler_table_size; + uint scopes_pcs_size; + uint scopes_data_size; #if INCLUDE_JVMCI uint speculations_size; uint jvmci_data_size; #endif - uint oops_size; - uint metadata_size; void note_nmethod(nmethod* nm) { nmethod_count += 1; - total_size += nm->size(); + total_nm_size += nm->size(); + total_immut_size += nm->immutable_data_size(); relocation_size += nm->relocation_size(); consts_size += nm->consts_size(); insts_size += nm->insts_size(); @@ -160,23 +167,60 @@ struct java_nmethod_stats_struct { void print_nmethod_stats(const char* name) { if (nmethod_count == 0) return; tty->print_cr("Statistics for %u bytecoded nmethods for %s:", nmethod_count, name); - if (total_size != 0) tty->print_cr(" total in heap = %u (100%%)", total_size); + uint total_size = total_nm_size + total_immut_size; + if (total_nm_size != 0) { + tty->print_cr(" total size = %u (100%%)", total_size); + tty->print_cr(" in CodeCache = %u (%f%%)", total_nm_size, (total_nm_size * 100.0f)/total_size); + } uint header_size = (uint)(nmethod_count * sizeof(nmethod)); - if (nmethod_count != 0) tty->print_cr(" header = %u (%f%%)", header_size, (header_size * 100.0f)/total_size); - if (relocation_size != 0) tty->print_cr(" relocation = %u (%f%%)", relocation_size, (relocation_size * 100.0f)/total_size); - if (consts_size != 0) tty->print_cr(" constants = %u (%f%%)", consts_size, (consts_size * 100.0f)/total_size); - if (insts_size != 0) tty->print_cr(" main code = %u (%f%%)", insts_size, (insts_size * 100.0f)/total_size); - if (stub_size != 0) tty->print_cr(" stub code = %u (%f%%)", stub_size, (stub_size * 100.0f)/total_size); - if (oops_size != 0) tty->print_cr(" oops = %u (%f%%)", oops_size, (oops_size * 100.0f)/total_size); - if (metadata_size != 0) tty->print_cr(" metadata = %u (%f%%)", metadata_size, (metadata_size * 100.0f)/total_size); - if (scopes_data_size != 0) tty->print_cr(" scopes data = %u (%f%%)", scopes_data_size, (scopes_data_size * 100.0f)/total_size); - if (scopes_pcs_size != 0) tty->print_cr(" scopes pcs = %u (%f%%)", scopes_pcs_size, (scopes_pcs_size * 100.0f)/total_size); - if (dependencies_size != 0) tty->print_cr(" dependencies = %u (%f%%)", dependencies_size, (dependencies_size * 100.0f)/total_size); - if (handler_table_size != 0) tty->print_cr(" handler table = %u (%f%%)", handler_table_size, (handler_table_size * 100.0f)/total_size); - if (nul_chk_table_size != 0) tty->print_cr(" nul chk table = %u (%f%%)", nul_chk_table_size, (nul_chk_table_size * 100.0f)/total_size); + if (nmethod_count != 0) { + tty->print_cr(" header = %u (%f%%)", header_size, (header_size * 100.0f)/total_nm_size); + } + if (relocation_size != 0) { + tty->print_cr(" relocation = %u (%f%%)", relocation_size, (relocation_size * 100.0f)/total_nm_size); + } + if (consts_size != 0) { + tty->print_cr(" constants = %u (%f%%)", consts_size, (consts_size * 100.0f)/total_nm_size); + } + if (insts_size != 0) { + tty->print_cr(" main code = %u (%f%%)", insts_size, (insts_size * 100.0f)/total_nm_size); + } + if (stub_size != 0) { + tty->print_cr(" stub code = %u (%f%%)", stub_size, (stub_size * 100.0f)/total_nm_size); + } + if (oops_size != 0) { + tty->print_cr(" oops = %u (%f%%)", oops_size, (oops_size * 100.0f)/total_nm_size); + } + if (metadata_size != 0) { + tty->print_cr(" metadata = %u (%f%%)", metadata_size, (metadata_size * 100.0f)/total_nm_size); + } +#if INCLUDE_JVMCI + if (jvmci_data_size != 0) { + tty->print_cr(" JVMCI data = %u (%f%%)", jvmci_data_size, (jvmci_data_size * 100.0f)/total_nm_size); + } +#endif + if (total_immut_size != 0) { + tty->print_cr(" immutable data = %u (%f%%)", total_immut_size, (total_immut_size * 100.0f)/total_size); + } + if (dependencies_size != 0) { + tty->print_cr(" dependencies = %u (%f%%)", dependencies_size, (dependencies_size * 100.0f)/total_immut_size); + } + if (nul_chk_table_size != 0) { + tty->print_cr(" nul chk table = %u (%f%%)", nul_chk_table_size, (nul_chk_table_size * 100.0f)/total_immut_size); + } + if (handler_table_size != 0) { + tty->print_cr(" handler table = %u (%f%%)", handler_table_size, (handler_table_size * 100.0f)/total_immut_size); + } + if (scopes_pcs_size != 0) { + tty->print_cr(" scopes pcs = %u (%f%%)", scopes_pcs_size, (scopes_pcs_size * 100.0f)/total_immut_size); + } + if (scopes_data_size != 0) { + tty->print_cr(" scopes data = %u (%f%%)", scopes_data_size, (scopes_data_size * 100.0f)/total_immut_size); + } #if INCLUDE_JVMCI - if (speculations_size != 0) tty->print_cr(" speculations = %u (%f%%)", speculations_size, (speculations_size * 100.0f)/total_size); - if (jvmci_data_size != 0) tty->print_cr(" JVMCI data = %u (%f%%)", jvmci_data_size, (jvmci_data_size * 100.0f)/total_size); + if (speculations_size != 0) { + tty->print_cr(" speculations = %u (%f%%)", speculations_size, (speculations_size * 100.0f)/total_immut_size); + } #endif } }; @@ -208,7 +252,7 @@ struct native_nmethod_stats_struct { }; struct pc_nmethod_stats_struct { - uint pc_desc_resets; // number of resets (= number of caches) + uint pc_desc_init; // number of initialization of cache (= number of caches) uint pc_desc_queries; // queries to nmethod::find_pc_desc uint pc_desc_approx; // number of those which have approximate true uint pc_desc_repeats; // number of _pc_descs[0] hits @@ -223,7 +267,7 @@ struct pc_nmethod_stats_struct { (double)(pc_desc_tests + pc_desc_searches) / pc_desc_queries); tty->print_cr(" caches=%d queries=%u/%u, hits=%u+%u, tests=%u+%u, adds=%u", - pc_desc_resets, + pc_desc_init, pc_desc_queries, pc_desc_approx, pc_desc_repeats, pc_desc_hits, pc_desc_tests, pc_desc_searches, pc_desc_adds); @@ -341,28 +385,24 @@ void ExceptionCache::set_next(ExceptionCache *ec) { // Helper used by both find_pc_desc methods. static inline bool match_desc(PcDesc* pc, int pc_offset, bool approximate) { NOT_PRODUCT(++pc_nmethod_stats.pc_desc_tests); - if (!approximate) + if (!approximate) { return pc->pc_offset() == pc_offset; - else + } else { return (pc-1)->pc_offset() < pc_offset && pc_offset <= pc->pc_offset(); + } } -void PcDescCache::reset_to(PcDesc* initial_pc_desc) { - if (initial_pc_desc == nullptr) { - _pc_descs[0] = nullptr; // native method; no PcDescs at all - return; - } - NOT_PRODUCT(++pc_nmethod_stats.pc_desc_resets); - // reset the cache by filling it with benign (non-null) values - assert(initial_pc_desc->pc_offset() < 0, "must be sentinel"); - for (int i = 0; i < cache_size; i++) +void PcDescCache::init_to(PcDesc* initial_pc_desc) { + NOT_PRODUCT(++pc_nmethod_stats.pc_desc_init); + // initialize the cache by filling it with benign (non-null) values + assert(initial_pc_desc != nullptr && initial_pc_desc->pc_offset() == PcDesc::lower_offset_limit, + "must start with a sentinel"); + for (int i = 0; i < cache_size; i++) { _pc_descs[i] = initial_pc_desc; + } } PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) { - NOT_PRODUCT(++pc_nmethod_stats.pc_desc_queries); - NOT_PRODUCT(if (approximate) ++pc_nmethod_stats.pc_desc_approx); - // Note: one might think that caching the most recently // read value separately would be a win, but one would be // wrong. When many threads are updating it, the cache @@ -375,8 +415,10 @@ PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) { // Step one: Check the most recently added value. res = _pc_descs[0]; - if (res == nullptr) return nullptr; // native method; no PcDescs at all - if (match_desc(res, pc_offset, approximate)) { + assert(res != nullptr, "PcDesc cache should be initialized already"); + + // Approximate only here since PcDescContainer::find_pc_desc() checked for exact case. + if (approximate && match_desc(res, pc_offset, approximate)) { NOT_PRODUCT(++pc_nmethod_stats.pc_desc_repeats); return res; } @@ -396,7 +438,6 @@ PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) { } void PcDescCache::add_pc_desc(PcDesc* pc_desc) { - MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, Thread::current());) NOT_PRODUCT(++pc_nmethod_stats.pc_desc_adds); // Update the LRU cache by shifting pc_desc forward. for (int i = 0; i < cache_size; i++) { @@ -1104,31 +1145,40 @@ nmethod* nmethod::new_nmethod(const methodHandle& method, code_buffer->finalize_oop_references(method); // create nmethod nmethod* nm = nullptr; + int nmethod_size = CodeBlob::allocation_size(code_buffer, sizeof(nmethod)); #if INCLUDE_JVMCI - int jvmci_data_size = compiler->is_jvmci() ? jvmci_data->size() : 0; + if (compiler->is_jvmci()) { + nmethod_size += align_up(jvmci_data->size(), oopSize); + } #endif - int nmethod_size = - CodeBlob::allocation_size(code_buffer, sizeof(nmethod)) - + adjust_pcs_size(debug_info->pcs_size()) + + int immutable_data_size = + adjust_pcs_size(debug_info->pcs_size()) + align_up((int)dependencies->size_in_bytes(), oopSize) + align_up(handler_table->size_in_bytes() , oopSize) + align_up(nul_chk_table->size_in_bytes() , oopSize) #if INCLUDE_JVMCI + align_up(speculations_len , oopSize) - + align_up(jvmci_data_size , oopSize) #endif + align_up(debug_info->data_size() , oopSize); + + // First, allocate space for immutable data in C heap. + address immutable_data = nullptr; + if (immutable_data_size > 0) { + immutable_data = (address)os::malloc(immutable_data_size, mtCode); + if (immutable_data == nullptr) { + vm_exit_out_of_memory(immutable_data_size, OOM_MALLOC_ERROR, "nmethod: no space for immutable data"); + return nullptr; + } + } { MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); nm = new (nmethod_size, comp_level) - nmethod(method(), compiler->type(), nmethod_size, compile_id, entry_bci, offsets, - orig_pc_offset, debug_info, dependencies, code_buffer, frame_size, - oop_maps, - handler_table, - nul_chk_table, - compiler, - comp_level + nmethod(method(), compiler->type(), nmethod_size, immutable_data_size, + compile_id, entry_bci, immutable_data, offsets, orig_pc_offset, + debug_info, dependencies, code_buffer, frame_size, oop_maps, + handler_table, nul_chk_table, compiler, comp_level #if INCLUDE_JVMCI , speculations, speculations_len, @@ -1199,11 +1249,11 @@ void nmethod::init_defaults(CodeBuffer *code_buffer, CodeOffsets* offsets) { int consts_offset = code_buffer->total_offset_of(code_buffer->consts()); assert(consts_offset == 0, "const_offset: %d", consts_offset); - _entry_offset = checked_cast(offsets->value(CodeOffsets::Entry)); - _verified_entry_offset = checked_cast(offsets->value(CodeOffsets::Verified_Entry)); - _stub_offset = content_offset() + code_buffer->total_offset_of(code_buffer->stubs()); + _stub_offset = content_offset() + code_buffer->total_offset_of(code_buffer->stubs()); - _skipped_instructions_size = checked_cast(code_buffer->total_skipped_instructions_size()); + CHECKED_CAST(_entry_offset, uint16_t, (offsets->value(CodeOffsets::Entry))); + CHECKED_CAST(_verified_entry_offset, uint16_t, (offsets->value(CodeOffsets::Verified_Entry))); + CHECKED_CAST(_skipped_instructions_size, uint16_t, (code_buffer->total_skipped_instructions_size())); } // Post initialization @@ -1245,6 +1295,7 @@ nmethod::nmethod( init_defaults(code_buffer, offsets); _osr_entry_point = nullptr; + _pc_desc_container = nullptr; _entry_bci = InvocationEntryBci; _compile_id = compile_id; _comp_level = CompLevel_none; @@ -1264,22 +1315,25 @@ nmethod::nmethod( _deopt_mh_handler_offset = 0; _unwind_handler_offset = 0; - _metadata_offset = checked_cast(align_up(code_buffer->total_oop_size(), oopSize)); - _dependencies_offset = checked_cast(_metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize)); - _scopes_pcs_offset = _dependencies_offset; - _scopes_data_offset = _scopes_pcs_offset; - _handler_table_offset = _scopes_data_offset; - _nul_chk_table_offset = _handler_table_offset; + CHECKED_CAST(_metadata_offset, uint16_t, (align_up(code_buffer->total_oop_size(), oopSize))); + int data_end_offset = _metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize); #if INCLUDE_JVMCI - _speculations_offset = _nul_chk_table_offset; - _jvmci_data_offset = _speculations_offset; - DEBUG_ONLY( int data_end_offset = _jvmci_data_offset; ) -#else - DEBUG_ONLY( int data_end_offset = _nul_chk_table_offset; ) + // jvmci_data_size is 0 in native wrapper but we need to set offset + // to correctly calculate metadata_end address + CHECKED_CAST(_jvmci_data_offset, uint16_t, data_end_offset); #endif assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d < %d", nmethod_size, (data_offset() + data_end_offset)); - _pc_desc_container.reset_to(nullptr); + // native wrapper does not have read-only data but we need unique not null address + _immutable_data = data_end(); + _immutable_data_size = 0; + _nul_chk_table_offset = 0; + _handler_table_offset = 0; + _scopes_pcs_offset = 0; + _scopes_data_offset = 0; +#if INCLUDE_JVMCI + _speculations_offset = 0; +#endif code_buffer->copy_code_and_locs_to(this); code_buffer->copy_values_to(this); @@ -1347,8 +1401,10 @@ nmethod::nmethod( Method* method, CompilerType type, int nmethod_size, + int immutable_data_size, int compile_id, int entry_bci, + address immutable_data, CodeOffsets* offsets, int orig_pc_offset, DebugInformationRecorder* debug_info, @@ -1425,34 +1481,59 @@ nmethod::nmethod( } } if (offsets->value(CodeOffsets::UnwindHandler) != -1) { - _unwind_handler_offset = code_offset() + offsets->value(CodeOffsets::UnwindHandler); + // C1 generates UnwindHandler at the end of instructions section. + // Calculate positive offset as distance between the start of stubs section + // (which is also the end of instructions section) and the start of the handler. + int unwind_handler_offset = code_offset() + offsets->value(CodeOffsets::UnwindHandler); + CHECKED_CAST(_unwind_handler_offset, int16_t, (_stub_offset - unwind_handler_offset)); } else { _unwind_handler_offset = -1; } - _metadata_offset = checked_cast(align_up(code_buffer->total_oop_size(), oopSize)); - _dependencies_offset = checked_cast(_metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize)); - _scopes_pcs_offset = checked_cast(_dependencies_offset + align_up((int)dependencies->size_in_bytes(), oopSize)); - _scopes_data_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); - _handler_table_offset = _scopes_data_offset + align_up(debug_info->data_size (), oopSize); - _nul_chk_table_offset = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize); + CHECKED_CAST(_metadata_offset, uint16_t, (align_up(code_buffer->total_oop_size(), oopSize))); + int metadata_end_offset = _metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize); + #if INCLUDE_JVMCI - _speculations_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); - _jvmci_data_offset = _speculations_offset + align_up(speculations_len, oopSize); + CHECKED_CAST(_jvmci_data_offset, uint16_t, metadata_end_offset); int jvmci_data_size = compiler->is_jvmci() ? jvmci_data->size() : 0; - DEBUG_ONLY( int data_end_offset = _jvmci_data_offset + align_up(jvmci_data_size, oopSize); ) + DEBUG_ONLY( int data_end_offset = _jvmci_data_offset + align_up(jvmci_data_size, oopSize); ) #else - DEBUG_ONLY( int data_end_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); ) + DEBUG_ONLY( int data_end_offset = metadata_end_offset; ) #endif - assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d < %d", nmethod_size, (data_offset() + data_end_offset)); + assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d > %d", + (data_offset() + data_end_offset), nmethod_size); - // after _scopes_pcs_offset is set - _pc_desc_container.reset_to(scopes_pcs_begin()); + _immutable_data_size = immutable_data_size; + if (immutable_data_size > 0) { + assert(immutable_data != nullptr, "required"); + _immutable_data = immutable_data; + } else { + // We need unique not null address + _immutable_data = data_end(); + } + CHECKED_CAST(_nul_chk_table_offset, uint16_t, (align_up((int)dependencies->size_in_bytes(), oopSize))); + CHECKED_CAST(_handler_table_offset, uint16_t, (_nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize))); + _scopes_pcs_offset = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize); + _scopes_data_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); +#if INCLUDE_JVMCI + _speculations_offset = _scopes_data_offset + align_up(debug_info->data_size(), oopSize); + DEBUG_ONLY( int immutable_data_end_offset = _speculations_offset + align_up(speculations_len, oopSize); ) +#else + DEBUG_ONLY( int immutable_data_end_offset = _scopes_data_offset + align_up(debug_info->data_size(), oopSize); ) +#endif + assert(immutable_data_end_offset <= immutable_data_size, "wrong read-only data size: %d > %d", + immutable_data_end_offset, immutable_data_size); + + // Copy code and relocation info code_buffer->copy_code_and_locs_to(this); - // Copy contents of ScopeDescRecorder to nmethod + // Copy oops and metadata code_buffer->copy_values_to(this); - debug_info->copy_to(this); dependencies->copy_to(this); + // Copy PcDesc and ScopeDesc data + debug_info->copy_to(this); + + // Create cache after PcDesc data is copied - it will be used to initialize cache + _pc_desc_container = new PcDescContainer(scopes_pcs_begin()); #if INCLUDE_JVMCI if (compiler->is_jvmci()) { @@ -2044,9 +2125,15 @@ void nmethod::purge(bool unregister_nmethod) { delete ec; ec = next; } - + if (_pc_desc_container != nullptr) { + delete _pc_desc_container; + } delete[] _compiled_ic_data; + if (_immutable_data != data_end()) { + os::free(_immutable_data); + _immutable_data = data_end(); // Valid not null address + } if (unregister_nmethod) { Universe::heap()->unregister_nmethod(this); } @@ -2619,18 +2706,19 @@ void nmethod::copy_scopes_data(u_char* buffer, int size) { } #ifdef ASSERT -static PcDesc* linear_search(const PcDescSearch& search, int pc_offset, bool approximate) { - PcDesc* lower = search.scopes_pcs_begin(); - PcDesc* upper = search.scopes_pcs_end(); - lower += 1; // exclude initial sentinel +static PcDesc* linear_search(int pc_offset, bool approximate, PcDesc* lower, PcDesc* upper) { PcDesc* res = nullptr; - for (PcDesc* p = lower; p < upper; p++) { + assert(lower != nullptr && lower->pc_offset() == PcDesc::lower_offset_limit, + "must start with a sentinel"); + // lower + 1 to exclude initial sentinel + for (PcDesc* p = lower + 1; p < upper; p++) { NOT_PRODUCT(--pc_nmethod_stats.pc_desc_tests); // don't count this call to match_desc if (match_desc(p, pc_offset, approximate)) { - if (res == nullptr) + if (res == nullptr) { res = p; - else + } else { res = (PcDesc*) badAddress; + } } } return res; @@ -2638,20 +2726,39 @@ static PcDesc* linear_search(const PcDescSearch& search, int pc_offset, bool app #endif +#ifndef PRODUCT +// Version of method to collect statistic +PcDesc* PcDescContainer::find_pc_desc(address pc, bool approximate, address code_begin, + PcDesc* lower, PcDesc* upper) { + ++pc_nmethod_stats.pc_desc_queries; + if (approximate) ++pc_nmethod_stats.pc_desc_approx; + + PcDesc* desc = _pc_desc_cache.last_pc_desc(); + assert(desc != nullptr, "PcDesc cache should be initialized already"); + if (desc->pc_offset() == (pc - code_begin)) { + // Cached value matched + ++pc_nmethod_stats.pc_desc_tests; + ++pc_nmethod_stats.pc_desc_repeats; + return desc; + } + return find_pc_desc_internal(pc, approximate, code_begin, lower, upper); +} +#endif + // Finds a PcDesc with real-pc equal to "pc" -PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, const PcDescSearch& search) { - address base_address = search.code_begin(); - if ((pc < base_address) || - (pc - base_address) >= (ptrdiff_t) PcDesc::upper_offset_limit) { +PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, address code_begin, + PcDesc* lower_incl, PcDesc* upper_incl) { + if ((pc < code_begin) || + (pc - code_begin) >= (ptrdiff_t) PcDesc::upper_offset_limit) { return nullptr; // PC is wildly out of range } - int pc_offset = (int) (pc - base_address); + int pc_offset = (int) (pc - code_begin); // Check the PcDesc cache if it contains the desired PcDesc // (This as an almost 100% hit rate.) PcDesc* res = _pc_desc_cache.find_pc_desc(pc_offset, approximate); if (res != nullptr) { - assert(res == linear_search(search, pc_offset, approximate), "cache ok"); + assert(res == linear_search(pc_offset, approximate, lower_incl, upper_incl), "cache ok"); return res; } @@ -2659,10 +2766,9 @@ PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, con // Find the last pc_offset less than the given offset. // The successor must be the required match, if there is a match at all. // (Use a fixed radix to avoid expensive affine pointer arithmetic.) - PcDesc* lower = search.scopes_pcs_begin(); - PcDesc* upper = search.scopes_pcs_end(); - upper -= 1; // exclude final sentinel - if (lower >= upper) return nullptr; // native method; no PcDescs at all + PcDesc* lower = lower_incl; // this is initial sentinel + PcDesc* upper = upper_incl - 1; // exclude final sentinel + if (lower >= upper) return nullptr; // no PcDescs at all #define assert_LU_OK \ /* invariant on lower..upper during the following search: */ \ @@ -2711,7 +2817,7 @@ PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, con #undef assert_LU_OK if (match_desc(upper, pc_offset, approximate)) { - assert(upper == linear_search(search, pc_offset, approximate), "search ok"); + assert(upper == linear_search(pc_offset, approximate, lower_incl, upper_incl), "search mismatch"); if (!Thread::current_in_asgct()) { // we don't want to modify the cache if we're in ASGCT // which is typically called in a signal handler @@ -2719,7 +2825,7 @@ PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, con } return upper; } else { - assert(nullptr == linear_search(search, pc_offset, approximate), "search ok"); + assert(nullptr == linear_search(pc_offset, approximate, lower_incl, upper_incl), "search mismatch"); return nullptr; } } @@ -2983,35 +3089,41 @@ void nmethod::print(outputStream* st) const { p2i(metadata_begin()), p2i(metadata_end()), metadata_size()); - if (scopes_data_size () > 0) st->print_cr(" scopes data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", - p2i(scopes_data_begin()), - p2i(scopes_data_end()), - scopes_data_size()); - if (scopes_pcs_size () > 0) st->print_cr(" scopes pcs [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", - p2i(scopes_pcs_begin()), - p2i(scopes_pcs_end()), - scopes_pcs_size()); +#if INCLUDE_JVMCI + if (jvmci_data_size () > 0) st->print_cr(" JVMCI data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", + p2i(jvmci_data_begin()), + p2i(jvmci_data_end()), + jvmci_data_size()); +#endif + if (immutable_data_size() > 0) st->print_cr(" immutable data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", + p2i(immutable_data_begin()), + p2i(immutable_data_end()), + immutable_data_size()); if (dependencies_size () > 0) st->print_cr(" dependencies [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", p2i(dependencies_begin()), p2i(dependencies_end()), dependencies_size()); - if (handler_table_size() > 0) st->print_cr(" handler table [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", - p2i(handler_table_begin()), - p2i(handler_table_end()), - handler_table_size()); if (nul_chk_table_size() > 0) st->print_cr(" nul chk table [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", p2i(nul_chk_table_begin()), p2i(nul_chk_table_end()), nul_chk_table_size()); + if (handler_table_size() > 0) st->print_cr(" handler table [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", + p2i(handler_table_begin()), + p2i(handler_table_end()), + handler_table_size()); + if (scopes_pcs_size () > 0) st->print_cr(" scopes pcs [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", + p2i(scopes_pcs_begin()), + p2i(scopes_pcs_end()), + scopes_pcs_size()); + if (scopes_data_size () > 0) st->print_cr(" scopes data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", + p2i(scopes_data_begin()), + p2i(scopes_data_end()), + scopes_data_size()); #if INCLUDE_JVMCI if (speculations_size () > 0) st->print_cr(" speculations [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", p2i(speculations_begin()), p2i(speculations_end()), speculations_size()); - if (jvmci_data_size () > 0) st->print_cr(" JVMCI data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", - p2i(jvmci_data_begin()), - p2i(jvmci_data_end()), - jvmci_data_size()); #endif } diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index b22edaec5ac..22e38afeebd 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -101,45 +101,34 @@ class PcDescCache { volatile PcDescPtr _pc_descs[cache_size]; // last cache_size pc_descs found public: PcDescCache() { debug_only(_pc_descs[0] = nullptr); } - void reset_to(PcDesc* initial_pc_desc); + void init_to(PcDesc* initial_pc_desc); PcDesc* find_pc_desc(int pc_offset, bool approximate); void add_pc_desc(PcDesc* pc_desc); PcDesc* last_pc_desc() { return _pc_descs[0]; } }; -class PcDescSearch { -private: - address _code_begin; - PcDesc* _lower; - PcDesc* _upper; -public: - PcDescSearch(address code, PcDesc* lower, PcDesc* upper) : - _code_begin(code), _lower(lower), _upper(upper) - { - } - - address code_begin() const { return _code_begin; } - PcDesc* scopes_pcs_begin() const { return _lower; } - PcDesc* scopes_pcs_end() const { return _upper; } -}; - -class PcDescContainer { +class PcDescContainer : public CHeapObj { private: PcDescCache _pc_desc_cache; public: - PcDescContainer() {} + PcDescContainer(PcDesc* initial_pc_desc) { _pc_desc_cache.init_to(initial_pc_desc); } - PcDesc* find_pc_desc_internal(address pc, bool approximate, const PcDescSearch& search); - void reset_to(PcDesc* initial_pc_desc) { _pc_desc_cache.reset_to(initial_pc_desc); } + PcDesc* find_pc_desc_internal(address pc, bool approximate, address code_begin, + PcDesc* lower, PcDesc* upper); - PcDesc* find_pc_desc(address pc, bool approximate, const PcDescSearch& search) { - address base_address = search.code_begin(); + PcDesc* find_pc_desc(address pc, bool approximate, address code_begin, PcDesc* lower, PcDesc* upper) +#ifdef PRODUCT + { PcDesc* desc = _pc_desc_cache.last_pc_desc(); - if (desc != nullptr && desc->pc_offset() == pc - base_address) { + assert(desc != nullptr, "PcDesc cache should be initialized already"); + if (desc->pc_offset() == (pc - code_begin)) { + // Cached value matched return desc; } - return find_pc_desc_internal(pc, approximate, search); + return find_pc_desc_internal(pc, approximate, code_begin, lower, upper); } +#endif + ; }; // nmethods (native methods) are the compiled code versions of Java methods. @@ -206,7 +195,10 @@ class nmethod : public CodeBlob { }; }; - PcDescContainer _pc_desc_container; + // nmethod's read-only data + address _immutable_data; + + PcDescContainer* _pc_desc_container; ExceptionCache* volatile _exception_cache; void* _gc_data; @@ -222,6 +214,7 @@ class nmethod : public CodeBlob { uint16_t _entry_offset; // entry point with class check uint16_t _verified_entry_offset; // entry point without class check int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method + int _immutable_data_size; // _consts_offset == _content_offset because SECT_CONSTS is first in code buffer @@ -235,21 +228,27 @@ class nmethod : public CodeBlob { // All deoptee's at a MethodHandle call site will resume execution // at this location described by this offset. int _deopt_mh_handler_offset; - // Offset of the unwind handler if it exists - int _unwind_handler_offset; - + // Offset (from insts_end) of the unwind handler if it exists + int16_t _unwind_handler_offset; + // Number of arguments passed on the stack + uint16_t _num_stack_arg_slots; uint16_t _skipped_instructions_size; + // Offsets in mutable data section // _oops_offset == _data_offset, offset where embedded oop table begins (inside data) uint16_t _metadata_offset; // embedded meta data table - uint16_t _dependencies_offset; - uint16_t _scopes_pcs_offset; +#if INCLUDE_JVMCI + uint16_t _jvmci_data_offset; +#endif + + // Offset in immutable data section + // _dependencies_offset == 0 + uint16_t _nul_chk_table_offset; + uint16_t _handler_table_offset; // This table could be big in C1 code + int _scopes_pcs_offset; int _scopes_data_offset; - int _handler_table_offset; - int _nul_chk_table_offset; #if INCLUDE_JVMCI int _speculations_offset; - int _jvmci_data_offset; #endif // location in frame (offset for sp) that deopt can store the original @@ -260,8 +259,6 @@ class nmethod : public CodeBlob { CompLevel _comp_level; // compilation level (s1) CompilerType _compiler_type; // which compiler made this nmethod (u1) - uint16_t _num_stack_arg_slots; // Number of arguments passed on the stack - #if INCLUDE_RTM_OPT // RTM state at compile time. Used during deoptimization to decide // whether to restart collecting RTM locking abort statistic again. @@ -318,8 +315,10 @@ class nmethod : public CodeBlob { nmethod(Method* method, CompilerType type, int nmethod_size, + int immutable_data_size, int compile_id, int entry_bci, + address immutable_data, CodeOffsets* offsets, int orig_pc_offset, DebugInformationRecorder *recorder, @@ -359,7 +358,8 @@ class nmethod : public CodeBlob { void post_compiled_method_unload(); PcDesc* find_pc_desc(address pc, bool approximate) { - return _pc_desc_container.find_pc_desc(pc, approximate, PcDescSearch(code_begin(), scopes_pcs_begin(), scopes_pcs_end())); + if (_pc_desc_container == nullptr) return nullptr; // native method + return _pc_desc_container->find_pc_desc(pc, approximate, code_begin(), scopes_pcs_begin(), scopes_pcs_end()); } // STW two-phase nmethod root processing helpers. @@ -534,48 +534,56 @@ class nmethod : public CodeBlob { address exception_begin () const { return header_begin() + _exception_offset ; } address deopt_handler_begin () const { return header_begin() + _deopt_handler_offset ; } address deopt_mh_handler_begin() const { return header_begin() + _deopt_mh_handler_offset ; } - address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (header_begin() + _unwind_handler_offset) : nullptr; } - - oop* oops_begin () const { return (oop*) data_begin(); } - oop* oops_end () const { return (oop*) (data_begin() + _metadata_offset) ; } + address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (insts_end() - _unwind_handler_offset) : nullptr; } + // mutable data + oop* oops_begin () const { return (oop*) data_begin(); } + oop* oops_end () const { return (oop*) (data_begin() + _metadata_offset) ; } Metadata** metadata_begin () const { return (Metadata**) (data_begin() + _metadata_offset) ; } - Metadata** metadata_end () const { return (Metadata**) (data_begin() + _dependencies_offset) ; } - - address dependencies_begin () const { return data_begin() + _dependencies_offset ; } - address dependencies_end () const { return data_begin() + _scopes_pcs_offset ; } - PcDesc* scopes_pcs_begin () const { return (PcDesc*)(data_begin() + _scopes_pcs_offset) ; } - PcDesc* scopes_pcs_end () const { return (PcDesc*)(data_begin() + _scopes_data_offset) ; } - address scopes_data_begin () const { return data_begin() + _scopes_data_offset ; } - address scopes_data_end () const { return data_begin() + _handler_table_offset ; } - address handler_table_begin () const { return data_begin() + _handler_table_offset ; } - address handler_table_end () const { return data_begin() + _nul_chk_table_offset ; } - address nul_chk_table_begin () const { return data_begin() + _nul_chk_table_offset ; } +#if INCLUDE_JVMCI + Metadata** metadata_end () const { return (Metadata**) (data_begin() + _jvmci_data_offset) ; } + address jvmci_data_begin () const { return data_begin() + _jvmci_data_offset ; } + address jvmci_data_end () const { return data_end(); } +#else + Metadata** metadata_end () const { return (Metadata**) data_end(); } +#endif + + // immutable data + address immutable_data_begin () const { return _immutable_data; } + address immutable_data_end () const { return _immutable_data + _immutable_data_size ; } + address dependencies_begin () const { return _immutable_data; } + address dependencies_end () const { return _immutable_data + _nul_chk_table_offset; } + address nul_chk_table_begin () const { return _immutable_data + _nul_chk_table_offset; } + address nul_chk_table_end () const { return _immutable_data + _handler_table_offset; } + address handler_table_begin () const { return _immutable_data + _handler_table_offset; } + address handler_table_end () const { return _immutable_data + _scopes_pcs_offset ; } + PcDesc* scopes_pcs_begin () const { return (PcDesc*)(_immutable_data + _scopes_pcs_offset) ; } + PcDesc* scopes_pcs_end () const { return (PcDesc*)(_immutable_data + _scopes_data_offset) ; } + address scopes_data_begin () const { return _immutable_data + _scopes_data_offset ; } #if INCLUDE_JVMCI - address nul_chk_table_end () const { return data_begin() + _speculations_offset ; } - address speculations_begin () const { return data_begin() + _speculations_offset ; } - address speculations_end () const { return data_begin() + _jvmci_data_offset ; } - address jvmci_data_begin () const { return data_begin() + _jvmci_data_offset ; } - address jvmci_data_end () const { return data_end(); } + address scopes_data_end () const { return _immutable_data + _speculations_offset ; } + address speculations_begin () const { return _immutable_data + _speculations_offset ; } + address speculations_end () const { return immutable_data_end(); } #else - address nul_chk_table_end () const { return data_end(); } + address scopes_data_end () const { return immutable_data_end(); } #endif // Sizes - int consts_size () const { return int( consts_end () - consts_begin ()); } - int insts_size () const { return int( insts_end () - insts_begin ()); } - int stub_size () const { return int( stub_end () - stub_begin ()); } - int oops_size () const { return int((address) oops_end () - (address) oops_begin ()); } - int metadata_size () const { return int((address) metadata_end () - (address) metadata_begin ()); } - int scopes_data_size () const { return int( scopes_data_end () - scopes_data_begin ()); } - int scopes_pcs_size () const { return int((intptr_t)scopes_pcs_end () - (intptr_t)scopes_pcs_begin ()); } - int dependencies_size () const { return int( dependencies_end () - dependencies_begin ()); } - int handler_table_size() const { return int( handler_table_end() - handler_table_begin()); } - int nul_chk_table_size() const { return int( nul_chk_table_end() - nul_chk_table_begin()); } + int immutable_data_size() const { return _immutable_data_size; } + int consts_size () const { return int( consts_end () - consts_begin ()); } + int insts_size () const { return int( insts_end () - insts_begin ()); } + int stub_size () const { return int( stub_end () - stub_begin ()); } + int oops_size () const { return int((address) oops_end () - (address) oops_begin ()); } + int metadata_size () const { return int((address) metadata_end () - (address) metadata_begin ()); } + int scopes_data_size () const { return int( scopes_data_end () - scopes_data_begin ()); } + int scopes_pcs_size () const { return int((intptr_t)scopes_pcs_end () - (intptr_t)scopes_pcs_begin ()); } + int dependencies_size () const { return int( dependencies_end () - dependencies_begin ()); } + int handler_table_size () const { return int( handler_table_end() - handler_table_begin()); } + int nul_chk_table_size () const { return int( nul_chk_table_end() - nul_chk_table_begin()); } #if INCLUDE_JVMCI - int speculations_size () const { return int( speculations_end () - speculations_begin ()); } - int jvmci_data_size () const { return int( jvmci_data_end () - jvmci_data_begin ()); } + int speculations_size () const { return int( speculations_end () - speculations_begin ()); } + int jvmci_data_size () const { return int( jvmci_data_end () - jvmci_data_begin ()); } #endif int oops_count() const { assert(oops_size() % oopSize == 0, ""); return (oops_size() / oopSize) + 1; } diff --git a/src/hotspot/share/compiler/compilationMemoryStatistic.cpp b/src/hotspot/share/compiler/compilationMemoryStatistic.cpp index 6bc3f39b939..ae3c2c75fdb 100644 --- a/src/hotspot/share/compiler/compilationMemoryStatistic.cpp +++ b/src/hotspot/share/compiler/compilationMemoryStatistic.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2023, Red Hat, Inc. and/or its affiliates. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Red Hat, Inc. and/or its affiliates. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -394,23 +394,19 @@ void CompilationMemoryStatistic::on_end_compilation() { ResourceMark rm; CompilerThread* const th = Thread::current()->as_Compiler_thread(); ArenaStatCounter* const arena_stat = th->arena_stat(); - const CompilerType ct = th->task()->compiler()->type(); + CompileTask* const task = th->task(); + const CompilerType ct = task->compiler()->type(); const Method* const m = th->task()->method(); FullMethodName fmn(m); fmn.make_permanent(); const DirectiveSet* directive = th->task()->directive(); - assert(directive->should_collect_memstat(), "Only call if memstat is enabled"); + assert(directive->should_collect_memstat(), "Should only be called if memstat is enabled for this method"); const bool print = directive->should_print_memstat(); - if (print) { - char buf[1024]; - fmn.as_C_string(buf, sizeof(buf)); - tty->print("%s Arena usage %s: ", compilertype2name(ct), buf); - arena_stat->print_on(tty); - tty->cr(); - } + // Store memory used in task, for later processing by JFR + task->set_arena_bytes(arena_stat->peak_since_start()); // Store result // For this to work, we must call on_end_compilation() at a point where @@ -436,6 +432,13 @@ void CompilationMemoryStatistic::on_end_compilation() { arena_stat->live_nodes_at_peak(), result); } + if (print) { + char buf[1024]; + fmn.as_C_string(buf, sizeof(buf)); + tty->print("%s Arena usage %s: ", compilertype2name(ct), buf); + arena_stat->print_on(tty); + tty->cr(); + } arena_stat->end(); // reset things } @@ -493,7 +496,7 @@ void CompilationMemoryStatistic::on_arena_change(ssize_t diff, const Arena* aren CompilerType ct = compiler_none; // get some more info - const CompileTask* task = th->task(); + const CompileTask* const task = th->task(); if (task != nullptr) { ct = task->compiler()->type(); const DirectiveSet* directive = task->directive(); @@ -539,6 +542,10 @@ static inline ssize_t diff_entries_by_size(const MemStatEntry* e1, const MemStat } void CompilationMemoryStatistic::print_all_by_size(outputStream* st, bool human_readable, size_t min_size) { + + MutexLocker ml(NMTCompilationCostHistory_lock, Mutex::_no_safepoint_check_flag); + + st->cr(); st->print_cr("Compilation memory statistics"); if (!enabled()) { @@ -559,29 +566,27 @@ void CompilationMemoryStatistic::print_all_by_size(outputStream* st, bool human_ MemStatEntry::print_header(st); MemStatEntry** filtered = nullptr; - { - MutexLocker ml(NMTCompilationCostHistory_lock, Mutex::_no_safepoint_check_flag); - if (_the_table != nullptr) { - // We sort with quicksort - int num = 0; - filtered = _the_table->calc_flat_array(num, min_size); - if (min_size > 0) { - st->print_cr("(%d/%d)", num, _the_table->number_of_entries()); - } - if (num > 0) { - QuickSort::sort(filtered, num, diff_entries_by_size, false); - // Now print. Has to happen under lock protection too, since entries may be changed. - for (int i = 0; i < num; i ++) { - filtered[i]->print_on(st, human_readable); - } - } else { - st->print_cr("No entries."); + if (_the_table != nullptr) { + // We sort with quicksort + int num = 0; + filtered = _the_table->calc_flat_array(num, min_size); + if (min_size > 0) { + st->print_cr("(%d/%d)", num, _the_table->number_of_entries()); + } + if (num > 0) { + QuickSort::sort(filtered, num, diff_entries_by_size, false); + // Now print. Has to happen under lock protection too, since entries may be changed. + for (int i = 0; i < num; i ++) { + filtered[i]->print_on(st, human_readable); } } else { - st->print_cr("Not initialized."); + st->print_cr("No entries."); } - } // locked + } else { + st->print_cr("Not initialized."); + } + st->cr(); FREE_C_HEAP_ARRAY(Entry, filtered); } diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp index 82f0996bc60..0935ea6a8e1 100644 --- a/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp @@ -2126,7 +2126,8 @@ static void post_compilation_event(EventCompilation& event, CompileTask* task) { task->is_success(), task->osr_bci() != CompileBroker::standard_entry_bci, task->nm_total_size(), - task->num_inlined_bytecodes()); + task->num_inlined_bytecodes(), + task->arena_bytes()); } int DirectivesStack::_depth = 0; diff --git a/src/hotspot/share/compiler/compileTask.cpp b/src/hotspot/share/compiler/compileTask.cpp index 4690cd5c134..1a2af572166 100644 --- a/src/hotspot/share/compiler/compileTask.cpp +++ b/src/hotspot/share/compiler/compileTask.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -123,6 +123,7 @@ void CompileTask::initialize(int compile_id, _nm_total_size = 0; _failure_reason = nullptr; _failure_reason_on_C_heap = false; + _arena_bytes = 0; if (LogCompilation) { if (hot_method.not_null()) { diff --git a/src/hotspot/share/compiler/compileTask.hpp b/src/hotspot/share/compiler/compileTask.hpp index fabfb8e0487..137e9843c35 100644 --- a/src/hotspot/share/compiler/compileTask.hpp +++ b/src/hotspot/share/compiler/compileTask.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -114,6 +114,7 @@ class CompileTask : public CHeapObj { const char* _failure_reason; // Specifies if _failure_reason is on the C heap. bool _failure_reason_on_C_heap; + size_t _arena_bytes; // peak size of temporary memory during compilation (e.g. node arenas) public: CompileTask() : _failure_reason(nullptr), _failure_reason_on_C_heap(false) { @@ -200,6 +201,9 @@ class CompileTask : public CHeapObj { void metadata_do(MetadataClosure* f); void mark_on_stack(); + void set_arena_bytes(size_t s) { _arena_bytes = s; } + size_t arena_bytes() const { return _arena_bytes; } + private: static void print_impl(outputStream* st, Method* method, int compile_id, int comp_level, bool is_osr_method = false, int osr_bci = -1, bool is_blocking = false, diff --git a/src/hotspot/share/compiler/compilerEvent.cpp b/src/hotspot/share/compiler/compilerEvent.cpp index 0e14f62a468..d2f6e7ba886 100644 --- a/src/hotspot/share/compiler/compilerEvent.cpp +++ b/src/hotspot/share/compiler/compilerEvent.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -134,7 +134,9 @@ static inline void commit(EventType& event) { } } -void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) { +void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, + int compile_level, bool success, bool is_osr, int code_size, + int inlined_bytecodes, size_t arenaBytes) { event.set_compileId(compile_id); event.set_compiler(compiler_type); event.set_method(method); @@ -143,6 +145,7 @@ void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_ event.set_isOsr(is_osr); event.set_codeSize(code_size); event.set_inlinedBytes(inlined_bytecodes); + event.set_arenaBytes(arenaBytes); commit(event); } diff --git a/src/hotspot/share/compiler/compilerEvent.hpp b/src/hotspot/share/compiler/compilerEvent.hpp index d2ffd8fe2d4..aaebe86b5dc 100644 --- a/src/hotspot/share/compiler/compilerEvent.hpp +++ b/src/hotspot/share/compiler/compilerEvent.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -52,7 +52,9 @@ class CompilerEvent : AllStatic { class CompilationEvent : AllStatic { public: - static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN(); + static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, + int compile_level, bool success, bool is_osr, int code_size, + int inlined_bytecodes, size_t arenaBytes) NOT_JFR_RETURN(); }; class CompilationFailureEvent : AllStatic { diff --git a/src/hotspot/share/gc/epsilon/epsilonMemoryPool.cpp b/src/hotspot/share/gc/epsilon/epsilonMemoryPool.cpp index c18523e203e..b90d6e38d28 100644 --- a/src/hotspot/share/gc/epsilon/epsilonMemoryPool.cpp +++ b/src/hotspot/share/gc/epsilon/epsilonMemoryPool.cpp @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "gc/epsilon/epsilonHeap.hpp" #include "gc/epsilon/epsilonMemoryPool.hpp" +#include "gc/shared/gc_globals.hpp" EpsilonMemoryPool::EpsilonMemoryPool(EpsilonHeap* heap) : CollectedMemoryPool("Epsilon Heap", diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp index 4a74e2d838d..0ced8ed9336 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp @@ -787,6 +787,9 @@ void ParallelScavengeHeap::verify(VerifyOption option /* ignored */) { log_debug(gc, verify)("Eden"); young_gen()->verify(); + + log_debug(gc, verify)("CardTable"); + card_table()->verify_all_young_refs_imprecise(); } } diff --git a/src/hotspot/share/gc/parallel/psScavenge.cpp b/src/hotspot/share/gc/parallel/psScavenge.cpp index 92befe23438..ac7ca1bb8b7 100644 --- a/src/hotspot/share/gc/parallel/psScavenge.cpp +++ b/src/hotspot/share/gc/parallel/psScavenge.cpp @@ -419,11 +419,6 @@ bool PSScavenge::invoke_no_policy() { // Let the size policy know we're starting size_policy->minor_collection_begin(); - // Verify no unmarked old->young roots - if (VerifyRememberedSets) { - heap->card_table()->verify_all_young_refs_imprecise(); - } - assert(young_gen->to_space()->is_empty(), "Attempt to scavenge with live objects in to_space"); young_gen->to_space()->clear(SpaceDecorator::Mangle); @@ -628,10 +623,6 @@ bool PSScavenge::invoke_no_policy() { DerivedPointerTable::update_pointers(); #endif - if (VerifyRememberedSets) { - heap->card_table()->verify_all_young_refs_imprecise(); - } - if (log_is_enabled(Debug, gc, heap, exit)) { accumulated_time()->stop(); } diff --git a/src/hotspot/share/gc/serial/defNewGeneration.hpp b/src/hotspot/share/gc/serial/defNewGeneration.hpp index 0418d6e459f..2feb92505e6 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.hpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp @@ -139,9 +139,6 @@ class DefNewGeneration: public Generation { ContiguousSpace* _from_space; ContiguousSpace* _to_space; - // Saved mark word, for to-space - HeapWord* _saved_mark_word; - STWGCTimer* _gc_timer; DefNewTracer* _gc_tracer; diff --git a/src/hotspot/share/gc/serial/generation.cpp b/src/hotspot/share/gc/serial/generation.cpp index da5a54367f0..02edd8ae0a1 100644 --- a/src/hotspot/share/gc/serial/generation.cpp +++ b/src/hotspot/share/gc/serial/generation.cpp @@ -81,13 +81,3 @@ void Generation::print_summary_info_on(outputStream* st) { sr->invocations, sr->invocations > 0 ? time / sr->invocations : 0.0); } - -size_t Generation::max_contiguous_available() const { - // The largest number of contiguous free words in this or any higher generation. - size_t avail = contiguous_available(); - size_t old_avail = 0; - if (SerialHeap::heap()->is_young_gen(this)) { - old_avail = SerialHeap::heap()->old_gen()->contiguous_available(); - } - return MAX2(avail, old_avail); -} diff --git a/src/hotspot/share/gc/serial/generation.hpp b/src/hotspot/share/gc/serial/generation.hpp index c1a88a64b2a..50531705dd3 100644 --- a/src/hotspot/share/gc/serial/generation.hpp +++ b/src/hotspot/share/gc/serial/generation.hpp @@ -99,8 +99,6 @@ class Generation: public CHeapObj { // The largest number of contiguous free bytes in the generation, // including expansion (Assumes called at a safepoint.) virtual size_t contiguous_available() const = 0; - // The largest number of contiguous free bytes in this or any higher generation. - virtual size_t max_contiguous_available() const; MemRegion reserved() const { return _reserved; } diff --git a/src/hotspot/share/gc/serial/serialFullGC.cpp b/src/hotspot/share/gc/serial/serialFullGC.cpp index 514a6e6ab74..1621aec7b64 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.cpp +++ b/src/hotspot/share/gc/serial/serialFullGC.cpp @@ -74,8 +74,6 @@ #include "jvmci/jvmci.hpp" #endif -uint SerialFullGC::_total_invocations = 0; - Stack SerialFullGC::_marking_stack; Stack SerialFullGC::_objarray_stack; @@ -113,7 +111,7 @@ class DeadSpacer : StackObj { // we don't start compacting before there is a significant gain to be made. // Occasionally, we want to ensure a full compaction, which is determined // by the MarkSweepAlwaysCompactCount parameter. - if ((SerialFullGC::total_invocations() % MarkSweepAlwaysCompactCount) != 0) { + if ((SerialHeap::heap()->total_full_collections() % MarkSweepAlwaysCompactCount) != 0) { _allowed_deadspace_words = (space->capacity() * ratio / 100) / HeapWordSize; } else { _active = false; @@ -694,9 +692,6 @@ void SerialFullGC::invoke_at_safepoint(bool clear_all_softrefs) { gch->trace_heap_before_gc(_gc_tracer); - // Increment the invocation count - _total_invocations++; - // Capture used regions for old-gen to reestablish old-to-young invariant // after full-gc. gch->old_gen()->save_used_region(); diff --git a/src/hotspot/share/gc/serial/serialFullGC.hpp b/src/hotspot/share/gc/serial/serialFullGC.hpp index fff287b1f50..4b1a78a0994 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.hpp +++ b/src/hotspot/share/gc/serial/serialFullGC.hpp @@ -81,9 +81,6 @@ class SerialFullGC : AllStatic { }; protected: - // Total invocations of serial full GC - static uint _total_invocations; - // Traversal stacks used during phase1 static Stack _marking_stack; static Stack _objarray_stack; @@ -119,9 +116,6 @@ class SerialFullGC : AllStatic { static void invoke_at_safepoint(bool clear_all_softrefs); - // Accessors - static uint total_invocations() { return _total_invocations; } - // Reference Processing static ReferenceProcessor* ref_processor() { return _ref_processor; } diff --git a/src/hotspot/share/gc/serial/serialHeap.hpp b/src/hotspot/share/gc/serial/serialHeap.hpp index 12a4261feec..fca877e2925 100644 --- a/src/hotspot/share/gc/serial/serialHeap.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.hpp @@ -147,9 +147,6 @@ class SerialHeap : public CollectedHeap { void post_initialize() override; bool is_young_gen(const Generation* gen) const { return gen == _young_gen; } - bool is_old_gen(const Generation* gen) const { return gen == _old_gen; } - - MemRegion reserved_region() const { return _reserved; } bool is_in_reserved(const void* addr) const { return _reserved.contains(addr); } // Performance Counter support diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index e7cf16ea9af..8a851fba642 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -418,7 +418,7 @@ void TenuredGeneration::update_counters() { } bool TenuredGeneration::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const { - size_t available = max_contiguous_available(); + size_t available = contiguous_available(); size_t av_promo = (size_t)_avg_promoted->padded_average(); bool res = (available >= av_promo) || (available >= max_promotion_in_bytes); diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.hpp index cc83f129b68..9cbf7fef5fc 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.hpp @@ -27,11 +27,11 @@ #include "gc/serial/cSpaceCounters.hpp" #include "gc/serial/generation.hpp" +#include "gc/serial/serialBlockOffsetTable.hpp" #include "gc/shared/generationCounters.hpp" #include "gc/shared/space.hpp" #include "utilities/macros.hpp" -class SerialBlockOffsetTable; class CardTableRS; class ContiguousSpace; @@ -66,7 +66,6 @@ class TenuredGeneration: public Generation { void assert_correct_size_change_locking(); ContiguousSpace* _the_space; // Actual space holding objects - HeapWord* _saved_mark_word; GenerationCounters* _gen_counters; CSpaceCounters* _space_counters; @@ -89,7 +88,6 @@ class TenuredGeneration: public Generation { void compute_new_size(); ContiguousSpace* space() const { return _the_space; } - HeapWord* saved_mark_word() const { return _saved_mark_word; } // Grow generation with specified size (returns false if unable to grow) bool grow_by(size_t bytes); diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp index 955f7b395dd..ba0dbcdc02d 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp @@ -26,7 +26,6 @@ #define SHARE_GC_SERIAL_TENUREDGENERATION_INLINE_HPP #include "gc/serial/tenuredGeneration.hpp" - #include "gc/shared/space.hpp" inline size_t TenuredGeneration::capacity() const { diff --git a/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp b/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp index 41bd15ab000..3f712c9d391 100644 --- a/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp +++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp @@ -23,16 +23,22 @@ */ #include "precompiled.hpp" +#include "code/vmreg.inline.hpp" +#include "gc/shared/barrierSet.hpp" #include "gc/shared/tlab_globals.hpp" #include "gc/shared/c2/barrierSetC2.hpp" #include "opto/arraycopynode.hpp" +#include "opto/block.hpp" #include "opto/convertnode.hpp" #include "opto/graphKit.hpp" #include "opto/idealKit.hpp" #include "opto/macro.hpp" #include "opto/narrowptrnode.hpp" +#include "opto/output.hpp" +#include "opto/regalloc.hpp" #include "opto/runtime.hpp" #include "utilities/macros.hpp" +#include CPU_HEADER(gc/shared/barrierSetAssembler) // By default this is a no-op. void BarrierSetC2::resolve_address(C2Access& access) const { } @@ -77,6 +83,31 @@ bool C2Access::needs_cpu_membar() const { return false; } +static BarrierSetC2State* barrier_set_state() { + return reinterpret_cast(Compile::current()->barrier_set_state()); +} + +BarrierStubC2::BarrierStubC2(const MachNode* node) + : _node(node), + _entry(), + _continuation() {} + +RegMask& BarrierStubC2::live() const { + return *barrier_set_state()->live(_node); +} + +Label* BarrierStubC2::entry() { + // The _entry will never be bound when in_scratch_emit_size() is true. + // However, we still need to return a label that is not bound now, but + // will eventually be bound. Any eventually bound label will do, as it + // will only act as a placeholder, so we return the _continuation label. + return Compile::current()->output()->in_scratch_emit_size() ? &_continuation : &_entry; +} + +Label* BarrierStubC2::continuation() { + return &_continuation; +} + Node* BarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const { DecoratorSet decorators = access.decorators(); @@ -788,3 +819,76 @@ void BarrierSetC2::clone_at_expansion(PhaseMacroExpand* phase, ArrayCopyNode* ac } #undef XTOP + +void BarrierSetC2::compute_liveness_at_stubs() const { + ResourceMark rm; + Compile* const C = Compile::current(); + Arena* const A = Thread::current()->resource_area(); + PhaseCFG* const cfg = C->cfg(); + PhaseRegAlloc* const regalloc = C->regalloc(); + RegMask* const live = NEW_ARENA_ARRAY(A, RegMask, cfg->number_of_blocks() * sizeof(RegMask)); + BarrierSetAssembler* const bs = BarrierSet::barrier_set()->barrier_set_assembler(); + Block_List worklist; + + for (uint i = 0; i < cfg->number_of_blocks(); ++i) { + new ((void*)(live + i)) RegMask(); + worklist.push(cfg->get_block(i)); + } + + while (worklist.size() > 0) { + const Block* const block = worklist.pop(); + RegMask& old_live = live[block->_pre_order]; + RegMask new_live; + + // Initialize to union of successors + for (uint i = 0; i < block->_num_succs; i++) { + const uint succ_id = block->_succs[i]->_pre_order; + new_live.OR(live[succ_id]); + } + + // Walk block backwards, computing liveness + for (int i = block->number_of_nodes() - 1; i >= 0; --i) { + const Node* const node = block->get_node(i); + + // Remove def bits + const OptoReg::Name first = bs->refine_register(node, regalloc->get_reg_first(node)); + const OptoReg::Name second = bs->refine_register(node, regalloc->get_reg_second(node)); + if (first != OptoReg::Bad) { + new_live.Remove(first); + } + if (second != OptoReg::Bad) { + new_live.Remove(second); + } + + // Add use bits + for (uint j = 1; j < node->req(); ++j) { + const Node* const use = node->in(j); + const OptoReg::Name first = bs->refine_register(use, regalloc->get_reg_first(use)); + const OptoReg::Name second = bs->refine_register(use, regalloc->get_reg_second(use)); + if (first != OptoReg::Bad) { + new_live.Insert(first); + } + if (second != OptoReg::Bad) { + new_live.Insert(second); + } + } + + // If this node tracks liveness, update it + RegMask* const regs = barrier_set_state()->live(node); + if (regs != NULL) { + regs->OR(new_live); + } + } + + // Now at block top, see if we have any changes + new_live.SUBTRACT(old_live); + if (new_live.is_NotEmpty()) { + // Liveness has refined, update and propagate to prior blocks + old_live.OR(new_live); + for (uint i = 1; i < block->num_preds(); ++i) { + Block* const pred = cfg->get_block_for_node(block->pred(i)); + worklist.push(pred); + } + } + } +} diff --git a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp index bef2fc5607e..aa2df96412d 100644 --- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp +++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp @@ -205,6 +205,48 @@ class C2OptAccess: public C2Access { virtual bool is_opt_access() const { return true; } }; +class BarrierSetC2State : public ArenaObj { +protected: + Node_Array _live; + +public: + BarrierSetC2State(Arena* arena) : _live(arena) {} + + RegMask* live(const Node* node) { + if (!node->is_Mach() || !needs_liveness_data(node->as_Mach())) { + // Don't need liveness for non-MachNodes or if the GC doesn't request it + return nullptr; + } + RegMask* live = (RegMask*)_live[node->_idx]; + if (live == nullptr) { + live = new (Compile::current()->comp_arena()->AmallocWords(sizeof(RegMask))) RegMask(); + _live.map(node->_idx, (Node*)live); + } + + return live; + } + + virtual bool needs_liveness_data(const MachNode* mach) const = 0; +}; + +// This class represents the slow path in a C2 barrier. It is defined by a +// memory access, an entry point, and a continuation point (typically the end of +// the barrier). It provides a set of registers whose value is live across the +// barrier, and hence must be preserved across runtime calls from the stub. +class BarrierStubC2 : public ArenaObj { +protected: + const MachNode* _node; + Label _entry; + Label _continuation; + +public: + BarrierStubC2(const MachNode* node); + RegMask& live() const; + Label* entry(); + Label* continuation(); + + virtual Register result() const = 0; +}; // This is the top-level class for the backend of the Access API in C2. // The top-level class is responsible for performing raw accesses. The @@ -302,6 +344,7 @@ class BarrierSetC2: public CHeapObj { virtual bool matcher_is_store_load_barrier(Node* x, uint xop) const { return false; } virtual void late_barrier_analysis() const { } + virtual void compute_liveness_at_stubs() const; virtual int estimate_stub_size() const { return 0; } virtual void emit_stubs(CodeBuffer& cb) const { } diff --git a/src/hotspot/share/gc/shared/gc_globals.hpp b/src/hotspot/share/gc/shared/gc_globals.hpp index af735a865dc..13583874d84 100644 --- a/src/hotspot/share/gc/shared/gc_globals.hpp +++ b/src/hotspot/share/gc/shared/gc_globals.hpp @@ -494,9 +494,6 @@ product(bool, UseCondCardMark, false, \ "Check for already marked card before updating card table") \ \ - product(bool, VerifyRememberedSets, false, DIAGNOSTIC, \ - "Verify GC remembered sets") \ - \ product(bool, DisableExplicitGC, false, \ "Ignore calls to System.gc()") \ \ diff --git a/src/hotspot/share/gc/shared/genArguments.cpp b/src/hotspot/share/gc/shared/genArguments.cpp index 8e8abc6fb96..da9fc3f9a85 100644 --- a/src/hotspot/share/gc/shared/genArguments.cpp +++ b/src/hotspot/share/gc/shared/genArguments.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -276,6 +276,9 @@ void GenArguments::initialize_size_info() { // and maximum heap size since no explicit flags exist // for setting the old generation maximum. MaxOldSize = MAX2(MaxHeapSize - max_young_size, GenAlignment); + MinOldSize = MIN3(MaxOldSize, + InitialHeapSize - initial_young_size, + MinHeapSize - MinNewSize); size_t initial_old_size = OldSize; @@ -287,9 +290,8 @@ void GenArguments::initialize_size_info() { // with the overall heap size). In either case make // the minimum, maximum and initial sizes consistent // with the young sizes and the overall heap sizes. - MinOldSize = GenAlignment; initial_old_size = clamp(InitialHeapSize - initial_young_size, MinOldSize, MaxOldSize); - // MaxOldSize has already been made consistent above. + // MaxOldSize and MinOldSize have already been made consistent above. } else { // OldSize has been explicitly set on the command line. Use it // for the initial size but make sure the minimum allow a young @@ -304,9 +306,10 @@ void GenArguments::initialize_size_info() { ", -XX:OldSize flag is being ignored", MaxHeapSize); initial_old_size = MaxOldSize; + } else if (initial_old_size < MinOldSize) { + log_warning(gc, ergo)("Inconsistency between initial old size and minimum old size"); + MinOldSize = initial_old_size; } - - MinOldSize = MIN2(initial_old_size, MinHeapSize - MinNewSize); } // The initial generation sizes should match the initial heap size, diff --git a/src/hotspot/share/gc/shared/memAllocator.cpp b/src/hotspot/share/gc/shared/memAllocator.cpp index 053f49dd6dd..971feed6aaf 100644 --- a/src/hotspot/share/gc/shared/memAllocator.cpp +++ b/src/hotspot/share/gc/shared/memAllocator.cpp @@ -250,19 +250,6 @@ HeapWord* MemAllocator::mem_allocate_outside_tlab(Allocation& allocation) const return mem; } -HeapWord* MemAllocator::mem_allocate_inside_tlab(Allocation& allocation) const { - assert(UseTLAB, "should use UseTLAB"); - - // Try allocating from an existing TLAB. - HeapWord* mem = mem_allocate_inside_tlab_fast(); - if (mem != nullptr) { - return mem; - } - - // Try refilling the TLAB and allocating the object in it. - return mem_allocate_inside_tlab_slow(allocation); -} - HeapWord* MemAllocator::mem_allocate_inside_tlab_fast() const { return _thread->tlab().allocate(_word_size); } @@ -331,7 +318,6 @@ HeapWord* MemAllocator::mem_allocate_inside_tlab_slow(Allocation& allocation) co return mem; } - HeapWord* MemAllocator::mem_allocate_slow(Allocation& allocation) const { // Allocation of an oop can always invoke a safepoint. debug_only(allocation._thread->check_for_valid_safepoint_state()); diff --git a/src/hotspot/share/gc/shared/memAllocator.hpp b/src/hotspot/share/gc/shared/memAllocator.hpp index bd4ae04babf..dca1add31b6 100644 --- a/src/hotspot/share/gc/shared/memAllocator.hpp +++ b/src/hotspot/share/gc/shared/memAllocator.hpp @@ -47,7 +47,6 @@ class MemAllocator: StackObj { private: // Allocate in a TLAB. Could allocate a new TLAB, and therefore potentially safepoint. - HeapWord* mem_allocate_inside_tlab(Allocation& allocation) const; HeapWord* mem_allocate_inside_tlab_slow(Allocation& allocation) const; // Allocate outside a TLAB. Could safepoint. diff --git a/src/hotspot/share/gc/shared/softRefPolicy.hpp b/src/hotspot/share/gc/shared/softRefPolicy.hpp index 1b31262eca5..d3240d7079f 100644 --- a/src/hotspot/share/gc/shared/softRefPolicy.hpp +++ b/src/hotspot/share/gc/shared/softRefPolicy.hpp @@ -41,7 +41,9 @@ class SoftRefPolicy { bool _all_soft_refs_clear; public: - SoftRefPolicy(); + SoftRefPolicy() : + _should_clear_all_soft_refs(false), + _all_soft_refs_clear(false) {} bool should_clear_all_soft_refs() { return _should_clear_all_soft_refs; } void set_should_clear_all_soft_refs(bool v) { _should_clear_all_soft_refs = v; } @@ -51,7 +53,9 @@ class SoftRefPolicy { // Called by the GC after Soft Refs have been cleared to indicate // that the request in _should_clear_all_soft_refs has been fulfilled. - virtual void cleared_all_soft_refs(); + void cleared_all_soft_refs() { + _all_soft_refs_clear = true; + } }; class ClearedAllSoftRefs : public StackObj { diff --git a/src/hotspot/share/gc/shared/space.hpp b/src/hotspot/share/gc/shared/space.hpp index 23715ccd9dc..2a831ddad89 100644 --- a/src/hotspot/share/gc/shared/space.hpp +++ b/src/hotspot/share/gc/shared/space.hpp @@ -35,9 +35,6 @@ #include "runtime/mutexLocker.hpp" #include "utilities/align.hpp" #include "utilities/macros.hpp" -#if INCLUDE_SERIALGC -#include "gc/serial/serialBlockOffsetTable.hpp" -#endif // A space is an abstraction for the "storage units" backing // up the generation abstraction. It includes specific @@ -45,11 +42,6 @@ // for iterating over objects and free blocks, etc. // Forward decls. -class ContiguousSpace; -class Generation; -class ContiguousSpace; -class CardTableRS; -class DirtyCardToOopClosure; class GenSpaceMangler; // A space in which the free area is contiguous. It therefore supports diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp index 4c876500f70..85d45553202 100644 --- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp +++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp @@ -120,17 +120,16 @@ class ZArenaHashtable : public ResourceObj { typedef ZArenaHashtable ZOffsetTable; -class ZBarrierSetC2State : public ArenaObj { +class ZBarrierSetC2State : public BarrierSetC2State { private: GrowableArray* _stubs; - Node_Array _live; int _trampoline_stubs_count; int _stubs_start_offset; public: ZBarrierSetC2State(Arena* arena) - : _stubs(new (arena) GrowableArray(arena, 8, 0, nullptr)), - _live(arena), + : BarrierSetC2State(arena), + _stubs(new (arena) GrowableArray(arena, 8, 0, nullptr)), _trampoline_stubs_count(0), _stubs_start_offset(0) {} @@ -138,25 +137,9 @@ class ZBarrierSetC2State : public ArenaObj { return _stubs; } - RegMask* live(const Node* node) { - if (!node->is_Mach()) { - // Don't need liveness for non-MachNodes - return nullptr; - } - - const MachNode* const mach = node->as_Mach(); - if (mach->barrier_data() == ZBarrierElided) { - // Don't need liveness data for nodes without barriers - return nullptr; - } - - RegMask* live = (RegMask*)_live[node->_idx]; - if (live == nullptr) { - live = new (Compile::current()->comp_arena()->AmallocWords(sizeof(RegMask))) RegMask(); - _live.map(node->_idx, (Node*)live); - } - - return live; + bool needs_liveness_data(const MachNode* mach) const { + // Don't need liveness data for nodes without barriers + return mach->barrier_data() != ZBarrierElided; } void inc_trampoline_stubs_count() { @@ -201,30 +184,7 @@ int ZBarrierStubC2::stubs_start_offset() { return barrier_set_state()->stubs_start_offset(); } -ZBarrierStubC2::ZBarrierStubC2(const MachNode* node) - : _node(node), - _entry(), - _continuation() {} - -Register ZBarrierStubC2::result() const { - return noreg; -} - -RegMask& ZBarrierStubC2::live() const { - return *barrier_set_state()->live(_node); -} - -Label* ZBarrierStubC2::entry() { - // The _entry will never be bound when in_scratch_emit_size() is true. - // However, we still need to return a label that is not bound now, but - // will eventually be bound. Any eventually bound label will do, as it - // will only act as a placeholder, so we return the _continuation label. - return Compile::current()->output()->in_scratch_emit_size() ? &_continuation : &_entry; -} - -Label* ZBarrierStubC2::continuation() { - return &_continuation; -} +ZBarrierStubC2::ZBarrierStubC2(const MachNode* node) : BarrierStubC2(node) {} ZLoadBarrierStubC2* ZLoadBarrierStubC2::create(const MachNode* node, Address ref_addr, Register ref) { AARCH64_ONLY(fatal("Should use ZLoadBarrierStubC2Aarch64::create")); @@ -884,81 +844,6 @@ void ZBarrierSetC2::analyze_dominating_barriers() const { analyze_dominating_barriers_impl(atomics, atomic_dominators); } -// == Reduced spilling optimization == - -void ZBarrierSetC2::compute_liveness_at_stubs() const { - ResourceMark rm; - Compile* const C = Compile::current(); - Arena* const A = Thread::current()->resource_area(); - PhaseCFG* const cfg = C->cfg(); - PhaseRegAlloc* const regalloc = C->regalloc(); - RegMask* const live = NEW_ARENA_ARRAY(A, RegMask, cfg->number_of_blocks() * sizeof(RegMask)); - ZBarrierSetAssembler* const bs = ZBarrierSet::assembler(); - Block_List worklist; - - for (uint i = 0; i < cfg->number_of_blocks(); ++i) { - new ((void*)(live + i)) RegMask(); - worklist.push(cfg->get_block(i)); - } - - while (worklist.size() > 0) { - const Block* const block = worklist.pop(); - RegMask& old_live = live[block->_pre_order]; - RegMask new_live; - - // Initialize to union of successors - for (uint i = 0; i < block->_num_succs; i++) { - const uint succ_id = block->_succs[i]->_pre_order; - new_live.OR(live[succ_id]); - } - - // Walk block backwards, computing liveness - for (int i = block->number_of_nodes() - 1; i >= 0; --i) { - const Node* const node = block->get_node(i); - - // Remove def bits - const OptoReg::Name first = bs->refine_register(node, regalloc->get_reg_first(node)); - const OptoReg::Name second = bs->refine_register(node, regalloc->get_reg_second(node)); - if (first != OptoReg::Bad) { - new_live.Remove(first); - } - if (second != OptoReg::Bad) { - new_live.Remove(second); - } - - // Add use bits - for (uint j = 1; j < node->req(); ++j) { - const Node* const use = node->in(j); - const OptoReg::Name first = bs->refine_register(use, regalloc->get_reg_first(use)); - const OptoReg::Name second = bs->refine_register(use, regalloc->get_reg_second(use)); - if (first != OptoReg::Bad) { - new_live.Insert(first); - } - if (second != OptoReg::Bad) { - new_live.Insert(second); - } - } - - // If this node tracks liveness, update it - RegMask* const regs = barrier_set_state()->live(node); - if (regs != nullptr) { - regs->OR(new_live); - } - } - - // Now at block top, see if we have any changes - new_live.SUBTRACT(old_live); - if (new_live.is_NotEmpty()) { - // Liveness has refined, update and propagate to prior blocks - old_live.OR(new_live); - for (uint i = 1; i < block->num_preds(); ++i) { - Block* const pred = cfg->get_block_for_node(block->pred(i)); - worklist.push(pred); - } - } - } -} - void ZBarrierSetC2::eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const { eliminate_gc_barrier_data(node); } diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp index e4b3be4dadc..f8892defcff 100644 --- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp +++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp @@ -41,12 +41,8 @@ class MachNode; class MacroAssembler; -class ZBarrierStubC2 : public ArenaObj { +class ZBarrierStubC2 : public BarrierStubC2 { protected: - const MachNode* _node; - Label _entry; - Label _continuation; - static void register_stub(ZBarrierStubC2* stub); static void inc_trampoline_stubs_count(); static int trampoline_stubs_count(); @@ -55,10 +51,6 @@ static int stubs_start_offset(); ZBarrierStubC2(const MachNode* node); public: - RegMask& live() const; - Label* entry(); - Label* continuation(); - virtual Register result() const = 0; virtual void emit_code(MacroAssembler& masm) = 0; }; @@ -108,7 +100,6 @@ class ZStoreBarrierStubC2 : public ZBarrierStubC2 { class ZBarrierSetC2 : public BarrierSetC2 { private: - void compute_liveness_at_stubs() const; void analyze_dominating_barriers_impl(Node_List& accesses, Node_List& access_dominators) const; void analyze_dominating_barriers() const; diff --git a/src/hotspot/share/jfr/metadata/metadata.xml b/src/hotspot/share/jfr/metadata/metadata.xml index 42facf56217..0ebfdd9210c 100644 --- a/src/hotspot/share/jfr/metadata/metadata.xml +++ b/src/hotspot/share/jfr/metadata/metadata.xml @@ -608,6 +608,7 @@ + vec_type() != cached_vbox->vec_type()) { // TODO: vector type mismatch can be handled with additional reinterpret casts - assert(Type::cmp(vbox->vec_type(), cached_vbox->vec_type()) != 0, "inconsistent"); + assert(!Type::equals(vbox->vec_type(), cached_vbox->vec_type()), "inconsistent"); return nullptr; // not optimizable: vector type mismatch } else if (vbox->box_type() != cached_vbox->box_type()) { - assert(Type::cmp(vbox->box_type(), cached_vbox->box_type()) != 0, "inconsistent"); + assert(!Type::equals(vbox->box_type(), cached_vbox->box_type()), "inconsistent"); return nullptr; // not optimizable: box type mismatch } } else { diff --git a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp index eb082bd7439..fcd0e1a4df2 100644 --- a/src/hotspot/share/opto/loopnode.cpp +++ b/src/hotspot/share/opto/loopnode.cpp @@ -2352,7 +2352,8 @@ Node* PhaseIdealLoop::exact_limit( IdealLoopTree *loop ) { CountedLoopNode *cl = loop->_head->as_CountedLoop(); assert(cl->is_valid_counted_loop(T_INT), ""); - if (ABS(cl->stride_con()) == 1 || + if (cl->stride_con() == 1 || + cl->stride_con() == -1 || cl->limit()->Opcode() == Op_LoopLimit) { // Old code has exact limit (it could be incorrect in case of int overflow). // Loop limit is exact with stride == 1. And loop may already have exact limit. @@ -2962,14 +2963,22 @@ void OuterStripMinedLoopNode::adjust_strip_mined_loop(PhaseIterGVN* igvn) { CountedLoopEndNode* inner_cle = inner_cl->loopexit(); int stride = inner_cl->stride_con(); - jlong scaled_iters_long = ((jlong)LoopStripMiningIter) * ABS(stride); + // For a min int stride, LoopStripMiningIter * stride overflows the int range for all values of LoopStripMiningIter + // except 0 or 1. Those values are handled early on in this method and causes the method to return. So for a min int + // stride, the method is guaranteed to return at the next check below. + jlong scaled_iters_long = ((jlong)LoopStripMiningIter) * ABS((jlong)stride); int scaled_iters = (int)scaled_iters_long; - int short_scaled_iters = LoopStripMiningIterShortLoop* ABS(stride); + if ((jlong)scaled_iters != scaled_iters_long) { + // Remove outer loop and safepoint (too few iterations) + remove_outer_loop_and_safepoint(igvn); + return; + } + jlong short_scaled_iters = LoopStripMiningIterShortLoop * ABS(stride); const TypeInt* inner_iv_t = igvn->type(inner_iv_phi)->is_int(); jlong iter_estimate = (jlong)inner_iv_t->_hi - (jlong)inner_iv_t->_lo; assert(iter_estimate > 0, "broken"); - if ((jlong)scaled_iters != scaled_iters_long || iter_estimate <= short_scaled_iters) { - // Remove outer loop and safepoint (too few iterations) + if (iter_estimate <= short_scaled_iters) { + // Remove outer loop and safepoint: loop executes less than LoopStripMiningIterShortLoop remove_outer_loop_and_safepoint(igvn); return; } diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index 4eae4a49dbb..e0eed9e3f57 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -856,7 +856,7 @@ bool LoadNode::can_remove_control() const { uint LoadNode::size_of() const { return sizeof(*this); } bool LoadNode::cmp(const Node &n) const { LoadNode& load = (LoadNode &)n; - return !Type::cmp(_type, load._type) && + return Type::equals(_type, load._type) && _control_dependency == load._control_dependency && _mo == load._mo; } @@ -3108,8 +3108,8 @@ bool MergePrimitiveArrayStores::is_con_RShift(const Node* n, Node const*& base_o n->in(2)->is_ConI()) { base_out = n->in(1); shift_out = n->in(2)->get_int(); - assert(shift_out >= 0, "must be positive"); - return true; + // The shift must be positive: + return shift_out >= 0; } return false; } diff --git a/src/hotspot/share/opto/node.cpp b/src/hotspot/share/opto/node.cpp index cb3b519ba5d..fa85344d0da 100644 --- a/src/hotspot/share/opto/node.cpp +++ b/src/hotspot/share/opto/node.cpp @@ -3011,7 +3011,7 @@ uint TypeNode::hash() const { return Node::hash() + _type->hash(); } bool TypeNode::cmp(const Node& n) const { - return !Type::cmp(_type, ((TypeNode&)n)._type); + return Type::equals(_type, n.as_Type()->_type); } const Type* TypeNode::bottom_type() const { return _type; } const Type* TypeNode::Value(PhaseGVN* phase) const { return _type; } diff --git a/src/hotspot/share/opto/type.cpp b/src/hotspot/share/opto/type.cpp index 7fecf0b4d35..70b2c705cd3 100644 --- a/src/hotspot/share/opto/type.cpp +++ b/src/hotspot/share/opto/type.cpp @@ -399,11 +399,13 @@ const Type *Type::make( enum TYPES t ) { } //------------------------------cmp-------------------------------------------- -int Type::cmp( const Type *const t1, const Type *const t2 ) { - if( t1->_base != t2->_base ) - return 1; // Missed badly +bool Type::equals(const Type* t1, const Type* t2) { + if (t1->_base != t2->_base) { + return false; // Missed badly + } + assert(t1 != t2 || t1->eq(t2), "eq must be reflexive"); - return !t1->eq(t2); // Return ZERO if equal + return t1->eq(t2); } const Type* Type::maybe_remove_speculative(bool include_speculative) const { @@ -433,9 +435,13 @@ void Type::Initialize_shared(Compile* current) { Arena* shared_type_arena = new (mtCompiler)Arena(mtCompiler); current->set_type_arena(shared_type_arena); - _shared_type_dict = - new (shared_type_arena) Dict( (CmpKey)Type::cmp, (Hash)Type::uhash, - shared_type_arena, 128 ); + + // Map the boolean result of Type::equals into a comparator result that CmpKey expects. + CmpKey type_cmp = [](const void* t1, const void* t2) -> int32_t { + return Type::equals((Type*) t1, (Type*) t2) ? 0 : 1; + }; + + _shared_type_dict = new (shared_type_arena) Dict(type_cmp, (Hash) Type::uhash, shared_type_arena, 128); current->set_type_dict(_shared_type_dict); // Make shared pre-built types. @@ -744,7 +750,7 @@ const Type *Type::hashcons(void) { // Since we just discovered a new Type, compute its dual right now. assert( !_dual, "" ); // No dual yet _dual = xdual(); // Compute the dual - if (cmp(this, _dual) == 0) { // Handle self-symmetric + if (equals(this, _dual)) { // Handle self-symmetric if (_dual != this) { delete _dual; _dual = this; diff --git a/src/hotspot/share/opto/type.hpp b/src/hotspot/share/opto/type.hpp index de9b52b4cc4..1b11ed95367 100644 --- a/src/hotspot/share/opto/type.hpp +++ b/src/hotspot/share/opto/type.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -157,7 +157,7 @@ class Type { static const TypeInfo _type_info[]; static int uhash( const Type *const t ); - // Structural equality check. Assumes that cmp() has already compared + // Structural equality check. Assumes that equals() has already compared // the _base types and thus knows it can cast 't' appropriately. virtual bool eq( const Type *t ) const; @@ -216,15 +216,15 @@ class Type { // Create a new hash-consd type static const Type *make(enum TYPES); // Test for equivalence of types - static int cmp( const Type *const t1, const Type *const t2 ); + static bool equals(const Type* t1, const Type* t2); // Test for higher or equal in lattice // Variant that drops the speculative part of the types - bool higher_equal(const Type *t) const { - return !cmp(meet(t),t->remove_speculative()); + bool higher_equal(const Type* t) const { + return equals(meet(t), t->remove_speculative()); } // Variant that keeps the speculative part of the types - bool higher_equal_speculative(const Type *t) const { - return !cmp(meet_speculative(t),t); + bool higher_equal_speculative(const Type* t) const { + return equals(meet_speculative(t), t); } // MEET operation; lower in lattice. diff --git a/src/hotspot/share/opto/vectorIntrinsics.cpp b/src/hotspot/share/opto/vectorIntrinsics.cpp index 139dd62dc28..2039e9c27be 100644 --- a/src/hotspot/share/opto/vectorIntrinsics.cpp +++ b/src/hotspot/share/opto/vectorIntrinsics.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -2629,7 +2629,7 @@ bool LibraryCallKit::inline_vector_convert() { op = gvn().transform(VectorCastNode::make(cast_vopc, op, elem_bt_to, num_elem_to)); } } - } else if (Type::cmp(src_type, dst_type) != 0) { + } else if (!Type::equals(src_type, dst_type)) { assert(!is_cast, "must be reinterpret"); op = gvn().transform(new VectorReinterpretNode(op, src_type, dst_type)); } diff --git a/src/hotspot/share/opto/vectornode.cpp b/src/hotspot/share/opto/vectornode.cpp index bef4a2a1095..5489a13b871 100644 --- a/src/hotspot/share/opto/vectornode.cpp +++ b/src/hotspot/share/opto/vectornode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, 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 @@ -1668,7 +1668,7 @@ Node* VectorReinterpretNode::Identity(PhaseGVN *phase) { // "VectorReinterpret (VectorReinterpret node) ==> node" if: // 1) Types of 'node' and 'this' are identical // 2) Truncations are not introduced by the first VectorReinterpret - if (Type::cmp(bottom_type(), n->in(1)->bottom_type()) == 0 && + if (Type::equals(bottom_type(), n->in(1)->bottom_type()) && length_in_bytes() <= n->bottom_type()->is_vect()->length_in_bytes()) { return n->in(1); } @@ -1685,7 +1685,7 @@ Node* VectorInsertNode::make(Node* vec, Node* new_val, int position, PhaseGVN& g Node* VectorUnboxNode::Ideal(PhaseGVN* phase, bool can_reshape) { Node* n = obj()->uncast(); if (EnableVectorReboxing && n->Opcode() == Op_VectorBox) { - if (Type::cmp(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type()) == 0) { + if (Type::equals(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type())) { // Handled by VectorUnboxNode::Identity() } else { VectorBoxNode* vbox = static_cast(n); @@ -1722,7 +1722,7 @@ Node* VectorUnboxNode::Ideal(PhaseGVN* phase, bool can_reshape) { Node* VectorUnboxNode::Identity(PhaseGVN* phase) { Node* n = obj()->uncast(); if (EnableVectorReboxing && n->Opcode() == Op_VectorBox) { - if (Type::cmp(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type()) == 0) { + if (Type::equals(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type())) { return n->in(VectorBoxNode::Value); // VectorUnbox (VectorBox v) ==> v } else { // Handled by VectorUnboxNode::Ideal(). diff --git a/src/hotspot/share/opto/vectornode.hpp b/src/hotspot/share/opto/vectornode.hpp index ff31d2a51b8..d35f623555d 100644 --- a/src/hotspot/share/opto/vectornode.hpp +++ b/src/hotspot/share/opto/vectornode.hpp @@ -1560,7 +1560,7 @@ class VectorReinterpretNode : public VectorNode { const TypeVect* src_type() { return _src_vt; } virtual uint hash() const { return VectorNode::hash() + _src_vt->hash(); } virtual bool cmp( const Node &n ) const { - return VectorNode::cmp(n) && !Type::cmp(_src_vt,((VectorReinterpretNode&)n)._src_vt); + return VectorNode::cmp(n) && Type::equals(_src_vt, ((VectorReinterpretNode&) n)._src_vt); } virtual Node* Identity(PhaseGVN* phase); @@ -1696,7 +1696,7 @@ class VectorInsertNode : public VectorNode { VectorInsertNode(Node* vsrc, Node* new_val, ConINode* pos, const TypeVect* vt) : VectorNode(vsrc, new_val, (Node*)pos, vt) { assert(pos->get_int() >= 0, "positive constants"); assert(pos->get_int() < (int)vt->length(), "index must be less than vector length"); - assert(Type::cmp(vt, vsrc->bottom_type()) == 0, "input and output must be same type"); + assert(Type::equals(vt, vsrc->bottom_type()), "input and output must be same type"); } virtual int Opcode() const; uint pos() const { return in(3)->get_int(); } diff --git a/src/hotspot/share/prims/jvmtiEnvBase.cpp b/src/hotspot/share/prims/jvmtiEnvBase.cpp index 4ed01df0b3d..1615e3c349c 100644 --- a/src/hotspot/share/prims/jvmtiEnvBase.cpp +++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp @@ -1633,19 +1633,16 @@ class VM_SetNotifyJvmtiEventsMode : public VM_Operation { } // This function is called only if _enable == true. - // Iterates over all JavaThread's, counts VTMS transitions and restores - // jt->jvmti_thread_state() and jt->jvmti_vthread() for VTMS transition protocol. - int count_transitions_and_correct_jvmti_thread_states() { - int count = 0; - + // Iterates over all JavaThread's, restores jt->jvmti_thread_state() and + // jt->jvmti_vthread() for VTMS transition protocol. + void correct_jvmti_thread_states() { for (JavaThread* jt : ThreadsListHandle()) { if (jt->is_in_VTMS_transition()) { - count++; + jt->set_VTMS_transition_mark(true); continue; // no need in JvmtiThreadState correction below if in transition } correct_jvmti_thread_state(jt); } - return count; } public: @@ -1655,9 +1652,9 @@ class VM_SetNotifyJvmtiEventsMode : public VM_Operation { } void doit() { - int count = _enable ? count_transitions_and_correct_jvmti_thread_states() : 0; - - JvmtiVTMSTransitionDisabler::set_VTMS_transition_count(count); + if (_enable) { + correct_jvmti_thread_states(); + } JvmtiVTMSTransitionDisabler::set_VTMS_notify_jvmti_events(_enable); } }; diff --git a/src/hotspot/share/prims/jvmtiThreadState.cpp b/src/hotspot/share/prims/jvmtiThreadState.cpp index 1e866236c98..c95f5646193 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.cpp +++ b/src/hotspot/share/prims/jvmtiThreadState.cpp @@ -214,9 +214,6 @@ JvmtiThreadState::periodic_clean_up() { // Virtual Threads Mount State transition (VTMS transition) mechanism // -// VTMS transitions cannot be disabled while this counter is positive. -volatile int JvmtiVTMSTransitionDisabler::_VTMS_transition_count = 0; - // VTMS transitions for one virtual thread are disabled while it is positive volatile int JvmtiVTMSTransitionDisabler::_VTMS_transition_disable_for_one_count = 0; @@ -238,11 +235,14 @@ volatile bool JvmtiVTMSTransitionDisabler::_sync_protocol_enabled_permanently = #ifdef ASSERT void JvmtiVTMSTransitionDisabler::print_info() { - log_error(jvmti)("_VTMS_transition_count: %d\n", _VTMS_transition_count); log_error(jvmti)("_VTMS_transition_disable_for_one_count: %d\n", _VTMS_transition_disable_for_one_count); log_error(jvmti)("_VTMS_transition_disable_for_all_count: %d\n\n", _VTMS_transition_disable_for_all_count); int attempts = 10000; for (JavaThreadIteratorWithHandle jtiwh; JavaThread *java_thread = jtiwh.next(); ) { + if (java_thread->VTMS_transition_mark()) { + log_error(jvmti)("jt: %p VTMS_transition_mark: %d\n", + (void*)java_thread, java_thread->VTMS_transition_mark()); + } ResourceMark rm; // Handshake with target. PrintStackTraceClosure pstc; @@ -358,11 +358,13 @@ JvmtiVTMSTransitionDisabler::VTMS_transition_disable_for_all() { // Block while some mount/unmount transitions are in progress. // Debug version fails and prints diagnostic information. - while (_VTMS_transition_count > 0) { - if (ml.wait(10)) { - attempts--; + for (JavaThreadIteratorWithHandle jtiwh; JavaThread *jt = jtiwh.next(); ) { + while (jt->VTMS_transition_mark()) { + if (ml.wait(10)) { + attempts--; + } + DEBUG_ONLY(if (attempts == 0) break;) } - DEBUG_ONLY(if (attempts == 0) break;) } assert(!thread->is_VTMS_transition_disabler(), "VTMS_transition sanity check"); #ifdef ASSERT @@ -427,8 +429,9 @@ JvmtiVTMSTransitionDisabler::start_VTMS_transition(jthread vthread, bool is_moun assert(!thread->is_in_VTMS_transition(), "VTMS_transition sanity check"); // Avoid using MonitorLocker on performance critical path, use - // two-level synchronization with lock-free operations on counters. - Atomic::inc(&_VTMS_transition_count); // Try to enter VTMS transition section optmistically. + // two-level synchronization with lock-free operations on state bits. + assert(!thread->VTMS_transition_mark(), "sanity check"); + thread->set_VTMS_transition_mark(true); // Try to enter VTMS transition section optmistically. java_lang_Thread::set_is_in_VTMS_transition(vt, true); if (!sync_protocol_enabled()) { @@ -448,9 +451,9 @@ JvmtiVTMSTransitionDisabler::start_VTMS_transition(jthread vthread, bool is_moun thread->is_suspended() || JvmtiVTSuspender::is_vthread_suspended(thread_id) ) { - // Slow path: undo unsuccessful optimistic counter incrementation. + // Slow path: undo unsuccessful optimistic set of the VTMS_transition_mark. // It can cause an extra waiting cycle for VTMS transition disablers. - Atomic::dec(&_VTMS_transition_count); + thread->set_VTMS_transition_mark(false); java_lang_Thread::set_is_in_VTMS_transition(vth(), false); while (true) { @@ -470,7 +473,7 @@ JvmtiVTMSTransitionDisabler::start_VTMS_transition(jthread vthread, bool is_moun DEBUG_ONLY(if (attempts == 0) break;) continue; // ~ThreadBlockInVM has handshake-based suspend point. } - Atomic::inc(&_VTMS_transition_count); + thread->set_VTMS_transition_mark(true); java_lang_Thread::set_is_in_VTMS_transition(vth(), true); break; } @@ -495,7 +498,8 @@ JvmtiVTMSTransitionDisabler::finish_VTMS_transition(jthread vthread, bool is_mou thread->set_is_in_VTMS_transition(false); oop vt = JNIHandles::resolve_external_guard(vthread); java_lang_Thread::set_is_in_VTMS_transition(vt, false); - Atomic::dec(&_VTMS_transition_count); + assert(thread->VTMS_transition_mark(), "sanity check"); + thread->set_VTMS_transition_mark(false); if (!sync_protocol_enabled()) { return; diff --git a/src/hotspot/share/prims/jvmtiThreadState.hpp b/src/hotspot/share/prims/jvmtiThreadState.hpp index 8d49f8af96c..ff7b6a1ebde 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.hpp +++ b/src/hotspot/share/prims/jvmtiThreadState.hpp @@ -82,9 +82,8 @@ class JvmtiVTMSTransitionDisabler { static volatile int _VTMS_transition_disable_for_one_count; // transitions for one virtual thread are disabled while it is positive static volatile int _VTMS_transition_disable_for_all_count; // transitions for all virtual threads are disabled while it is positive static volatile bool _SR_mode; // there is an active suspender or resumer - static volatile int _VTMS_transition_count; // current number of VTMS transitions static volatile int _sync_protocol_enabled_count; // current number of JvmtiVTMSTransitionDisablers enabled sync protocol - static volatile bool _sync_protocol_enabled_permanently; // seen a suspender: JvmtiVTMSTraansitionDisabler protocol is enabled permanently + static volatile bool _sync_protocol_enabled_permanently; // seen a suspender: JvmtiVTMSTransitionDisabler protocol is enabled permanently bool _is_SR; // is suspender or resumer jthread _thread; // virtual thread to disable transitions for, no-op if it is a platform thread @@ -100,8 +99,6 @@ class JvmtiVTMSTransitionDisabler { static bool VTMS_notify_jvmti_events() { return _VTMS_notify_jvmti_events; } static void set_VTMS_notify_jvmti_events(bool val) { _VTMS_notify_jvmti_events = val; } - static void set_VTMS_transition_count(bool val) { _VTMS_transition_count = val; } - static void inc_sync_protocol_enabled_count() { Atomic::inc(&_sync_protocol_enabled_count); } static void dec_sync_protocol_enabled_count() { Atomic::dec(&_sync_protocol_enabled_count); } static int sync_protocol_enabled_count() { return Atomic::load(&_sync_protocol_enabled_count); } diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 8068c80a817..3f1479b875b 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -501,6 +501,7 @@ static SpecialFlag const special_jvm_flags[] = { { "RequireSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "UseSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "RegisterFinalizersAtInit", JDK_Version::jdk(22), JDK_Version::jdk(23), JDK_Version::jdk(24) }, + { "DontYieldALot", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "PreserveAllAnnotations", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseNotificationThread", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseEmptySlotsInSupers", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp index cf2f7e9c216..7a4a59a8553 100644 --- a/src/hotspot/share/runtime/deoptimization.cpp +++ b/src/hotspot/share/runtime/deoptimization.cpp @@ -391,7 +391,6 @@ static void restore_eliminated_locks(JavaThread* thread, GrowableArray lock_order{0};) // Start locking from outermost/oldest frame for (int i = (chunk->length() - 1); i >= 0; i--) { compiledVFrame* cvf = chunk->at(i); @@ -401,13 +400,6 @@ static void restore_eliminated_locks(JavaThread* thread, GrowableArrayowner()); - } - } -#endif // ASSERT #ifndef PRODUCT if (PrintDeoptimizationDetails) { ResourceMark rm; @@ -439,11 +431,6 @@ static void restore_eliminated_locks(JavaThread* thread, GrowableArraylock_stack().verify_consistent_lock_order(lock_order, exec_mode != Deoptimization::Unpack_none); - } -#endif // ASSERT } // Deoptimize objects, that is reallocate and relock them, just before they escape through JVMTI. diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 43cfbef6bb5..5bb19e82aff 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -841,7 +841,7 @@ const int ObjectAlignmentInBytes = 8; "registering as parallel capable") \ \ product_pd(bool, DontYieldALot, \ - "Throw away obvious excess yield calls") \ + "(Deprecated) Throw away obvious excess yield calls") \ \ product(bool, DisablePrimordialThreadGuardPages, false, EXPERIMENTAL, \ "Disable the use of stack guard pages if the JVM is loaded " \ @@ -1466,9 +1466,6 @@ const int ObjectAlignmentInBytes = 8; develop(intx, MethodHistogramCutoff, 100, \ "The cutoff value for method invocation histogram (+CountCalls)") \ \ - develop(intx, DontYieldALotInterval, 10, \ - "Interval between which yields will be dropped (milliseconds)") \ - \ develop(intx, DeoptimizeALotInterval, 5, \ "Number of exits until DeoptimizeALot kicks in") \ \ diff --git a/src/hotspot/share/runtime/javaThread.cpp b/src/hotspot/share/runtime/javaThread.cpp index cbb63fd60df..2e40c99455c 100644 --- a/src/hotspot/share/runtime/javaThread.cpp +++ b/src/hotspot/share/runtime/javaThread.cpp @@ -450,6 +450,7 @@ JavaThread::JavaThread() : _is_in_VTMS_transition(false), _is_in_tmp_VTMS_transition(false), _is_disable_suspend(false), + _VTMS_transition_mark(false), #ifdef ASSERT _is_VTMS_transition_disabler(false), #endif diff --git a/src/hotspot/share/runtime/javaThread.hpp b/src/hotspot/share/runtime/javaThread.hpp index abba4c75de8..6b6c9139b78 100644 --- a/src/hotspot/share/runtime/javaThread.hpp +++ b/src/hotspot/share/runtime/javaThread.hpp @@ -317,6 +317,7 @@ class JavaThread: public Thread { bool _is_in_VTMS_transition; // thread is in virtual thread mount state transition bool _is_in_tmp_VTMS_transition; // thread is in temporary virtual thread mount state transition bool _is_disable_suspend; // JVMTI suspend is temporarily disabled; used on current thread only + bool _VTMS_transition_mark; // used for sync between VTMS transitions and disablers #ifdef ASSERT bool _is_VTMS_transition_disabler; // thread currently disabled VTMS transitions #endif @@ -664,6 +665,9 @@ class JavaThread: public Thread { bool is_disable_suspend() const { return _is_disable_suspend; } void toggle_is_disable_suspend() { _is_disable_suspend = !_is_disable_suspend; }; + bool VTMS_transition_mark() const { return Atomic::load(&_VTMS_transition_mark); } + void set_VTMS_transition_mark(bool val) { Atomic::store(&_VTMS_transition_mark, val); } + #ifdef ASSERT bool is_VTMS_transition_disabler() const { return _is_VTMS_transition_disabler; } void set_is_VTMS_transition_disabler(bool val); diff --git a/src/hotspot/share/runtime/lockStack.cpp b/src/hotspot/share/runtime/lockStack.cpp index c7889da1a76..2f783c97c99 100644 --- a/src/hotspot/share/runtime/lockStack.cpp +++ b/src/hotspot/share/runtime/lockStack.cpp @@ -103,60 +103,6 @@ void LockStack::verify(const char* msg) const { } #endif -#ifdef ASSERT -void LockStack::verify_consistent_lock_order(GrowableArray& lock_order, bool leaf_frame) const { - int top_index = to_index(_top); - int lock_index = lock_order.length(); - - if (!leaf_frame) { - // If the lock_order is not from the leaf frame we must search - // for the top_index which fits with the most recent fast_locked - // objects in the lock stack. - while (lock_index-- > 0) { - const oop obj = lock_order.at(lock_index); - if (contains(obj)) { - for (int index = 0; index < top_index; index++) { - if (_base[index] == obj) { - // Found top index - top_index = index + 1; - break; - } - } - - if (VM_Version::supports_recursive_lightweight_locking()) { - // With recursive looks there may be more of the same object - while (lock_index-- > 0 && lock_order.at(lock_index) == obj) { - top_index++; - } - assert(top_index <= to_index(_top), "too many obj in lock_order"); - } - - break; - } - } - - lock_index = lock_order.length(); - } - - while (lock_index-- > 0) { - const oop obj = lock_order.at(lock_index); - const markWord mark = obj->mark_acquire(); - assert(obj->is_locked(), "must be locked"); - if (top_index > 0 && obj == _base[top_index - 1]) { - assert(mark.is_fast_locked() || mark.monitor()->is_owner_anonymous(), - "must be fast_locked or inflated by other thread"); - top_index--; - } else { - assert(!mark.is_fast_locked(), "must be inflated"); - assert(mark.monitor()->owner_raw() == get_thread() || - (!leaf_frame && get_thread()->current_waiting_monitor() == mark.monitor()), - "must be owned by (or waited on by) thread"); - assert(!contains(obj), "must not be on lock_stack"); - } - } -} -#endif - void LockStack::print_on(outputStream* st) { for (int i = to_index(_top); (--i) >= 0;) { st->print("LockStack[%d]: ", i); diff --git a/src/hotspot/share/runtime/lockStack.hpp b/src/hotspot/share/runtime/lockStack.hpp index 2cf02f00a8d..064f70a37fb 100644 --- a/src/hotspot/share/runtime/lockStack.hpp +++ b/src/hotspot/share/runtime/lockStack.hpp @@ -121,9 +121,6 @@ class LockStack { // Printing void print_on(outputStream* st); - - // Verify Lock Stack consistent with lock order - void verify_consistent_lock_order(GrowableArray& lock_order, bool leaf_frame) const NOT_DEBUG_RETURN; }; #endif // SHARE_RUNTIME_LOCKSTACK_HPP diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index 802ef22ed62..0a7f5c54676 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -481,9 +481,6 @@ address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* curr return StubRoutines::cont_returnBarrierExc(); } - // write lock needed because we might update the pc desc cache via PcDescCache::add_pc_desc - MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, current)); - // The fastest case first CodeBlob* blob = CodeCache::find_blob(return_address); nmethod* nm = (blob != nullptr) ? blob->as_nmethod_or_null() : nullptr; @@ -1752,7 +1749,8 @@ JRT_LEAF(void, SharedRuntime::fixup_callers_callsite(Method* method, address cal return; } - // write lock needed because we might update the pc desc cache via PcDescCache::add_pc_desc + // write lock needed because we might patch call site by set_to_clean() + // and is_unloading() can modify nmethod's state MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, JavaThread::current())); CodeBlob* cb = CodeCache::find_blob(caller_pc); diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp index 8d86fb6ceb4..cc1351e2742 100644 --- a/src/hotspot/share/runtime/vmStructs.cpp +++ b/src/hotspot/share/runtime/vmStructs.cpp @@ -576,14 +576,15 @@ nonstatic_field(nmethod, _orig_pc_offset, int) \ nonstatic_field(nmethod, _stub_offset, int) \ nonstatic_field(nmethod, _metadata_offset, u2) \ - nonstatic_field(nmethod, _scopes_pcs_offset, u2) \ + nonstatic_field(nmethod, _scopes_pcs_offset, int) \ nonstatic_field(nmethod, _scopes_data_offset, int) \ - nonstatic_field(nmethod, _dependencies_offset, u2) \ - nonstatic_field(nmethod, _handler_table_offset, int) \ - nonstatic_field(nmethod, _nul_chk_table_offset, int) \ + nonstatic_field(nmethod, _handler_table_offset, u2) \ + nonstatic_field(nmethod, _nul_chk_table_offset, u2) \ nonstatic_field(nmethod, _entry_offset, u2) \ nonstatic_field(nmethod, _verified_entry_offset, u2) \ nonstatic_field(nmethod, _osr_entry_point, address) \ + nonstatic_field(nmethod, _immutable_data, address) \ + nonstatic_field(nmethod, _immutable_data_size, int) \ nonstatic_field(nmethod, _compile_id, int) \ nonstatic_field(nmethod, _comp_level, CompLevel) \ volatile_nonstatic_field(nmethod, _exception_cache, ExceptionCache*) \ diff --git a/src/hotspot/share/utilities/globalDefinitions.hpp b/src/hotspot/share/utilities/globalDefinitions.hpp index 87af33d97e7..34f0a40a826 100644 --- a/src/hotspot/share/utilities/globalDefinitions.hpp +++ b/src/hotspot/share/utilities/globalDefinitions.hpp @@ -37,6 +37,7 @@ #include #include +#include #include class oopDesc; @@ -1110,7 +1111,18 @@ template constexpr T MIN3(T a, T b, T c) { return MIN2(MIN2(a, b), template constexpr T MAX4(T a, T b, T c, T d) { return MAX2(MAX3(a, b, c), d); } template constexpr T MIN4(T a, T b, T c, T d) { return MIN2(MIN3(a, b, c), d); } -template inline T ABS(T x) { return (x > 0) ? x : -x; } +#define ABS(x) asserted_abs(x, __FILE__, __LINE__) + +template inline T asserted_abs(T x, const char* file, int line) { + bool valid_arg = !(std::is_integral::value && x == std::numeric_limits::min()); +#ifdef ASSERT + if (!valid_arg) { + report_vm_error(file, line, "ABS: argument should not allow overflow"); + } +#endif + // Prevent exposure to UB by checking valid_arg here as well. + return (x < 0 && valid_arg) ? -x : x; +} // Return the given value clamped to the range [min ... max] template diff --git a/src/java.base/share/classes/java/io/ByteArrayOutputStream.java b/src/java.base/share/classes/java/io/ByteArrayOutputStream.java index 109acce3853..8f5ff41957e 100644 --- a/src/java.base/share/classes/java/io/ByteArrayOutputStream.java +++ b/src/java.base/share/classes/java/io/ByteArrayOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2024, 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 @@ -159,8 +159,16 @@ public void writeBytes(byte[] b) { * @throws NullPointerException if {@code out} is {@code null}. * @throws IOException if an I/O error occurs. */ - public synchronized void writeTo(OutputStream out) throws IOException { - out.write(buf, 0, count); + public void writeTo(OutputStream out) throws IOException { + if (Thread.currentThread().isVirtual()) { + byte[] bytes; + synchronized (this) { + bytes = Arrays.copyOf(buf, count); + } + out.write(bytes); + } else synchronized (this) { + out.write(buf, 0, count); + } } /** diff --git a/src/java.base/share/classes/java/io/ObjectOutputStream.java b/src/java.base/share/classes/java/io/ObjectOutputStream.java index dda9318f9bd..2dcf174cf53 100644 --- a/src/java.base/share/classes/java/io/ObjectOutputStream.java +++ b/src/java.base/share/classes/java/io/ObjectOutputStream.java @@ -1027,7 +1027,7 @@ public PutField() {} * calling the {@link java.io.ObjectOutputStream#writeFields()} * method. */ - @Deprecated + @Deprecated(forRemoval = true, since = "1.4") public abstract void write(ObjectOutput out) throws IOException; } diff --git a/src/java.base/share/classes/java/io/Serializable.java b/src/java.base/share/classes/java/io/Serializable.java index 9add677049c..eb50316925a 100644 --- a/src/java.base/share/classes/java/io/Serializable.java +++ b/src/java.base/share/classes/java/io/Serializable.java @@ -68,7 +68,7 @@ * *
  * private void writeObject(java.io.ObjectOutputStream out)
- *     throws IOException
+ *     throws IOException;
  * private void readObject(java.io.ObjectInputStream in)
  *     throws IOException, ClassNotFoundException;
  * private void readObjectNoData()
diff --git a/src/java.base/share/classes/java/lang/FdLibm.java b/src/java.base/share/classes/java/lang/FdLibm.java
index dd79ee82863..70d728a16db 100644
--- a/src/java.base/share/classes/java/lang/FdLibm.java
+++ b/src/java.base/share/classes/java/lang/FdLibm.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2024, 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
@@ -3005,7 +3005,6 @@ static double compute(double x) {
 
             hx  = __HI(x);  // high word of x
             xsb = hx & SIGN_BIT;                 // sign bit of x
-            y = Math.abs(x);
             hx &= EXP_SIGNIF_BITS;               // high word of |x|
 
             // filter out huge and non-finite argument
diff --git a/src/java.base/share/classes/java/lang/classfile/BufWriter.java b/src/java.base/share/classes/java/lang/classfile/BufWriter.java
index bab8ebda4b8..f178b6b2db0 100644
--- a/src/java.base/share/classes/java/lang/classfile/BufWriter.java
+++ b/src/java.base/share/classes/java/lang/classfile/BufWriter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024, 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
@@ -124,6 +124,7 @@ public sealed interface BufWriter
      * @param arr the byte array
      * @param start the offset within the byte array of the range
      * @param length the length of the range
+     * @throws IndexOutOfBoundsException if range is outside of the array bounds
      */
     void writeBytes(byte[] arr, int start, int length);
 
@@ -134,6 +135,7 @@ public sealed interface BufWriter
      * @param offset the offset at which to patch
      * @param size the size of the integer value being written, in bytes
      * @param value the integer value
+     * @throws IndexOutOfBoundsException if patched int is outside of bounds
      */
     void patchInt(int offset, int size, int value);
 
@@ -152,7 +154,7 @@ public sealed interface BufWriter
      * to the buffer
      *
      * @param entry the constant pool entry
-     * @throws NullPointerException if the entry is null
+     * @throws IllegalArgumentException if the entry has invalid index
      */
     void writeIndex(PoolEntry entry);
 
@@ -161,6 +163,7 @@ public sealed interface BufWriter
      * to the buffer, or zero if the entry is null
      *
      * @param entry the constant pool entry
+     * @throws IllegalArgumentException if the entry has invalid index
      */
     void writeIndexOrZero(PoolEntry entry);
 
@@ -180,6 +183,7 @@ public sealed interface BufWriter
      * entry in the list.
      *
      * @param list the list of entries
+     * @throws IllegalArgumentException if any entry has invalid index
      */
     void writeListIndices(List list);
 
@@ -199,6 +203,7 @@ public sealed interface BufWriter
      * @param array the byte array
      * @param bufferOffset the offset into the array at which to write the
      *                     contents of the buffer
+     * @throws IndexOutOfBoundsException if copying outside of the array bounds
      */
     void copyTo(byte[] array, int bufferOffset);
 }
diff --git a/src/java.base/share/classes/java/lang/constant/ClassDesc.java b/src/java.base/share/classes/java/lang/constant/ClassDesc.java
index 60adc7f1ab1..89be851dbf5 100644
--- a/src/java.base/share/classes/java/lang/constant/ClassDesc.java
+++ b/src/java.base/share/classes/java/lang/constant/ClassDesc.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2024, 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
@@ -158,19 +158,10 @@ static ClassDesc of(String packageName, String className) {
      * @see ClassDesc#ofInternalName(String)
      */
     static ClassDesc ofDescriptor(String descriptor) {
-        requireNonNull(descriptor);
-        if (descriptor.isEmpty()) {
-            throw new IllegalArgumentException(
-                    "not a valid reference type descriptor: " + descriptor);
-        }
-        int depth = ConstantUtils.arrayDepth(descriptor);
-        if (depth > ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS) {
-            throw new IllegalArgumentException(
-                    "Cannot create an array type descriptor with more than " +
-                    ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS + " dimensions");
-        }
+        // implicit null-check
         return (descriptor.length() == 1)
-               ? new PrimitiveClassDescImpl(descriptor)
+               ? Wrapper.forPrimitiveType(descriptor.charAt(0)).classDescriptor()
+               // will throw IAE on descriptor.length == 0 or if array dimensions too long
                : new ReferenceClassDescImpl(descriptor);
     }
 
@@ -279,7 +270,7 @@ default ClassDesc nested(String firstNestedName, String... moreNestedNames) {
      * @return whether this {@linkplain ClassDesc} describes an array type
      */
     default boolean isArray() {
-        return descriptorString().startsWith("[");
+        return descriptorString().charAt(0) == '[';
     }
 
     /**
@@ -297,7 +288,7 @@ default boolean isPrimitive() {
      * @return whether this {@linkplain ClassDesc} describes a class or interface type
      */
     default boolean isClassOrInterface() {
-        return descriptorString().startsWith("L");
+        return descriptorString().charAt(0) == 'L';
     }
 
     /**
diff --git a/src/java.base/share/classes/java/lang/constant/ConstantDescs.java b/src/java.base/share/classes/java/lang/constant/ConstantDescs.java
index 82f56b7cbd4..a67a16643c3 100644
--- a/src/java.base/share/classes/java/lang/constant/ConstantDescs.java
+++ b/src/java.base/share/classes/java/lang/constant/ConstantDescs.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2024, 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,125 +64,125 @@ private ConstantDescs() { }
     // Don't change the order of these declarations!
 
     /** {@link ClassDesc} representing {@link Object} */
-    public static final ClassDesc CD_Object = ClassDesc.of("java.lang.Object");
+    public static final ClassDesc CD_Object = new ReferenceClassDescImpl("Ljava/lang/Object;");
 
     /** {@link ClassDesc} representing {@link String} */
-    public static final ClassDesc CD_String = ClassDesc.of("java.lang.String");
+    public static final ClassDesc CD_String = new ReferenceClassDescImpl("Ljava/lang/String;");
 
     /** {@link ClassDesc} representing {@link Class} */
-    public static final ClassDesc CD_Class = ClassDesc.of("java.lang.Class");
+    public static final ClassDesc CD_Class = new ReferenceClassDescImpl("Ljava/lang/Class;");
 
     /** {@link ClassDesc} representing {@link Number} */
-    public static final ClassDesc CD_Number = ClassDesc.of("java.lang.Number");
+    public static final ClassDesc CD_Number = new ReferenceClassDescImpl("Ljava/lang/Number;");
 
     /** {@link ClassDesc} representing {@link Integer} */
-    public static final ClassDesc CD_Integer = ClassDesc.of("java.lang.Integer");
+    public static final ClassDesc CD_Integer = new ReferenceClassDescImpl("Ljava/lang/Integer;");
 
     /** {@link ClassDesc} representing {@link Long} */
-    public static final ClassDesc CD_Long = ClassDesc.of("java.lang.Long");
+    public static final ClassDesc CD_Long = new ReferenceClassDescImpl("Ljava/lang/Long;");
 
     /** {@link ClassDesc} representing {@link Float} */
-    public static final ClassDesc CD_Float = ClassDesc.of("java.lang.Float");
+    public static final ClassDesc CD_Float = new ReferenceClassDescImpl("Ljava/lang/Float;");
 
     /** {@link ClassDesc} representing {@link Double} */
-    public static final ClassDesc CD_Double = ClassDesc.of("java.lang.Double");
+    public static final ClassDesc CD_Double = new ReferenceClassDescImpl("Ljava/lang/Double;");
 
     /** {@link ClassDesc} representing {@link Short} */
-    public static final ClassDesc CD_Short = ClassDesc.of("java.lang.Short");
+    public static final ClassDesc CD_Short = new ReferenceClassDescImpl("Ljava/lang/Short;");
 
     /** {@link ClassDesc} representing {@link Byte} */
-    public static final ClassDesc CD_Byte = ClassDesc.of("java.lang.Byte");
+    public static final ClassDesc CD_Byte = new ReferenceClassDescImpl("Ljava/lang/Byte;");
 
     /** {@link ClassDesc} representing {@link Character} */
-    public static final ClassDesc CD_Character = ClassDesc.of("java.lang.Character");
+    public static final ClassDesc CD_Character = new ReferenceClassDescImpl("Ljava/lang/Character;");
 
     /** {@link ClassDesc} representing {@link Boolean} */
-    public static final ClassDesc CD_Boolean = ClassDesc.of("java.lang.Boolean");
+    public static final ClassDesc CD_Boolean = new ReferenceClassDescImpl("Ljava/lang/Boolean;");
 
     /** {@link ClassDesc} representing {@link Void} */
-    public static final ClassDesc CD_Void = ClassDesc.of("java.lang.Void");
+    public static final ClassDesc CD_Void = new ReferenceClassDescImpl("Ljava/lang/Void;");
 
     /** {@link ClassDesc} representing {@link Throwable} */
-    public static final ClassDesc CD_Throwable = ClassDesc.of("java.lang.Throwable");
+    public static final ClassDesc CD_Throwable = new ReferenceClassDescImpl("Ljava/lang/Throwable;");
 
     /** {@link ClassDesc} representing {@link Exception} */
-    public static final ClassDesc CD_Exception = ClassDesc.of("java.lang.Exception");
+    public static final ClassDesc CD_Exception = new ReferenceClassDescImpl("Ljava/lang/Exception;");
 
     /** {@link ClassDesc} representing {@link Enum} */
-    public static final ClassDesc CD_Enum = ClassDesc.of("java.lang.Enum");
+    public static final ClassDesc CD_Enum = new ReferenceClassDescImpl("Ljava/lang/Enum;");
 
     /** {@link ClassDesc} representing {@link VarHandle} */
-    public static final ClassDesc CD_VarHandle = ClassDesc.of("java.lang.invoke.VarHandle");
+    public static final ClassDesc CD_VarHandle = new ReferenceClassDescImpl("Ljava/lang/invoke/VarHandle;");
 
     /** {@link ClassDesc} representing {@link MethodHandles} */
-    public static final ClassDesc CD_MethodHandles = ClassDesc.of("java.lang.invoke.MethodHandles");
+    public static final ClassDesc CD_MethodHandles = new ReferenceClassDescImpl("Ljava/lang/invoke/MethodHandles;");
 
     /** {@link ClassDesc} representing {@link MethodHandles.Lookup} */
-    public static final ClassDesc CD_MethodHandles_Lookup = CD_MethodHandles.nested("Lookup");
+    public static final ClassDesc CD_MethodHandles_Lookup = new ReferenceClassDescImpl("Ljava/lang/invoke/MethodHandles$Lookup;");
 
     /** {@link ClassDesc} representing {@link MethodHandle} */
-    public static final ClassDesc CD_MethodHandle = ClassDesc.of("java.lang.invoke.MethodHandle");
+    public static final ClassDesc CD_MethodHandle = new ReferenceClassDescImpl("Ljava/lang/invoke/MethodHandle;");
 
     /** {@link ClassDesc} representing {@link MethodType} */
-    public static final ClassDesc CD_MethodType = ClassDesc.of("java.lang.invoke.MethodType");
+    public static final ClassDesc CD_MethodType = new ReferenceClassDescImpl("Ljava/lang/invoke/MethodType;");
 
     /** {@link ClassDesc} representing {@link CallSite} */
-    public static final ClassDesc CD_CallSite = ClassDesc.of("java.lang.invoke.CallSite");
+    public static final ClassDesc CD_CallSite = new ReferenceClassDescImpl("Ljava/lang/invoke/CallSite;");
 
     /** {@link ClassDesc} representing {@link Collection} */
-    public static final ClassDesc CD_Collection = ClassDesc.of("java.util.Collection");
+    public static final ClassDesc CD_Collection = new ReferenceClassDescImpl("Ljava/util/Collection;");
 
     /** {@link ClassDesc} representing {@link List} */
-    public static final ClassDesc CD_List = ClassDesc.of("java.util.List");
+    public static final ClassDesc CD_List = new ReferenceClassDescImpl("Ljava/util/List;");
 
     /** {@link ClassDesc} representing {@link Set} */
-    public static final ClassDesc CD_Set = ClassDesc.of("java.util.Set");
+    public static final ClassDesc CD_Set = new ReferenceClassDescImpl("Ljava/util/Set;");
 
     /** {@link ClassDesc} representing {@link Map} */
-    public static final ClassDesc CD_Map = ClassDesc.of("java.util.Map");
+    public static final ClassDesc CD_Map = new ReferenceClassDescImpl("Ljava/util/Map;");
 
     /** {@link ClassDesc} representing {@link ConstantDesc} */
-    public static final ClassDesc CD_ConstantDesc = ClassDesc.of("java.lang.constant.ConstantDesc");
+    public static final ClassDesc CD_ConstantDesc = new ReferenceClassDescImpl("Ljava/lang/constant/ConstantDesc;");
 
     /** {@link ClassDesc} representing {@link ClassDesc} */
-    public static final ClassDesc CD_ClassDesc = ClassDesc.of("java.lang.constant.ClassDesc");
+    public static final ClassDesc CD_ClassDesc = new ReferenceClassDescImpl("Ljava/lang/constant/ClassDesc;");
 
     /** {@link ClassDesc} representing {@link EnumDesc} */
-    public static final ClassDesc CD_EnumDesc = CD_Enum.nested("EnumDesc");
+    public static final ClassDesc CD_EnumDesc = new ReferenceClassDescImpl("Ljava/lang/Enum$EnumDesc;");
 
     /** {@link ClassDesc} representing {@link MethodTypeDesc} */
-    public static final ClassDesc CD_MethodTypeDesc = ClassDesc.of("java.lang.constant.MethodTypeDesc");
+    public static final ClassDesc CD_MethodTypeDesc = new ReferenceClassDescImpl("Ljava/lang/constant/MethodTypeDesc;");
 
     /** {@link ClassDesc} representing {@link MethodHandleDesc} */
-    public static final ClassDesc CD_MethodHandleDesc = ClassDesc.of("java.lang.constant.MethodHandleDesc");
+    public static final ClassDesc CD_MethodHandleDesc = new ReferenceClassDescImpl("Ljava/lang/constant/MethodHandleDesc;");
 
     /** {@link ClassDesc} representing {@link DirectMethodHandleDesc} */
-    public static final ClassDesc CD_DirectMethodHandleDesc = ClassDesc.of("java.lang.constant.DirectMethodHandleDesc");
+    public static final ClassDesc CD_DirectMethodHandleDesc = new ReferenceClassDescImpl("Ljava/lang/constant/DirectMethodHandleDesc;");
 
     /** {@link ClassDesc} representing {@link VarHandleDesc} */
-    public static final ClassDesc CD_VarHandleDesc = CD_VarHandle.nested("VarHandleDesc");
+    public static final ClassDesc CD_VarHandleDesc = new ReferenceClassDescImpl("Ljava/lang/invoke/VarHandle$VarHandleDesc;");
 
     /** {@link ClassDesc} representing {@link DirectMethodHandleDesc.Kind} */
-    public static final ClassDesc CD_MethodHandleDesc_Kind = CD_DirectMethodHandleDesc.nested("Kind");
+    public static final ClassDesc CD_MethodHandleDesc_Kind = new ReferenceClassDescImpl("Ljava/lang/constant/DirectMethodHandleDesc$Kind;");
 
     /** {@link ClassDesc} representing {@link DynamicConstantDesc} */
-    public static final ClassDesc CD_DynamicConstantDesc = ClassDesc.of("java.lang.constant.DynamicConstantDesc");
+    public static final ClassDesc CD_DynamicConstantDesc = new ReferenceClassDescImpl("Ljava/lang/constant/DynamicConstantDesc;");
 
     /** {@link ClassDesc} representing {@link DynamicCallSiteDesc} */
-    public static final ClassDesc CD_DynamicCallSiteDesc = ClassDesc.of("java.lang.constant.DynamicCallSiteDesc");
+    public static final ClassDesc CD_DynamicCallSiteDesc = new ReferenceClassDescImpl("Ljava/lang/constant/DynamicCallSiteDesc;");
 
     /** {@link ClassDesc} representing {@link ConstantBootstraps} */
-    public static final ClassDesc CD_ConstantBootstraps = ClassDesc.of("java.lang.invoke.ConstantBootstraps");
+    public static final ClassDesc CD_ConstantBootstraps = new ReferenceClassDescImpl("Ljava/lang/invoke/ConstantBootstraps;");
 
     private static final ClassDesc[] INDY_BOOTSTRAP_ARGS = {
-            ConstantDescs.CD_MethodHandles_Lookup,
-            ConstantDescs.CD_String,
-            ConstantDescs.CD_MethodType};
+            CD_MethodHandles_Lookup,
+            CD_String,
+            CD_MethodType};
 
     private static final ClassDesc[] CONDY_BOOTSTRAP_ARGS = {
-            ConstantDescs.CD_MethodHandles_Lookup,
-            ConstantDescs.CD_String,
-            ConstantDescs.CD_Class};
+            CD_MethodHandles_Lookup,
+            CD_String,
+            CD_Class};
 
     /** {@link MethodHandleDesc} representing {@link ConstantBootstraps#primitiveClass(Lookup, String, Class) ConstantBootstraps.primitiveClass} */
     public static final DirectMethodHandleDesc BSM_PRIMITIVE_CLASS
@@ -236,31 +236,31 @@ private ConstantDescs() { }
             CD_Object, CD_Object);
 
     /** {@link ClassDesc} representing the primitive type {@code int} */
-    public static final ClassDesc CD_int = ClassDesc.ofDescriptor("I");
+    public static final ClassDesc CD_int = new PrimitiveClassDescImpl("I");
 
     /** {@link ClassDesc} representing the primitive type {@code long} */
-    public static final ClassDesc CD_long = ClassDesc.ofDescriptor("J");
+    public static final ClassDesc CD_long = new PrimitiveClassDescImpl("J");
 
     /** {@link ClassDesc} representing the primitive type {@code float} */
-    public static final ClassDesc CD_float = ClassDesc.ofDescriptor("F");
+    public static final ClassDesc CD_float = new PrimitiveClassDescImpl("F");
 
     /** {@link ClassDesc} representing the primitive type {@code double} */
-    public static final ClassDesc CD_double = ClassDesc.ofDescriptor("D");
+    public static final ClassDesc CD_double = new PrimitiveClassDescImpl("D");
 
     /** {@link ClassDesc} representing the primitive type {@code short} */
-    public static final ClassDesc CD_short = ClassDesc.ofDescriptor("S");
+    public static final ClassDesc CD_short = new PrimitiveClassDescImpl("S");
 
     /** {@link ClassDesc} representing the primitive type {@code byte} */
-    public static final ClassDesc CD_byte = ClassDesc.ofDescriptor("B");
+    public static final ClassDesc CD_byte = new PrimitiveClassDescImpl("B");
 
     /** {@link ClassDesc} representing the primitive type {@code char} */
-    public static final ClassDesc CD_char = ClassDesc.ofDescriptor("C");
+    public static final ClassDesc CD_char = new PrimitiveClassDescImpl("C");
 
     /** {@link ClassDesc} representing the primitive type {@code boolean} */
-    public static final ClassDesc CD_boolean = ClassDesc.ofDescriptor("Z");
+    public static final ClassDesc CD_boolean = new PrimitiveClassDescImpl("Z");
 
     /** {@link ClassDesc} representing the primitive type {@code void} */
-    public static final ClassDesc CD_void = ClassDesc.ofDescriptor("V");
+    public static final ClassDesc CD_void = new PrimitiveClassDescImpl("V");
 
     /**
      * {@link MethodHandleDesc} representing {@link MethodHandles#classData(Lookup, String, Class) MethodHandles.classData}
diff --git a/src/java.base/share/classes/java/lang/constant/ConstantUtils.java b/src/java.base/share/classes/java/lang/constant/ConstantUtils.java
index 10ed2758e3a..d8a1ccd543b 100644
--- a/src/java.base/share/classes/java/lang/constant/ConstantUtils.java
+++ b/src/java.base/share/classes/java/lang/constant/ConstantUtils.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2024, 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
@@ -24,6 +24,8 @@
  */
 package java.lang.constant;
 
+import sun.invoke.util.Wrapper;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -144,7 +146,6 @@ public static String validateModuleName(String name) {
      * @throws IllegalArgumentException if the member name is invalid
      */
     public static String validateMemberName(String name, boolean method) {
-        requireNonNull(name);
         if (name.length() == 0)
             throw new IllegalArgumentException("zero-length member name");
         for (int i=0; i parseMethodDescriptor(String descriptor) {
+    static List parseMethodDescriptor(String descriptor) {
         int cur = 0, end = descriptor.length();
-        ArrayList ptypes = new ArrayList<>();
-        ptypes.add(null); //placeholder for return type
+        ArrayList ptypes = new ArrayList<>();
+        ptypes.add(null); // placeholder for return type
 
         if (cur >= end || descriptor.charAt(cur) != '(')
             throw new IllegalArgumentException("Bad method descriptor: " + descriptor);
@@ -208,7 +209,7 @@ static List parseMethodDescriptor(String descriptor) {
             int len = skipOverFieldSignature(descriptor, cur, end, false);
             if (len == 0)
                 throw new IllegalArgumentException("Bad method descriptor: " + descriptor);
-            ptypes.add(descriptor.substring(cur, cur + len));
+            ptypes.add(resolveClassDesc(descriptor, cur, len));
             cur += len;
         }
         if (cur >= end)
@@ -218,10 +219,17 @@ static List parseMethodDescriptor(String descriptor) {
         int rLen = skipOverFieldSignature(descriptor, cur, end, true);
         if (rLen == 0 || cur + rLen != end)
             throw new IllegalArgumentException("Bad method descriptor: " + descriptor);
-        ptypes.set(0, descriptor.substring(cur, cur + rLen));
+        ptypes.set(0, resolveClassDesc(descriptor, cur, rLen));
         return ptypes;
     }
 
+    private static ClassDesc resolveClassDesc(String descriptor, int start, int len) {
+        if (len == 1) {
+            return Wrapper.forPrimitiveType(descriptor.charAt(start)).classDescriptor();
+        }
+        return ClassDesc.ofDescriptor(descriptor.substring(start, start + len));
+    }
+
     private static final char JVM_SIGNATURE_ARRAY = '[';
     private static final char JVM_SIGNATURE_BYTE = 'B';
     private static final char JVM_SIGNATURE_CHAR = 'C';
diff --git a/src/java.base/share/classes/java/lang/constant/DirectMethodHandleDescImpl.java b/src/java.base/share/classes/java/lang/constant/DirectMethodHandleDescImpl.java
index 77f61d83133..47aa3dc36d2 100644
--- a/src/java.base/share/classes/java/lang/constant/DirectMethodHandleDescImpl.java
+++ b/src/java.base/share/classes/java/lang/constant/DirectMethodHandleDescImpl.java
@@ -67,8 +67,8 @@ final class DirectMethodHandleDescImpl implements DirectMethodHandleDesc {
             name = "";
 
         requireNonNull(kind);
-        validateClassOrInterface(requireNonNull(owner));
-        validateMemberName(requireNonNull(name), true);
+        validateClassOrInterface(owner);
+        validateMemberName(name, true);
         requireNonNull(type);
 
         switch (kind) {
diff --git a/src/java.base/share/classes/java/lang/constant/DynamicConstantDesc.java b/src/java.base/share/classes/java/lang/constant/DynamicConstantDesc.java
index bf6ae2670b1..180841cd798 100644
--- a/src/java.base/share/classes/java/lang/constant/DynamicConstantDesc.java
+++ b/src/java.base/share/classes/java/lang/constant/DynamicConstantDesc.java
@@ -87,12 +87,9 @@ protected DynamicConstantDesc(DirectMethodHandleDesc bootstrapMethod,
                                   ClassDesc constantType,
                                   ConstantDesc... bootstrapArgs) {
         this.bootstrapMethod = requireNonNull(bootstrapMethod);
-        this.constantName = validateMemberName(requireNonNull(constantName), true);
+        this.constantName = validateMemberName(constantName, true);
         this.constantType = requireNonNull(constantType);
-        this.bootstrapArgs = requireNonNull(bootstrapArgs).clone();
-
-        if (constantName.length() == 0)
-            throw new IllegalArgumentException("Illegal invocation name: " + constantName);
+        this.bootstrapArgs = bootstrapArgs.length == 0 ? EMPTY_CONSTANTDESC : bootstrapArgs.clone();
     }
 
     /**
diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
index c50cf7c58f0..7ee0995439a 100644
--- a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
+++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2024, 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
@@ -33,7 +33,6 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
-import java.util.StringJoiner;
 
 import static java.util.Objects.requireNonNull;
 
@@ -55,8 +54,8 @@ final class MethodTypeDescImpl implements MethodTypeDesc {
      * @param validatedArgTypes {@link ClassDesc}s describing the trusted and validated parameter types
      */
     private MethodTypeDescImpl(ClassDesc returnType, ClassDesc[] validatedArgTypes) {
-        this.returnType = requireNonNull(returnType);
-        this.argTypes = requireNonNull(validatedArgTypes);
+        this.returnType = returnType;
+        this.argTypes = validatedArgTypes;
     }
 
     /**
@@ -67,12 +66,12 @@ private MethodTypeDescImpl(ClassDesc returnType, ClassDesc[] validatedArgTypes)
      * @param trustedArgTypes {@link ClassDesc}s describing the trusted parameter types
      */
     static MethodTypeDescImpl ofTrusted(ClassDesc returnType, ClassDesc[] trustedArgTypes) {
-        Objects.requireNonNull(returnType);
+        requireNonNull(returnType);
         if (trustedArgTypes.length == 0) // implicit null check
             return new MethodTypeDescImpl(returnType, ConstantUtils.EMPTY_CLASSDESC);
 
         for (ClassDesc cd : trustedArgTypes)
-            if (cd.isPrimitive() && cd.descriptorString().charAt(0) == 'V') // implicit null check
+            if (cd.descriptorString().charAt(0) == 'V') // implicit null check
                 throw new IllegalArgumentException("Void parameters not permitted");
 
         return new MethodTypeDescImpl(returnType, trustedArgTypes);
@@ -88,21 +87,19 @@ static MethodTypeDescImpl ofTrusted(ClassDesc returnType, ClassDesc[] trustedArg
      * @jvms 4.3.3 Method Descriptors
      */
     static MethodTypeDescImpl ofDescriptor(String descriptor) {
-        requireNonNull(descriptor);
-
-        List types = ConstantUtils.parseMethodDescriptor(descriptor);
-
-        int paramCount = types.size() - 1;
-        var paramTypes = paramCount > 0 ? new ClassDesc[paramCount] : ConstantUtils.EMPTY_CLASSDESC;
-        for (int i = 0; i < paramCount; i++) {
-            paramTypes[i] = ClassDesc.ofDescriptor(types.get(i + 1));
-        }
-
-        MethodTypeDescImpl result = ofTrusted(ClassDesc.ofDescriptor(types.getFirst()), paramTypes);
+        // Implicit null-check of descriptor
+        List ptypes = ConstantUtils.parseMethodDescriptor(descriptor);
+        int args = ptypes.size() - 1;
+        ClassDesc[] paramTypes = args > 0
+                ? ptypes.subList(1, args + 1).toArray(ConstantUtils.EMPTY_CLASSDESC)
+                : ConstantUtils.EMPTY_CLASSDESC;
+
+        MethodTypeDescImpl result = ofTrusted(ptypes.get(0), paramTypes);
         result.cachedDescriptorString = descriptor;
         return result;
     }
 
+
     @Override
     public ClassDesc returnType() {
         return returnType;
@@ -130,7 +127,7 @@ public ClassDesc[] parameterArray() {
 
     @Override
     public MethodTypeDesc changeReturnType(ClassDesc returnType) {
-        return new MethodTypeDescImpl(returnType, argTypes);
+        return new MethodTypeDescImpl(requireNonNull(returnType), argTypes);
     }
 
     @Override
@@ -146,8 +143,12 @@ public MethodTypeDesc dropParameterTypes(int start, int end) {
         Objects.checkFromToIndex(start, end, argTypes.length);
 
         ClassDesc[] newArgs = new ClassDesc[argTypes.length - (end - start)];
-        System.arraycopy(argTypes, 0, newArgs, 0, start);
-        System.arraycopy(argTypes, end, newArgs, start, argTypes.length - end);
+        if (start > 0) {
+            System.arraycopy(argTypes, 0, newArgs, 0, start);
+        }
+        if (end < argTypes.length) {
+            System.arraycopy(argTypes, end, newArgs, start, argTypes.length - end);
+        }
         return ofTrusted(returnType, newArgs);
     }
 
@@ -157,10 +158,13 @@ public MethodTypeDesc insertParameterTypes(int pos, ClassDesc... paramTypes) {
             throw new IndexOutOfBoundsException(pos);
 
         ClassDesc[] newArgs = new ClassDesc[argTypes.length + paramTypes.length];
-        System.arraycopy(argTypes, 0, newArgs, 0, pos);
+        if (pos > 0) {
+            System.arraycopy(argTypes, 0, newArgs, 0, pos);
+        }
         System.arraycopy(paramTypes, 0, newArgs, pos, paramTypes.length);
-        System.arraycopy(argTypes, pos, newArgs, pos+paramTypes.length, argTypes.length - pos);
-
+        if (pos < argTypes.length) {
+            System.arraycopy(argTypes, pos, newArgs, pos + paramTypes.length, argTypes.length - pos);
+        }
         return ofTrusted(returnType, newArgs);
     }
 
@@ -170,11 +174,17 @@ public String descriptorString() {
         if (desc != null)
             return desc;
 
-        var sj = new StringJoiner("", "(", ")" + returnType().descriptorString());
-        for (int i = 0; i < parameterCount(); i++) {
-            sj.add(parameterType(i).descriptorString());
+        int len = 2 + returnType.descriptorString().length();
+        for (ClassDesc argType : argTypes) {
+            len += argType.descriptorString().length();
+        }
+        StringBuilder sb = new StringBuilder(len).append('(');
+        for (ClassDesc argType : argTypes) {
+            sb.append(argType.descriptorString());
         }
-        return cachedDescriptorString = sj.toString();
+        desc = sb.append(')').append(returnType.descriptorString()).toString();
+        cachedDescriptorString = desc;
+        return desc;
     }
 
     @Override
diff --git a/src/java.base/share/classes/java/lang/constant/ReferenceClassDescImpl.java b/src/java.base/share/classes/java/lang/constant/ReferenceClassDescImpl.java
index 4cc77b1851d..5e2aaa98442 100644
--- a/src/java.base/share/classes/java/lang/constant/ReferenceClassDescImpl.java
+++ b/src/java.base/share/classes/java/lang/constant/ReferenceClassDescImpl.java
@@ -47,10 +47,9 @@ final class ReferenceClassDescImpl implements ClassDesc {
      * @jvms 4.3.2 Field Descriptors
      */
     ReferenceClassDescImpl(String descriptor) {
-        requireNonNull(descriptor);
-        int len = ConstantUtils.skipOverFieldSignature(descriptor, 0, descriptor.length(), false);
-        if (len == 0 || len == 1
-            || len != descriptor.length())
+        int dLen = descriptor.length();
+        int len = ConstantUtils.skipOverFieldSignature(descriptor, 0, dLen, false);
+        if (len <= 1 || len != dLen)
             throw new IllegalArgumentException(String.format("not a valid reference type descriptor: %s", descriptor));
         this.descriptor = descriptor;
     }
diff --git a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
index b918b756332..cd2f7ec170a 100644
--- a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
+++ b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2024, 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
@@ -27,16 +27,25 @@
 
 import jdk.internal.access.JavaLangAccess;
 import jdk.internal.access.SharedSecrets;
-import jdk.internal.javac.PreviewFeature;
+import jdk.internal.misc.VM;
+import jdk.internal.util.ClassFileDumper;
 import jdk.internal.vm.annotation.Stable;
 import sun.invoke.util.Wrapper;
 
+import java.lang.classfile.ClassBuilder;
+import java.lang.classfile.ClassFile;
+import java.lang.classfile.CodeBuilder;
+import java.lang.classfile.TypeKind;
+import java.lang.constant.ClassDesc;
+import java.lang.constant.ConstantDescs;
+import java.lang.constant.MethodTypeDesc;
 import java.lang.invoke.MethodHandles.Lookup;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.lang.reflect.AccessFlag;
 import java.util.Objects;
+import java.util.Set;
+import java.util.function.Consumer;
 
+import static java.lang.invoke.MethodHandles.Lookup.ClassOption.STRONG;
 import static java.lang.invoke.MethodType.methodType;
 
 /**
@@ -98,6 +107,13 @@
  */
 public final class StringConcatFactory {
 
+    private static final int HIGH_ARITY_THRESHOLD;
+
+    static {
+        String highArity = VM.getSavedProperty("java.lang.invoke.StringConcat.highArityThreshold");
+        HIGH_ARITY_THRESHOLD = highArity != null ? Integer.parseInt(highArity) : 20;
+    }
+
     /**
      * Tag used to demarcate an ordinary argument.
      */
@@ -354,9 +370,14 @@ public static CallSite makeConcatWithConstants(MethodHandles.Lookup lookup,
         }
 
         try {
-            return new ConstantCallSite(
-                    generateMHInlineCopy(concatType, constantStrings)
-                            .viewAsType(concatType, true));
+            if (concatType.parameterCount() <= HIGH_ARITY_THRESHOLD) {
+                return new ConstantCallSite(
+                        generateMHInlineCopy(concatType, constantStrings)
+                                .viewAsType(concatType, true));
+            } else {
+                return new ConstantCallSite(
+                        SimpleStringBuilderStrategy.generate(lookup, concatType, constantStrings));
+            }
         } catch (Error e) {
             // Pass through any error
             throw e;
@@ -1032,4 +1053,140 @@ private StringConcatFactory() {
         // no instantiation
     }
 
+    /**
+     * Bytecode StringBuilder strategy.
+     *
+     * 

This strategy emits StringBuilder chains as similar as possible + * to what javac would. No exact sizing of parameters or estimates. + */ + private static final class SimpleStringBuilderStrategy { + static final String METHOD_NAME = "concat"; + static final ClassDesc STRING_BUILDER = ClassDesc.ofDescriptor("Ljava/lang/StringBuilder;"); + static final ClassFileDumper DUMPER = + ClassFileDumper.getInstance("java.lang.invoke.StringConcatFactory.dump", "stringConcatClasses"); + static final MethodTypeDesc APPEND_BOOLEAN_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_boolean); + static final MethodTypeDesc APPEND_CHAR_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_char); + static final MethodTypeDesc APPEND_DOUBLE_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_double); + static final MethodTypeDesc APPEND_FLOAT_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_float); + static final MethodTypeDesc APPEND_INT_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_int); + static final MethodTypeDesc APPEND_LONG_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_long); + static final MethodTypeDesc APPEND_OBJECT_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_Object); + static final MethodTypeDesc APPEND_STRING_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_String); + static final MethodTypeDesc INT_CONSTRUCTOR_TYPE = MethodTypeDesc.of(ConstantDescs.CD_void, ConstantDescs.CD_int); + static final MethodTypeDesc TO_STRING_TYPE = MethodTypeDesc.of(ConstantDescs.CD_String); + + /** + * Ensure a capacity in the initial StringBuilder to accommodate all + * constants plus this factor times the number of arguments. + */ + static final int ARGUMENT_SIZE_FACTOR = 4; + + static final Set SET_OF_STRONG = Set.of(STRONG); + + private SimpleStringBuilderStrategy() { + // no instantiation + } + + private static MethodHandle generate(Lookup lookup, MethodType args, String[] constants) throws Exception { + String className = getClassName(lookup.lookupClass()); + + byte[] classBytes = ClassFile.of().build(ClassDesc.of(className), + new Consumer() { + @Override + public void accept(ClassBuilder clb) { + clb.withFlags(AccessFlag.FINAL, AccessFlag.SUPER, AccessFlag.SYNTHETIC) + .withMethodBody(METHOD_NAME, + MethodTypeDesc.ofDescriptor(args.toMethodDescriptorString()), + ClassFile.ACC_FINAL | ClassFile.ACC_PRIVATE | ClassFile.ACC_STATIC, + generateMethod(constants, args)); + }}); + try { + Lookup hiddenLookup = lookup.makeHiddenClassDefiner(className, classBytes, SET_OF_STRONG, DUMPER) + .defineClassAsLookup(true); + Class innerClass = hiddenLookup.lookupClass(); + return hiddenLookup.findStatic(innerClass, METHOD_NAME, args); + } catch (Exception e) { + throw new StringConcatException("Exception while spinning the class", e); + } + } + + private static Consumer generateMethod(String[] constants, MethodType args) { + return new Consumer() { + @Override + public void accept(CodeBuilder cb) { + cb.new_(STRING_BUILDER); + cb.dup(); + + int len = 0; + for (String constant : constants) { + if (constant != null) { + len += constant.length(); + } + } + len += args.parameterCount() * ARGUMENT_SIZE_FACTOR; + cb.constantInstruction(len); + cb.invokespecial(STRING_BUILDER, "", INT_CONSTRUCTOR_TYPE); + + // At this point, we have a blank StringBuilder on stack, fill it in with .append calls. + { + int off = 0; + for (int c = 0; c < args.parameterCount(); c++) { + if (constants[c] != null) { + cb.ldc(constants[c]); + cb.invokevirtual(STRING_BUILDER, "append", APPEND_STRING_TYPE); + } + Class cl = args.parameterType(c); + TypeKind kind = TypeKind.from(cl); + cb.loadInstruction(kind, off); + off += kind.slotSize(); + MethodTypeDesc desc = getSBAppendDesc(cl); + cb.invokevirtual(STRING_BUILDER, "append", desc); + } + if (constants[constants.length - 1] != null) { + cb.ldc(constants[constants.length - 1]); + cb.invokevirtual(STRING_BUILDER, "append", APPEND_STRING_TYPE); + } + } + + cb.invokevirtual(STRING_BUILDER, "toString", TO_STRING_TYPE); + cb.areturn(); + } + }; + } + + /** + * The generated class is in the same package as the host class as + * it's the implementation of the string concatenation for the host + * class. + */ + private static String getClassName(Class hostClass) { + String name = hostClass.isHidden() ? hostClass.getName().replace('/', '_') + : hostClass.getName(); + return name + "$$StringConcat"; + } + + private static MethodTypeDesc getSBAppendDesc(Class cl) { + if (cl.isPrimitive()) { + if (cl == Integer.TYPE || cl == Byte.TYPE || cl == Short.TYPE) { + return APPEND_INT_TYPE; + } else if (cl == Boolean.TYPE) { + return APPEND_BOOLEAN_TYPE; + } else if (cl == Character.TYPE) { + return APPEND_CHAR_TYPE; + } else if (cl == Double.TYPE) { + return APPEND_DOUBLE_TYPE; + } else if (cl == Float.TYPE) { + return APPEND_FLOAT_TYPE; + } else if (cl == Long.TYPE) { + return APPEND_LONG_TYPE; + } else { + throw new IllegalStateException("Unhandled primitive StringBuilder.append: " + cl); + } + } else if (cl == String.class) { + return APPEND_STRING_TYPE; + } else { + return APPEND_OBJECT_TYPE; + } + } + } } diff --git a/src/java.base/share/classes/java/text/DateFormat.java b/src/java.base/share/classes/java/text/DateFormat.java index d7a4b5a39b7..a67ba676836 100644 --- a/src/java.base/share/classes/java/text/DateFormat.java +++ b/src/java.base/share/classes/java/text/DateFormat.java @@ -407,7 +407,8 @@ public Date parse(String source) throws ParseException /** * Parse a date/time string according to the given parse position. For - * example, a time text {@code "07/10/96 4:5 PM, PDT"} will be parsed into a {@code Date} + * example, if {@code this} has the pattern {@code "M/d/yy h:m a, z"}, + * then a time text {@code "07/10/96 4:5 PM, PDT"} will be parsed into a {@code Date} * that is equivalent to {@code Date(837039900000L)}. * *

By default, parsing is lenient: If the input is not in the form used diff --git a/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java b/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java index f45c0036230..1b1ba4b29a0 100644 --- a/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java +++ b/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java @@ -117,6 +117,7 @@ protected RunnableFuture newTaskFor(Callable callable) { * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ + @Override public Future submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task, null); @@ -128,6 +129,7 @@ public Future submit(Runnable task) { * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ + @Override public Future submit(Runnable task, T result) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task, result); @@ -139,6 +141,7 @@ public Future submit(Runnable task, T result) { * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ + @Override public Future submit(Callable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task); @@ -219,6 +222,14 @@ else if (timed) { } } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws IllegalArgumentException {@inheritDoc} + * @throws ExecutionException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public T invokeAny(Collection> tasks) throws InterruptedException, ExecutionException { try { @@ -229,12 +240,26 @@ public T invokeAny(Collection> tasks) } } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws TimeoutException {@inheritDoc} + * @throws ExecutionException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public T invokeAny(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return doInvokeAny(tasks, true, unit.toNanos(timeout)); } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public List> invokeAll(Collection> tasks) throws InterruptedException { if (tasks == null) @@ -260,6 +285,12 @@ public List> invokeAll(Collection> tasks) } } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException { diff --git a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java index 86aa580b619..2bf0c711cfe 100644 --- a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java +++ b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java @@ -159,6 +159,8 @@ * CLDR version * * + * JDK 23 + * CLDR 45 * JDK 22 * CLDR 44 * JDK 21 diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java index 9b6c7d7ad4c..2022f8f0154 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java @@ -150,7 +150,7 @@ public int flags() { @Override public ClassEntry thisClassEntry() { if (thisClass == null) { - thisClass = readEntry(thisClassPos, ClassEntry.class); + thisClass = readClassEntry(thisClassPos); } return thisClass; } @@ -339,6 +339,10 @@ void writeConstantPoolEntries(BufWriter buf) { // Constantpool @Override public PoolEntry entryByIndex(int index) { + return entryByIndex(index, 0, 0xff); + } + + private PoolEntry entryByIndex(int index, int lowerBoundTag, int upperBoundTag) { if (index <= 0 || index >= constantPoolCount) { throw new ConstantPoolException("Bad CP index: " + index); } @@ -349,6 +353,10 @@ public PoolEntry entryByIndex(int index) { throw new ConstantPoolException("Unusable CP index: " + index); } int tag = readU1(offset); + if (tag < lowerBoundTag || tag > upperBoundTag) { + throw new ConstantPoolException( + "Bad tag (" + tag + ") at index (" + index + ") position (" + offset + ")"); + } final int q = offset + 1; info = switch (tag) { case TAG_UTF8 -> new AbstractPoolEntry.Utf8EntryImpl(this, index, buffer, q + 2, readU2(q)); @@ -367,7 +375,7 @@ public PoolEntry entryByIndex(int index) { case TAG_NAMEANDTYPE -> new AbstractPoolEntry.NameAndTypeEntryImpl(this, index, (AbstractPoolEntry.Utf8EntryImpl) readUtf8Entry(q), (AbstractPoolEntry.Utf8EntryImpl) readUtf8Entry(q + 2)); case TAG_METHODHANDLE -> new AbstractPoolEntry.MethodHandleEntryImpl(this, index, readU1(q), - (AbstractPoolEntry.AbstractMemberRefEntry) readEntry(q + 1)); + readEntry(q + 1, AbstractPoolEntry.AbstractMemberRefEntry.class, TAG_FIELDREF, TAG_INTERFACEMETHODREF)); case TAG_METHODTYPE -> new AbstractPoolEntry.MethodTypeEntryImpl(this, index, (AbstractPoolEntry.Utf8EntryImpl) readUtf8Entry(q)); case TAG_CONSTANTDYNAMIC -> new AbstractPoolEntry.ConstantDynamicEntryImpl(this, index, readU2(q), (AbstractPoolEntry.NameAndTypeEntryImpl) readNameAndTypeEntry(q + 2)); case TAG_INVOKEDYNAMIC -> new AbstractPoolEntry.InvokeDynamicEntryImpl(this, index, readU2(q), (AbstractPoolEntry.NameAndTypeEntryImpl) readNameAndTypeEntry(q + 2)); @@ -423,7 +431,15 @@ public PoolEntry readEntry(int pos) { @Override public T readEntry(int pos, Class cls) { - var e = readEntry(pos); + return readEntry(pos, cls, 0, 0xff); + } + + private T readEntry(int pos, Class cls, int expectedTag) { + return readEntry(pos, cls, expectedTag, expectedTag); + } + + private T readEntry(int pos, Class cls, int lowerBoundTag, int upperBoundTag) { + var e = entryByIndex(readU2(pos), lowerBoundTag, upperBoundTag); if (cls.isInstance(e)) return cls.cast(e); throw new ConstantPoolException("Not a " + cls.getSimpleName() + " at index: " + readU2(pos)); } @@ -454,27 +470,27 @@ public Utf8Entry readUtf8EntryOrNull(int pos) { @Override public ModuleEntry readModuleEntry(int pos) { - return readEntry(pos, ModuleEntry.class); + return readEntry(pos, ModuleEntry.class, TAG_MODULE); } @Override public PackageEntry readPackageEntry(int pos) { - return readEntry(pos, PackageEntry.class); + return readEntry(pos, PackageEntry.class, TAG_PACKAGE); } @Override public ClassEntry readClassEntry(int pos) { - return readEntry(pos, ClassEntry.class); + return readEntry(pos, ClassEntry.class, TAG_CLASS); } @Override public NameAndTypeEntry readNameAndTypeEntry(int pos) { - return readEntry(pos, NameAndTypeEntry.class); + return readEntry(pos, NameAndTypeEntry.class, TAG_NAMEANDTYPE); } @Override public MethodHandleEntry readMethodHandleEntry(int pos) { - return readEntry(pos, MethodHandleEntry.class); + return readEntry(pos, MethodHandleEntry.class, TAG_METHODHANDLE); } @Override diff --git a/src/java.base/share/classes/jdk/internal/event/FileForceEvent.java b/src/java.base/share/classes/jdk/internal/event/FileForceEvent.java new file mode 100644 index 00000000000..f6dec6c8a5e --- /dev/null +++ b/src/java.base/share/classes/jdk/internal/event/FileForceEvent.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2024, 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. + */ + +package jdk.internal.event; + +/** + * A JFR event for forced updates written to files. This event is mirrored in + * {@code jdk.jfr.events.FileForceEvent } where the event annotations are + * provided. Some of the methods are replaced by generated + * methods when jfr is enabled. Note that the order of the arguments of the + * {@link #commit(long, long, String, boolean)} method + * must be the same as the order of the fields. + */ +public class FileForceEvent extends Event { + + // THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT! + // The order must match the argument order of the generated commit method. + public String path; + public boolean metaData; + + /** + * Helper method to offer the data needed to potentially commit an event. + * The duration of the operation is computed using the current + * timestamp and the given start time. If the duration is meets + * or exceeds the configured value (determined by calling the generated method + * {@link #shouldCommit(long)}), an event will be emitted by calling + * {@link #commit(long, long, String, boolean)}. + * + * @param start timestamp of the start of the operation + * @param path the full pathname of the file + * @param metaData true if the file metadata is updated + */ + public static void offer(long start, String path, boolean metaData) { + long duration = timestamp() - start; + if (shouldCommit(duration)) { + commit(start, duration, path, metaData); + } + } + + /** + * Actually commit an event. The implementation is generated automatically. + * The order of the fields must be the same as the parameters in this method. + * + * @param start timestamp of the start of the operation + * @param duration time in nanoseconds to complete the operation + * @param path the full pathname of the file + * @param metaData true if the file metadata is updated + */ + public static void commit(long start, long duration, String path, boolean metaData) { + // Generated by JFR + } + + /** + * Determine if an event should be emitted. The duration of the operation + * must exceed some threshold in order to commit the event. The implementation + * of this method is generated automatically if jfr is enabled. + * + * @param duration time in nanoseconds to complete the operation + * @return true if the event should be commited + */ + public static boolean shouldCommit(long duration) { + // Generated by JFR + return false; + } + + /** + * Determine if this kind of event is enabled. The implementation + * of this method is generated automatically if jfr is enabled. + * + * @return true if this type of event is enabled, false otherwise + */ + public static boolean enabled() { + // Generated by JFR + return false; + } + + /** + * Fetch the current timestamp in nanoseconds. This method is used + * to determine the start and end of an operation. The implementation + * of this method is generated automatically if jfr is enabled. + * + * @return the current timestamp value + */ + public static long timestamp() { + // Generated by JFR + return 0L; + } +} diff --git a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java index c24a58f0230..cfccff7dd93 100644 --- a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java +++ b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java @@ -79,7 +79,7 @@ public enum Feature { STRUCTURED_CONCURRENCY, @JEP(number=466, title="ClassFile API", status="Second Preview") CLASSFILE_API, - @JEP(number=461, title="Stream Gatherers", status="Preview") + @JEP(number=473, title="Stream Gatherers", status="Second Preview") STREAM_GATHERERS, LANGUAGE_MODEL, /** diff --git a/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java b/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java index 61be28519fc..8f8ea651d65 100644 --- a/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java +++ b/src/java.base/share/classes/jdk/internal/util/ArraysSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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 @@ -200,7 +200,7 @@ public static int vectorizedMismatch(Object a, long aOffset, public static int vectorizedHashCode(Object array, int fromIndex, int length, int initialValue, int basicType) { return switch (basicType) { - case T_BOOLEAN -> signedHashCode(initialValue, (byte[]) array, fromIndex, length); + case T_BOOLEAN -> unsignedHashCode(initialValue, (byte[]) array, fromIndex, length); case T_CHAR -> array instanceof byte[] ? utf16hashCode(initialValue, (byte[]) array, fromIndex, length) : hashCode(initialValue, (char[]) array, fromIndex, length); @@ -211,7 +211,7 @@ public static int vectorizedHashCode(Object array, int fromIndex, int length, in }; } - private static int signedHashCode(int result, byte[] a, int fromIndex, int length) { + private static int unsignedHashCode(int result, byte[] a, int fromIndex, int length) { int end = fromIndex + length; for (int i = fromIndex; i < end; i++) { result = 31 * result + (a[i] & 0xff); diff --git a/src/java.base/share/classes/sun/invoke/util/Wrapper.java b/src/java.base/share/classes/sun/invoke/util/Wrapper.java index 76aede09487..fef9192932d 100644 --- a/src/java.base/share/classes/sun/invoke/util/Wrapper.java +++ b/src/java.base/share/classes/sun/invoke/util/Wrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -25,25 +25,27 @@ package sun.invoke.util; -import java.util.Map; import static sun.invoke.util.Wrapper.NumericClasses.*; import jdk.internal.vm.annotation.DontInline; +import java.lang.constant.ClassDesc; +import java.lang.constant.ConstantDescs; + public enum Wrapper { - // wrapperType simple primitiveType simple char emptyArray format numericClass superClass - BOOLEAN( Boolean.class, "Boolean", boolean.class, "boolean", 'Z', new boolean[0], Format.unsigned( 1), 0, 0), + // wrapperType simple primitiveType simple char emptyArray format numericClass superClass classDescriptor + BOOLEAN( Boolean.class, "Boolean", boolean.class, "boolean", 'Z', new boolean[0], Format.unsigned( 1), 0, 0, ConstantDescs.CD_boolean), // These must be in the order defined for widening primitive conversions in JLS 5.1.2 // Avoid boxing integral types here to defer initialization of internal caches - BYTE ( Byte.class, "Byte", byte.class, "byte", 'B', new byte[0], Format.signed( 8), BYTE_CLASS, BYTE_SUPERCLASSES), - SHORT ( Short.class, "Short", short.class, "short", 'S', new short[0], Format.signed( 16), SHORT_CLASS, SHORT_SUPERCLASSES), - CHAR (Character.class, "Character", char.class, "char", 'C', new char[0], Format.unsigned(16), CHAR_CLASS, CHAR_SUPERCLASSES), - INT ( Integer.class, "Integer", int.class, "int", 'I', new int[0], Format.signed( 32), INT_CLASS, INT_SUPERCLASSES), - LONG ( Long.class, "Long", long.class, "long", 'J', new long[0], Format.signed( 64), LONG_CLASS, LONG_SUPERCLASSES), - FLOAT ( Float.class, "Float", float.class, "float", 'F', new float[0], Format.floating(32), FLOAT_CLASS, FLOAT_SUPERCLASSES), - DOUBLE ( Double.class, "Double", double.class, "double", 'D', new double[0], Format.floating(64), DOUBLE_CLASS, DOUBLE_CLASS), - OBJECT ( Object.class, "Object", Object.class, "Object", 'L', new Object[0], Format.other( 1), 0, 0), + BYTE ( Byte.class, "Byte", byte.class, "byte", 'B', new byte[0], Format.signed( 8), BYTE_CLASS, BYTE_SUPERCLASSES, ConstantDescs.CD_byte), + SHORT ( Short.class, "Short", short.class, "short", 'S', new short[0], Format.signed( 16), SHORT_CLASS, SHORT_SUPERCLASSES, ConstantDescs.CD_short), + CHAR (Character.class, "Character", char.class, "char", 'C', new char[0], Format.unsigned(16), CHAR_CLASS, CHAR_SUPERCLASSES, ConstantDescs.CD_char), + INT ( Integer.class, "Integer", int.class, "int", 'I', new int[0], Format.signed( 32), INT_CLASS, INT_SUPERCLASSES, ConstantDescs.CD_int), + LONG ( Long.class, "Long", long.class, "long", 'J', new long[0], Format.signed( 64), LONG_CLASS, LONG_SUPERCLASSES, ConstantDescs.CD_long), + FLOAT ( Float.class, "Float", float.class, "float", 'F', new float[0], Format.floating(32), FLOAT_CLASS, FLOAT_SUPERCLASSES, ConstantDescs.CD_float), + DOUBLE ( Double.class, "Double", double.class, "double", 'D', new double[0], Format.floating(64), DOUBLE_CLASS, DOUBLE_CLASS, ConstantDescs.CD_double), + OBJECT ( Object.class, "Object", Object.class, "Object", 'L', new Object[0], Format.other( 1), 0, 0, ConstantDescs.CD_Object), // VOID must be the last type, since it is "assignable" from any other type: - VOID ( Void.class, "Void", void.class, "void", 'V', null, Format.other( 0), 0, 0), + VOID ( Void.class, "Void", void.class, "void", 'V', null, Format.other( 0), 0, 0, ConstantDescs.CD_void), ; public static final int COUNT = 10; @@ -58,8 +60,18 @@ public enum Wrapper { private final int superClasses; private final String wrapperSimpleName; private final String primitiveSimpleName; - - private Wrapper(Class wtype, String wtypeName, Class ptype, String ptypeName, char tchar, Object emptyArray, int format, int numericClass, int superClasses) { + private final ClassDesc classDesc; + + private Wrapper(Class wtype, + String wtypeName, + Class ptype, + String ptypeName, + char tchar, + Object emptyArray, + int format, + int numericClass, + int superClasses, + ClassDesc classDesc) { this.wrapperType = wtype; this.primitiveType = ptype; this.basicTypeChar = tchar; @@ -70,6 +82,7 @@ private Wrapper(Class wtype, String wtypeName, Class ptype, String ptypeNa this.superClasses = superClasses; this.wrapperSimpleName = wtypeName; this.primitiveSimpleName = ptypeName; + this.classDesc = classDesc; } /** For debugging, give the details of this wrapper. */ @@ -376,6 +389,9 @@ public static Wrapper forBasicType(Class type) { } } + /** A nominal descriptor of the wrapped type */ + public ClassDesc classDescriptor() { return classDesc; } + /** What is the primitive type wrapped by this wrapper? */ public Class primitiveType() { return primitiveType; } diff --git a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java index ab386bb14a5..0b72ee6a7c2 100644 --- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java @@ -50,6 +50,7 @@ import jdk.internal.access.JavaIOFileDescriptorAccess; import jdk.internal.access.SharedSecrets; +import jdk.internal.event.FileForceEvent; import jdk.internal.foreign.MemorySessionImpl; import jdk.internal.foreign.SegmentFactories; import jdk.internal.misc.Blocker; @@ -486,8 +487,7 @@ public FileChannel truncate(long newSize) throws IOException { } } - @Override - public void force(boolean metaData) throws IOException { + private void implForce(boolean metaData) throws IOException { ensureOpen(); int rv = -1; int ti = -1; @@ -511,6 +511,17 @@ public void force(boolean metaData) throws IOException { } } + @Override + public void force(boolean metaData) throws IOException { + if (!FileForceEvent.enabled()) { + implForce(metaData); + return; + } + long start = FileForceEvent.timestamp(); + implForce(metaData); + FileForceEvent.offer(start, path, metaData); + } + // Assume at first that the underlying kernel supports sendfile/equivalent; // set this to true if we find out later that it doesn't // diff --git a/src/java.base/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java index b41430c8d9d..5f3f91e7aff 100644 --- a/src/java.base/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -25,6 +25,8 @@ package sun.nio.ch; +import jdk.internal.event.FileForceEvent; + import java.nio.channels.*; import java.util.concurrent.*; import java.nio.ByteBuffer; @@ -50,19 +52,25 @@ private static class DefaultExecutorHolder { // Used to make native read and write calls private static final FileDispatcher nd = new FileDispatcherImpl(); + // file path + private final String path; + // Thread-safe set of IDs of native threads, for signalling private final NativeThreadSet threads = new NativeThreadSet(2); SimpleAsynchronousFileChannelImpl(FileDescriptor fdObj, + String path, boolean reading, boolean writing, ExecutorService executor) { super(fdObj, reading, writing, executor); + this.path = path; } public static AsynchronousFileChannel open(FileDescriptor fdo, + String path, boolean reading, boolean writing, ThreadPool pool) @@ -70,7 +78,7 @@ public static AsynchronousFileChannel open(FileDescriptor fdo, // Executor is either default or based on pool parameters ExecutorService executor = (pool == null) ? DefaultExecutorHolder.defaultExecutor : pool.executor(); - return new SimpleAsynchronousFileChannelImpl(fdo, reading, writing, executor); + return new SimpleAsynchronousFileChannelImpl(fdo, path, reading, writing, executor); } @Override @@ -151,8 +159,7 @@ public AsynchronousFileChannel truncate(long size) throws IOException { } } - @Override - public void force(boolean metaData) throws IOException { + private void implForce(boolean metaData) throws IOException { int ti = threads.add(); try { int n = 0; @@ -169,6 +176,17 @@ public void force(boolean metaData) throws IOException { } } + @Override + public void force(boolean metaData) throws IOException { + if (!FileForceEvent.enabled()) { + implForce(metaData); + return; + } + long start = FileForceEvent.timestamp(); + implForce(metaData); + FileForceEvent.offer(start, path, metaData); + } + @Override Future implLock(final long position, final long size, diff --git a/src/java.base/share/legal/cldr.md b/src/java.base/share/legal/cldr.md index e0d8102fb7f..97331fcba9f 100644 --- a/src/java.base/share/legal/cldr.md +++ b/src/java.base/share/legal/cldr.md @@ -1,14 +1,15 @@ -## Unicode Common Local Data Repository (CLDR) v44 +## Unicode Common Local Data Repository (CLDR) v45 ### CLDR License ``` + UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE -Copyright © 2019-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR @@ -44,4 +45,56 @@ not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. +SPDX-License-Identifier: Unicode-3.0 + +———————————— + +Unicode® Copyright and Terms of Use +For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + +Unicode Copyright +Copyright © 1991-2024 Unicode, Inc. All rights reserved. +Definitions +Unicode Data Files ("DATA FILES") include all data files under the directories: +https://www.unicode.org/Public/ +https://www.unicode.org/reports/ +https://www.unicode.org/ivd/data/ + +Unicode Data Files do not include PDF online code charts under the directory: +https://www.unicode.org/Public/ + +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard +or any source code or compiled code under the directories: +https://www.unicode.org/Public/PROGRAMS/ +https://www.unicode.org/Public/cldr/ +http://site.icu-project.org/download/ +Terms of Use +Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. +Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. +Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. +Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. +The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. +All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. +No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. +Modification is not permitted with respect to this document. All copies of this document must be verbatim. +Restricted Rights Legend +Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. +Warranties and Disclaimers +This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. +If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. +EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. +Waiver of Damages +In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. +Trademarks & Logos +The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. +The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. +All third party trademarks referenced herein are the property of their respective owners. +Miscellaneous +Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. +Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. +Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. +Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. +Entire Agreement. This Agreement constitutes the entire agreement between the parties. + + ``` diff --git a/src/java.base/share/native/libzip/zip_util.c b/src/java.base/share/native/libzip/zip_util.c index a996b450ad4..8f2f19c66a2 100644 --- a/src/java.base/share/native/libzip/zip_util.c +++ b/src/java.base/share/native/libzip/zip_util.c @@ -437,7 +437,7 @@ hash(const char *s) static unsigned int hashN(const char *s, int length) { - int h = 0; + unsigned int h = 0; while (length-- > 0) h = 31*h + *s++; return h; diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java b/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java index 475b61036a2..8e5bf38882c 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java @@ -168,7 +168,7 @@ static AsynchronousFileChannel newAsynchronousFileChannel(UnixPath path, // for now use simple implementation FileDescriptor fdObj = open(-1, path, null, flags, mode); - return SimpleAsynchronousFileChannelImpl.open(fdObj, flags.read, flags.write, pool); + return SimpleAsynchronousFileChannelImpl.open(fdObj, path.toString(), flags.read, flags.write, pool); } /** diff --git a/src/java.base/unix/native/libjli/java_md.c b/src/java.base/unix/native/libjli/java_md.c index 0d3249ab1d4..08afd9986ca 100644 --- a/src/java.base/unix/native/libjli/java_md.c +++ b/src/java.base/unix/native/libjli/java_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -525,6 +525,8 @@ GetJREPath(char *path, jint pathsize, jboolean speculative) char libjava[MAXPATHLEN]; struct stat s; + JLI_TraceLauncher("Attempt to get JRE path from launcher executable path\n"); + if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/" JAVA_DLL, path); @@ -532,20 +534,10 @@ GetJREPath(char *path, jint pathsize, jboolean speculative) JLI_TraceLauncher("JRE path is %s\n", path); return JNI_TRUE; } - /* ensure storage for path + /jre + NULL */ - if ((JLI_StrLen(path) + 4 + 1) > (size_t) pathsize) { - JLI_TraceLauncher("Insufficient space to store JRE path\n"); - return JNI_FALSE; - } - /* Does the app ship a private JRE in /jre directory? */ - JLI_Snprintf(libjava, sizeof(libjava), "%s/jre/lib/" JAVA_DLL, path); - if (access(libjava, F_OK) == 0) { - JLI_StrCat(path, "/jre"); - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; - } } + JLI_TraceLauncher("Attempt to get JRE path from shared lib of the image\n"); + if (GetApplicationHomeFromDll(path, pathsize)) { JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/" JAVA_DLL, path); if (stat(libjava, &s) == 0) { diff --git a/src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java b/src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java index a1bacc1fae1..15ae425850e 100644 --- a/src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java +++ b/src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -33,6 +33,7 @@ import java.io.FileDescriptor; import jdk.internal.access.SharedSecrets; import jdk.internal.access.JavaIOFileDescriptorAccess; +import jdk.internal.event.FileForceEvent; /** * Windows implementation of AsynchronousFileChannel using overlapped I/O. @@ -63,6 +64,9 @@ private static Iocp defaultIocp() { // Used for force/truncate/size methods private static final FileDispatcher nd = new FileDispatcherImpl(); + // file path + private final String path; + // The handle is extracted for use in native methods invoked from this class. private final long handle; @@ -79,6 +83,7 @@ private static Iocp defaultIocp() { private WindowsAsynchronousFileChannelImpl(FileDescriptor fdObj, + String path, boolean reading, boolean writing, Iocp iocp, @@ -86,6 +91,7 @@ private WindowsAsynchronousFileChannelImpl(FileDescriptor fdObj, throws IOException { super(fdObj, reading, writing, iocp.executor()); + this.path = path; this.handle = fdAccess.getHandle(fdObj); this.iocp = iocp; this.isDefaultIocp = isDefaultIocp; @@ -94,6 +100,7 @@ private WindowsAsynchronousFileChannelImpl(FileDescriptor fdObj, } public static AsynchronousFileChannel open(FileDescriptor fdo, + String path, boolean reading, boolean writing, ThreadPool pool) @@ -109,8 +116,7 @@ public static AsynchronousFileChannel open(FileDescriptor fdo, isDefaultIocp = false; } try { - return new - WindowsAsynchronousFileChannelImpl(fdo, reading, writing, iocp, isDefaultIocp); + return new WindowsAsynchronousFileChannelImpl(fdo, path, reading, writing, iocp, isDefaultIocp); } catch (IOException x) { // error binding to port so need to close it (if created for this channel) if (!isDefaultIocp) @@ -196,8 +202,7 @@ public AsynchronousFileChannel truncate(long size) throws IOException { return this; } - @Override - public void force(boolean metaData) throws IOException { + private void implForce(boolean metaData) throws IOException { try { begin(); nd.force(fdObj, metaData); @@ -206,6 +211,17 @@ public void force(boolean metaData) throws IOException { } } + @Override + public void force(boolean metaData) throws IOException { + if (!FileForceEvent.enabled()) { + implForce(metaData); + return; + } + long start = FileForceEvent.timestamp(); + implForce(metaData); + FileForceEvent.offer(start, path, metaData); + } + // -- file locking -- /** diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java b/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java index 3a14221d62a..59db82d3fab 100644 --- a/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java @@ -212,7 +212,7 @@ static AsynchronousFileChannel newAsynchronousFileChannel(String pathForWindows, // create the AsynchronousFileChannel try { - return WindowsAsynchronousFileChannelImpl.open(fdObj, flags.read, flags.write, pool); + return WindowsAsynchronousFileChannelImpl.open(fdObj, pathForWindows, flags.read, flags.write, pool); } catch (IOException x) { // IOException is thrown if the file handle cannot be associated // with the completion port. All we can do is close the file. diff --git a/src/java.base/windows/native/libjli/java_md.c b/src/java.base/windows/native/libjli/java_md.c index 39930a38535..6ff155bcb9b 100644 --- a/src/java.base/windows/native/libjli/java_md.c +++ b/src/java.base/windows/native/libjli/java_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -49,10 +49,6 @@ static jboolean GetJVMPath(const char *jrepath, const char *jvmtype, char *jvmpath, jint jvmpathsize); static jboolean GetJREPath(char *path, jint pathsize); -#ifdef USE_REGISTRY_LOOKUP -jboolean GetPublicJREHome(char *buf, jint bufsize); -#endif - /* We supports warmup for UI stack that is performed in parallel * to VM initialization. * This helps to improve startup of UI application as warmup phase @@ -300,6 +296,8 @@ GetJREPath(char *path, jint pathsize) char javadll[MAXPATHLEN]; struct stat s; + JLI_TraceLauncher("Attempt to get JRE path from launcher executable path\n"); + if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ JLI_Snprintf(javadll, sizeof(javadll), "%s\\bin\\" JAVA_DLL, path); @@ -307,20 +305,10 @@ GetJREPath(char *path, jint pathsize) JLI_TraceLauncher("JRE path is %s\n", path); return JNI_TRUE; } - /* ensure storage for path + \jre + NULL */ - if ((JLI_StrLen(path) + 4 + 1) > (size_t) pathsize) { - JLI_TraceLauncher("Insufficient space to store JRE path\n"); - return JNI_FALSE; - } - /* Does this app ship a private JRE in \jre directory? */ - JLI_Snprintf(javadll, sizeof (javadll), "%s\\jre\\bin\\" JAVA_DLL, path); - if (stat(javadll, &s) == 0) { - JLI_StrCat(path, "\\jre"); - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; - } } + JLI_TraceLauncher("Attempt to get JRE path from shared lib of the image\n"); + /* Try getting path to JRE from path to JLI.DLL */ if (GetApplicationHomeFromDll(path, pathsize)) { JLI_Snprintf(javadll, sizeof(javadll), "%s\\bin\\" JAVA_DLL, path); @@ -330,14 +318,6 @@ GetJREPath(char *path, jint pathsize) } } -#ifdef USE_REGISTRY_LOOKUP - /* Lookup public JRE using Windows registry. */ - if (GetPublicJREHome(path, pathsize)) { - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; - } -#endif - JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL); return JNI_FALSE; } diff --git a/src/java.desktop/share/legal/libpng.md b/src/java.desktop/share/legal/libpng.md index f420ccd94ed..cbffed81332 100644 --- a/src/java.desktop/share/legal/libpng.md +++ b/src/java.desktop/share/legal/libpng.md @@ -1,4 +1,4 @@ -## libpng v1.6.40 +## libpng v1.6.43 ### libpng License

@@ -9,11 +9,11 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
 PNG Reference Library License version 2
 ---------------------------------------
 
-Copyright (c) 1995-2023 The PNG Reference Library Authors.
-Copyright (c) 2018-2023 Cosmin Truta
-Copyright (c) 1998-2018 Glenn Randers-Pehrson
-Copyright (c) 1996-1997 Andreas Dilger
-Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+Copyright (C) 1995-2024 The PNG Reference Library Authors.
+Copyright (C) 2018-2024 Cosmin Truta
+Copyright (C) 1998-2018 Glenn Randers-Pehrson
+Copyright (C) 1996-1997 Andreas Dilger
+Copyright (C) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
 
 The software is supplied "as is", without warranty of any kind,
 express or implied, including, without limitation, the warranties
@@ -157,7 +157,9 @@ PNG REFERENCE LIBRARY AUTHORS
 This is the list of PNG Reference Library ("libpng") Contributing
 Authors, for copyright and licensing purposes.
 
+ * Adam Richter
  * Andreas Dilger
+ * Chris Blume
  * Cosmin Truta
  * Dave Martindale
  * Eric S. Raymond
@@ -186,21 +188,28 @@ Authors, for copyright and licensing purposes.
  * Vadim Barkov
  * Willem van Schaik
  * Zhijie Liang
+ * Apple Inc.
+    - Zixu Wang (王子旭)
  * Arm Holdings
-   - Richard Townsend
+    - Richard Townsend
  * Google Inc.
-   - Dan Field
-   - Leon Scroggins III
-   - Matt Sarett
-   - Mike Klein
-   - Sami Boukortt
-   - Wan-Teh Chang
+    - Dan Field
+    - Leon Scroggins III
+    - Matt Sarett
+    - Mike Klein
+    - Sami Boukortt
+    - Wan-Teh Chang
+ * Loongson Technology Corporation Ltd.
+    - GuXiWei (顾希伟)
+    - JinBo (金波)
+    - ZhangLixia (张利霞)
 
 The build projects, the build scripts, the test scripts, and other
-files in the "ci", "projects", "scripts" and "tests" directories, have
+files in the "projects", "scripts" and "tests" directories, have
 other copyright owners, but are released under the libpng license.
 
-Some files in the "contrib" directory, and some tools-generated files
-that are distributed with libpng, have other copyright owners, and are
-released under other open source licenses.
+Some files in the "ci" and "contrib" directories, as well as some
+of the tools-generated files that are distributed with libpng, have
+other copyright owners, and are released under other open source
+licenses.
 ```
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/CHANGES b/src/java.desktop/share/native/libsplashscreen/libpng/CHANGES
index 2d8c585c0e7..441b57ecf1a 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/CHANGES
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/CHANGES
@@ -6129,6 +6129,73 @@ Version 1.6.40 [June 21, 2023]
   Updated the configurations and the scripts for continuous integration.
   Cleaned up the code, the build scripts, and the documentation.
 
+Version 1.6.41 [January 24, 2024]
+  Added SIMD-optimized code for the LoongArch LSX hardware.
+    (Contributed by GuXiWei, JinBo and ZhangLixia)
+  Fixed the run-time discovery of MIPS MSA hardware.
+    (Contributed by Sui Jingfeng)
+  Fixed an off-by-one error in the function png_do_check_palette_indexes(),
+    which failed to recognize errors that might have existed in the first
+    column of a broken palette-encoded image. This was a benign regression
+    accidentally introduced in libpng-1.6.33. No pixel was harmed.
+    (Contributed by Adam Richter; reviewed by John Bowler)
+  Fixed, improved and modernized the contrib/pngminus programs, i.e.,
+    png2pnm.c and pnm2png.c
+  Removed old and peculiar portability hacks that were meant to silence
+    warnings issued by gcc version 7.1 alone.
+    (Contributed by John Bowler)
+  Fixed and modernized the CMake file, and raised the minimum required
+    CMake version from 3.1 to 3.6.
+    (Contributed by Clinton Ingram, Timothy Lyanguzov, Tyler Kropp, et al.)
+  Allowed the configure script to disable the building of auxiliary tools
+    and tests, thus catching up with the CMake file.
+    (Contributed by Carlo Bramini)
+  Fixed a build issue on Mac.
+    (Contributed by Zixu Wang)
+  Moved the Autoconf macro files to scripts/autoconf.
+  Moved the CMake files (except for the main CMakeLists.txt) to
+    scripts/cmake and moved the list of their contributing authors to
+    scripts/cmake/AUTHORS.md
+  Updated the CI configurations and scripts.
+  Relicensed the CI scripts to the MIT License.
+  Improved the test coverage.
+    (Contributed by John Bowler)
+
+Version 1.6.42 [January 29, 2024]
+  Fixed the implementation of the macro function png_check_sig().
+    This was an API regression, introduced in libpng-1.6.41.
+    (Reported by Matthieu Darbois)
+  Fixed and updated the libpng manual.
+
+Version 1.6.43 [February 23, 2024]
+  Fixed the row width check in png_check_IHDR().
+    This corrected a bug that was specific to the 16-bit platforms,
+    and removed a spurious compiler warning from the 64-bit builds.
+    (Reported by Jacek Caban; fixed by John Bowler)
+  Added eXIf chunk support to the push-mode reader in pngpread.c.
+    (Contributed by Chris Blume)
+  Added contrib/pngexif for the benefit of the users who would like
+    to inspect the content of eXIf chunks.
+  Added contrib/conftest/basic.dfa, a basic build-time configuration.
+    (Contributed by John Bowler)
+  Fixed a preprocessor condition in pngread.c that broke build-time
+    configurations like contrib/conftest/pngcp.dfa.
+    (Contributed by John Bowler)
+  Added CMake build support for LoongArch LSX.
+    (Contributed by GuXiWei)
+  Fixed a CMake build error that occurred under a peculiar state of the
+    dependency tree. This was a regression introduced in libpng-1.6.41.
+    (Contributed by Dan Rosser)
+  Marked the installed libpng headers as system headers in CMake.
+    (Contributed by Benjamin Buch)
+  Updated the build support for RISCOS.
+    (Contributed by Cameron Cawley)
+  Updated the makefiles to allow cross-platform builds to initialize
+    conventional make variables like AR and ARFLAGS.
+  Added various improvements to the CI scripts in areas like version
+    consistency verification and text linting.
+  Added version consistency verification to pngtest.c also.
+
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
 Subscription is required; visit
 https://lists.sourceforge.net/lists/listinfo/png-mng-implement
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/LICENSE b/src/java.desktop/share/native/libsplashscreen/libpng/LICENSE
index 086d1c2fda6..25f298f0fcf 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/LICENSE
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/LICENSE
@@ -4,8 +4,8 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
 PNG Reference Library License version 2
 ---------------------------------------
 
- * Copyright (c) 1995-2023 The PNG Reference Library Authors.
- * Copyright (c) 2018-2023 Cosmin Truta.
+ * Copyright (c) 1995-2024 The PNG Reference Library Authors.
+ * Copyright (c) 2018-2024 Cosmin Truta.
  * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
  * Copyright (c) 1996-1997 Andreas Dilger.
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/README b/src/java.desktop/share/native/libsplashscreen/libpng/README
index dedd2c1639e..a6ca3ae9f94 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/README
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/README
@@ -1,4 +1,4 @@
-README for libpng version 1.6.40
+README for libpng version 1.6.43
 ================================
 
 See the note about version numbers near the top of `png.h`.
@@ -142,10 +142,11 @@ Files included in this distribution
     pngwrite.c    =>  High-level write functions
     pngwtran.c    =>  Write data transformations
     pngwutil.c    =>  Write utility functions
-    arm/          =>  Optimized code for the ARM platform
-    intel/        =>  Optimized code for the INTEL-SSE2 platform
-    mips/         =>  Optimized code for the MIPS platform
-    powerpc/      =>  Optimized code for the PowerPC platform
+    arm/          =>  Optimized code for ARM Neon
+    intel/        =>  Optimized code for INTEL SSE2
+    loongarch/    =>  Optimized code for LoongArch LSX
+    mips/         =>  Optimized code for MIPS MSA and MIPS MMI
+    powerpc/      =>  Optimized code for PowerPC VSX
     ci/           =>  Scripts for continuous integration
     contrib/      =>  External contributions
         arm-neon/     =>  Optimized code for the ARM-NEON platform
@@ -158,6 +159,7 @@ Files included in this distribution
         libtests/     =>  Test programs
         oss-fuzz/     =>  Files used by the OSS-Fuzz project for fuzz-testing
                           libpng
+        pngexif/      =>  Program to inspect the EXIF information in PNG files
         pngminim/     =>  Minimal decoder, encoder, and progressive decoder
                           programs demonstrating the use of pngusr.dfa
         pngminus/     =>  Simple pnm2png and png2pnm programs
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/UPDATING.txt b/src/java.desktop/share/native/libsplashscreen/libpng/UPDATING.txt
index 93c8f5bb703..88200db5d73 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/UPDATING.txt
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/UPDATING.txt
@@ -37,18 +37,21 @@ and instead just tweak the existing one.
 
 First cd into the libpng folder and run the following script.
 
+    shopt -s nullglob
     for f in *.c *.h;
-    do
-      # replace tabs with spaces
-      expand ${f} > ${f}.tmp;
-      mv ${f}.tmp $f;
-
-      # fix line endings to LF
-      sed -i -e 's/\r$//g' ${f};
-
-      # remove trailing spaces
-      sed -i -e 's/[ ]* $//g' ${f};
-    done
+         do
+            # replace tabs with spaces
+            expand ${f} > ${f}.tmp
+            mv ${f}.tmp $f
+
+            # fix line endings to LF
+            sed -e 's/\r$//g' ${f} > ${f}.tmp
+            mv ${f}.tmp $f
+
+            # remove trailing spaces
+            sed -e 's/[ ]* $//g' ${f} > ${f}.tmp
+            mv ${f}.tmp $f
+         done
 
 6) As with all native code, run it through the official build systems, in case
 the updated code trigger any fatal warnings with the official compilers.
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/png.c b/src/java.desktop/share/native/libsplashscreen/libpng/png.c
index 91a92e5f718..232dff876c7 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/png.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/png.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2023 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -42,27 +42,7 @@
 #include "pngpriv.h"
 
 /* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_40 Your_png_h_is_not_version_1_6_40;
-
-#ifdef __GNUC__
-/* The version tests may need to be added to, but the problem warning has
- * consistently been fixed in GCC versions which obtain wide-spread release.
- * The problem is that many versions of GCC rearrange comparison expressions in
- * the optimizer in such a way that the results of the comparison will change
- * if signed integer overflow occurs.  Such comparisons are not permitted in
- * ANSI C90, however GCC isn't clever enough to work out that that do not occur
- * below in png_ascii_from_fp and png_muldiv, so it produces a warning with
- * -Wextra.  Unfortunately this is highly dependent on the optimizer and the
- * machine architecture so the warning comes and goes unpredictably and is
- * impossible to "fix", even were that a good idea.
- */
-#if __GNUC__ == 7 && __GNUC_MINOR__ == 1
-#define GCC_STRICT_OVERFLOW 1
-#endif /* GNU 7.1.x */
-#endif /* GNU */
-#ifndef GCC_STRICT_OVERFLOW
-#define GCC_STRICT_OVERFLOW 0
-#endif
+typedef png_libpng_version_1_6_43 Your_png_h_is_not_version_1_6_43;
 
 /* Tells libpng that we have already handled the first "num_bytes" bytes
  * of the PNG file signature.  If the PNG data is embedded into another
@@ -101,21 +81,21 @@ png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
 int PNGAPI
 png_sig_cmp(png_const_bytep sig, size_t start, size_t num_to_check)
 {
-   png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
+   static const png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
 
    if (num_to_check > 8)
       num_to_check = 8;
 
    else if (num_to_check < 1)
-      return (-1);
+      return -1;
 
    if (start > 7)
-      return (-1);
+      return -1;
 
    if (start + num_to_check > 8)
       num_to_check = 8 - start;
 
-   return ((int)(memcmp(&sig[start], &png_signature[start], num_to_check)));
+   return memcmp(&sig[start], &png_signature[start], num_to_check);
 }
 
 #endif /* READ */
@@ -475,7 +455,6 @@ png_info_init_3,(png_infopp ptr_ptr, size_t png_info_struct_size),
    memset(info_ptr, 0, (sizeof *info_ptr));
 }
 
-/* The following API is not called internally */
 void PNGAPI
 png_data_freer(png_const_structrp png_ptr, png_inforp info_ptr,
     int freer, png_uint_32 mask)
@@ -714,9 +693,9 @@ png_voidp PNGAPI
 png_get_io_ptr(png_const_structrp png_ptr)
 {
    if (png_ptr == NULL)
-      return (NULL);
+      return NULL;
 
-   return (png_ptr->io_ptr);
+   return png_ptr->io_ptr;
 }
 
 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
@@ -780,7 +759,7 @@ png_convert_to_rfc1123_buffer(char out[29], png_const_timep ptime)
 
    {
       size_t pos = 0;
-      char number_buf[5]; /* enough for a four-digit year */
+      char number_buf[5] = {0, 0, 0, 0, 0}; /* enough for a four-digit year */
 
 #     define APPEND_STRING(string) pos = png_safecat(out, 29, pos, (string))
 #     define APPEND_NUMBER(format, value)\
@@ -843,8 +822,8 @@ png_get_copyright(png_const_structrp png_ptr)
    return PNG_STRING_COPYRIGHT
 #else
    return PNG_STRING_NEWLINE \
-      "libpng version 1.6.40" PNG_STRING_NEWLINE \
-      "Copyright (c) 2018-2023 Cosmin Truta" PNG_STRING_NEWLINE \
+      "libpng version 1.6.43" PNG_STRING_NEWLINE \
+      "Copyright (c) 2018-2024 Cosmin Truta" PNG_STRING_NEWLINE \
       "Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson" \
       PNG_STRING_NEWLINE \
       "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
@@ -1005,7 +984,7 @@ png_reset_zstream(png_structrp png_ptr)
       return Z_STREAM_ERROR;
 
    /* WARNING: this resets the window bits to the maximum! */
-   return (inflateReset(&png_ptr->zstream));
+   return inflateReset(&png_ptr->zstream);
 }
 #endif /* READ */
 
@@ -1014,7 +993,7 @@ png_uint_32 PNGAPI
 png_access_version_number(void)
 {
    /* Version of *.c files used when building libpng */
-   return((png_uint_32)PNG_LIBPNG_VER);
+   return (png_uint_32)PNG_LIBPNG_VER;
 }
 
 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
@@ -1870,14 +1849,14 @@ png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
    }
 #  ifdef PNG_WARNINGS_SUPPORTED
    else
-      {
-         char number[PNG_NUMBER_BUFFER_SIZE]; /* +24 = 114 */
+   {
+      char number[PNG_NUMBER_BUFFER_SIZE]; /* +24 = 114 */
 
-         pos = png_safecat(message, (sizeof message), pos,
-             png_format_number(number, number+(sizeof number),
-             PNG_NUMBER_FORMAT_x, value));
-         pos = png_safecat(message, (sizeof message), pos, "h: "); /* +2 = 116 */
-      }
+      pos = png_safecat(message, (sizeof message), pos,
+          png_format_number(number, number+(sizeof number),
+          PNG_NUMBER_FORMAT_x, value));
+      pos = png_safecat(message, (sizeof message), pos, "h: "); /* +2 = 116 */
+   }
 #  endif
    /* The 'reason' is an arbitrary message, allow +79 maximum 195 */
    pos = png_safecat(message, (sizeof message), pos, reason);
@@ -2560,17 +2539,6 @@ png_colorspace_set_rgb_coefficients(png_structrp png_ptr)
 
 #endif /* COLORSPACE */
 
-#ifdef __GNUC__
-/* This exists solely to work round a warning from GNU C. */
-static int /* PRIVATE */
-png_gt(size_t a, size_t b)
-{
-   return a > b;
-}
-#else
-#   define png_gt(a,b) ((a) > (b))
-#endif
-
 void /* PRIVATE */
 png_check_IHDR(png_const_structrp png_ptr,
     png_uint_32 width, png_uint_32 height, int bit_depth,
@@ -2592,8 +2560,16 @@ png_check_IHDR(png_const_structrp png_ptr,
       error = 1;
    }
 
-   if (png_gt(((width + 7) & (~7U)),
-       ((PNG_SIZE_MAX
+   /* The bit mask on the first line below must be at least as big as a
+    * png_uint_32.  "~7U" is not adequate on 16-bit systems because it will
+    * be an unsigned 16-bit value.  Casting to (png_alloc_size_t) makes the
+    * type of the result at least as bit (in bits) as the RHS of the > operator
+    * which also avoids a common warning on 64-bit systems that the comparison
+    * of (png_uint_32) against the constant value on the RHS will always be
+    * false.
+    */
+   if (((width + 7) & ~(png_alloc_size_t)7) >
+       (((PNG_SIZE_MAX
            - 48        /* big_row_buf hack */
            - 1)        /* filter byte */
            / 8)        /* 8-byte RGBA pixels */
@@ -2919,14 +2895,6 @@ png_pow10(int power)
 /* Function to format a floating point value in ASCII with a given
  * precision.
  */
-#if GCC_STRICT_OVERFLOW
-#pragma GCC diagnostic push
-/* The problem arises below with exp_b10, which can never overflow because it
- * comes, originally, from frexp and is therefore limited to a range which is
- * typically +/-710 (log2(DBL_MAX)/log2(DBL_MIN)).
- */
-#pragma GCC diagnostic warning "-Wstrict-overflow=2"
-#endif /* GCC_STRICT_OVERFLOW */
 void /* PRIVATE */
 png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, size_t size,
     double fp, unsigned int precision)
@@ -3248,10 +3216,6 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, size_t size,
    /* Here on buffer too small. */
    png_error(png_ptr, "ASCII conversion buffer too small");
 }
-#if GCC_STRICT_OVERFLOW
-#pragma GCC diagnostic pop
-#endif /* GCC_STRICT_OVERFLOW */
-
 #  endif /* FLOATING_POINT */
 
 #  ifdef PNG_FIXED_POINT_SUPPORTED
@@ -3279,7 +3243,7 @@ png_ascii_from_fixed(png_const_structrp png_ptr, png_charp ascii,
       if (num <= 0x80000000) /* else overflowed */
       {
          unsigned int ndigits = 0, first = 16 /* flag value */;
-         char digits[10];
+         char digits[10] = {0};
 
          while (num)
          {
@@ -3364,15 +3328,6 @@ png_fixed(png_const_structrp png_ptr, double fp, png_const_charp text)
  * the nearest .00001).  Overflow and divide by zero are signalled in
  * the result, a boolean - true on success, false on overflow.
  */
-#if GCC_STRICT_OVERFLOW /* from above */
-/* It is not obvious which comparison below gets optimized in such a way that
- * signed overflow would change the result; looking through the code does not
- * reveal any tests which have the form GCC complains about, so presumably the
- * optimizer is moving an add or subtract into the 'if' somewhere.
- */
-#pragma GCC diagnostic push
-#pragma GCC diagnostic warning "-Wstrict-overflow=2"
-#endif /* GCC_STRICT_OVERFLOW */
 int
 png_muldiv(png_fixed_point_p res, png_fixed_point a, png_int_32 times,
     png_int_32 divisor)
@@ -3487,9 +3442,6 @@ png_muldiv(png_fixed_point_p res, png_fixed_point a, png_int_32 times,
 
    return 0;
 }
-#if GCC_STRICT_OVERFLOW
-#pragma GCC diagnostic pop
-#endif /* GCC_STRICT_OVERFLOW */
 #endif /* READ_GAMMA || INCH_CONVERSIONS */
 
 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_INCH_CONVERSIONS_SUPPORTED)
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/png.h b/src/java.desktop/share/native/libsplashscreen/libpng/png.h
index 578841c9580..9f61a773c1d 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/png.h
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/png.h
@@ -29,9 +29,9 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * libpng version 1.6.40
+ * libpng version 1.6.43
  *
- * Copyright (c) 2018-2023 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -43,7 +43,7 @@
  *   libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
  *   libpng versions 0.97, January 1998, through 1.6.35, July 2018:
  *     Glenn Randers-Pehrson
- *   libpng versions 1.6.36, December 2018, through 1.6.40, June 2023:
+ *   libpng versions 1.6.36, December 2018, through 1.6.43, February 2024:
  *     Cosmin Truta
  *   See also "Contributing Authors", below.
  */
@@ -55,8 +55,8 @@
  * PNG Reference Library License version 2
  * ---------------------------------------
  *
- *  * Copyright (c) 1995-2023 The PNG Reference Library Authors.
- *  * Copyright (c) 2018-2023 Cosmin Truta.
+ *  * Copyright (c) 1995-2024 The PNG Reference Library Authors.
+ *  * Copyright (c) 2018-2024 Cosmin Truta.
  *  * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
  *  * Copyright (c) 1996-1997 Andreas Dilger.
  *  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -267,7 +267,7 @@
  *    ...
  *    1.5.30                  15    10530  15.so.15.30[.0]
  *    ...
- *    1.6.40                  16    10640  16.so.16.40[.0]
+ *    1.6.43                  16    10643  16.so.16.43[.0]
  *
  *    Henceforth the source version will match the shared-library major and
  *    minor numbers; the shared-library major version number will be used for
@@ -283,9 +283,6 @@
  *    to the info_ptr or png_ptr members through png.h, and the compiled
  *    application is loaded with a different version of the library.
  *
- *    DLLNUM will change each time there are forward or backward changes
- *    in binary compatibility (e.g., when a new feature is added).
- *
  * See libpng.txt or libpng.3 for more information.  The PNG specification
  * is available as a W3C Recommendation and as an ISO/IEC Standard; see
  * 
@@ -306,19 +303,21 @@
  */
 
 /* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.6.40"
-#define PNG_HEADER_VERSION_STRING " libpng version 1.6.40 - June 21, 2023\n"
+#define PNG_LIBPNG_VER_STRING "1.6.43"
+#define PNG_HEADER_VERSION_STRING " libpng version " PNG_LIBPNG_VER_STRING "\n"
 
-#define PNG_LIBPNG_VER_SONUM   16
-#define PNG_LIBPNG_VER_DLLNUM  16
+/* The versions of shared library builds should stay in sync, going forward */
+#define PNG_LIBPNG_VER_SHAREDLIB 16
+#define PNG_LIBPNG_VER_SONUM     PNG_LIBPNG_VER_SHAREDLIB /* [Deprecated] */
+#define PNG_LIBPNG_VER_DLLNUM    PNG_LIBPNG_VER_SHAREDLIB /* [Deprecated] */
 
 /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
 #define PNG_LIBPNG_VER_MAJOR   1
 #define PNG_LIBPNG_VER_MINOR   6
-#define PNG_LIBPNG_VER_RELEASE 40
+#define PNG_LIBPNG_VER_RELEASE 43
 
 /* This should be zero for a public release, or non-zero for a
- * development version.  [Deprecated]
+ * development version.
  */
 #define PNG_LIBPNG_VER_BUILD  0
 
@@ -346,7 +345,7 @@
  * From version 1.0.1 it is:
  * XXYYZZ, where XX=major, YY=minor, ZZ=release
  */
-#define PNG_LIBPNG_VER 10640 /* 1.6.40 */
+#define PNG_LIBPNG_VER 10643 /* 1.6.43 */
 
 /* Library configuration: these options cannot be changed after
  * the library has been built.
@@ -456,7 +455,7 @@ extern "C" {
 /* This triggers a compiler error in png.c, if png.c and png.h
  * do not agree upon the version number.
  */
-typedef char* png_libpng_version_1_6_40;
+typedef char* png_libpng_version_1_6_43;
 
 /* Basic control structions.  Read libpng-manual.txt or libpng.3 for more info.
  *
@@ -877,7 +876,7 @@ PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
 #define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
 /* Added to libpng-1.5.4 */
 #define PNG_TRANSFORM_EXPAND_16     0x4000      /* read only */
-#if INT_MAX >= 0x8000 /* else this might break */
+#if ~0U > 0xffffU /* or else this might break on a 16-bit machine */
 #define PNG_TRANSFORM_SCALE_16      0x8000      /* read only */
 #endif
 
@@ -936,15 +935,15 @@ PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes));
 /* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
  * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
  * signature, and non-zero otherwise.  Having num_to_check == 0 or
- * start > 7 will always fail (ie return non-zero).
+ * start > 7 will always fail (i.e. return non-zero).
  */
 PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, size_t start,
     size_t num_to_check));
 
 /* Simple signature checking function.  This is the same as calling
- * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
+ * png_check_sig(sig, n) := (png_sig_cmp(sig, 0, n) == 0).
  */
-#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))
+#define png_check_sig(sig, n) (png_sig_cmp((sig), 0, (n)) == 0) /* DEPRECATED */
 
 /* Allocate and initialize png_ptr struct for reading, and any other memory. */
 PNG_EXPORTA(4, png_structp, png_create_read_struct,
@@ -1758,12 +1757,9 @@ PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr));
 PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr,
     png_inforp info_ptr, png_uint_32 free_me, int num));
 
-/* Reassign responsibility for freeing existing data, whether allocated
+/* Reassign the responsibility for freeing existing data, whether allocated
  * by libpng or by the application; this works on the png_info structure passed
- * in, it does not change the state for other png_info structures.
- *
- * It is unlikely that this function works correctly as of 1.6.0 and using it
- * may result either in memory leaks or double free of allocated data.
+ * in, without changing the state for other png_info structures.
  */
 PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr,
     png_inforp info_ptr, int freer, png_uint_32 mask));
@@ -3235,11 +3231,18 @@ PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
 #ifdef PNG_MIPS_MSA_API_SUPPORTED
 #  define PNG_MIPS_MSA   6 /* HARDWARE: MIPS Msa SIMD instructions supported */
 #endif
-#define PNG_IGNORE_ADLER32 8
+#ifdef PNG_DISABLE_ADLER32_CHECK_SUPPORTED
+#  define PNG_IGNORE_ADLER32 8 /* SOFTWARE: disable Adler32 check on IDAT */
+#endif
 #ifdef PNG_POWERPC_VSX_API_SUPPORTED
-#  define PNG_POWERPC_VSX   10 /* HARDWARE: PowerPC VSX SIMD instructions supported */
+#  define PNG_POWERPC_VSX   10 /* HARDWARE: PowerPC VSX SIMD instructions
+                                * supported */
 #endif
-#define PNG_OPTION_NEXT  12 /* Next option - numbers must be even */
+#ifdef PNG_MIPS_MMI_API_SUPPORTED
+#  define PNG_MIPS_MMI   12 /* HARDWARE: MIPS MMI SIMD instructions supported */
+#endif
+
+#define PNG_OPTION_NEXT  14 /* Next option - numbers must be even */
 
 /* Return values: NOTE: there are four values and 'off' is *not* zero */
 #define PNG_OPTION_UNSET   0 /* Unset - defaults to off */
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngconf.h b/src/java.desktop/share/native/libsplashscreen/libpng/pngconf.h
index 41cbc91d398..b3b441b1122 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngconf.h
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngconf.h
@@ -29,9 +29,9 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * libpng version 1.6.40
+ * libpng version 1.6.43
  *
- * Copyright (c) 2018-2022 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngerror.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngerror.c
index 623735f06f1..ea8dd172197 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngerror.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngerror.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -283,7 +283,7 @@ void
 png_warning_parameter_unsigned(png_warning_parameters p, int number, int format,
     png_alloc_size_t value)
 {
-   char buffer[PNG_NUMBER_BUFFER_SIZE];
+   char buffer[PNG_NUMBER_BUFFER_SIZE] = {0};
    png_warning_parameter(p, number, PNG_FORMAT_NUMBER(buffer, format, value));
 }
 
@@ -293,7 +293,7 @@ png_warning_parameter_signed(png_warning_parameters p, int number, int format,
 {
    png_alloc_size_t u;
    png_charp str;
-   char buffer[PNG_NUMBER_BUFFER_SIZE];
+   char buffer[PNG_NUMBER_BUFFER_SIZE] = {0};
 
    /* Avoid overflow by doing the negate in a png_alloc_size_t: */
    u = (png_alloc_size_t)value;
@@ -886,7 +886,7 @@ png_get_error_ptr(png_const_structrp png_ptr)
    if (png_ptr == NULL)
       return NULL;
 
-   return ((png_voidp)png_ptr->error_ptr);
+   return (png_voidp)png_ptr->error_ptr;
 }
 
 
@@ -961,31 +961,25 @@ png_safe_warning(png_structp png_nonconst_ptr, png_const_charp warning_message)
 #endif
 
 int /* PRIVATE */
-png_safe_execute(png_imagep image_in, int (*function)(png_voidp), png_voidp arg)
+png_safe_execute(png_imagep image, int (*function)(png_voidp), png_voidp arg)
 {
-   volatile png_imagep image = image_in;
-   volatile int result;
-   volatile png_voidp saved_error_buf;
+   png_voidp saved_error_buf = image->opaque->error_buf;
    jmp_buf safe_jmpbuf;
+   int result;
 
-   /* Safely execute function(arg) with png_error returning to this function. */
-   saved_error_buf = image->opaque->error_buf;
-   result = setjmp(safe_jmpbuf) == 0;
-
-   if (result != 0)
+   /* Safely execute function(arg), with png_error returning back here. */
+   if (setjmp(safe_jmpbuf) == 0)
    {
-
       image->opaque->error_buf = safe_jmpbuf;
       result = function(arg);
+      image->opaque->error_buf = saved_error_buf;
+      return result;
    }
 
+   /* On png_error, return via longjmp, pop the jmpbuf, and free the image. */
    image->opaque->error_buf = saved_error_buf;
-
-   /* And do the cleanup prior to any failure return. */
-   if (result == 0)
-      png_image_free(image);
-
-   return result;
+   png_image_free(image);
+   return 0;
 }
 #endif /* SIMPLIFIED READ || SIMPLIFIED_WRITE */
 #endif /* READ || WRITE */
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngget.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngget.c
index 6e510b27327..41e0a5abc3a 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngget.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngget.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2023 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -56,22 +56,22 @@ png_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
        * valid tRNS chunk in this case.
        */
       if (flag == PNG_INFO_tRNS && png_ptr->num_trans == 0)
-         return(0);
+         return 0;
 #endif
 
-      return(info_ptr->valid & flag);
+      return info_ptr->valid & flag;
    }
 
-   return(0);
+   return 0;
 }
 
 size_t PNGAPI
 png_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
    if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->rowbytes);
+      return info_ptr->rowbytes;
 
-   return(0);
+   return 0;
 }
 
 #ifdef PNG_INFO_IMAGE_SUPPORTED
@@ -79,9 +79,9 @@ png_bytepp PNGAPI
 png_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
    if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->row_pointers);
+      return info_ptr->row_pointers;
 
-   return(0);
+   return 0;
 }
 #endif
 
@@ -93,7 +93,7 @@ png_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->width;
 
-   return (0);
+   return 0;
 }
 
 png_uint_32 PNGAPI
@@ -102,7 +102,7 @@ png_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->height;
 
-   return (0);
+   return 0;
 }
 
 png_byte PNGAPI
@@ -111,7 +111,7 @@ png_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->bit_depth;
 
-   return (0);
+   return 0;
 }
 
 png_byte PNGAPI
@@ -120,7 +120,7 @@ png_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->color_type;
 
-   return (0);
+   return 0;
 }
 
 png_byte PNGAPI
@@ -129,7 +129,7 @@ png_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->filter_type;
 
-   return (0);
+   return 0;
 }
 
 png_byte PNGAPI
@@ -138,7 +138,7 @@ png_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->interlace_type;
 
-   return (0);
+   return 0;
 }
 
 png_byte PNGAPI
@@ -147,7 +147,7 @@ png_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return info_ptr->compression_type;
 
-   return (0);
+   return 0;
 }
 
 png_uint_32 PNGAPI
@@ -155,21 +155,20 @@ png_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
    info_ptr)
 {
 #ifdef PNG_pHYs_SUPPORTED
+   png_debug(1, "in png_get_x_pixels_per_meter");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_pHYs) != 0)
-      {
-         png_debug1(1, "in %s retrieval function",
-             "png_get_x_pixels_per_meter");
-
-         if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
-            return (info_ptr->x_pixels_per_unit);
-      }
+   {
+      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
+         return info_ptr->x_pixels_per_unit;
+   }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 png_uint_32 PNGAPI
@@ -177,42 +176,41 @@ png_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
     info_ptr)
 {
 #ifdef PNG_pHYs_SUPPORTED
+   png_debug(1, "in png_get_y_pixels_per_meter");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_pHYs) != 0)
    {
-      png_debug1(1, "in %s retrieval function",
-          "png_get_y_pixels_per_meter");
-
       if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
-         return (info_ptr->y_pixels_per_unit);
+         return info_ptr->y_pixels_per_unit;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 png_uint_32 PNGAPI
 png_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
 #ifdef PNG_pHYs_SUPPORTED
+   png_debug(1, "in png_get_pixels_per_meter");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_pHYs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter");
-
       if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER &&
           info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit)
-         return (info_ptr->x_pixels_per_unit);
+         return info_ptr->x_pixels_per_unit;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 #ifdef PNG_FLOATING_POINT_SUPPORTED
@@ -221,21 +219,21 @@ png_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp
    info_ptr)
 {
 #ifdef PNG_READ_pHYs_SUPPORTED
+   png_debug(1, "in png_get_pixel_aspect_ratio");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_pHYs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio");
-
       if (info_ptr->x_pixels_per_unit != 0)
-         return ((float)((float)info_ptr->y_pixels_per_unit
-             /(float)info_ptr->x_pixels_per_unit));
+         return (float)info_ptr->y_pixels_per_unit
+              / (float)info_ptr->x_pixels_per_unit;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return ((float)0.0);
+   return (float)0.0;
 }
 #endif
 
@@ -245,6 +243,8 @@ png_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr,
     png_const_inforp info_ptr)
 {
 #ifdef PNG_READ_pHYs_SUPPORTED
+   png_debug(1, "in png_get_pixel_aspect_ratio_fixed");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_pHYs) != 0 &&
        info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0 &&
@@ -253,8 +253,6 @@ png_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr,
    {
       png_fixed_point res;
 
-      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed");
-
       /* The following casts work because a PNG 4 byte integer only has a valid
        * range of 0..2^31-1; otherwise the cast might overflow.
        */
@@ -275,80 +273,80 @@ png_int_32 PNGAPI
 png_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
 #ifdef PNG_oFFs_SUPPORTED
+   png_debug(1, "in png_get_x_offset_microns");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_oFFs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
-
       if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
-         return (info_ptr->x_offset);
+         return info_ptr->x_offset;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 png_int_32 PNGAPI
 png_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
 #ifdef PNG_oFFs_SUPPORTED
+   png_debug(1, "in png_get_y_offset_microns");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_oFFs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
-
       if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
-         return (info_ptr->y_offset);
+         return info_ptr->y_offset;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 png_int_32 PNGAPI
 png_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
 #ifdef PNG_oFFs_SUPPORTED
+   png_debug(1, "in png_get_x_offset_pixels");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_oFFs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels");
-
       if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
-         return (info_ptr->x_offset);
+         return info_ptr->x_offset;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 png_int_32 PNGAPI
 png_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
 #ifdef PNG_oFFs_SUPPORTED
+   png_debug(1, "in png_get_y_offset_pixels");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_oFFs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels");
-
       if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
-         return (info_ptr->y_offset);
+         return info_ptr->y_offset;
    }
 #else
    PNG_UNUSED(png_ptr)
    PNG_UNUSED(info_ptr)
 #endif
 
-   return (0);
+   return 0;
 }
 
 #ifdef PNG_INCH_CONVERSIONS_SUPPORTED
@@ -462,11 +460,11 @@ png_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
 {
    png_uint_32 retval = 0;
 
+   png_debug1(1, "in %s retrieval function", "pHYs");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_pHYs) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "pHYs");
-
       if (res_x != NULL)
       {
          *res_x = info_ptr->x_pixels_per_unit;
@@ -492,7 +490,7 @@ png_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
       }
    }
 
-   return (retval);
+   return retval;
 }
 #endif /* pHYs */
 #endif /* INCH_CONVERSIONS */
@@ -506,9 +504,9 @@ png_byte PNGAPI
 png_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
    if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->channels);
+      return info_ptr->channels;
 
-   return (0);
+   return 0;
 }
 
 #ifdef PNG_READ_SUPPORTED
@@ -516,9 +514,9 @@ png_const_bytep PNGAPI
 png_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr)
 {
    if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->signature);
+      return info_ptr->signature;
 
-   return (NULL);
+   return NULL;
 }
 #endif
 
@@ -527,17 +525,17 @@ png_uint_32 PNGAPI
 png_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
     png_color_16p *background)
 {
+   png_debug1(1, "in %s retrieval function", "bKGD");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_bKGD) != 0 &&
        background != NULL)
    {
-      png_debug1(1, "in %s retrieval function", "bKGD");
-
       *background = &(info_ptr->background);
-      return (PNG_INFO_bKGD);
+      return PNG_INFO_bKGD;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -552,6 +550,8 @@ png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
     double *white_x, double *white_y, double *red_x, double *red_y,
     double *green_x, double *green_y, double *blue_x, double *blue_y)
 {
+   png_debug1(1, "in %s retrieval function", "cHRM");
+
    /* Quiet API change: this code used to only return the end points if a cHRM
     * chunk was present, but the end points can also come from iCCP or sRGB
     * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and
@@ -561,8 +561,6 @@ png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
    if (png_ptr != NULL && info_ptr != NULL &&
       (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "cHRM");
-
       if (white_x != NULL)
          *white_x = png_float(png_ptr,
              info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
@@ -587,10 +585,10 @@ png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
       if (blue_y != NULL)
          *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
              "cHRM blue Y");
-      return (PNG_INFO_cHRM);
+      return PNG_INFO_cHRM;
    }
 
-   return (0);
+   return 0;
 }
 
 png_uint_32 PNGAPI
@@ -599,11 +597,11 @@ png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
     double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
     double *blue_Z)
 {
+   png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
-
       if (red_X != NULL)
          *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
              "cHRM red X");
@@ -631,10 +629,10 @@ png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
       if (blue_Z != NULL)
          *blue_Z = png_float(png_ptr,
              info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
-      return (PNG_INFO_cHRM);
+      return PNG_INFO_cHRM;
    }
 
-   return (0);
+   return 0;
 }
 #  endif
 
@@ -647,11 +645,11 @@ png_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
     png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
     png_fixed_point *int_blue_Z)
 {
+   png_debug1(1, "in %s retrieval function", "cHRM_XYZ");
+
    if (png_ptr != NULL && info_ptr != NULL &&
       (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "cHRM_XYZ");
-
       if (int_red_X != NULL)
          *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X;
       if (int_red_Y != NULL)
@@ -670,10 +668,10 @@ png_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
          *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y;
       if (int_blue_Z != NULL)
          *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z;
-      return (PNG_INFO_cHRM);
+      return PNG_INFO_cHRM;
    }
 
-   return (0);
+   return 0;
 }
 
 png_uint_32 PNGAPI
@@ -703,10 +701,10 @@ png_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
          *blue_x = info_ptr->colorspace.end_points_xy.bluex;
       if (blue_y != NULL)
          *blue_y = info_ptr->colorspace.end_points_xy.bluey;
-      return (PNG_INFO_cHRM);
+      return PNG_INFO_cHRM;
    }
 
-   return (0);
+   return 0;
 }
 #  endif
 #endif
@@ -724,10 +722,10 @@ png_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
        file_gamma != NULL)
    {
       *file_gamma = info_ptr->colorspace.gamma;
-      return (PNG_INFO_gAMA);
+      return PNG_INFO_gAMA;
    }
 
-   return (0);
+   return 0;
 }
 #  endif
 
@@ -744,10 +742,10 @@ png_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr,
    {
       *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
           "png_get_gAMA");
-      return (PNG_INFO_gAMA);
+      return PNG_INFO_gAMA;
    }
 
-   return (0);
+   return 0;
 }
 #  endif
 #endif
@@ -763,10 +761,10 @@ png_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr,
       (info_ptr->valid & PNG_INFO_sRGB) != 0 && file_srgb_intent != NULL)
    {
       *file_srgb_intent = info_ptr->colorspace.rendering_intent;
-      return (PNG_INFO_sRGB);
+      return PNG_INFO_sRGB;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -790,10 +788,10 @@ png_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
        */
       if (compression_type != NULL)
          *compression_type = PNG_COMPRESSION_TYPE_BASE;
-      return (PNG_INFO_iCCP);
+      return PNG_INFO_iCCP;
    }
 
-   return (0);
+   return 0;
 
 }
 #endif
@@ -803,13 +801,15 @@ int PNGAPI
 png_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr,
     png_sPLT_tpp spalettes)
 {
+   png_debug1(1, "in %s retrieval function", "sPLT");
+
    if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
    {
       *spalettes = info_ptr->splt_palettes;
       return info_ptr->splt_palettes_num;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -835,10 +835,10 @@ png_get_eXIf_1(png_const_structrp png_ptr, png_const_inforp info_ptr,
    {
       *num_exif = info_ptr->num_exif;
       *exif = info_ptr->exif;
-      return (PNG_INFO_eXIf);
+      return PNG_INFO_eXIf;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -853,10 +853,10 @@ png_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
        (info_ptr->valid & PNG_INFO_hIST) != 0 && hist != NULL)
    {
       *hist = info_ptr->hist;
-      return (PNG_INFO_hIST);
+      return PNG_INFO_hIST;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -869,7 +869,7 @@ png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
    png_debug1(1, "in %s retrieval function", "IHDR");
 
    if (png_ptr == NULL || info_ptr == NULL)
-      return (0);
+      return 0;
 
    if (width != NULL)
        *width = info_ptr->width;
@@ -901,7 +901,7 @@ png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
        info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
        info_ptr->compression_type, info_ptr->filter_type);
 
-   return (1);
+   return 1;
 }
 
 #ifdef PNG_oFFs_SUPPORTED
@@ -918,10 +918,10 @@ png_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr,
       *offset_x = info_ptr->x_offset;
       *offset_y = info_ptr->y_offset;
       *unit_type = (int)info_ptr->offset_unit_type;
-      return (PNG_INFO_oFFs);
+      return PNG_INFO_oFFs;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -945,10 +945,10 @@ png_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
       *nparams = (int)info_ptr->pcal_nparams;
       *units = info_ptr->pcal_units;
       *params = info_ptr->pcal_params;
-      return (PNG_INFO_pCAL);
+      return PNG_INFO_pCAL;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -960,6 +960,8 @@ png_uint_32 PNGAPI
 png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
     int *unit, png_fixed_point *width, png_fixed_point *height)
 {
+   png_debug1(1, "in %s retrieval function", "sCAL");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_sCAL) != 0)
    {
@@ -971,10 +973,10 @@ png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
       *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
       *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
           "sCAL height");
-      return (PNG_INFO_sCAL);
+      return PNG_INFO_sCAL;
    }
 
-   return(0);
+   return 0;
 }
 #    endif /* FLOATING_ARITHMETIC */
 #  endif /* FIXED_POINT */
@@ -983,32 +985,36 @@ png_uint_32 PNGAPI
 png_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
     int *unit, double *width, double *height)
 {
+   png_debug1(1, "in %s retrieval function", "sCAL(float)");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_sCAL) != 0)
    {
       *unit = info_ptr->scal_unit;
       *width = atof(info_ptr->scal_s_width);
       *height = atof(info_ptr->scal_s_height);
-      return (PNG_INFO_sCAL);
+      return PNG_INFO_sCAL;
    }
 
-   return(0);
+   return 0;
 }
 #  endif /* FLOATING POINT */
 png_uint_32 PNGAPI
 png_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr,
     int *unit, png_charpp width, png_charpp height)
 {
+   png_debug1(1, "in %s retrieval function", "sCAL(str)");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_sCAL) != 0)
    {
       *unit = info_ptr->scal_unit;
       *width = info_ptr->scal_s_width;
       *height = info_ptr->scal_s_height;
-      return (PNG_INFO_sCAL);
+      return PNG_INFO_sCAL;
    }
 
-   return(0);
+   return 0;
 }
 #endif /* sCAL */
 
@@ -1043,7 +1049,7 @@ png_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr,
       }
    }
 
-   return (retval);
+   return retval;
 }
 #endif /* pHYs */
 
@@ -1059,10 +1065,10 @@ png_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr,
       *palette = info_ptr->palette;
       *num_palette = info_ptr->num_palette;
       png_debug1(3, "num_palette = %d", *num_palette);
-      return (PNG_INFO_PLTE);
+      return PNG_INFO_PLTE;
    }
 
-   return (0);
+   return 0;
 }
 
 #ifdef PNG_sBIT_SUPPORTED
@@ -1076,10 +1082,10 @@ png_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
        (info_ptr->valid & PNG_INFO_sBIT) != 0 && sig_bit != NULL)
    {
       *sig_bit = &(info_ptr->sig_bit);
-      return (PNG_INFO_sBIT);
+      return PNG_INFO_sBIT;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -1090,7 +1096,7 @@ png_get_text(png_const_structrp png_ptr, png_inforp info_ptr,
 {
    if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
    {
-      png_debug1(1, "in 0x%lx retrieval function",
+      png_debug1(1, "in text retrieval function, chunk typeid = 0x%lx",
          (unsigned long)png_ptr->chunk_name);
 
       if (text_ptr != NULL)
@@ -1105,7 +1111,7 @@ png_get_text(png_const_structrp png_ptr, png_inforp info_ptr,
    if (num_text != NULL)
       *num_text = 0;
 
-   return(0);
+   return 0;
 }
 #endif
 
@@ -1120,10 +1126,10 @@ png_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
        (info_ptr->valid & PNG_INFO_tIME) != 0 && mod_time != NULL)
    {
       *mod_time = &(info_ptr->mod_time);
-      return (PNG_INFO_tIME);
+      return PNG_INFO_tIME;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -1133,11 +1139,12 @@ png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
     png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)
 {
    png_uint_32 retval = 0;
+
+   png_debug1(1, "in %s retrieval function", "tRNS");
+
    if (png_ptr != NULL && info_ptr != NULL &&
        (info_ptr->valid & PNG_INFO_tRNS) != 0)
    {
-      png_debug1(1, "in %s retrieval function", "tRNS");
-
       if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
       {
          if (trans_alpha != NULL)
@@ -1169,7 +1176,7 @@ png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
       }
    }
 
-   return (retval);
+   return retval;
 }
 #endif
 
@@ -1184,7 +1191,7 @@ png_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr,
       return info_ptr->unknown_chunks_num;
    }
 
-   return (0);
+   return 0;
 }
 #endif
 
@@ -1280,7 +1287,7 @@ png_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr)
    if (png_ptr != NULL && info_ptr != NULL)
       return png_ptr->num_palette_max;
 
-   return (-1);
+   return -1;
 }
 #  endif
 #endif
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pnglibconf.h b/src/java.desktop/share/native/libsplashscreen/libpng/pnglibconf.h
index e98d49cf0cc..e238ccdb9a4 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pnglibconf.h
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pnglibconf.h
@@ -31,7 +31,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  */
-/* libpng version 1.6.40 */
+/* libpng version 1.6.43 */
 
 /* Copyright (c) 2018-2023 Cosmin Truta */
 /* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngpread.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngpread.c
index a98b2013256..816631cae18 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngpread.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngpread.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -173,10 +173,10 @@ png_push_read_sig(png_structrp png_ptr, png_inforp info_ptr)
        num_to_check);
    png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes + num_to_check);
 
-   if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
+   if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check) != 0)
    {
       if (num_checked < 4 &&
-          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
+          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4) != 0)
          png_error(png_ptr, "Not a PNG file");
 
       else
@@ -322,6 +322,14 @@ png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
       png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length);
    }
 
+#endif
+#ifdef PNG_READ_eXIf_SUPPORTED
+   else if (png_ptr->chunk_name == png_eXIf)
+   {
+      PNG_PUSH_SAVE_BUFFER_IF_FULL
+      png_handle_eXIf(png_ptr, info_ptr, png_ptr->push_length);
+   }
+
 #endif
 #ifdef PNG_READ_sRGB_SUPPORTED
    else if (chunk_name == png_sRGB)
@@ -1117,7 +1125,7 @@ png_voidp PNGAPI
 png_get_progressive_ptr(png_const_structrp png_ptr)
 {
    if (png_ptr == NULL)
-      return (NULL);
+      return NULL;
 
    return png_ptr->io_ptr;
 }
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngpriv.h b/src/java.desktop/share/native/libsplashscreen/libpng/pngpriv.h
index 914d0b97b1d..18424542b00 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngpriv.h
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngpriv.h
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2023 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -64,7 +64,7 @@
  * still required (as of 2011-05-02.)
  */
 #ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
+#  define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
 #endif
 
 #ifndef PNG_VERSION_INFO_ONLY
@@ -218,13 +218,27 @@
 #endif /* PNG_ARM_NEON_OPT > 0 */
 
 #ifndef PNG_MIPS_MSA_OPT
-#  if defined(__mips_msa) && (__mips_isa_rev >= 5) && defined(PNG_ALIGNED_MEMORY_SUPPORTED)
+#  if defined(__mips_msa) && (__mips_isa_rev >= 5) && \
+   defined(PNG_ALIGNED_MEMORY_SUPPORTED)
 #     define PNG_MIPS_MSA_OPT 2
 #  else
 #     define PNG_MIPS_MSA_OPT 0
 #  endif
 #endif
 
+#ifndef PNG_MIPS_MMI_OPT
+#  ifdef PNG_MIPS_MMI
+#    if defined(__mips_loongson_mmi) && (_MIPS_SIM == _ABI64) && \
+     defined(PNG_ALIGNED_MEMORY_SUPPORTED)
+#       define PNG_MIPS_MMI_OPT 1
+#    else
+#       define PNG_MIPS_MMI_OPT 0
+#    endif
+#  else
+#    define PNG_MIPS_MMI_OPT 0
+#  endif
+#endif
+
 #ifndef PNG_POWERPC_VSX_OPT
 #  if defined(__PPC64__) && defined(__ALTIVEC__) && defined(__VSX__)
 #     define PNG_POWERPC_VSX_OPT 2
@@ -233,13 +247,21 @@
 #  endif
 #endif
 
+#ifndef PNG_LOONGARCH_LSX_OPT
+#  if defined(__loongarch_sx)
+#     define PNG_LOONGARCH_LSX_OPT 1
+#  else
+#     define PNG_LOONGARCH_LSX_OPT 0
+#  endif
+#endif
+
 #ifndef PNG_INTEL_SSE_OPT
 #   ifdef PNG_INTEL_SSE
       /* Only check for SSE if the build configuration has been modified to
        * enable SSE optimizations.  This means that these optimizations will
        * be off by default.  See contrib/intel for more details.
        */
-#     if defined(__SSE4_1__) || defined(__AVX__) || defined(__SSSE3__) || \
+#      if defined(__SSE4_1__) || defined(__AVX__) || defined(__SSSE3__) || \
        defined(__SSE2__) || defined(_M_X64) || defined(_M_AMD64) || \
        (defined(_M_IX86_FP) && _M_IX86_FP >= 2)
 #         define PNG_INTEL_SSE_OPT 1
@@ -276,7 +298,6 @@
 #endif
 
 #if PNG_MIPS_MSA_OPT > 0
-#  define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_msa
 #  ifndef PNG_MIPS_MSA_IMPLEMENTATION
 #     if defined(__mips_msa)
 #        if defined(__clang__)
@@ -292,11 +313,28 @@
 
 #  ifndef PNG_MIPS_MSA_IMPLEMENTATION
 #     define PNG_MIPS_MSA_IMPLEMENTATION 1
+#     define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_mips
 #  endif
 #else
 #  define PNG_MIPS_MSA_IMPLEMENTATION 0
 #endif /* PNG_MIPS_MSA_OPT > 0 */
 
+#if PNG_MIPS_MMI_OPT > 0
+#  ifndef PNG_MIPS_MMI_IMPLEMENTATION
+#     if defined(__mips_loongson_mmi) && (_MIPS_SIM == _ABI64)
+#        define PNG_MIPS_MMI_IMPLEMENTATION 2
+#     else /* !defined __mips_loongson_mmi  || _MIPS_SIM != _ABI64 */
+#        define PNG_MIPS_MMI_IMPLEMENTATION 0
+#     endif /* __mips_loongson_mmi  && _MIPS_SIM == _ABI64 */
+#  endif /* !PNG_MIPS_MMI_IMPLEMENTATION */
+
+#   if PNG_MIPS_MMI_IMPLEMENTATION > 0
+#      define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_mips
+#   endif
+#else
+#   define PNG_MIPS_MMI_IMPLEMENTATION 0
+#endif /* PNG_MIPS_MMI_OPT > 0 */
+
 #if PNG_POWERPC_VSX_OPT > 0
 #  define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_vsx
 #  define PNG_POWERPC_VSX_IMPLEMENTATION 1
@@ -304,6 +342,12 @@
 #  define PNG_POWERPC_VSX_IMPLEMENTATION 0
 #endif
 
+#if PNG_LOONGARCH_LSX_OPT > 0
+#   define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_lsx
+#   define PNG_LOONGARCH_LSX_IMPLEMENTATION 1
+#else
+#   define PNG_LOONGARCH_LSX_IMPLEMENTATION 0
+#endif
 
 /* Is this a build of a DLL where compilation of the object modules requires
  * different preprocessor settings to those required for a simple library?  If
@@ -542,18 +586,8 @@
     */
 #  include 
 
-#  if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
-    defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
-   /* We need to check that  hasn't already been included earlier
-    * as it seems it doesn't agree with , yet we should really use
-    *  if possible.
-    */
-#    if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
-#      include 
-#    endif
-#  else
-#    include 
-#  endif
+#  include 
+
 #  if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
    /* Amiga SAS/C: We must include builtin FPU functions when compiling using
     * MATH=68881
@@ -1334,7 +1368,7 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
     row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
 #endif
 
-#if PNG_MIPS_MSA_OPT > 0
+#if PNG_MIPS_MSA_IMPLEMENTATION == 1
 PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_msa,(png_row_infop row_info,
     png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
 PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_msa,(png_row_infop
@@ -1351,6 +1385,23 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_msa,(png_row_infop
     row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
 #endif
 
+#if PNG_MIPS_MMI_IMPLEMENTATION > 0
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_mmi,(png_row_infop row_info,
+    png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_mmi,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_mmi,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_mmi,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_mmi,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_mmi,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_mmi,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+#endif
+
 #if PNG_POWERPC_VSX_OPT > 0
 PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_vsx,(png_row_infop row_info,
     png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
@@ -1383,6 +1434,23 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_sse2,(png_row_infop
     row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
 #endif
 
+#if PNG_LOONGARCH_LSX_IMPLEMENTATION == 1
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_lsx,(png_row_infop
+    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
+#endif
+
 /* Choose the best filter to use and filter the row data */
 PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
     png_row_infop row_info),PNG_EMPTY);
@@ -2122,17 +2190,27 @@ PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
    (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
 #endif
 
-#if PNG_MIPS_MSA_OPT > 0
-PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_msa,
+#if PNG_MIPS_MSA_IMPLEMENTATION == 1
+PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_mips,
    (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
 #endif
 
+#  if PNG_MIPS_MMI_IMPLEMENTATION > 0
+PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_mips,
+   (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
+#  endif
+
 #  if PNG_INTEL_SSE_IMPLEMENTATION > 0
 PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_sse2,
    (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
 #  endif
 #endif
 
+#if PNG_LOONGARCH_LSX_OPT > 0
+PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_lsx,
+    (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
+#endif
+
 PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
    png_const_charp key, png_bytep new_key), PNG_EMPTY);
 
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngread.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngread.c
index 3631e60f36b..e9e94477545 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngread.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngread.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -596,7 +596,11 @@ png_read_row(png_structrp png_ptr, png_bytep row, png_bytep dsp_row)
 #endif
 
 #ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   if (png_ptr->transformations)
+   if (png_ptr->transformations
+#     ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
+         || png_ptr->num_palette_max >= 0
+#     endif
+      )
       png_do_read_transformations(png_ptr, &row_info);
 #endif
 
@@ -813,7 +817,7 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
 #ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
    /* Report invalid palette index; added at libng-1.5.10 */
    if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-       png_ptr->num_palette_max > png_ptr->num_palette)
+       png_ptr->num_palette_max >= png_ptr->num_palette)
       png_benign_error(png_ptr, "Read palette index exceeding num_palette");
 #endif
 
@@ -1077,6 +1081,8 @@ void PNGAPI
 png_read_png(png_structrp png_ptr, png_inforp info_ptr,
     int transforms, voidp params)
 {
+   png_debug(1, "in png_read_png");
+
    if (png_ptr == NULL || info_ptr == NULL)
       return;
 
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngrtran.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngrtran.c
index 843eb5fff2a..a393de4b79d 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngrtran.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngrtran.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2019 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -318,21 +318,20 @@ png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
    int compose = 0;
    png_fixed_point file_gamma;
 
-   png_debug(1, "in png_set_alpha_mode");
+   png_debug(1, "in png_set_alpha_mode_fixed");
 
    if (png_rtran_ok(png_ptr, 0) == 0)
       return;
 
    output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);
 
-   /* Validate the value to ensure it is in a reasonable range. The value
+   /* Validate the value to ensure it is in a reasonable range.  The value
     * is expected to be 1 or greater, but this range test allows for some
-    * viewing correction values.  The intent is to weed out users of this API
-    * who use the inverse of the gamma value accidentally!  Since some of these
-    * values are reasonable this may have to be changed:
+    * viewing correction values.  The intent is to weed out the API users
+    * who might use the inverse of the gamma value accidentally!
     *
-    * 1.6.x: changed from 0.07..3 to 0.01..100 (to accommodate the optimal 16-bit
-    * gamma of 36, and its reciprocal.)
+    * In libpng 1.6.0, we changed from 0.07..3 to 0.01..100, to accommodate
+    * the optimal 16-bit gamma of 36 and its reciprocal.
     */
    if (output_gamma < 1000 || output_gamma > 10000000)
       png_error(png_ptr, "output gamma out of expected range");
@@ -469,7 +468,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette,
       int i;
 
       png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,
-          (png_alloc_size_t)((png_uint_32)num_palette * (sizeof (png_byte))));
+          (png_alloc_size_t)num_palette);
       for (i = 0; i < num_palette; i++)
          png_ptr->quantize_index[i] = (png_byte)i;
    }
@@ -486,7 +485,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette,
 
          /* Initialize an array to sort colors */
          png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,
-             (png_alloc_size_t)((png_uint_32)num_palette * (sizeof (png_byte))));
+             (png_alloc_size_t)num_palette);
 
          /* Initialize the quantize_sort array */
          for (i = 0; i < num_palette; i++)
@@ -620,11 +619,9 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette,
 
          /* Initialize palette index arrays */
          png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
-             (png_alloc_size_t)((png_uint_32)num_palette *
-             (sizeof (png_byte))));
+             (png_alloc_size_t)num_palette);
          png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
-             (png_alloc_size_t)((png_uint_32)num_palette *
-             (sizeof (png_byte))));
+             (png_alloc_size_t)num_palette);
 
          /* Initialize the sort array */
          for (i = 0; i < num_palette; i++)
@@ -789,12 +786,11 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette,
       size_t num_entries = ((size_t)1 << total_bits);
 
       png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
-          (png_alloc_size_t)(num_entries * (sizeof (png_byte))));
+          (png_alloc_size_t)(num_entries));
 
-      distance = (png_bytep)png_malloc(png_ptr, (png_alloc_size_t)(num_entries *
-          (sizeof (png_byte))));
+      distance = (png_bytep)png_malloc(png_ptr, (png_alloc_size_t)num_entries);
 
-      memset(distance, 0xff, num_entries * (sizeof (png_byte)));
+      memset(distance, 0xff, num_entries);
 
       for (i = 0; i < num_palette; i++)
       {
@@ -998,7 +994,7 @@ void PNGFAPI
 png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
     png_fixed_point red, png_fixed_point green)
 {
-   png_debug(1, "in png_set_rgb_to_gray");
+   png_debug(1, "in png_set_rgb_to_gray_fixed");
 
    /* Need the IHDR here because of the check on color_type below. */
    /* TODO: fix this */
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngrutil.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngrutil.c
index 524297c5a10..5280140d12b 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngrutil.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngrutil.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2022 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -54,7 +54,7 @@ png_get_uint_31(png_const_structrp png_ptr, png_const_bytep buf)
    if (uval > PNG_UINT_31_MAX)
       png_error(png_ptr, "PNG unsigned integer out of range");
 
-   return (uval);
+   return uval;
 }
 
 #if defined(PNG_READ_gAMA_SUPPORTED) || defined(PNG_READ_cHRM_SUPPORTED)
@@ -168,7 +168,7 @@ png_read_sig(png_structrp png_ptr, png_inforp info_ptr)
    if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check) != 0)
    {
       if (num_checked < 4 &&
-          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
+          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4) != 0)
          png_error(png_ptr, "Not a PNG file");
       else
          png_error(png_ptr, "PNG file corrupted by ASCII conversion");
@@ -199,7 +199,7 @@ png_read_chunk_header(png_structrp png_ptr)
    /* Put the chunk name into png_ptr->chunk_name. */
    png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(buf+4);
 
-   png_debug2(0, "Reading %lx chunk, length = %lu",
+   png_debug2(0, "Reading chunk typeid = 0x%lx, length = %lu",
        (unsigned long)png_ptr->chunk_name, (unsigned long)length);
 
    /* Reset the crc and run it over the chunk name. */
@@ -266,10 +266,10 @@ png_crc_finish(png_structrp png_ptr, png_uint_32 skip)
       else
          png_chunk_error(png_ptr, "CRC error");
 
-      return (1);
+      return 1;
    }
 
-   return (0);
+   return 0;
 }
 
 /* Compare the CRC stored in the PNG file with that calculated by libpng from
@@ -305,11 +305,11 @@ png_crc_error(png_structrp png_ptr)
    if (need_crc != 0)
    {
       crc = png_get_uint_32(crc_bytes);
-      return ((int)(crc != png_ptr->crc));
+      return crc != png_ptr->crc;
    }
 
    else
-      return (0);
+      return 0;
 }
 
 #if defined(PNG_READ_iCCP_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) ||\
@@ -449,8 +449,7 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
             png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
       }
 
-#if ZLIB_VERNUM >= 0x1290 && \
-   defined(PNG_SET_OPTION_SUPPORTED) && defined(PNG_IGNORE_ADLER32)
+#ifdef PNG_DISABLE_ADLER32_CHECK_SUPPORTED
       if (((png_ptr->options >> PNG_IGNORE_ADLER32) & 3) == PNG_OPTION_ON)
          /* Turn off validation of the ADLER32 checksum in IDAT chunks */
          ret = inflateValidate(&png_ptr->zstream, 0);
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngset.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngset.c
index 62612a02278..f53ab6fa1d1 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngset.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngset.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018-2023 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -791,11 +791,11 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
 {
    int i;
 
-   png_debug1(1, "in %lx storage function", png_ptr == NULL ? 0xabadca11U :
-      (unsigned long)png_ptr->chunk_name);
+   png_debug1(1, "in text storage function, chunk typeid = 0x%lx",
+      png_ptr == NULL ? 0xabadca11UL : (unsigned long)png_ptr->chunk_name);
 
    if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
-      return(0);
+      return 0;
 
    /* Make sure we have enough space in the "text" array in info_struct
     * to hold all of the incoming text_ptr objects.  This compare can't overflow
@@ -975,7 +975,7 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
       png_debug1(3, "transferred text chunk %d", info_ptr->num_text);
    }
 
-   return(0);
+   return 0;
 }
 #endif
 
@@ -1091,6 +1091,8 @@ png_set_sPLT(png_const_structrp png_ptr,
 {
    png_sPLT_tp np;
 
+   png_debug1(1, "in %s storage function", "sPLT");
+
    if (png_ptr == NULL || info_ptr == NULL || nentries <= 0 || entries == NULL)
       return;
 
@@ -1565,7 +1567,7 @@ void PNGAPI
 png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
     png_bytepp row_pointers)
 {
-   png_debug1(1, "in %s storage function", "rows");
+   png_debug(1, "in png_set_rows");
 
    if (png_ptr == NULL || info_ptr == NULL)
       return;
@@ -1584,6 +1586,8 @@ png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
 void PNGAPI
 png_set_compression_buffer_size(png_structrp png_ptr, size_t size)
 {
+   png_debug(1, "in png_set_compression_buffer_size");
+
    if (png_ptr == NULL)
       return;
 
@@ -1655,6 +1659,8 @@ void PNGAPI
 png_set_user_limits(png_structrp png_ptr, png_uint_32 user_width_max,
     png_uint_32 user_height_max)
 {
+   png_debug(1, "in png_set_user_limits");
+
    /* Images with dimensions larger than these limits will be
     * rejected by png_set_IHDR().  To accept any PNG datastream
     * regardless of dimensions, set both limits to 0x7fffffff.
@@ -1670,6 +1676,8 @@ png_set_user_limits(png_structrp png_ptr, png_uint_32 user_width_max,
 void PNGAPI
 png_set_chunk_cache_max(png_structrp png_ptr, png_uint_32 user_chunk_cache_max)
 {
+   png_debug(1, "in png_set_chunk_cache_max");
+
    if (png_ptr != NULL)
       png_ptr->user_chunk_cache_max = user_chunk_cache_max;
 }
@@ -1679,6 +1687,8 @@ void PNGAPI
 png_set_chunk_malloc_max(png_structrp png_ptr,
     png_alloc_size_t user_chunk_malloc_max)
 {
+   png_debug(1, "in png_set_chunk_malloc_max");
+
    if (png_ptr != NULL)
       png_ptr->user_chunk_malloc_max = user_chunk_malloc_max;
 }
diff --git a/src/java.desktop/share/native/libsplashscreen/libpng/pngtrans.c b/src/java.desktop/share/native/libsplashscreen/libpng/pngtrans.c
index 89a62191b6f..2350057e70e 100644
--- a/src/java.desktop/share/native/libsplashscreen/libpng/pngtrans.c
+++ b/src/java.desktop/share/native/libsplashscreen/libpng/pngtrans.c
@@ -29,7 +29,7 @@
  * However, the following notice accompanied the original version of this
  * file and, per its terms, should not be removed:
  *
- * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 2018-2024 Cosmin Truta
  * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
  * Copyright (c) 1996-1997 Andreas Dilger
  * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -131,10 +131,10 @@ png_set_interlace_handling(png_structrp png_ptr)
    if (png_ptr != 0 && png_ptr->interlaced != 0)
    {
       png_ptr->transformations |= PNG_INTERLACE;
-      return (7);
+      return 7;
    }
 
-   return (1);
+   return 1;
 }
 #endif
 
@@ -526,6 +526,8 @@ png_do_strip_channel(png_row_infop row_info, png_bytep row, int at_start)
    png_bytep dp = row; /* destination pointer */
    png_bytep ep = row + row_info->rowbytes; /* One beyond end of row */
 
+   png_debug(1, "in png_do_strip_channel");
+
    /* At the start sp will point to the first byte to copy and dp to where
     * it is copied to.  ep always points just beyond the end of the row, so
     * the loop simply copies (channels-1) channels until sp reaches ep.
@@ -726,6 +728,8 @@ png_do_bgr(png_row_infop row_info, png_bytep row)
 void /* PRIVATE */
 png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info)
 {
+   png_debug(1, "in png_do_check_palette_indexes");
+
    if (png_ptr->num_palette < (1 << row_info->bit_depth) &&
       png_ptr->num_palette > 0) /* num_palette can be 0 in MNG files */
    {
@@ -736,7 +740,7 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info)
        * forms produced on either GCC or MSVC.
        */
       int padding = PNG_PADBITS(row_info->pixel_depth, row_info->width);
-      png_bytep rp = png_ptr->row_buf + row_info->rowbytes - 1;
+      png_bytep rp = png_ptr->row_buf + row_info->rowbytes;
 
       switch (row_info->bit_depth)
       {
@@ -861,7 +865,7 @@ png_voidp PNGAPI
 png_get_user_transform_ptr(png_const_structrp png_ptr)
 {
    if (png_ptr == NULL)
-      return (NULL);
+      return NULL;
 
    return png_ptr->user_transform_ptr;
 }
diff --git a/src/java.sql/share/classes/java/sql/DatabaseMetaData.java b/src/java.sql/share/classes/java/sql/DatabaseMetaData.java
index 6f63c2989b8..f4cb8787b5f 100644
--- a/src/java.sql/share/classes/java/sql/DatabaseMetaData.java
+++ b/src/java.sql/share/classes/java/sql/DatabaseMetaData.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2024, 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
@@ -1215,7 +1215,7 @@ boolean dataDefinitionIgnoredInTransactions()
      * Only procedure descriptions matching the schema and
      * procedure name criteria are returned.  They are ordered by
      * {@code PROCEDURE_CAT}, {@code PROCEDURE_SCHEM},
-     * {@code PROCEDURE_NAME} and {@code SPECIFIC_ NAME}.
+     * {@code PROCEDURE_NAME} and {@code SPECIFIC_NAME}.
      *
      * 

Each procedure description has the following columns: *

    @@ -3289,7 +3289,7 @@ ResultSet getClientInfoProperties() * function name criteria are returned. They are ordered by * {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM}, * {@code FUNCTION_NAME} and - * {@code SPECIFIC_ NAME}. + * {@code SPECIFIC_NAME}. * *

    Each function description has the following columns: *

      @@ -3339,7 +3339,7 @@ ResultSet getFunctions(String catalog, String schemaPattern, * parameter name criteria are returned. They are ordered by * {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM}, * {@code FUNCTION_NAME} and - * {@code SPECIFIC_ NAME}. Within this, the return value, + * {@code SPECIFIC_NAME}. Within this, the return value, * if any, is first. Next are the parameter descriptions in call * order. The column descriptions follow in column number order. * @@ -3358,7 +3358,7 @@ ResultSet getFunctions(String catalog, String schemaPattern, *
    1. functionColumnIn - IN parameter *
    2. functionColumnInOut - INOUT parameter *
    3. functionColumnOut - OUT parameter - *
    4. functionColumnReturn - function return value + *
    5. functionReturn - function return value *
    6. functionColumnResult - Indicates that the parameter or column * is a column in the {@code ResultSet} * diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java index 081367fa26a..45c76071f8b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -1059,6 +1059,11 @@ public String getText() { return ""; } + @Override + public JCDiagnostic.DiagnosticPosition getPos() { + return null; + } + @Override public int getSourcePos(int index) { return offset + index; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java index 94d121ad04d..9fba9b5318b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, 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 @@ -52,10 +52,15 @@ public static DeferredLintHandler instance(Context context) { return instance; } + /** The Lint to use when {@link #immediate(Lint)} is used, + * instead of {@link #setPos(DiagnosticPosition)}. */ + private Lint immediateLint; + @SuppressWarnings("this-escape") protected DeferredLintHandler(Context context) { context.put(deferredLintHandlerKey, this); this.currentPos = IMMEDIATE_POSITION; + immediateLint = Lint.instance(context); } /**An interface for deferred lint reporting - loggers passed to @@ -63,7 +68,7 @@ protected DeferredLintHandler(Context context) { * {@link #flush(DiagnosticPosition) } is invoked. */ public interface LintLogger { - void report(); + void report(Lint lint); } private DiagnosticPosition currentPos; @@ -77,7 +82,7 @@ public interface LintLogger { */ public void report(LintLogger logger) { if (currentPos == IMMEDIATE_POSITION) { - logger.report(); + logger.report(immediateLint); } else { ListBuffer loggers = loggersQueue.get(currentPos); if (loggers == null) { @@ -89,11 +94,11 @@ public void report(LintLogger logger) { /**Invoke all {@link LintLogger}s that were associated with the provided {@code pos}. */ - public void flush(DiagnosticPosition pos) { + public void flush(DiagnosticPosition pos, Lint lint) { ListBuffer loggers = loggersQueue.get(pos); if (loggers != null) { for (LintLogger lintLogger : loggers) { - lintLogger.report(); + lintLogger.report(lint); } loggersQueue.remove(pos); } @@ -112,7 +117,8 @@ public DiagnosticPosition setPos(DiagnosticPosition currentPos) { /**{@link LintLogger}s passed to subsequent invocations of * {@link #report(LintLogger) } will be invoked immediately. */ - public DiagnosticPosition immediate() { + public DiagnosticPosition immediate(Lint lint) { + immediateLint = lint; return setPos(IMMEDIATE_POSITION); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java index 92b2a773ffa..d024dc75225 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -180,6 +180,12 @@ public enum LintCategory { */ CLASSFILE("classfile"), + /** + * Warn about"dangling" documentation comments, + * not attached to any declaration. + */ + DANGLING_DOC_COMMENTS("dangling-doc-comments"), + /** * Warn about use of deprecated items. */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java index 5acb4c384eb..702b51d3b96 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java @@ -1120,6 +1120,7 @@ private String className(Symbol sym, boolean longform) { s += String.valueOf(sym.hashCode()); return s; } else if (longform) { + sym.apiComplete(); return sym.getQualifiedName().toString(); } else { return sym.name.toString(); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java index 71c9d59cb27..40a2da35488 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -254,7 +254,7 @@ public void annotateLater(List annotations, Env local DiagnosticPosition prevLintPos = deferPos != null ? deferredLintHandler.setPos(deferPos) - : deferredLintHandler.immediate(); + : deferredLintHandler.immediate(lint); Lint prevLint = deferPos != null ? null : chk.setLint(lint); try { if (s.hasAnnotations() && annotations.nonEmpty()) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 0d6e39c8b06..d0f3ae7464a 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -979,7 +979,7 @@ public void visitMethodDef(JCMethodDecl tree) { env.info.ctorPrologue = false; MethodSymbol prevMethod = chk.setMethod(m); try { - deferredLintHandler.flush(tree.pos()); + deferredLintHandler.flush(tree.pos(), lint); chk.checkDeprecatedAnnotation(tree.pos(), m); @@ -1280,7 +1280,7 @@ public void visitVarDef(JCVariableDecl tree) { try { v.getConstValue(); // ensure compile-time constant initializer is evaluated - deferredLintHandler.flush(tree.pos()); + deferredLintHandler.flush(tree.pos(), lint); chk.checkDeprecatedAnnotation(tree.pos(), v); if (tree.init != null) { @@ -5297,7 +5297,7 @@ private void attribWithLint(TypeSymbol sym, Consumer> attrib) { JavaFileObject prev = log.useSource(env.toplevel.sourcefile); try { - deferredLintHandler.flush(env.tree.pos()); + deferredLintHandler.flush(env.tree.pos(), lint); attrib.accept(env); } finally { log.useSource(prev); @@ -5472,7 +5472,7 @@ void attribClass(ClassSymbol c) throws CompletionFailure { } } - deferredLintHandler.flush(env.tree); + deferredLintHandler.flush(env.tree, env.info.lint); env.info.returnResult = null; // java.lang.Enum may not be subclassed by a non-enum if (st.tsym == syms.enumSym && @@ -5522,7 +5522,7 @@ public void visitModuleDef(JCModuleDecl tree) { chk.checkDeprecatedAnnotation(tree, msym); try { - deferredLintHandler.flush(tree.pos()); + deferredLintHandler.flush(tree.pos(), lint); } finally { chk.setLint(prevLint); } 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 1e717b2b034..e909afc0bdf 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 @@ -673,7 +673,7 @@ public void checkRedundantCast(Env env, final JCTypeCast tree) { && types.isSameType(tree.expr.type, tree.clazz.type) && !(ignoreAnnotatedCasts && TreeInfo.containsTypeAnnotation(tree.clazz)) && !is292targetTypeCast(tree)) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.CAST)) log.warning(LintCategory.CAST, tree.pos(), Warnings.RedundantCast(tree.clazz.type)); @@ -1350,7 +1350,7 @@ && checkDisjoint(pos, flags, private void warnOnExplicitStrictfp(DiagnosticPosition pos) { DiagnosticPosition prevLintPos = deferredLintHandler.setPos(pos); try { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.STRICTFP)) { log.warning(LintCategory.STRICTFP, pos, Warnings.Strictfp); } @@ -3809,13 +3809,13 @@ void checkDeprecated(Supplier pos, final Symbol other, final || s.isDeprecated() && !other.isDeprecated()) && (s.outermostClass() != other.outermostClass() || s.outermostClass() == null) && s.kind != Kind.PCK) { - deferredLintHandler.report(() -> warnDeprecated(pos.get(), s)); + deferredLintHandler.report(_l -> warnDeprecated(pos.get(), s)); } } void checkSunAPI(final DiagnosticPosition pos, final Symbol s) { if ((s.flags() & PROPRIETARY) != 0) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { log.mandatoryWarning(pos, Warnings.SunProprietary(s)); }); } @@ -3834,10 +3834,10 @@ void checkPreview(DiagnosticPosition pos, Symbol other, Symbol s) { log.error(pos, Errors.IsPreview(s)); } else { preview.markUsesPreview(pos); - deferredLintHandler.report(() -> warnPreviewAPI(pos, Warnings.IsPreview(s))); + deferredLintHandler.report(_l -> warnPreviewAPI(pos, Warnings.IsPreview(s))); } } else { - deferredLintHandler.report(() -> warnPreviewAPI(pos, Warnings.IsPreviewReflective(s))); + deferredLintHandler.report(_l -> warnPreviewAPI(pos, Warnings.IsPreviewReflective(s))); } } if (preview.declaredUsingPreviewFeature(s)) { @@ -3846,14 +3846,14 @@ void checkPreview(DiagnosticPosition pos, Symbol other, Symbol s) { //If "s" is compiled from source, then there was an error for it already; //if "s" is from classfile, there already was an error for the classfile. preview.markUsesPreview(pos); - deferredLintHandler.report(() -> warnDeclaredUsingPreview(pos, s)); + deferredLintHandler.report(_l -> warnDeclaredUsingPreview(pos, s)); } } } void checkRestricted(DiagnosticPosition pos, Symbol s) { if (s.kind == MTH && (s.flags() & RESTRICTED) != 0) { - deferredLintHandler.report(() -> warnRestrictedAPI(pos, s)); + deferredLintHandler.report(_l -> warnRestrictedAPI(pos, s)); } } @@ -4102,7 +4102,7 @@ void checkDivZero(final DiagnosticPosition pos, Symbol operator, Type operand) { int opc = ((OperatorSymbol)operator).opcode; if (opc == ByteCodes.idiv || opc == ByteCodes.imod || opc == ByteCodes.ldiv || opc == ByteCodes.lmod) { - deferredLintHandler.report(() -> warnDivZero(pos)); + deferredLintHandler.report(_l -> warnDivZero(pos)); } } } @@ -4115,7 +4115,7 @@ void checkDivZero(final DiagnosticPosition pos, Symbol operator, Type operand) { */ void checkLossOfPrecision(final DiagnosticPosition pos, Type found, Type req) { if (found.isNumeric() && req.isNumeric() && !types.isAssignable(found, req)) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.LOSSY_CONVERSIONS)) log.warning(LintCategory.LOSSY_CONVERSIONS, pos, Warnings.PossibleLossOfPrecision(found, req)); @@ -4319,7 +4319,7 @@ void checkDefaultConstructor(ClassSymbol c, DiagnosticPosition pos) { // Warning may be suppressed by // annotations; check again for being // enabled in the deferred context. - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.MISSING_EXPLICIT_CTOR)) log.warning(LintCategory.MISSING_EXPLICIT_CTOR, pos, Warnings.MissingExplicitCtor(c, pkg, modle)); @@ -4654,7 +4654,7 @@ private void checkVisible(DiagnosticPosition pos, Symbol what, PackageSymbol inP void checkModuleExists(final DiagnosticPosition pos, ModuleSymbol msym) { if (msym.kind != MDL) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.MODULE)) log.warning(LintCategory.MODULE, pos, Warnings.ModuleNotFound(msym)); }); @@ -4664,7 +4664,7 @@ void checkModuleExists(final DiagnosticPosition pos, ModuleSymbol msym) { void checkPackageExistsForOpens(final DiagnosticPosition pos, PackageSymbol packge) { if (packge.members().isEmpty() && ((packge.flags() & Flags.HAS_RESOURCE) == 0)) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.OPENS)) log.warning(pos, Warnings.PackageEmptyOrNotFound(packge)); }); @@ -4673,7 +4673,7 @@ void checkPackageExistsForOpens(final DiagnosticPosition pos, PackageSymbol pack void checkModuleRequires(final DiagnosticPosition pos, final RequiresDirective rd) { if ((rd.module.flags() & Flags.AUTOMATIC_MODULE) != 0) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (rd.isTransitive() && lint.isEnabled(LintCategory.REQUIRES_TRANSITIVE_AUTOMATIC)) { log.warning(pos, Warnings.RequiresTransitiveAutomatic); } else if (lint.isEnabled(LintCategory.REQUIRES_AUTOMATIC)) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java index eda2772fb75..da008bc4b53 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java @@ -470,7 +470,8 @@ public void visitPackageDef(JCPackageDecl tree) { protected void scanSyntheticBreak(TreeMaker make, JCTree swtch) { if (swtch.hasTag(SWITCH_EXPRESSION)) { - JCYield brk = make.at(Position.NOPOS).Yield(null); + JCYield brk = make.at(Position.NOPOS).Yield(make.Erroneous() + .setType(swtch.type)); brk.target = swtch; scan(brk); } else { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java index af5f3dccdd6..9366e802b16 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -348,7 +348,7 @@ private void resolveImports(JCCompilationUnit tree, Env env) { ImportFilter prevStaticImportFilter = staticImportFilter; ImportFilter prevTypeImportFilter = typeImportFilter; - DiagnosticPosition prevLintPos = deferredLintHandler.immediate(); + DiagnosticPosition prevLintPos = deferredLintHandler.immediate(lint); Lint prevLint = chk.setLint(lint); Env prevEnv = this.env; try { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java index 88de2333069..403cb30921a 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java @@ -34,6 +34,8 @@ import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle; import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.resources.CompilerProperties.Warnings; +import com.sun.tools.javac.tree.EndPosTable; +import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.JCDiagnostic.*; @@ -1207,6 +1209,8 @@ protected static class BasicComment extends PositionTrackingReader implements Co */ CommentStyle cs; + DiagnosticPosition pos; + /** * true if comment contains @deprecated at beginning of a line. */ @@ -1228,6 +1232,12 @@ protected static class BasicComment extends PositionTrackingReader implements Co protected BasicComment(CommentStyle cs, UnicodeReader reader, int pos, int endPos) { super(reader, pos, endPos); this.cs = cs; + this.pos = new SimpleDiagnosticPosition(pos) { + @Override + public int getEndPosition(EndPosTable endPosTable) { + return endPos; + } + }; } /** @@ -1239,6 +1249,10 @@ public String getText() { return null; } + public DiagnosticPosition getPos() { + return pos; + } + /** * Return buffer position in original buffer mapped from buffer position in comment. * diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index bc53b18b3a5..4eb7aa7c17d 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -111,6 +111,12 @@ public class JavacParser implements Parser { /** End position mappings container */ protected final AbstractEndPosTable endPosTable; + /** A map associating "other nearby documentation comments" + * with the preferred documentation comment for a declaration. */ + protected Map> danglingComments = new HashMap<>(); + /** Handler for deferred diagnostics. */ + protected final DeferredLintHandler deferredLintHandler; + // Because of javac's limited lookahead, some contexts are ambiguous in // the presence of type annotations even though they are not ambiguous // in the absence of type annotations. Consider this code: @@ -181,6 +187,7 @@ protected JavacParser(ParserFactory fac, this.names = fac.names; this.source = fac.source; this.preview = fac.preview; + this.deferredLintHandler = fac.deferredLintHandler; this.allowStringFolding = fac.options.getBoolean("allowStringFolding", true); this.keepDocComments = keepDocComments; this.parseModuleInfo = parseModuleInfo; @@ -205,6 +212,7 @@ protected JavacParser(JavacParser parser, this.names = parser.names; this.source = parser.source; this.preview = parser.preview; + this.deferredLintHandler = parser.deferredLintHandler; this.allowStringFolding = parser.allowStringFolding; this.keepDocComments = parser.keepDocComments; this.parseModuleInfo = false; @@ -551,16 +559,119 @@ protected void checkNoMods(int pos, long mods) { */ private final DocCommentTable docComments; + /** Record nearby documentation comments against the + * primary documentation comment for a declaration. + * + * Dangling documentation comments are handled as follows. + * 1. {@code Scanner} adds all doc comments to a queue of + * recent doc comments. The queue is flushed whenever + * it is known that the recent doc comments should be + * ignored and should not cause any warnings. + * 2. The primary documentation comment is the one obtained + * from the first token of any declaration. + * (using {@code token.getDocComment()}. + * 3. At the end of the "signature" of the declaration + * (that is, before any initialization or body for the + * declaration) any other "recent" comments are saved + * in a map using the primary comment as a key, + * using this method, {@code saveDanglingComments}. + * 4. When the tree node for the declaration is finally + * available, and the primary comment, if any, + * is "attached", (in {@link #attach}) any related + * dangling comments are also attached to the tree node + * by registering them using the {@link #deferredLintHandler}. + * 5. (Later) Warnings may be generated for the dangling + * comments, subject to the {@code -Xlint} and + * {@code @SuppressWarnings}. + * + * @param dc the primary documentation comment + */ + private void saveDanglingDocComments(Comment dc) { + var recentComments = S.getDocComments(); + + switch (recentComments.size()) { + case 0: + // no recent comments + return; + + case 1: + if (recentComments.peek() == dc) { + // no other recent comments + recentComments.remove(); + return; + } + } + + var lb = new ListBuffer(); + while (!recentComments.isEmpty()) { + var c = recentComments.remove(); + if (c != dc) { + lb.add(c); + } + } + danglingComments.put(dc, lb.toList()); + } + /** Make an entry into docComments hashtable, * provided flag keepDocComments is set and given doc comment is non-null. + * If there are any related "dangling comments", register + * diagnostics to be handled later, when @SuppressWarnings + * can be taken into account. + * * @param tree The tree to be used as index in the hashtable * @param dc The doc comment to associate with the tree, or null. */ protected void attach(JCTree tree, Comment dc) { if (keepDocComments && dc != null) { -// System.out.println("doc comment = ");System.out.println(dc);//DEBUG docComments.putComment(tree, dc); } + reportDanglingComments(tree, dc); + } + + /** Reports all dangling comments associated with the + * primary comment for a declaration against the position + * of the tree node for a declaration. + * + * @param tree the tree node for the declaration + * @param dc the primary comment for the declaration + */ + void reportDanglingComments(JCTree tree, Comment dc) { + var list = danglingComments.remove(dc); + if (list != null) { + var prevPos = deferredLintHandler.setPos(tree); + try { + list.forEach(this::reportDanglingDocComment); + } finally { + deferredLintHandler.setPos(prevPos); + } + } + } + + /** + * Reports an individual dangling comment using the {@link #deferredLintHandler}. + * The comment may or not may generate an actual diagnostic, depending on + * the settings for {@code -Xlint} and/or {@code @SuppressWarnings}. + * + * @param c the comment + */ + void reportDanglingDocComment(Comment c) { + var pos = c.getPos(); + if (pos != null) { + deferredLintHandler.report(lint -> { + if (lint.isEnabled(Lint.LintCategory.DANGLING_DOC_COMMENTS)) { + log.warning(Lint.LintCategory.DANGLING_DOC_COMMENTS, + pos, Warnings.DanglingDocComment); + } + }); + } + } + + /** + * Ignores any recent documentation comments found by the scanner, + * such as those that cannot be associated with a nearby declaration. + */ + private void ignoreDanglingComments() { + S.getDocComments().clear(); } /* -------- source positions ------- */ @@ -2626,6 +2737,7 @@ JCNewClass classCreatorRest(int newpos, List args = arguments(); JCClassDecl body = null; if (token.kind == LBRACE) { + ignoreDanglingComments(); // ignore any comments from before the '{' int pos = token.pos; List defs = classInterfaceOrRecordBody(names.empty, false, false); JCModifiers mods = F.at(Position.NOPOS).Modifiers(0); @@ -2678,6 +2790,7 @@ JCExpression parExpression() { */ JCBlock block(int pos, long flags) { accept(LBRACE); + ignoreDanglingComments(); // ignore any comments from before the '{' List stats = blockStatements(); JCBlock t = F.at(pos).Block(flags, stats); while (token.kind == CASE || token.kind == DEFAULT) { @@ -2709,6 +2822,7 @@ List blockStatements() { ListBuffer stats = new ListBuffer<>(); while (true) { List stat = blockStatement(); + ignoreDanglingComments(); // ignore comments not consumed by the statement if (stat.isEmpty()) { return stats.toList(); } else { @@ -2780,7 +2894,7 @@ List blockStatement() { return List.of(classOrRecordOrInterfaceOrEnumDeclaration(mods, dc)); } else { JCExpression t = parseType(true); - return localVariableDeclarations(mods, t); + return localVariableDeclarations(mods, t, dc); } } case ABSTRACT: case STRICTFP: { @@ -2866,8 +2980,8 @@ List blockStatement() { } } } + dc = token.docComment(); if (isRecordStart() && allowRecords) { - dc = token.docComment(); return List.of(recordDeclaration(F.at(pos).Modifiers(0), dc)); } else { Token prevToken = token; @@ -2880,7 +2994,7 @@ List blockStatement() { pos = token.pos; JCModifiers mods = F.at(Position.NOPOS).Modifiers(0); F.at(pos); - return localVariableDeclarations(mods, t); + return localVariableDeclarations(mods, t, dc); } else { // This Exec is an "ExpressionStatement"; it subsumes the terminating semicolon t = checkExprStat(t); @@ -2891,7 +3005,11 @@ List blockStatement() { } } //where - private List localVariableDeclarations(JCModifiers mods, JCExpression type) { + private List localVariableDeclarations(JCModifiers mods, JCExpression type, Comment dc) { + if (dc != null) { + // ignore a well-placed doc comment, but save any misplaced ones + saveDanglingDocComments(dc); + } ListBuffer stats = variableDeclarators(mods, type, new ListBuffer<>(), true); // A "LocalVariableDeclarationStatement" subsumes the terminating semicolon @@ -2919,6 +3037,7 @@ private List localVariableDeclarations(JCModifiers mods, JCExpressi * | ";" */ public JCStatement parseSimpleStatement() { + ignoreDanglingComments(); // ignore comments before statement int pos = token.pos; switch (token.kind) { case LBRACE: @@ -3649,6 +3768,8 @@ JCVariableDecl variableDeclaratorRest(int pos, JCModifiers mods, JCExpression ty name = names.empty; } + saveDanglingDocComments(dc); + if (token.kind == EQ) { nextToken(); init = variableInitializer(); @@ -4221,6 +4342,9 @@ protected JCClassDecl classDeclaration(JCModifiers mods, Comment dc) { implementing = typeList(); } List permitting = permitsClause(mods, "class"); + + saveDanglingDocComments(dc); + List defs = classInterfaceOrRecordBody(name, false, false); JCClassDecl result = toP(F.at(pos).ClassDef( mods, name, typarams, extending, implementing, permitting, defs)); @@ -4243,6 +4367,9 @@ protected JCClassDecl recordDeclaration(JCModifiers mods, Comment dc) { nextToken(); implementing = typeList(); } + + saveDanglingDocComments(dc); + List defs = classInterfaceOrRecordBody(name, false, true); java.util.List fields = new ArrayList<>(); for (JCVariableDecl field : headerFields) { @@ -4302,6 +4429,9 @@ protected JCClassDecl interfaceDeclaration(JCModifiers mods, Comment dc) { extending = typeList(); } List permitting = permitsClause(mods, "interface"); + + saveDanglingDocComments(dc); + List defs; defs = classInterfaceOrRecordBody(name, true, false); JCClassDecl result = toP(F.at(pos).ClassDef( @@ -4347,6 +4477,8 @@ protected JCClassDecl enumDeclaration(JCModifiers mods, Comment dc) { implementing = typeList(); } + saveDanglingDocComments(dc); + List defs = enumBody(name); mods.flags |= Flags.ENUM; JCClassDecl result = toP(F.at(pos). @@ -4474,8 +4606,12 @@ JCTree enumeratorDeclaration(Name enumName) { int identPos = token.pos; Name name = ident(); int createPos = token.pos; + + saveDanglingDocComments(dc); + List args = (token.kind == LPAREN) ? arguments() : List.nil(); + JCClassDecl body = null; if (token.kind == LBRACE) { JCModifiers mods1 = F.at(Position.NOPOS).Modifiers(Flags.ENUM); @@ -4580,6 +4716,7 @@ protected List classOrInterfaceOrRecordBodyDeclaration(JCModifiers mods, } else if (isRecord && (mods.flags & Flags.STATIC) == 0) { log.error(DiagnosticFlag.SYNTAX, token.pos, Errors.InstanceInitializerNotAllowedInRecords); } + ignoreDanglingComments(); // no declaration with which dangling comments can be associated return List.of(block(pos, mods.flags)); } else { return constructorOrMethodOrFieldDeclaration(mods, className, isInterface, isRecord, dc); @@ -4857,6 +4994,9 @@ protected JCTree methodDeclaratorRest(int pos, thrown = qualidentList(true); } } + + saveDanglingDocComments(dc); + JCBlock body = null; JCExpression defaultValue; if (token.kind == LBRACE) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java index 2223999bebe..bff4e027db7 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -25,6 +25,8 @@ package com.sun.tools.javac.parser; +import java.util.Queue; + import com.sun.tools.javac.parser.Tokens.*; import com.sun.tools.javac.util.Position.LineMap; @@ -89,4 +91,16 @@ public interface Lexer { * @return a LineMap */ LineMap getLineMap(); + + /** + * Returns a queue for the documentation comments encountered + * in a compilation unit. + * + * Comments may be added to this queue by the implementation; + * clients may remove them from the queue as they are analyzed. + * + * Note: all comments may also be associated with the following + * token. + */ + Queue getDocComments(); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java index d27a785e363..3c07c382aa3 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, 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 @@ -27,6 +27,8 @@ import java.util.Locale; +import com.sun.tools.javac.code.DeferredLintHandler; +import com.sun.tools.javac.code.Lint; import com.sun.tools.javac.code.Preview; import com.sun.tools.javac.code.Source; import com.sun.tools.javac.tree.DocTreeMaker; @@ -68,6 +70,7 @@ public static ParserFactory instance(Context context) { final Options options; final ScannerFactory scannerFactory; final Locale locale; + final DeferredLintHandler deferredLintHandler; @SuppressWarnings("this-escape") protected ParserFactory(Context context) { @@ -83,6 +86,7 @@ protected ParserFactory(Context context) { this.options = Options.instance(context); this.scannerFactory = ScannerFactory.instance(context); this.locale = context.get(Locale.class); + this.deferredLintHandler = DeferredLintHandler.instance(context); } public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java index 3cfb8b9ddbe..a182c74b07b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, 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 @@ -26,8 +26,10 @@ package com.sun.tools.javac.parser; import java.nio.*; +import java.util.ArrayDeque; import java.util.List; import java.util.ArrayList; +import java.util.Queue; import com.sun.tools.javac.util.Position.LineMap; import static com.sun.tools.javac.parser.Tokens.*; @@ -58,6 +60,11 @@ public class Scanner implements Lexer { private final JavaTokenizer tokenizer; + /** Queue of recently seen documentation comments. + * It is assumed the queue will typically be small. + */ + private final Queue docComments = new ArrayDeque<>(); + /** * Create a scanner from the input array. This method might * modify the array. To avoid copying the input array, ensure @@ -115,6 +122,15 @@ public void nextToken() { token = savedTokens.remove(0); } else { token = tokenizer.readToken(); + if (token.comments != null) { + for (var c : token.comments) { + switch (c.getStyle()) { + case JAVADOC -> { + docComments.add(c); + } + } + } + } } } @@ -129,6 +145,11 @@ public LineMap getLineMap() { return tokenizer.getLineMap(); } + @Override + public Queue getDocComments() { + return docComments; + } + public int errPos() { return tokenizer.errPos(); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java index b6be0a84b7d..a05d48d320b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, 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 @@ -280,6 +280,7 @@ enum CommentStyle { } String getText(); + JCDiagnostic.DiagnosticPosition getPos(); int getSourcePos(int index); CommentStyle getStyle(); boolean isDeprecated(); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java index 1d716f75a90..f32c1bf4756 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -34,6 +34,7 @@ import com.sun.tools.javac.util.Position.LineMap; import java.util.Optional; +import java.util.Queue; import java.util.function.Consumer; import java.util.function.Function; @@ -146,6 +147,11 @@ public Token split() { return token; } + @Override + public Queue getDocComments() { + return S.getDocComments(); + } + @Override public int errPos() { return S.errPos(); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 273c5bef7b4..26c16ebdc2c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -1869,6 +1869,9 @@ compiler.warn.lintOption=\ compiler.warn.constant.SVUID=\ serialVersionUID must be constant in class {0} +compiler.warn.dangling.doc.comment=\ + documentation comment is not attached to any declaration + # 0: path compiler.warn.dir.path.element.not.found=\ bad path element "{0}": no such directory diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties index 7893d328afa..0566272ca1b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2024, 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 @@ -189,6 +189,9 @@ javac.opt.Xlint.desc.cast=\ javac.opt.Xlint.desc.classfile=\ Warn about issues related to classfile contents. +javac.opt.Xlint.desc.dangling-doc-comments=\ + Warn about dangling documentation comments, not attached to any declaration. + javac.opt.Xlint.desc.missing-explicit-ctor=\ Warn about missing explicit constructors in public and protected classes in exported packages. diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java index afa590240e2..c729b6ff832 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, 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 @@ -218,6 +218,11 @@ public String getText() { return null; } + @Override + public JCDiagnostic.DiagnosticPosition getPos() { + return null; + } + @Override public int getSourcePos(int index) { return Position.NOPOS; diff --git a/src/jdk.compiler/share/classes/module-info.java b/src/jdk.compiler/share/classes/module-info.java index 9826b3f576b..9b12171ef6d 100644 --- a/src/jdk.compiler/share/classes/module-info.java +++ b/src/jdk.compiler/share/classes/module-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -153,6 +153,8 @@ * from other files * {@code cast} use of unnecessary casts * {@code classfile} issues related to classfile contents + * {@code dangling-doc-comments} issues related to "dangling" documentation comments, + * not attached to a declaration * {@code deprecation} use of deprecated items * {@code dep-ann} items marked as deprecated in a documentation comment but not * using the {@code @Deprecated} annotation diff --git a/src/jdk.compiler/share/man/javac.1 b/src/jdk.compiler/share/man/javac.1 index ab429ab7d9a..6586bcaf83f 100644 --- a/src/jdk.compiler/share/man/javac.1 +++ b/src/jdk.compiler/share/man/javac.1 @@ -708,6 +708,9 @@ in a source file, and is used from other files. \f[V]classfile\f[R]: Warns about the issues related to classfile contents. .IP \[bu] 2 +\f[V]dangling-doc-comments\f[R]: Warns about extra or misplaced +documentation comments near the beginning of a declaration. +.IP \[bu] 2 \f[V]deprecation\f[R]: Warns about the use of deprecated items. .IP \[bu] 2 \f[V]dep-ann\f[R]: Warns about the items marked as deprecated in diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java index 6fc7f94af38..11a4c3962bc 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/asm/Disassembler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2024, 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 @@ -91,6 +91,9 @@ private Disassembler(long startPc, byte[] code) { .get(); String arch = targetSysProps.getProperty("os.arch"); + if (arch.equals("x86_64")) { + arch = "amd64"; + } String libname = "hsdis-" + arch + ext; List libs = List.of( diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java index 0ab2bbdc608..c687fa0bbf5 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2024, 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 @@ -74,6 +74,22 @@ ScopeValue readObjectValue() { return result; } + ScopeValue readObjectMergeValue() { + int id = readInt(); + if (Assert.ASSERTS_ENABLED) { + Assert.that(objectPool != null, "object pool does not exist"); + for (Iterator itr = objectPool.iterator(); itr.hasNext();) { + ObjectValue ov = (ObjectValue) itr.next(); + Assert.that(ov.id() != id, "should not be read twice"); + } + } + ObjectValue result = new ObjectMergeValue(id); + // Cache the object since an object field could reference it. + objectPool.add(result); + result.readObject(this); + return result; + } + ScopeValue getCachedObject() { int id = readInt(); Assert.that(objectPool != null, "object pool does not exist"); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/MarkerValue.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/MarkerValue.java new file mode 100644 index 00000000000..39d48c60f2e --- /dev/null +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/MarkerValue.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024, 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. + * + */ + +package sun.jvm.hotspot.code; + +import java.io.PrintStream; + +/** A placeholder value that has no concrete meaning other than helping constructing + * other values. + */ +public class MarkerValue extends ScopeValue { + public boolean isMarker() { return true; } + + public void printOn(PrintStream tty) { + tty.print("marker"); + } +} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java index edcf85ce0c7..8eacd1a8a86 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java @@ -42,6 +42,8 @@ public class NMethod extends CodeBlob { private static CIntegerField entryBCIField; /** To support simple linked-list chaining of nmethods */ private static AddressField osrLinkField; + private static AddressField immutableDataField; + private static CIntegerField immutableDataSizeField; /** Offsets for different nmethod parts */ private static CIntegerField exceptionOffsetField; @@ -50,11 +52,10 @@ public class NMethod extends CodeBlob { private static CIntegerField origPCOffsetField; private static CIntegerField stubOffsetField; private static CIntField metadataOffsetField; - private static CIntField dependenciesOffsetField; - private static CIntField scopesPCsOffsetField; + private static CIntField handlerTableOffsetField; + private static CIntField nulChkTableOffsetField; + private static CIntegerField scopesPCsOffsetField; private static CIntegerField scopesDataOffsetField; - private static CIntegerField handlerTableOffsetField; - private static CIntegerField nulChkTableOffsetField; /** Offsets for entry points */ /** Entry point with class check */ @@ -82,6 +83,8 @@ private static void initialize(TypeDataBase db) { methodField = type.getAddressField("_method"); entryBCIField = type.getCIntegerField("_entry_bci"); osrLinkField = type.getAddressField("_osr_link"); + immutableDataField = type.getAddressField("_immutable_data"); + immutableDataSizeField = type.getCIntegerField("_immutable_data_size"); exceptionOffsetField = type.getCIntegerField("_exception_offset"); deoptHandlerOffsetField = type.getCIntegerField("_deopt_handler_offset"); @@ -89,11 +92,10 @@ private static void initialize(TypeDataBase db) { origPCOffsetField = type.getCIntegerField("_orig_pc_offset"); stubOffsetField = type.getCIntegerField("_stub_offset"); metadataOffsetField = new CIntField(type.getCIntegerField("_metadata_offset"), 0); - dependenciesOffsetField = new CIntField(type.getCIntegerField("_dependencies_offset"), 0); - scopesPCsOffsetField = new CIntField(type.getCIntegerField("_scopes_pcs_offset"), 0); + scopesPCsOffsetField = type.getCIntegerField("_scopes_pcs_offset"); scopesDataOffsetField = type.getCIntegerField("_scopes_data_offset"); - handlerTableOffsetField = type.getCIntegerField("_handler_table_offset"); - nulChkTableOffsetField = type.getCIntegerField("_nul_chk_table_offset"); + handlerTableOffsetField = new CIntField(type.getCIntegerField("_handler_table_offset"), 0); + nulChkTableOffsetField = new CIntField(type.getCIntegerField("_nul_chk_table_offset"), 0); entryOffsetField = new CIntField(type.getCIntegerField("_entry_offset"), 0); verifiedEntryOffsetField = new CIntField(type.getCIntegerField("_verified_entry_offset"), 0); osrEntryPointField = type.getAddressField("_osr_entry_point"); @@ -133,18 +135,22 @@ public Method getMethod() { public Address oopsBegin() { return dataBegin(); } public Address oopsEnd() { return dataBegin().addOffsetTo(getMetadataOffset()); } public Address metadataBegin() { return dataBegin().addOffsetTo(getMetadataOffset()); } - public Address metadataEnd() { return dataBegin().addOffsetTo(getDependenciesOffset()); } - public Address dependenciesBegin() { return dataBegin().addOffsetTo(getDependenciesOffset()); } - public Address dependenciesEnd() { return dataBegin().addOffsetTo(getScopesDataOffset()); } - public Address scopesDataBegin() { return dataBegin().addOffsetTo(getScopesDataOffset()); } - public Address scopesDataEnd() { return dataBegin().addOffsetTo(getScopesPCsOffset()); } - public Address scopesPCsBegin() { return dataBegin().addOffsetTo(getScopesPCsOffset()); } - public Address scopesPCsEnd() { return dataBegin().addOffsetTo(getHandlerTableOffset()); } - public Address handlerTableBegin() { return dataBegin().addOffsetTo(getHandlerTableOffset()); } - public Address handlerTableEnd() { return dataBegin().addOffsetTo(getNulChkTableOffset()); } - public Address nulChkTableBegin() { return dataBegin().addOffsetTo(getNulChkTableOffset()); } - public Address nulChkTableEnd() { return dataEnd(); } - + public Address metadataEnd() { return dataEnd(); } + + public Address immutableDataBegin() { return immutableDataField.getValue(addr); } + public Address immutableDataEnd() { return immutableDataBegin().addOffsetTo(getImmutableDataSize()); } + public Address dependenciesBegin() { return immutableDataBegin(); } + public Address dependenciesEnd() { return immutableDataBegin().addOffsetTo(getHandlerTableOffset()); } + public Address handlerTableBegin() { return immutableDataBegin().addOffsetTo(getHandlerTableOffset()); } + public Address handlerTableEnd() { return immutableDataBegin().addOffsetTo(getNulChkTableOffset()); } + public Address nulChkTableBegin() { return immutableDataBegin().addOffsetTo(getNulChkTableOffset()); } + public Address nulChkTableEnd() { return immutableDataBegin().addOffsetTo(getScopesDataOffset()); } + public Address scopesDataBegin() { return immutableDataBegin().addOffsetTo(getScopesDataOffset()); } + public Address scopesDataEnd() { return immutableDataBegin().addOffsetTo(getScopesPCsOffset()); } + public Address scopesPCsBegin() { return immutableDataBegin().addOffsetTo(getScopesPCsOffset()); } + public Address scopesPCsEnd() { return immutableDataEnd(); } + + public int getImmutableDataSize() { return (int) immutableDataSizeField.getValue(addr); } public int constantsSize() { return (int) constantsEnd() .minus(constantsBegin()); } public int instsSize() { return (int) instsEnd() .minus(instsBegin()); } public int stubSize() { return (int) stubEnd() .minus(stubBegin()); } @@ -161,7 +167,10 @@ public int totalSize() { return constantsSize() + instsSize() + - stubSize() + + stubSize(); + } + public int immutableDataSize() { + return scopesDataSize() + scopesPCsSize() + dependenciesSize() + @@ -190,7 +199,7 @@ public int totalSize() { public OopHandle getOopAt(int index) { if (index == 0) return null; if (Assert.ASSERTS_ENABLED) { - Assert.that(index > 0 && index <= getOopsLength(), "must be a valid non-zero index"); + Assert.that(index > 0 && index <= getOopsLength(), "must be a valid non-zero index: " + index); } return oopsBegin().getOopHandleAt((index - 1) * VM.getVM().getOopSize()); } @@ -199,7 +208,7 @@ public OopHandle getOopAt(int index) { public Address getMetadataAt(int index) { if (index == 0) return null; if (Assert.ASSERTS_ENABLED) { - Assert.that(index > 0 && index <= getMetadataLength(), "must be a valid non-zero index"); + Assert.that(index > 0 && index <= getMetadataLength(), "must be a valid non-zero index: " + index); } return metadataBegin().getAddressAt((index - 1) * VM.getVM().getOopSize()); } @@ -289,6 +298,19 @@ public PCDesc getPCDescAt(Address pc) { return null; } + /** + * Attempt to decode all the debug info in this nmethod. This is intended purely for testing. + */ + public void decodeAllScopeDescs() { + for (Address p = scopesPCsBegin(); p.lessThan(scopesPCsEnd()); p = p.addOffsetTo(pcDescSize)) { + PCDesc pd = new PCDesc(p); + if (pd.getPCOffset() == -1) { + break; + } + ScopeDesc sd = new ScopeDesc(this, pd.getScopeDecodeOffset(), pd.getObjDecodeOffset(), pd.getReexecute()); + } + } + /** ScopeDesc for an instruction */ public ScopeDesc getScopeDescAt(Address pc) { PCDesc pd = getPCDescAt(pc); @@ -516,7 +538,6 @@ public void dumpReplayData(PrintStream out) { private int getMetadataOffset() { return (int) metadataOffsetField .getValue(addr); } private int getScopesDataOffset() { return (int) scopesDataOffsetField .getValue(addr); } private int getScopesPCsOffset() { return (int) scopesPCsOffsetField .getValue(addr); } - private int getDependenciesOffset() { return (int) dependenciesOffsetField.getValue(addr); } private int getHandlerTableOffset() { return (int) handlerTableOffsetField.getValue(addr); } private int getNulChkTableOffset() { return (int) nulChkTableOffsetField .getValue(addr); } private int getCompLevel() { return (int) compLevelField .getValue(addr); } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectMergeValue.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectMergeValue.java new file mode 100644 index 00000000000..e91c70f7597 --- /dev/null +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectMergeValue.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2024, 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. + * + */ + +package sun.jvm.hotspot.code; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +class ObjectMergeValue extends ObjectValue { + + private ScopeValue selector; + private ScopeValue mergePointer; + private List possibleObjects; + + public ObjectMergeValue(int id) { + super(id); + } + + public boolean isObjectMerge() { return true; } + + void readObject(DebugInfoReadStream stream) { + selector = ScopeValue.readFrom(stream); + mergePointer = ScopeValue.readFrom(stream); + possibleObjects = new ArrayList<>(); + int length = stream.readInt(); + for (int i = 0; i < length; i++) { + ScopeValue val = readFrom(stream); + possibleObjects.add(val); + } + } + + @Override + public void printOn(PrintStream tty) { + tty.print("merge_obj[" + id + "]"); + tty.print(" selector=\""); + selector.printOn(tty); + tty.print("\""); + + tty.print(" merge_pointer=\""); + mergePointer.printOn(tty); + tty.print("\""); + + tty.print(", candidate_objs=[" + ((ObjectValue) possibleObjects.get(0)).id); + for (int i = 1; i < possibleObjects.size(); i++) { + tty.print("," + ((ObjectValue) possibleObjects.get(i)).id); + } + tty.print("]"); + } +} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectValue.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectValue.java index 56d0ce160f2..1cbc1f71e02 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectValue.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2024, 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 @@ -33,7 +33,8 @@ /** An ObjectValue describes an object eliminated by escape analysis. */ public class ObjectValue extends ScopeValue { - private int id; + protected final int id; + private boolean isRoot; private ScopeValue klass; private List fieldsValue; @@ -61,8 +62,9 @@ public ObjectValue(int id) { /** Serialization of debugging information */ void readObject(DebugInfoReadStream stream) { + isRoot = stream.readBoolean(); klass = readFrom(stream); - Assert.that(klass.isConstantOop(), "should be constant klass oop"); + Assert.that(klass.isConstantOop(), "should be constant klass oop: " + klass); int length = stream.readInt(); for (int i = 0; i < length; i++) { ScopeValue val = readFrom(stream); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ScopeValue.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ScopeValue.java index 163b0d12294..4bb2076e8e9 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ScopeValue.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ScopeValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2024, 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 @@ -25,6 +25,7 @@ package sun.jvm.hotspot.code; import java.io.*; +import java.nio.charset.StandardCharsets; import sun.jvm.hotspot.utilities.*; @@ -51,6 +52,9 @@ public abstract class ScopeValue { static final int CONSTANT_DOUBLE_CODE = 4; static final int CONSTANT_OBJECT_CODE = 5; static final int CONSTANT_OBJECT_ID_CODE = 6; + static final int AUTO_BOX_OBJECT_CODE = 7; + static final int MARKER_CODE = 8; + static final int OBJECT_MERGE_CODE = 9; public boolean isLocation() { return false; } public boolean isConstantInt() { return false; } @@ -58,6 +62,8 @@ public abstract class ScopeValue { public boolean isConstantLong() { return false; } public boolean isConstantOop() { return false; } public boolean isObject() { return false; } + public boolean isMarker() { return false; } + public boolean isObjectMerge() { return false; } public static ScopeValue readFrom(DebugInfoReadStream stream) { switch (stream.readInt()) { @@ -72,9 +78,17 @@ public static ScopeValue readFrom(DebugInfoReadStream stream) { case CONSTANT_DOUBLE_CODE: return new ConstantDoubleValue(stream); case CONSTANT_OBJECT_CODE: + case AUTO_BOX_OBJECT_CODE: + // The C++ code handles these 2 cases separately because the autobox case needs + // some extra state during deoptimization. That's not required to display the + // information so treat it like a normal object value. return stream.readObjectValue(); case CONSTANT_OBJECT_ID_CODE: return stream.getCachedObject(); + case MARKER_CODE: + return new MarkerValue(); + case OBJECT_MERGE_CODE: + return stream.readObjectMergeValue(); default: Assert.that(false, "should not reach here"); return null; @@ -82,4 +96,11 @@ public static ScopeValue readFrom(DebugInfoReadStream stream) { } public abstract void printOn(PrintStream tty); + + public String toString() { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(baos, true, StandardCharsets.UTF_8); + printOn(ps); + return baos.toString(StandardCharsets.UTF_8); + } } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstMethod.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstMethod.java index 4bd2c9d3cbd..4e7456a7745 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstMethod.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -317,13 +317,9 @@ public int getLineNumberFromBCI(int bci) { return -1; } - if (Assert.ASSERTS_ENABLED) { - Assert.that(0 <= bci && bci < getCodeSize(), - "illegal bci(" + bci + ") codeSize(" + getCodeSize() + ")"); - } int bestBCI = 0; int bestLine = -1; - if (hasLineNumberTable()) { + if (0 <= bci && bci < getCodeSize() && hasLineNumberTable()) { // The line numbers are a short array of 2-tuples [start_pc, line_number]. // Not necessarily sorted and not necessarily one-to-one. CompressedLineNumberReadStream stream = diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java index aedaee2b828..17867e368bf 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java @@ -335,6 +335,10 @@ protected void generateOtherFiles(ClassTree classTree) DocPaths.RESOURCE_FILES.resolve(DocPaths.JQUERY_UI_CSS), false); } copyLegalFiles(options.createIndex()); + // Print a notice if the documentation contains diagnostic markers + if (messages.containsDiagnosticMarkers()) { + messages.notice("doclet.contains.diagnostic.markers"); + } } @Override diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java index 25ec603a064..3e461dc3e74 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java @@ -1611,6 +1611,7 @@ private boolean shouldRedirectRelativeLinks(Element element) { * @return the output */ public Content invalidTagOutput(String summary, Optional detail) { + messages.setContainsDiagnosticMarkers(); if (detail.isEmpty() || detail.get().isEmpty()) { return HtmlTree.SPAN(HtmlStyle.invalidTag, Text.of(summary)); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java index 9183804ddc6..576bf64e751 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java @@ -47,6 +47,7 @@ public class Messages { private final BaseConfiguration configuration; private final Resources resources; private final Reporter reporter; + private boolean containsDiagnosticMarkers = false; /** * Creates a {@code Messages} object to provide standardized access to @@ -212,6 +213,21 @@ public void notice(String key, Object... args) { } } + /** + * {@return true if the generated documentation contains one or more diagnostic markers + * for invalid input} + */ + public boolean containsDiagnosticMarkers() { + return containsDiagnosticMarkers; + } + + /** + * Sets the flag for documentation containing a diagnostic marker for invalid input. + */ + public void setContainsDiagnosticMarkers() { + this.containsDiagnosticMarkers = true; + } + // ***** Internal support ***** private void report(Diagnostic.Kind k, String msg) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties index 7c5b43d35df..859289ff8bd 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties @@ -262,6 +262,8 @@ doclet.urlRedirected=URL {0} was redirected to {1} -- Update the command-line op doclet.unexpectedRedirect=Unexpected redirection for URL {0} to {1} doclet.duplicate.comment.for.property=Duplicate comment for property.\n\ Remove the comment on the property field or on this method to suppress this warning. +doclet.contains.diagnostic.markers=\ + The generated documentation contains diagnostic markers for invalid input. #Documentation for Enums doclet.enum_values_doc.fullbody=\ diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java index 51f45627f31..4628d851ab0 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -132,8 +132,8 @@ public void scan(JCTree tree) { tree.accept(this); } - @Override /** default for any non-overridden visit method. */ + @Override public void visitTree(JCTree tree) { maybeConstantExpr = false; } diff --git a/src/jdk.javadoc/share/man/javadoc.1 b/src/jdk.javadoc/share/man/javadoc.1 index 30256207b3e..d42d7137657 100644 --- a/src/jdk.javadoc/share/man/javadoc.1 +++ b/src/jdk.javadoc/share/man/javadoc.1 @@ -96,6 +96,22 @@ option either to recursively traverse a directory and its subdirectories, or to pass in an explicit list of package names. When you document individual source files, pass in a list of Java source file names. +.SS Documentation Comments +.PP +The \f[V]javadoc\f[R] tool uses the documentation comment, if any, that +immediately precedes the beginning of the declaration, whether that is +an annotation, modifier, or the name being declared. +If there are multiple documentation comments before the declaration, +only the last one (closest to the declaration) will be used. +If there are any documentation comments after the beginning of the +declaration, they will be ignored. +To check for any extra or misplaced documentation comments, compile your +source code with the \f[V]javac\f[R] option \f[V]-Xlint\f[R], or more +specifically, \f[V]-Xlint:dangling-doc-comments\f[R]. +Within a source file, you may use suppress any warnings generated by +these options by using +\f[V]\[at]SuppressWarnings(\[dq]dangling-doc-comments\[dq])\f[R] on a +suitable enclosing declaration. .SS Conformance .PP The standard doclet does not validate the content of documentation diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java index 66c376e9022..dd90a38b14c 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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,9 +36,8 @@ @Label("Deserialization") @Name("jdk.Deserialization") @Description("Results of deserialization and ObjectInputFilter checks") -@MirrorEvent(className = "jdk.internal.event.DeserializationEvent") @RemoveFields("duration") -public final class DeserializationEvent extends AbstractJDKEvent { +public final class DeserializationEvent extends MirrorEvent { @Label("Filter Configured") public boolean filterConfigured; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java index 337cfad20fb..a87f51ff718 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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,9 +36,8 @@ @Label("Java Error") @Category("Java Application") @Description("An object derived from java.lang.Error has been created. OutOfMemoryErrors are ignored") -@MirrorEvent(className = "jdk.internal.event.ErrorThrownEvent") @RemoveFields("duration") -public final class ErrorThrownEvent extends AbstractJDKEvent { +public final class ErrorThrownEvent extends MirrorEvent { @Label("Message") public String message; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/EventConfigurations.java b/src/jdk.jfr/share/classes/jdk/jfr/events/EventConfigurations.java index d4dba462f4b..7d829f69076 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/EventConfigurations.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/EventConfigurations.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -30,5 +30,4 @@ public final class EventConfigurations { public static final EventConfiguration FILE_READ = JVMSupport.getConfiguration(FileReadEvent.class); public static final EventConfiguration FILE_WRITE = JVMSupport.getConfiguration(FileWriteEvent.class); - public static final EventConfiguration FILE_FORCE = JVMSupport.getConfiguration(FileForceEvent.class); } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java index cdaa6372f68..795f618b4e6 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java @@ -31,14 +31,15 @@ import jdk.jfr.Name; import jdk.jfr.StackTrace; import jdk.jfr.internal.MirrorEvent; +import jdk.jfr.internal.RemoveFields; import jdk.jfr.internal.Type; @Name(Type.EVENT_NAME_PREFIX + "ExceptionStatistics") @Label("Exception Statistics") @Category({ "Java Application", "Statistics" }) @Description("Number of objects derived from java.lang.Throwable that have been created") -@MirrorEvent(className = "jdk.internal.event.ExceptionStatisticsEvent") -public final class ExceptionStatisticsEvent extends AbstractPeriodicEvent { +@RemoveFields({"duration", "eventThread", "stackTrace"}) +public final class ExceptionStatisticsEvent extends MirrorEvent { @Label("Exceptions Created") public long throwables; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java index c61965755bd..22c87f3132d 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -37,9 +37,8 @@ @Label("Java Exception") @Category("Java Application") @Description("An object derived from java.lang.Exception has been created") -@MirrorEvent(className = "jdk.internal.event.ExceptionThrownEvent") @RemoveFields("duration") -public final class ExceptionThrownEvent extends AbstractJDKEvent { +public final class ExceptionThrownEvent extends MirrorEvent { @Label("Message") public String message; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java index d54d5e9b2a4..495112ffa9d 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, 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 @@ -29,13 +29,14 @@ import jdk.jfr.Description; import jdk.jfr.Label; import jdk.jfr.Name; +import jdk.jfr.internal.MirrorEvent; import jdk.jfr.internal.Type; @Name(Type.EVENT_NAME_PREFIX + "FileForce") @Label("File Force") @Category("Java Application") @Description("Force updates to be written to file") -public final class FileForceEvent extends AbstractJDKEvent { +public final class FileForceEvent extends MirrorEvent { // The order of these fields must be the same as the parameters in // commit(..., String, boolean) @@ -48,7 +49,4 @@ public final class FileForceEvent extends AbstractJDKEvent { @Description("Whether the file metadata is updated") public boolean metaData; - public static void commit(long start, long duration, String path, boolean metaData) { - // Generated - } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java index 5ad2dc82fc1..01abc75e155 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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,10 +36,9 @@ @Label("Process Start") @Name("jdk.ProcessStart") @Description("Operating system process started") -@MirrorEvent(className = "jdk.internal.event.ProcessStartEvent") @RemoveFields("duration") @StackFilter({"java.lang.ProcessBuilder", "java.lang.Runtime::exec"}) -public final class ProcessStartEvent extends AbstractJDKEvent { +public final class ProcessStartEvent extends MirrorEvent { @Label("Process Id") public long pid; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java index 7f4e5045c9d..1e6aea7b536 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -33,10 +33,9 @@ @Label("Security Property Modification") @Name("jdk.SecurityPropertyModification") @Description("Modification of Security property") -@MirrorEvent(className = "jdk.internal.event.SecurityPropertyModificationEvent") @RemoveFields("duration") @StackFilter({"java.security.Security::setProperty"}) -public final class SecurityPropertyModificationEvent extends AbstractJDKEvent { +public final class SecurityPropertyModificationEvent extends MirrorEvent { @Label("Key") public String key; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java index 8bbbf09d87d..fe4dbaec31d 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, 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,10 +36,9 @@ @Label("Security Provider Instance Request") @Name("jdk.SecurityProviderService") @Description("Details of Provider.getInstance(String type, String algorithm) calls") -@MirrorEvent(className = "jdk.internal.event.SecurityProviderServiceEvent") @RemoveFields("duration") @StackFilter({"java.security.Provider::getService"}) -public final class SecurityProviderServiceEvent extends AbstractJDKEvent { +public final class SecurityProviderServiceEvent extends MirrorEvent { @Label("Type of Service") public String type; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java index b88ba270708..ce170d5ad9e 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -40,9 +40,8 @@ " The checks are usually performed just once per serializable class," + " the first time it is used by serialization." + " Under high memory pressure, a class might be re-checked again.") -@MirrorEvent(className = "jdk.internal.event.SerializationMisdeclarationEvent") @RemoveFields({"duration", "stackTrace", "eventThread"}) -public final class SerializationMisdeclarationEvent extends AbstractJDKEvent { +public final class SerializationMisdeclarationEvent extends MirrorEvent { @Label("Misdeclared Class") public Class misdeclaredClass; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java index 7ef63765eec..917eabd9206 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -38,8 +38,7 @@ @Label("Socket Read") @Category("Java Application") @Description("Reading data from a socket") -@MirrorEvent(className = "jdk.internal.event.SocketReadEvent") -public final class SocketReadEvent extends AbstractJDKEvent { +public final class SocketReadEvent extends MirrorEvent { @Label("Remote Host") public String host; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java index 6e776b8871d..92c85c132d4 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -37,8 +37,7 @@ @Label("Socket Write") @Category("Java Application") @Description("Writing data to a socket") -@MirrorEvent(className = "jdk.internal.event.SocketWriteEvent") -public final class SocketWriteEvent extends AbstractJDKEvent { +public final class SocketWriteEvent extends MirrorEvent { @Label("Remote Host") public String host; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java index df2f4cfc2ed..d0d81ac63bc 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -37,10 +37,9 @@ @Label("TLS Handshake") @Name("jdk.TLSHandshake") @Description("Parameters used in TLS Handshake") -@MirrorEvent(className = "jdk.internal.event.TLSHandshakeEvent") @RemoveFields("duration") @StackFilter("sun.security.ssl.Finished::recordEvent") -public final class TLSHandshakeEvent extends AbstractJDKEvent { +public final class TLSHandshakeEvent extends MirrorEvent { @Label("Peer Host") public String peerHost; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java index 216ad370aca..617f18511ce 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -34,11 +34,10 @@ @Category("Java Application") @Label("Java Thread Sleep") @Name("jdk.ThreadSleep") -@MirrorEvent(className = "jdk.internal.event.ThreadSleepEvent") @StackFilter({"java.lang.Thread::afterSleep", "java.lang.Thread::sleepNanos", "java.lang.Thread::sleep"}) -public final class ThreadSleepEvent extends AbstractJDKEvent { +public final class ThreadSleepEvent extends MirrorEvent { @Label("Sleep Time") @Timespan(Timespan.NANOSECONDS) public long time; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java index 8ad64abf1bf..12d404ace44 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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 @@ -34,9 +34,8 @@ @Category("Java Application") @Label("Virtual Thread End") @Name("jdk.VirtualThreadEnd") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadEndEvent") @RemoveFields({"duration", "stackTrace"}) -public final class VirtualThreadEndEvent extends AbstractJDKEvent { +public final class VirtualThreadEndEvent extends MirrorEvent { @Label("Thread Id") public long javaThreadId; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java index f109966f1be..83547125ac5 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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 @@ -33,6 +33,5 @@ @Category("Java Application") @Label("Virtual Thread Pinned") @Name("jdk.VirtualThreadPinned") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadPinnedEvent") -public final class VirtualThreadPinnedEvent extends AbstractJDKEvent { +public final class VirtualThreadPinnedEvent extends MirrorEvent { } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java index 646c2379178..216ecd9ba79 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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 @@ -34,9 +34,8 @@ @Category("Java Application") @Label("Virtual Thread Start") @Name("jdk.VirtualThreadStart") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadStartEvent") @RemoveFields("duration") -public final class VirtualThreadStartEvent extends AbstractJDKEvent { +public final class VirtualThreadStartEvent extends MirrorEvent { @Label("Thread Id") public long javaThreadId; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java index d59fbe2931e..5fab1eaebf0 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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,9 +36,8 @@ @Label("Virtual Thread Submit Failed") @Name("jdk.VirtualThreadSubmitFailed") @Description("Submit of task for virtual thread failed") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadSubmitFailedEvent") @RemoveFields("duration") -public final class VirtualThreadSubmitFailedEvent extends AbstractJDKEvent { +public final class VirtualThreadSubmitFailedEvent extends MirrorEvent { @Label("Thread Id") public long javaThreadId; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java index 7ec9c043605..ab3aaafc524 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -33,9 +33,8 @@ @Label("X509 Certificate") @Name("jdk.X509Certificate") @Description("Details of X.509 Certificate parsed by JDK") -@MirrorEvent(className = "jdk.internal.event.X509CertificateEvent") @RemoveFields("duration") -public final class X509CertificateEvent extends AbstractJDKEvent { +public final class X509CertificateEvent extends MirrorEvent { @Label("Signature Algorithm") public String algorithm; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java index c4a73d2ffe8..5cc05f2f3eb 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -33,9 +33,8 @@ @Label("X509 Validation") @Name("jdk.X509Validation") @Description("Serial numbers from X.509 Certificates forming chain of trust") -@MirrorEvent(className = "jdk.internal.event.X509ValidationEvent") @RemoveFields("duration") -public final class X509ValidationEvent extends AbstractJDKEvent { +public final class X509ValidationEvent extends MirrorEvent { @CertificateId @Label("Certificate Id") @Unsigned diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java index b8d386f08bf..9e99c90788c 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, 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 @@ -90,7 +90,6 @@ private record SettingDesc(ClassDesc paramType, String methodName) { private static final ClassDesc TYPE_ISE = Bytecode.classDesc(IllegalStateException.class); private static final ClassDesc TYPE_EVENT_WRITER = classDesc(EventWriter.class); private static final ClassDesc TYPE_EVENT_WRITER_FACTORY = ClassDesc.of("jdk.jfr.internal.event.EventWriterFactory"); - private static final ClassDesc TYPE_MIRROR_EVENT = Bytecode.classDesc(MirrorEvent.class); private static final ClassDesc TYPE_OBJECT = Bytecode.classDesc(Object.class); private static final ClassDesc TYPE_SETTING_DEFINITION = Bytecode.classDesc(SettingDefinition.class); private static final MethodDesc METHOD_BEGIN = MethodDesc.of("begin", "()V"); @@ -144,9 +143,7 @@ private record SettingDesc(ClassDesc paramType, String methodName) { private ImplicitFields determineImplicitFields() { if (isJDK) { - // For now, only support mirror events in java.base - String fullName = "java.base:" + className; - Class eventClass = MirrorEvents.find(fullName); + Class eventClass = MirrorEvents.find(isJDK, className); if (eventClass != null) { return new ImplicitFields(eventClass); } @@ -221,20 +218,6 @@ boolean isEnabled() { return true; } - boolean isMirrorEvent() { - String typeDescriptor = TYPE_MIRROR_EVENT.descriptorString(); - for (ClassElement ce : classModel.elements()) { - if (ce instanceof RuntimeVisibleAnnotationsAttribute rvaa) { - for (var annotation : rvaa.annotations()) { - if (annotation.className().equalsString(typeDescriptor)) { - return true; - } - } - } - } - return false; - } - @SuppressWarnings("unchecked") // Only supports String, String[] and Boolean values private static T annotationValue(ClassModel classModel, ClassDesc classDesc, Class type) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java index 25d0e0418f1..9c37a1ab660 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, 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 @@ -112,9 +112,6 @@ static byte[] bytesForEagerInstrumentation(long traceId, boolean forceInstrument Logger.log(LogTag.JFR_SYSTEM, LogLevel.INFO, "Skipping instrumentation for " + eventName + " since container support is missing"); return oldBytes; } - if (ei.isMirrorEvent()) { - return oldBytes; - } if (!forceInstrumentation) { // Assume we are recording diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java index 29267803009..7d61d3c984f 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java @@ -144,10 +144,6 @@ public synchronized EventType register(Class } EventConfiguration configuration = getConfiguration(eventClass, true); if (configuration == null) { - if (eventClass.getAnnotation(MirrorEvent.class) != null) { - // Don't register mirror classes. - return null; - } PlatformEventType pe = findMirrorType(eventClass); configuration = makeConfiguration(eventClass, pe, dynamicAnnotations, dynamicFields); } @@ -162,8 +158,7 @@ public synchronized EventType register(Class } private PlatformEventType findMirrorType(Class eventClass) throws InternalError { - String fullName = eventClass.getModule().getName() + ":" + eventClass.getName(); - Class mirrorClass = MirrorEvents.find(fullName); + Class mirrorClass = MirrorEvents.find(eventClass); if (mirrorClass == null) { return null; // not a mirror } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java index ce5126e3afe..deabd2aaacd 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, 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 @@ -22,32 +22,28 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - package jdk.jfr.internal; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.ElementType; +import jdk.jfr.Enabled; +import jdk.jfr.Registered; +import jdk.jfr.StackTrace; + /** - * Any event class annotated with this annotation must be added - * to the {@link MirrorEvents) class for it to take effect. + * A mirror event is a fictitious event class that contains metadata about an + * event, but not the implementation to write the event data to buffers. + *

      + * A mirror event should be used when an event class is in a module where a + * dependency on the jdk.jfr module is not possible, for example, due to a + * circular dependency. + *

      + * Subclass the MirrorEvent class and add the exact same fields as the actual + * event, but with labels, descriptions etc. + *

      + * For the mirror mechanism to work, the mirror class must be registered in the + * jdk.jfr.internal.MirrorEvents class. */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.TYPE }) -public @interface MirrorEvent { - /** - * Fully qualified name of the class to mirror metadata for (for example, - * {@code "jdk.internal.event.Example"}) - * - * @return the fully qualified class name of the event - */ - String className(); - - /** - * The module where the event is located, by default {@code "java.base"}. - * - * @return the module name - */ - String module() default "java.base"; +@Registered(false) +@Enabled(false) +@StackTrace(false) +public abstract class MirrorEvent { } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java index 7c74bb41f4a..8ae1f3b031f 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java @@ -24,14 +24,14 @@ */ package jdk.jfr.internal; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; -import jdk.jfr.Event; import jdk.jfr.events.DeserializationEvent; import jdk.jfr.events.ErrorThrownEvent; import jdk.jfr.events.ExceptionStatisticsEvent; import jdk.jfr.events.ExceptionThrownEvent; +import jdk.jfr.events.FileForceEvent; import jdk.jfr.events.ProcessStartEvent; import jdk.jfr.events.SecurityPropertyModificationEvent; import jdk.jfr.events.SecurityProviderServiceEvent; @@ -47,52 +47,47 @@ import jdk.jfr.events.X509CertificateEvent; import jdk.jfr.events.X509ValidationEvent; -public final class MirrorEvents { - private static final Class[] mirrorEventClasses = { - DeserializationEvent.class, - ProcessStartEvent.class, - SecurityPropertyModificationEvent.class, - SecurityProviderServiceEvent.class, - SerializationMisdeclarationEvent.class, - SocketReadEvent.class, - SocketWriteEvent.class, - ThreadSleepEvent.class, - TLSHandshakeEvent.class, - VirtualThreadStartEvent.class, - VirtualThreadEndEvent.class, - VirtualThreadPinnedEvent.class, - VirtualThreadSubmitFailedEvent.class, - X509CertificateEvent.class, - X509ValidationEvent.class, - ErrorThrownEvent.class, - ExceptionStatisticsEvent.class, - ExceptionThrownEvent.class, +/** + * This class registers all mirror events. + */ +final class MirrorEvents { + private static final Map> mirrorLookup = new ConcurrentHashMap<>(); + + // Add mirror event mapping here. See MirrorEvent class for details. + static { + register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class); + register("jdk.internal.event.FileForceEvent", FileForceEvent.class); + register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class); + register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class); + register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class); + register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class); + register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class); + register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class); + register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class); + register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class); + register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class); + register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class); + register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class); + register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class); + register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class); + register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class); + register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class); + register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class); + register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class); }; - private static final Map> mirrorLookup = createLookup(); + private static void register(String eventClassName, Class mirrorClass) { + mirrorLookup.put(eventClassName, mirrorClass); + } - public static Class find(String name) { - // When of this class is executed it may lead - // to a JVM up call and invocation of this method before - // the mirrorLookup field has been set. This is fine, - // mirrors should not be instrumented. - if (mirrorLookup != null) { - return mirrorLookup.get(name); - } - return null; + static Class find(Class eventClass) { + return find(eventClass.getClassLoader() == null, eventClass.getName()); } - @SuppressWarnings("unchecked") - private static Map> createLookup() { - Map> mirrors = new HashMap<>(); - for (Class eventClass : mirrorEventClasses) { - MirrorEvent me = eventClass.getAnnotation(MirrorEvent.class); - if (me == null) { - throw new InternalError("Mirror class must have annotation " + MirrorEvent.class.getName()); - } - String fullName = me.module() + ":" + me.className(); - mirrors.put(fullName, (Class) eventClass); + static Class find(boolean bootClassLoader, String name) { + if (bootClassLoader) { + return mirrorLookup.get(name); } - return mirrors; + return null; } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java index 19c83b3dc1c..cab6e7befe1 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java @@ -263,7 +263,7 @@ public static synchronized Type createType(Class clazz, List clazz, List clazz) { + if (jdk.internal.event.Event.class.isAssignableFrom(clazz)) { + return true; + } + if (MirrorEvent.class.isAssignableFrom(clazz)) { + return true; + } + return false; + } + private static void addAnnotations(Class clazz, Type type, List dynamicAnnotations) { ArrayList aes = new ArrayList<>(); if (dynamicAnnotations.isEmpty()) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/FileChannelImplInstrumentor.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/FileChannelImplInstrumentor.java index d0d8d9b4509..5a795395c72 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/FileChannelImplInstrumentor.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/FileChannelImplInstrumentor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, 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 @@ -45,25 +45,6 @@ private FileChannelImplInstrumentor() { private String path; - @JIInstrumentationMethod - public void force(boolean metaData) throws IOException { - EventConfiguration eventConfiguration = EventConfigurations.FILE_FORCE; - if (!eventConfiguration.isEnabled()) { - force(metaData); - return; - } - long start = 0; - try { - start = EventConfiguration.timestamp(); - force(metaData); - } finally { - long duration = EventConfiguration.timestamp() - start; - if (eventConfiguration.shouldCommit(duration)) { - FileForceEvent.commit(start, duration, path, metaData); - } - } - } - @JIInstrumentationMethod public int read(ByteBuffer dst) throws IOException { EventConfiguration eventConfiguration = EventConfigurations.FILE_READ; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java index a6c65641cd3..fb981c42cae 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java @@ -57,7 +57,6 @@ public final class JDKEvents { private static final Class[] eventClasses = { - FileForceEvent.class, FileReadEvent.class, FileWriteEvent.class, ActiveSettingEvent.class, @@ -68,6 +67,7 @@ public final class JDKEvents { jdk.internal.event.ErrorThrownEvent.class, jdk.internal.event.ExceptionStatisticsEvent.class, jdk.internal.event.ExceptionThrownEvent.class, + jdk.internal.event.FileForceEvent.class, jdk.internal.event.ProcessStartEvent.class, jdk.internal.event.SecurityPropertyModificationEvent.class, jdk.internal.event.SecurityProviderServiceEvent.class, diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java index 8e302f8542f..c97efe0bdb9 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -41,11 +41,11 @@ public final class ImplicitFields { private final List fields = new ArrayList<>(4); public ImplicitFields(Class eventClass) { - fields.add(START_TIME); // for completeness, not really needed + fields.add(START_TIME); fields.add(DURATION); fields.add(STACK_TRACE); fields.add(EVENT_THREAD); - for (Class c = eventClass; jdk.internal.event.Event.class != c; c = c.getSuperclass()) { + for (Class c = eventClass; !Utils.isEventBaseClass(c); c = c.getSuperclass()) { RemoveFields rf = c.getAnnotation(RemoveFields.class); if (rf != null) { for (String value : rf.value()) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java index 4ed36989277..c133a11b3c5 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java @@ -51,6 +51,7 @@ import jdk.jfr.internal.LogLevel; import jdk.jfr.internal.LogTag; import jdk.jfr.internal.Logger; +import jdk.jfr.internal.MirrorEvent; import jdk.jfr.internal.SecuritySupport; import jdk.jfr.internal.Type; import jdk.jfr.internal.settings.PeriodSetting; @@ -206,9 +207,8 @@ public static List sanitizeNullFreeList(List elements, Class clazz) } public static List getVisibleEventFields(Class clazz) { - Utils.ensureValidEventSubclass(clazz); List fields = new ArrayList<>(); - for (Class c = clazz; c != jdk.internal.event.Event.class; c = c.getSuperclass()) { + for (Class c = clazz; !Utils.isEventBaseClass(c); c = c.getSuperclass()) { for (Field field : c.getDeclaredFields()) { // skip private field in base classes if (c == clazz || !Modifier.isPrivate(field.getModifiers())) { @@ -219,6 +219,16 @@ public static List getVisibleEventFields(Class clazz) { return fields; } + public static boolean isEventBaseClass(Class clazz) { + if (jdk.internal.event.Event.class == clazz) { + return true; + } + if (jdk.jfr.internal.MirrorEvent.class == clazz) { + return true; + } + return false; + } + public static void ensureValidEventSubclass(Class eventClass) { if (jdk.internal.event.Event.class.isAssignableFrom(eventClass) && Modifier.isAbstract(eventClass.getModifiers())) { throw new IllegalArgumentException("Abstract event classes are not allowed"); @@ -338,7 +348,7 @@ public static String upgradeLegacyJDKEvent(String eventName) { return eventName; } - public static void verifyMirror(Class mirror, Class real) { + public static void verifyMirror(Class mirror, Class real) { Class cMirror = Objects.requireNonNull(mirror); Class cReal = Objects.requireNonNull(real); @@ -353,7 +363,7 @@ public static void verifyMirror(Class mirror, Class real) { } while (cReal != null) { for (Field realField : cReal.getDeclaredFields()) { - if (isSupportedType(realField.getType())) { + if (isSupportedType(realField.getType()) && !realField.isSynthetic()) { String fieldName = realField.getName(); Field mirrorField = mirrorFields.get(fieldName); if (mirrorField == null) { diff --git a/src/jdk.jpackage/share/man/jpackage.1 b/src/jdk.jpackage/share/man/jpackage.1 index 3f5e062ee6c..f9848200059 100644 --- a/src/jdk.jpackage/share/man/jpackage.1 +++ b/src/jdk.jpackage/share/man/jpackage.1 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. +.\" Copyright (c) 2018, 2024, 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 @@ -189,7 +189,7 @@ All files in the input directory will be packaged into the application image. .RE .TP -\[ga]--app-content \f[I]additional-content\f[R][,\f[I]additional-content\f[R]...] +\f[V]--app-content\f[R] \f[I]additional-content\f[R] [\f[V],\f[R]\f[I]additional-content\f[R]...] A comma separated list of paths to files and/or directories to add to the application payload. .RS @@ -443,7 +443,7 @@ Group value of the RPM /.spec file or Section value of DEB control file Creates a shortcut for the application. .SS macOS platform options (available only when running on macOS): .TP -\[aq]--mac-dmg-content \f[I]additional-content\f[R][,\f[I]additional-content\f[R]...] +\f[V]--mac-dmg-content\f[R] \f[I]additional-content\f[R] [\f[V],\f[R]\f[I]additional-content\f[R]...] Include all the referenced content in the dmg. .RS .PP diff --git a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java index e9eaccea321..8bc339c6dab 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java @@ -71,7 +71,8 @@ */ class ExpressionToTypeInfo { - private static final String OBJECT_TYPE_NAME = "Object"; + //only used in erroneous/non-standard circumstances; OK to use a FQN: + private static final String OBJECT_TYPE_NAME = "java.lang.Object"; final AnalyzeTask at; final CompilationUnitTree cu; @@ -394,8 +395,8 @@ private ExpressionInfo treeToInfo(TreePath tp) { break; case NULL: ei.isNonVoid = true; - ei.typeName = OBJECT_TYPE_NAME; - ei.accessibleTypeName = OBJECT_TYPE_NAME; + ei.typeName = varTypeName(syms.objectType, false, AnonymousTypeKind.SUPER); + ei.accessibleTypeName = ei.typeName; break; default: { ei.isNonVoid = true; diff --git a/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java b/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java index a2011a111bf..e350cf4a7d7 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java @@ -99,4 +99,8 @@ boolean doesVariableNameExist(String name) { Stream importKeys() { return importMap.values().stream(); } + + Stream typeDeclKeys() { + return classMap.values().stream(); + } } diff --git a/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java b/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java index c801e489e20..0bbf2a5dceb 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java @@ -158,6 +158,15 @@ String fullClassNameAndPackageToClass(String full, String pkg) { if (mat.lookingAt()) { return full.substring(mat.end()); } + String simpleName = full.substring(full.lastIndexOf(".") + 1); + Stream declaredInSnippets = state.keyMap.typeDeclKeys() + .map(key -> (TypeDeclSnippet) getSnippet(key)) + .map(decl -> decl.name()); + if (declaredInSnippets.anyMatch(clazz -> simpleName.equals(clazz))) { + //simple name of full clashes with a name of a user-defined class, + //use the fully-qualified name: + return full; + } state.debug(DBG_DEP, "SM %s %s\n", full, pkg); List klasses = importSnippets() .filter(isi -> !isi.isStar) @@ -165,7 +174,7 @@ String fullClassNameAndPackageToClass(String full, String pkg) { .toList(); for (String k : klasses) { if (k.equals(full)) { - return full.substring(full.lastIndexOf(".")+1); + return simpleName; } } if (pkg.isEmpty()) { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java b/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java index 36d3e882f38..76f2e929e34 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java @@ -47,7 +47,8 @@ */ class TypePrinter extends Printer { - private static final String OBJECT = "Object"; + //only used in erroneous/non-standard circumstances; OK to use a FQN: + private static final String OBJECT = "java.lang.Object"; private final JavacMessages messages; private final Types types; diff --git a/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java b/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java index f9ae63b9cde..57ed543ce25 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java @@ -113,9 +113,9 @@ public static Wrap varWrap(String source, Wrap wtype, String brackets, scratchName += "$"; } Wrap waux = new CompoundWrap( - " private static <" + scratchName + "> " + scratchName +" ", DOIT_METHOD_NAME + "Aux", "() throws Throwable {\n", + " private static <" + scratchName + "> " + scratchName +" ", DOIT_METHOD_NAME + "Aux", "() throws java.lang.Throwable {\n", wtype, brackets + " ", scratchName, "_ =\n ", winit, semi(winit), - " @SuppressWarnings(\"unchecked\") ", scratchName, " ", scratchName, "__ = (", scratchName, ")", scratchName, "_;\n", + " @java.lang.SuppressWarnings(\"unchecked\") ", scratchName, " ", scratchName, "__ = (", scratchName, ")", scratchName, "_;\n", " return ", scratchName, "__;\n", "}" ); @@ -550,7 +550,7 @@ private static String semi(String s) { private static class DoitMethodWrap extends CompoundWrap { DoitMethodWrap(Wrap w) { - super(" public static Object " + DOIT_METHOD_NAME + "() throws Throwable {\n" + super(" public static java.lang.Object " + DOIT_METHOD_NAME + "() throws java.lang.Throwable {\n" + " ", w, " }\n"); } diff --git a/src/jdk.localedata/share/legal/cldr.md b/src/jdk.localedata/share/legal/cldr.md index e0d8102fb7f..97331fcba9f 100644 --- a/src/jdk.localedata/share/legal/cldr.md +++ b/src/jdk.localedata/share/legal/cldr.md @@ -1,14 +1,15 @@ -## Unicode Common Local Data Repository (CLDR) v44 +## Unicode Common Local Data Repository (CLDR) v45 ### CLDR License ``` + UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE -Copyright © 2019-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR @@ -44,4 +45,56 @@ not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. +SPDX-License-Identifier: Unicode-3.0 + +———————————— + +Unicode® Copyright and Terms of Use +For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + +Unicode Copyright +Copyright © 1991-2024 Unicode, Inc. All rights reserved. +Definitions +Unicode Data Files ("DATA FILES") include all data files under the directories: +https://www.unicode.org/Public/ +https://www.unicode.org/reports/ +https://www.unicode.org/ivd/data/ + +Unicode Data Files do not include PDF online code charts under the directory: +https://www.unicode.org/Public/ + +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard +or any source code or compiled code under the directories: +https://www.unicode.org/Public/PROGRAMS/ +https://www.unicode.org/Public/cldr/ +http://site.icu-project.org/download/ +Terms of Use +Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. +Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. +Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. +Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. +The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. +All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. +No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. +Modification is not permitted with respect to this document. All copies of this document must be verbatim. +Restricted Rights Legend +Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. +Warranties and Disclaimers +This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. +If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. +EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. +Waiver of Damages +In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. +Trademarks & Logos +The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. +The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. +All third party trademarks referenced herein are the property of their respective owners. +Miscellaneous +Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. +Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. +Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. +Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. +Entire Agreement. This Agreement constitutes the entire agreement between the parties. + + ``` diff --git a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp index 2c93fa2bba7..744ea1f9c26 100644 --- a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp +++ b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp @@ -67,6 +67,12 @@ class ZMapperTest : public Test { } virtual void SetUp() { + // Only run test on supported Windows versions + if (!ZSyscall::is_supported()) { + GTEST_SKIP() << "Requires Windows version 1803 or later"; + return; + } + ZSyscall::initialize(); ZGlobalsPointers::initialize(); @@ -78,8 +84,7 @@ class ZMapperTest : public Test { // Reserve address space for the test if (!reserve_for_test()) { - // Failed to reserve address space - GTEST_SKIP(); + GTEST_SKIP() << "Failed to reserve address space"; return; } @@ -87,6 +92,11 @@ class ZMapperTest : public Test { } virtual void TearDown() { + if (!ZSyscall::is_supported()) { + // Test skipped, nothing to cleanup + return; + } + if (_initialized) { _vmm->pd_unreserve(ZOffset::address_unsafe(zoffset(0)), 0); } diff --git a/test/hotspot/gtest/utilities/test_abs.cpp b/test/hotspot/gtest/utilities/test_abs.cpp new file mode 100644 index 00000000000..74e4fdb02e9 --- /dev/null +++ b/test/hotspot/gtest/utilities/test_abs.cpp @@ -0,0 +1,115 @@ +/* + * Copyright Amazon.com Inc. 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. + */ + +#include "precompiled.hpp" +#include "unittest.hpp" +#include "memory/allocation.hpp" +#include "memory/resourceArea.inline.hpp" +#include "runtime/thread.hpp" + +TEST(absTest, sanity) { + // Simple integer cases + EXPECT_EQ(0, ABS(0)); + EXPECT_EQ(1, ABS(1)); + EXPECT_EQ(1, ABS(-1)); + + // Simple floating point cases, should be exactly representable + EXPECT_EQ(0.0f, ABS(0.0f)); + EXPECT_EQ(1.0f, ABS(1.0f)); + EXPECT_EQ(1.0f, ABS(-1.0f)); + + EXPECT_EQ(0.0, ABS(0.0)); + EXPECT_EQ(1.0, ABS(1.0)); + EXPECT_EQ(1.0, ABS(-1.0)); + + // Upper bounds for unsigned integers + EXPECT_EQ(max_jubyte, ABS(max_jubyte)); + EXPECT_EQ(max_jushort, ABS(max_jushort)); + EXPECT_EQ(max_juint, ABS(max_juint)); + EXPECT_EQ(max_julong, ABS(max_julong)); + + // Upper bounds for signed integers + EXPECT_EQ(max_jbyte, ABS(max_jbyte)); + EXPECT_EQ(max_jshort, ABS(max_jshort)); + EXPECT_EQ(max_jint, ABS(max_jint)); + EXPECT_EQ(max_jlong, ABS(max_jlong)); + + // Lower valid bounds for signed integers + EXPECT_EQ(max_jbyte, ABS(min_jbyte + 1)); + EXPECT_EQ(max_jshort, ABS(min_jshort + 1)); + EXPECT_EQ(max_jint, ABS(min_jint + 1)); + EXPECT_EQ(max_jlong, ABS(min_jlong + 1)); + + // Lower bounds for signed integers after explicit FP cast + EXPECT_TRUE(ABS((float)min_jbyte) > 0); + EXPECT_TRUE(ABS((float)min_jshort) > 0); + EXPECT_TRUE(ABS((float)min_jint) > 0); + EXPECT_TRUE(ABS((float)min_jlong) > 0); +} + +// Now check what happens when we feed invalid arguments. + +#ifndef ASSERT + +// In release builds, ABS would return incorrect values. + +TEST(absTest, release_sanity) { + EXPECT_EQ(min_jbyte, ABS(min_jbyte)); + EXPECT_EQ(min_jshort, ABS(min_jshort)); + EXPECT_EQ(min_jint, ABS(min_jint)); + EXPECT_EQ(min_jlong, ABS(min_jlong)); +} + +#else + +// In debug builds, ABS would assert. + +TEST_VM_ASSERT_MSG(absTest, debug_sanity_min_jbyte, + "Error: ABS: argument should not allow overflow") { + + jbyte r = ABS(min_jbyte); // should fail + EXPECT_TRUE(r > 0); // should not be normally reachable +} + +TEST_VM_ASSERT_MSG(absTest, debug_sanity_min_jshort, + "Error: ABS: argument should not allow overflow") { + + jshort r = ABS(min_jshort); // should fail + EXPECT_TRUE(r > 0); // should not be normally reachable +} + +TEST_VM_ASSERT_MSG(absTest, debug_sanity_min_jint, + "Error: ABS: argument should not allow overflow") { + + jint r = ABS(min_jint); // should fail + EXPECT_TRUE(r > 0); // should not be normally reachable +} + +TEST_VM_ASSERT_MSG(absTest, debug_sanity_min_jlong, + "Error: ABS: argument should not allow overflow") { + + jlong r = ABS(min_jlong); // should fail + EXPECT_TRUE(r > 0); // should not be normally reachable +} + +#endif diff --git a/test/hotspot/jtreg/ProblemList-generational-zgc.txt b/test/hotspot/jtreg/ProblemList-generational-zgc.txt index cbe76d68dff..a92751cc621 100644 --- a/test/hotspot/jtreg/ProblemList-generational-zgc.txt +++ b/test/hotspot/jtreg/ProblemList-generational-zgc.txt @@ -106,6 +106,7 @@ serviceability/sa/jmap-hprof/JMapHProfLargeHeapProc.java 8307393 generic- serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java 8307393 generic-all serviceability/sa/sadebugd/ClhsdbAttachToDebugServer.java 8307393 generic-all serviceability/sa/sadebugd/ClhsdbTestConnectArgument.java 8307393 generic-all +serviceability/sa/ClhsdbTestAllocationMerge.java 8307393 generic-all serviceability/sa/sadebugd/DebugdConnectTest.java 8307393 generic-all serviceability/sa/sadebugd/DebugdUtils.java 8307393 generic-all serviceability/sa/sadebugd/DisableRegistryTest.java 8307393 generic-all diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 5b24566afc4..cb128b57039 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -113,7 +113,6 @@ runtime/StackGuardPages/TestStackGuardPagesNative.java 8303612 linux-all runtime/ErrorHandling/TestDwarf.java#checkDecoder 8305489 linux-all runtime/ErrorHandling/MachCodeFramesInErrorFile.java 8313315 linux-ppc64le runtime/cds/appcds/customLoader/HelloCustom_JFR.java 8241075 linux-all,windows-x64 -runtime/os/TestTransparentHugePageUsage.java 8324776 linux-all runtime/Thread/TestAlwaysPreTouchStacks.java 8324781 linux-all applications/jcstress/accessAtomic.java 8325984 generic-all diff --git a/test/hotspot/jtreg/compiler/c1/TestLinearScanOrderMain.java b/test/hotspot/jtreg/compiler/c1/TestLinearScanOrderMain.java index 4165fa4d0e1..a154427530a 100644 --- a/test/hotspot/jtreg/compiler/c1/TestLinearScanOrderMain.java +++ b/test/hotspot/jtreg/compiler/c1/TestLinearScanOrderMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -26,6 +26,7 @@ * @bug 8207355 * @compile TestLinearScanOrder.jasm * @run main/othervm -Xcomp -XX:+TieredCompilation -XX:TieredStopAtLevel=1 + * -XX:+IgnoreUnrecognizedVMOptions -XX:NMethodSizeLimit=655360 * -XX:CompileCommand=compileonly,compiler.c1.TestLinearScanOrder::test * compiler.c1.TestLinearScanOrderMain */ diff --git a/test/hotspot/jtreg/compiler/c2/TestMergeStores.java b/test/hotspot/jtreg/compiler/c2/TestMergeStores.java index 2f662a1ed26..55594650219 100644 --- a/test/hotspot/jtreg/compiler/c2/TestMergeStores.java +++ b/test/hotspot/jtreg/compiler/c2/TestMergeStores.java @@ -187,6 +187,10 @@ public TestMergeStores() { testGroups.put("test600", new HashMap()); testGroups.get("test600").put("test600R", (_,i) -> { return test600R(aB.clone(), aI.clone(), i); }); testGroups.get("test600").put("test600a", (_,i) -> { return test600a(aB.clone(), aI.clone(), i); }); + + testGroups.put("test700", new HashMap()); + testGroups.get("test700").put("test700R", (_,i) -> { return test700R(aI.clone(), i); }); + testGroups.get("test700").put("test700a", (_,i) -> { return test700a(aI.clone(), i); }); } @Warmup(100) @@ -220,7 +224,8 @@ public TestMergeStores() { "test500a", "test501a", "test502a", - "test600a"}) + "test600a", + "test700a"}) public void runTests(RunInfo info) { // Repeat many times, so that we also have multiple iterations for post-warmup to potentially recompile int iters = info.isWarmUp() ? 1_000 : 50_000; @@ -1296,4 +1301,22 @@ static Object[] test600a(byte[] aB, int[] aI, int i) { return new Object[]{ aB, aI }; } + @DontCompile + static Object[] test700R(int[] a, long v1) { + a[0] = (int)(v1 >> -1); + a[1] = (int)(v1 >> -2); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "2", + IRNode.STORE_L_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}) + static Object[] test700a(int[] a, long v1) { + // Negative shift: cannot optimize + a[0] = (int)(v1 >> -1); + a[1] = (int)(v1 >> -2); + return new Object[]{ a }; + } } diff --git a/test/hotspot/jtreg/compiler/ccp/TestShiftConvertAndNotification.java b/test/hotspot/jtreg/compiler/ccp/TestShiftConvertAndNotification.java index 7ce44633670..a076a1c2558 100644 --- a/test/hotspot/jtreg/compiler/ccp/TestShiftConvertAndNotification.java +++ b/test/hotspot/jtreg/compiler/ccp/TestShiftConvertAndNotification.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -38,7 +38,7 @@ * @bug 8313672 * @summary Test CCP notification for value update of AndL through LShiftI and * ConvI2L (no flags). - * @run driver compiler.ccp.TestShiftConvertAndNotification + * @run main compiler.ccp.TestShiftConvertAndNotification * */ diff --git a/test/hotspot/jtreg/gc/g1/TestVerificationInConcurrentCycle.java b/test/hotspot/jtreg/gc/g1/TestVerificationInConcurrentCycle.java index 044636c7c5f..7618e8c1708 100644 --- a/test/hotspot/jtreg/gc/g1/TestVerificationInConcurrentCycle.java +++ b/test/hotspot/jtreg/gc/g1/TestVerificationInConcurrentCycle.java @@ -36,7 +36,6 @@ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * -XX:+VerifyBeforeGC -XX:+VerifyDuringGC -XX:+VerifyAfterGC * -XX:+UseG1GC -XX:+G1VerifyHeapRegionCodeRoots - * -XX:+VerifyRememberedSets * -XX:+G1VerifyBitmaps * gc.g1.TestVerificationInConcurrentCycle */ @@ -55,7 +54,6 @@ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * -XX:+VerifyBeforeGC -XX:+VerifyDuringGC -XX:+VerifyAfterGC * -XX:+UseG1GC -XX:+G1VerifyHeapRegionCodeRoots - * -XX:+VerifyRememberedSets * gc.g1.TestVerificationInConcurrentCycle */ diff --git a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java index 50751a62bdf..fa4ff56b691 100644 --- a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java +++ b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java @@ -56,6 +56,7 @@ public class VMDeprecatedOptions { ArrayList deprecated = new ArrayList( Arrays.asList(new String[][] { // deprecated non-alias flags: + {"DontYieldALot", "false"}, {"UseNotificationThread", "true"}, {"PreserveAllAnnotations", "true"}, {"AllowRedefinitionToAddDeleteMethods", "true"}, diff --git a/test/hotspot/jtreg/runtime/os/TestTransparentHugePageUsage.java b/test/hotspot/jtreg/runtime/os/TestTransparentHugePageUsage.java deleted file mode 100644 index 2b054fd6f4b..00000000000 --- a/test/hotspot/jtreg/runtime/os/TestTransparentHugePageUsage.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) Ampere Computing 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 TestTransparentHugePageUsage - * @bug 8315923 - * @library /test/lib - * @requires vm.gc.Serial & os.family == "linux" & os.maxMemory > 2G - * @summary Check that a pretouched java heap appears to use THPs by checking - * AnonHugePages in smaps - * @comment Use SerialGC to increase the time window for pretouching - * @run driver runtime.os.TestTransparentHugePageUsage - */ - -package runtime.os; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import jdk.test.lib.process.ProcessTools; - -public class TestTransparentHugePageUsage { - private static final String[] fixedCmdLine = { - "-XX:+UseTransparentHugePages", "-XX:+AlwaysPreTouch", - "-Xlog:startuptime,pagesize,gc+heap=debug", - "-XX:+UseSerialGC", "-Xms1G", "-Xmx1G", - }; - - public static void main(String[] args) throws Exception { - ArrayList cmdLine = new ArrayList<>(Arrays.asList(fixedCmdLine)); - cmdLine.add("runtime.os.TestTransparentHugePageUsage$CatSmaps"); - ProcessBuilder builder = ProcessTools.createTestJavaProcessBuilder(cmdLine); - checkUsage(new BufferedReader(new InputStreamReader(builder.start().getInputStream()))); - } - - private static void checkUsage(BufferedReader reader) throws Exception { - final Pattern useThp = Pattern.compile(".*\\[info\\]\\[pagesize\\].+UseTransparentHugePages=1.*"); - // Ensure THP is not disabled by OS. - if (reader.lines().filter(line -> useThp.matcher(line).matches()).findFirst().isPresent()) { - final Pattern heapAddr = Pattern.compile(".*\\sHeap:\\s.+base=0x0*(\\p{XDigit}+).*"); - final Optional addr = reader.lines() - .map(line -> new SimpleEntry(line, heapAddr.matcher(line))) - .filter(e -> e.getValue().matches()) - .findFirst() - .map(e -> Long.valueOf(e.getKey().substring(e.getValue().start(1), e.getValue().end(1)), 16)); - if (!addr.isPresent()) throw new RuntimeException("Heap base was not found in smaps."); - // Match the start of a mapping, for example: - // 200000000-800000000 rw-p 00000000 00:00 0 - final Pattern mapping = Pattern.compile("^(\\p{XDigit}+)-\\p{XDigit}+.*"); - reader.lines() - .filter(line -> { - Matcher matcher = mapping.matcher(line); - if (matcher.matches()) { - Long mappingAddr = Long.valueOf(line.substring(matcher.start(1), matcher.end(1)), 16); - if (mappingAddr.equals(addr.get())) return true; - } - return false; - }) - .findFirst(); - final Pattern thpUsage = Pattern.compile("^AnonHugePages:\\s+(\\d+)\\skB"); - final Optional usage = reader.lines() - .map(line -> new SimpleEntry(line, thpUsage.matcher(line))) - .filter(e -> e.getValue().matches()) - .findFirst() - .map(e -> Long.valueOf(e.getKey().substring(e.getValue().start(1), e.getValue().end(1)))); - if (!usage.isPresent()) throw new RuntimeException("The usage of THP was not found."); - // Even with MADV_POPULATE_WRITE, the usage of THP is still one page less than the whole heap. - if (usage.get() < 524288) throw new RuntimeException("The usage of THP is not enough."); - } - } - - public static class CatSmaps { - public static void main(String[] args) throws Exception { - new BufferedReader(new FileReader("/proc/self/smaps")) - .lines() - .forEach(line -> System.out.println(line)); - } - } -} diff --git a/test/hotspot/jtreg/serviceability/sa/ClhsdbLauncher.java b/test/hotspot/jtreg/serviceability/sa/ClhsdbLauncher.java index 961311f5d5b..849ec2eb109 100644 --- a/test/hotspot/jtreg/serviceability/sa/ClhsdbLauncher.java +++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbLauncher.java @@ -149,6 +149,7 @@ private String runCmd(List commands, oa.shouldNotMatch("^WARNING in native method:.*$"); // This will detect most SA failures, including during the attach. oa.shouldNotMatch("^sun.jvm.hotspot.debugger.DebuggerException:.*$"); + oa.shouldNotMatch("sun.jvm.hotspot.utilities.AssertionFailure"); // This will detect unexpected exceptions, like NPEs and asserts, that are caught // by sun.jvm.hotspot.CommandProcessor. oa.shouldNotMatch("^Error: .*$"); diff --git a/test/hotspot/jtreg/serviceability/sa/ClhsdbTestAllocationMerge.java b/test/hotspot/jtreg/serviceability/sa/ClhsdbTestAllocationMerge.java new file mode 100644 index 00000000000..2e17bc038de --- /dev/null +++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbTestAllocationMerge.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2024, 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. + */ + +import java.util.List; +import jdk.test.lib.apps.LingeredApp; +import jtreg.SkippedException; + +/** + * @test + * @bug 8318682 + * @summary Test clhsdb that decoding of AllocationMerge objects in debug info works correctly + * @requires vm.hasSA + * @library /test/lib + * @run main/othervm ClhsdbTestAllocationMerge + */ + +public class ClhsdbTestAllocationMerge { + + public static void main(String[] args) throws Exception { + System.out.println("Starting ClhsdbTestDebugInfodDecode test"); + + LingeredApp theApp = null; + try { + ClhsdbLauncher test = new ClhsdbLauncher(); + + theApp = new LingeredAppWithAllocationMerge(); + LingeredApp.startApp(theApp); + System.out.println("Started LingeredAppWithAllocationMerge with pid " + theApp.getPid()); + + List cmds = List.of("jstack -v"); + + // sun.jvm.hotspot.utilities.AssertionFailure is caught by the harness so it's not + // necessary to include extra filters here. + test.run(theApp.getPid(), cmds, null, null); + } catch (SkippedException se) { + throw se; + } catch (Exception ex) { + throw new RuntimeException("Test ERROR " + ex, ex); + } finally { + LingeredApp.stopApp(theApp); + } + System.out.println("Test PASSED"); + } +} diff --git a/test/hotspot/jtreg/serviceability/sa/LingeredAppWithAllocationMerge.java b/test/hotspot/jtreg/serviceability/sa/LingeredAppWithAllocationMerge.java new file mode 100644 index 00000000000..a4743d76307 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/sa/LingeredAppWithAllocationMerge.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2024, 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. + */ + +import jdk.test.lib.apps.LingeredApp; + +// Derived from test/hotspot/jtreg/compiler/c2/TestReduceAllocationAndHeapDump.java +public class LingeredAppWithAllocationMerge extends LingeredApp { + // Helper class + static class Point { + public int x; + + public Point(int xx) { + this.x = xx; + } + } + + + public static Point p = new Point(0); + + public static void main(String[] args) { + for (int i = 0; i < 5000; i++) { + testIt(i, args); + } + } + + public static void testIt(int i, String[] args) { + Point p = (i % 2 == 0) ? new Point(i) : new Point(i); + + dummy(i, args); + + if (i < 5000) { + dummy(i, args); + } else { + dummy(p.x + i, args); + } + } + + public static void dummy(int x, String[] args) { + if (x > 4900) { + LingeredApp.main(args); + throw new InternalError("should never return"); + } + } +} diff --git a/test/hotspot/jtreg/serviceability/sa/TestDebugInfoDecode.java b/test/hotspot/jtreg/serviceability/sa/TestDebugInfoDecode.java new file mode 100644 index 00000000000..257f950b12f --- /dev/null +++ b/test/hotspot/jtreg/serviceability/sa/TestDebugInfoDecode.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2024, 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. + */ + +import sun.jvm.hotspot.HotSpotAgent; +import sun.jvm.hotspot.code.CodeCacheVisitor; +import sun.jvm.hotspot.code.CodeBlob; +import sun.jvm.hotspot.code.NMethod; +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.runtime.VM; + +import jdk.test.lib.apps.LingeredApp; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.SA.SATestUtils; + +/** + * @test + * @bug 8318682 + * @summary Test decoding debug info for all nmethods in the code cache + * @requires vm.hasSA + * @library /test/lib + * @modules jdk.hotspot.agent/sun.jvm.hotspot + * jdk.hotspot.agent/sun.jvm.hotspot.code + * jdk.hotspot.agent/sun.jvm.hotspot.debugger + * jdk.hotspot.agent/sun.jvm.hotspot.runtime + * @run main/othervm/timeout=2400 -Xmx1g -Xcomp TestDebugInfoDecode + */ + +public class TestDebugInfoDecode { + + private static LingeredApp theApp = null; + + private static void checkDecode(String pid) throws Exception { + HotSpotAgent agent = new HotSpotAgent(); + + try { + agent.attach(Integer.parseInt(pid)); + + CodeCacheVisitor v = new CodeCacheVisitor() { + Throwable throwable; + public void prologue(Address start, Address end) { + } + public void visit(CodeBlob blob) { + if (throwable != null) { + // Only report the first failure. + return; + } + if (blob instanceof NMethod) { + NMethod nm = (NMethod) blob; + try { + nm.decodeAllScopeDescs(); + } catch (Throwable t) { + System.err.println("Exception while decoding debug info for " + blob); + throwable = t; + throw t; + } + } + } + public void epilogue() { + } + }; + VM.getVM().getCodeCache().iterate(v); + } finally { + agent.detach(); + } + } + + private static void createAnotherToAttach(long lingeredAppPid) throws Exception { + // Start a new process to attach to the lingered app + ProcessBuilder processBuilder = ProcessTools.createLimitedTestJavaProcessBuilder( + "--add-modules=jdk.hotspot.agent", + "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot=ALL-UNNAMED", + "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.code=ALL-UNNAMED", + "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.debugger=ALL-UNNAMED", + "--add-exports=jdk.hotspot.agent/sun.jvm.hotspot.runtime=ALL-UNNAMED", + "TestDebugInfoDecode", + Long.toString(lingeredAppPid) + ); + SATestUtils.addPrivilegesIfNeeded(processBuilder); + OutputAnalyzer SAOutput = ProcessTools.executeProcess(processBuilder); + SAOutput.shouldHaveExitValue(0); + System.out.println(SAOutput.getOutput()); + } + + public static void main (String... args) throws Exception { + SATestUtils.skipIfCannotAttach(); // throws SkippedException if attach not expected to work. + if (args == null || args.length == 0) { + try { + theApp = new LingeredApp(); + LingeredApp.startApp(theApp); + createAnotherToAttach(theApp.getPid()); + } finally { + LingeredApp.stopApp(theApp); + } + } else { + checkDecode(args[0]); + } + } +} diff --git a/test/jdk/java/io/ByteArrayOutputStream/WriteToReleasesCarrier.java b/test/jdk/java/io/ByteArrayOutputStream/WriteToReleasesCarrier.java new file mode 100644 index 00000000000..c0607fd9494 --- /dev/null +++ b/test/jdk/java/io/ByteArrayOutputStream/WriteToReleasesCarrier.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2024, 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 8330748 + * @summary Test ByteArrayOutputStream.writeTo releases carrier thread + * @requires vm.continuations + * @modules java.base/java.lang:+open + * @run main WriteToReleasesCarrier + */ + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.lang.reflect.Constructor; +import java.util.Arrays; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.LockSupport; + +public class WriteToReleasesCarrier { + public static void main(String[] args) throws Exception { + byte[] bytes = "Hello".getBytes(StandardCharsets.UTF_8); + + var baos = new ByteArrayOutputStream(); + baos.write(bytes); + + var target = new ParkingOutputStream(); + + try (ExecutorService scheduler = Executors.newFixedThreadPool(1)) { + Thread.Builder builder = virtualThreadBuilder(scheduler); + var started = new CountDownLatch(1); + var vthread1 = builder.start(() -> { + started.countDown(); + try { + baos.writeTo(target); + } catch (IOException ioe) { } + }); + try { + started.await(); + await(vthread1, Thread.State.WAITING); + + // carrier should be released, use it for another thread + var executed = new AtomicBoolean(); + var vthread2 = builder.start(() -> { + executed.set(true); + }); + vthread2.join(); + if (!executed.get()) { + throw new RuntimeException("Second virtual thread did not run"); + } + } finally { + LockSupport.unpark(vthread1); + vthread1.join(); + } + } + + if (!Arrays.equals(target.toByteArray(), bytes)) { + throw new RuntimeException("Expected bytes not written"); + } + } + + /** + * Waits for a thread to get to the expected state. + */ + private static void await(Thread thread, Thread.State expectedState) throws Exception { + Thread.State state = thread.getState(); + while (state != expectedState) { + Thread.sleep(10); + state = thread.getState(); + } + } + + /** + * An OutputStream that parks when writing. + */ + static class ParkingOutputStream extends OutputStream { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + @Override + public void write(int i) { + LockSupport.park(); + baos.write(i); + } + + @Override + public void write(byte[] b, int off, int len) { + LockSupport.park(); + baos.write(b, off, len); + } + + byte[] toByteArray() { + return baos.toByteArray(); + } + } + + /** + * Returns a builder to create virtual threads that use the given scheduler. + */ + static Thread.Builder.OfVirtual virtualThreadBuilder(Executor scheduler) throws Exception { + Class clazz = Class.forName("java.lang.ThreadBuilders$VirtualThreadBuilder"); + Constructor ctor = clazz.getDeclaredConstructor(Executor.class); + ctor.setAccessible(true); + return (Thread.Builder.OfVirtual) ctor.newInstance(scheduler); + } +} diff --git a/test/jdk/java/net/httpclient/ForbiddenHeadTest.java b/test/jdk/java/net/httpclient/ForbiddenHeadTest.java index 0c39b44d7f5..4b651eb4813 100644 --- a/test/jdk/java/net/httpclient/ForbiddenHeadTest.java +++ b/test/jdk/java/net/httpclient/ForbiddenHeadTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -205,18 +205,18 @@ static final void printFailedTests(ITestContext context) { @DataProvider(name = "all") public Object[][] allcases() { List result = new ArrayList<>(); - for (var client : List.of(authClient, noAuthClient)) { + for (boolean useAuth : List.of(true, false)) { for (boolean async : List.of(true, false)) { for (int code : List.of(UNAUTHORIZED, PROXY_UNAUTHORIZED)) { var srv = code == PROXY_UNAUTHORIZED ? "/proxy" : "/server"; for (var auth : List.of("/auth", "/noauth")) { var pcode = code; if (auth.equals("/noauth")) { - if (client == authClient) continue; + if (useAuth) continue; pcode = FORBIDDEN; } for (var uri : List.of(httpURI, httpsURI, http2URI, https2URI)) { - result.add(new Object[]{uri + srv + auth, pcode, async, client}); + result.add(new Object[]{uri + srv + auth, pcode, async, useAuth}); } } } @@ -237,12 +237,13 @@ protected PasswordAuthentication getPasswordAuthentication() { static final AtomicLong sleepCount = new AtomicLong(); @Test(dataProvider = "all") - void test(String uriString, int code, boolean async, HttpClient client) throws Throwable { + void test(String uriString, int code, boolean async, boolean useAuth) throws Throwable { checkSkip(); + HttpClient client = useAuth ? authClient : noAuthClient; var name = String.format("test(%s, %d, %s, %s)", uriString, code, async ? "async" : "sync", client.authenticator().isPresent() ? "authClient" : "noAuthClient"); out.printf("%n---- starting %s ----%n", name); - assert client.authenticator().isPresent() ? client == authClient : client == noAuthClient; + assert client.authenticator().isPresent() == useAuth; uriString = uriString + "/ForbiddenTest"; for (int i=0; i 1) out.printf("---- ITERATION %d%n",i); @@ -381,13 +382,16 @@ public void teardown() throws Exception { authClient = noAuthClient = null; Thread.sleep(100); AssertionError fail = TRACKER.check(500); - - proxy.stop(); - authproxy.stop(); - httpTestServer.stop(); - httpsTestServer.stop(); - http2TestServer.stop(); - https2TestServer.stop(); + try { + proxy.stop(); + authproxy.stop(); + httpTestServer.stop(); + httpsTestServer.stop(); + http2TestServer.stop(); + https2TestServer.stop(); + } finally { + if (fail != null) throw fail; + } } static class TestProxySelector extends ProxySelector { diff --git a/test/jdk/java/net/httpclient/ProxySelectorTest.java b/test/jdk/java/net/httpclient/ProxySelectorTest.java index bb3ddc84017..fd8f85fa6d7 100644 --- a/test/jdk/java/net/httpclient/ProxySelectorTest.java +++ b/test/jdk/java/net/httpclient/ProxySelectorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -377,15 +377,18 @@ public void teardown() throws Exception { client = null; Thread.sleep(100); AssertionError fail = TRACKER.check(500); - - proxy.stop(); - authproxy.stop(); - httpTestServer.stop(); - proxyHttpTestServer.stop(); - authProxyHttpTestServer.stop(); - httpsTestServer.stop(); - http2TestServer.stop(); - https2TestServer.stop(); + try { + proxy.stop(); + authproxy.stop(); + httpTestServer.stop(); + proxyHttpTestServer.stop(); + authProxyHttpTestServer.stop(); + httpsTestServer.stop(); + http2TestServer.stop(); + https2TestServer.stop(); + } finally { + if (fail != null) throw fail; + } } class TestProxySelector extends ProxySelector { diff --git a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java index 723b6b62687..40da19adfe7 100644 --- a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java +++ b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -22,7 +22,7 @@ */ /* * @test - * @bug 8177552 8217721 8222756 8295372 8306116 + * @bug 8177552 8217721 8222756 8295372 8306116 8319990 * @summary Checks the functioning of compact number format * @modules jdk.localedata * @run testng/othervm TestCompactNumber @@ -256,9 +256,9 @@ Object[][] compactFormatData() { // Boundary number {FORMAT_IT_SHORT, 1000, "1.000"}, // Long path - {FORMAT_IT_SHORT, 3000000L, "3\u00a0Mio"}, + {FORMAT_IT_SHORT, 3000000L, "3\u00a0Mln"}, // Double path - {FORMAT_IT_SHORT, 3000000.0, "3\u00a0Mio"}, + {FORMAT_IT_SHORT, 3000000.0, "3\u00a0Mln"}, // BigInteger path {FORMAT_IT_SHORT, new BigInteger("12345678901234567890"), "12345679\u00a0Bln"}, @@ -418,9 +418,9 @@ Object[][] compactParseData() { {FORMAT_JA_JP_SHORT, "12345679\u5146", 1.2345679E19, Double.class}, {FORMAT_JA_JP_SHORT, "-12345679\u5146", -1.2345679E19, Double.class}, {FORMAT_IT_SHORT, "-99", -99L, Long.class}, - {FORMAT_IT_SHORT, "1\u00a0Mio", 1000000L, Long.class}, - {FORMAT_IT_SHORT, "30\u00a0Mio", 30000000L, Long.class}, - {FORMAT_IT_SHORT, "-30\u00a0Mio", -30000000L, Long.class}, + {FORMAT_IT_SHORT, "1\u00a0Mln", 1000000L, Long.class}, + {FORMAT_IT_SHORT, "30\u00a0Mln", 30000000L, Long.class}, + {FORMAT_IT_SHORT, "-30\u00a0Mln", -30000000L, Long.class}, {FORMAT_IT_SHORT, "12345679\u00a0Bln", 1.2345679E19, Double.class}, {FORMAT_IT_SHORT, "-12345679\u00a0Bln", -1.2345679E19, Double.class}, {FORMAT_SW_LONG, "-0.0", -0.0, Double.class}, diff --git a/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java b/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java index b4eaf67b976..dc88ce4de4a 100644 --- a/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java +++ b/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -22,7 +22,7 @@ */ /* * @test - * @bug 8177552 8306116 + * @bug 8177552 8306116 8319990 * @summary Checks CNF.parse() when parseBigDecimal is set to true * @modules jdk.localedata * @run testng/othervm TestParseBigDecimal @@ -133,9 +133,9 @@ Object[][] compactParseData() { {FORMAT_JA_JP_SHORT, "12345679\u5146", new BigDecimal("12345679000000000000")}, {FORMAT_JA_JP_SHORT, "-12345679\u5146", new BigDecimal("-12345679000000000000")}, {FORMAT_IT_SHORT, "-99", new BigDecimal("-99")}, - {FORMAT_IT_SHORT, "1\u00a0Mio", new BigDecimal("1000000")}, - {FORMAT_IT_SHORT, "30\u00a0Mio", new BigDecimal("30000000")}, - {FORMAT_IT_SHORT, "-30\u00a0Mio", new BigDecimal("-30000000")}, + {FORMAT_IT_SHORT, "1\u00a0Mln", new BigDecimal("1000000")}, + {FORMAT_IT_SHORT, "30\u00a0Mln", new BigDecimal("30000000")}, + {FORMAT_IT_SHORT, "-30\u00a0Mln", new BigDecimal("-30000000")}, {FORMAT_IT_SHORT, "12345679\u00a0Bln", new BigDecimal("12345679000000000000")}, {FORMAT_IT_SHORT, "-12345679\u00a0Bln", new BigDecimal("-12345679000000000000")}, {FORMAT_SW_LONG, "-0.0", new BigDecimal("-0.0")}, diff --git a/test/jdk/javax/swing/plaf/basic/BasicDirectoryModel/LoaderThreadCount.java b/test/jdk/javax/swing/plaf/basic/BasicDirectoryModel/LoaderThreadCount.java new file mode 100644 index 00000000000..b471c51a260 --- /dev/null +++ b/test/jdk/javax/swing/plaf/basic/BasicDirectoryModel/LoaderThreadCount.java @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2024, 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. + */ + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.LongStream; +import java.util.stream.Stream; + +import javax.swing.JFileChooser; + +/* + * @test + * @bug 8325179 + * @summary Verifies there's only one BasicDirectoryModel.FilesLoader thread + * at any given moment + * @run main/othervm -Djava.awt.headless=true LoaderThreadCount + */ +public final class LoaderThreadCount extends ThreadGroup { + /** Initial number of files. */ + private static final long NUMBER_OF_FILES = 500; + + /** + * Number of threads running {@code fileChooser.rescanCurrentDirectory()}. + */ + private static final int NUMBER_OF_THREADS = 5; + + /** Number of snapshots with live threads. */ + private static final int SNAPSHOTS = 20; + + /** The barrier to synchronise scanner threads and capturing live threads. */ + private static final CyclicBarrier start = new CyclicBarrier(NUMBER_OF_THREADS + 1); + + /** List of scanner threads. */ + private static final List threads = new ArrayList<>(NUMBER_OF_THREADS); + + /** + * Stores an exception caught by any of the threads. + * If more exceptions are caught, they're added as suppressed exceptions. + */ + private static final AtomicReference exception = + new AtomicReference<>(); + + /** + * Stores an {@code IOException} thrown while removing the files. + */ + private static final AtomicReference ioException = + new AtomicReference<>(); + + + public static void main(String[] args) throws Throwable { + try { + // Start the test in its own thread group to catch and handle + // all thrown exceptions, in particular in + // BasicDirectoryModel.FilesLoader which is created by Swing. + ThreadGroup threadGroup = new LoaderThreadCount(); + Thread runner = new Thread(threadGroup, + LoaderThreadCount::wrapper, + "Test Runner"); + runner.start(); + runner.join(); + } catch (Throwable throwable) { + handleException(throwable); + } + + if (ioException.get() != null) { + System.err.println("An error occurred while removing files:"); + ioException.get().printStackTrace(); + } + + if (exception.get() != null) { + throw exception.get(); + } + } + + private static void wrapper() { + final long timeStart = System.currentTimeMillis(); + try { + runTest(timeStart); + } catch (Throwable throwable) { + handleException(throwable); + } finally { + System.out.printf("Duration: %,d\n", + (System.currentTimeMillis() - timeStart)); + } + } + + private static void runTest(final long timeStart) throws Throwable { + final Path temp = Files.createDirectory(Paths.get("fileChooser-concurrency-" + timeStart)); + + try { + createFiles(temp); + + final JFileChooser fc = new JFileChooser(temp.toFile()); + + threads.addAll(Stream.generate(() -> new Thread(new Scanner(fc))) + .limit(NUMBER_OF_THREADS) + .toList()); + threads.forEach(Thread::start); + + // Create snapshots of live threads + List threadsCapture = + Stream.generate(LoaderThreadCount::getThreadSnapshot) + .limit(SNAPSHOTS) + .toList(); + + threads.forEach(Thread::interrupt); + + List loaderCount = + threadsCapture.stream() + .map(ta -> Arrays.stream(ta) + .filter(Objects::nonNull) + .map(Thread::getName) + .filter(tn -> tn.startsWith("Basic L&F File Loading Thread")) + .count()) + .filter(c -> c > 0) + .toList(); + + if (loaderCount.isEmpty()) { + throw new RuntimeException("Invalid results: no loader threads detected"); + } + + System.out.println("Number of snapshots: " + loaderCount.size()); + + long ones = loaderCount.stream() + .filter(n -> n == 1) + .count(); + long twos = loaderCount.stream() + .filter(n -> n == 2) + .count(); + long count = loaderCount.stream() + .filter(n -> n > 2) + .count(); + System.out.println("Number of snapshots where number of loader threads:"); + System.out.println(" = 1: " + ones); + System.out.println(" = 2: " + twos); + System.out.println(" > 2: " + count); + if (count > 0) { + throw new RuntimeException("Detected " + count + " snapshots " + + "with several loading threads"); + } + } catch (Throwable e) { + threads.forEach(Thread::interrupt); + throw e; + } finally { + deleteFiles(temp); + deleteFile(temp); + } + } + + private static Thread[] getThreadSnapshot() { + try { + start.await(); + // Allow for the scanner threads to initiate re-scanning + Thread.sleep(10); + + Thread[] array = new Thread[Thread.activeCount()]; + Thread.currentThread() + .getThreadGroup() + .enumerate(array, false); + + // Additional delay between captures + Thread.sleep(500); + + return array; + } catch (InterruptedException | BrokenBarrierException e) { + handleException(e); + throw new RuntimeException("getThreadSnapshot is interrupted"); + } + } + + + private LoaderThreadCount() { + super("bdmConcurrency"); + } + + @Override + public void uncaughtException(Thread t, Throwable e) { + handleException(t, e); + } + + private static void handleException(Throwable throwable) { + handleException(Thread.currentThread(), throwable); + } + + private static void handleException(final Thread thread, + final Throwable throwable) { + System.err.println("Exception in " + thread.getName() + ": " + + throwable.getClass() + + (throwable.getMessage() != null + ? ": " + throwable.getMessage() + : "")); + if (!exception.compareAndSet(null, throwable)) { + exception.get().addSuppressed(throwable); + } + threads.stream() + .filter(t -> t != thread) + .forEach(Thread::interrupt); + } + + + private record Scanner(JFileChooser fileChooser) + implements Runnable { + + @Override + public void run() { + try { + do { + start.await(); + fileChooser.rescanCurrentDirectory(); + } while (!Thread.interrupted()); + } catch (InterruptedException | BrokenBarrierException e) { + // Just exit the loop + } + } + } + + private static void createFiles(final Path parent) { + LongStream.range(0, LoaderThreadCount.NUMBER_OF_FILES) + .mapToObj(n -> parent.resolve(n + ".file")) + .forEach(LoaderThreadCount::createFile); + } + + private static void createFile(final Path file) { + try { + Files.createFile(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static void deleteFiles(final Path parent) throws IOException { + try (var stream = Files.walk(parent)) { + stream.filter(p -> p != parent) + .forEach(LoaderThreadCount::deleteFile); + } + } + + private static void deleteFile(final Path file) { + try { + Files.delete(file); + } catch (IOException e) { + if (!ioException.compareAndSet(null, e)) { + ioException.get().addSuppressed(e); + } + } + } +} diff --git a/test/jdk/jdk/classfile/LimitsTest.java b/test/jdk/jdk/classfile/LimitsTest.java index d23a948fe9f..00aaf32385d 100644 --- a/test/jdk/jdk/classfile/LimitsTest.java +++ b/test/jdk/jdk/classfile/LimitsTest.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8320360 + * @bug 8320360 8330684 * @summary Testing ClassFile limits. * @run junit LimitsTest */ @@ -31,6 +31,7 @@ import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; import java.lang.classfile.ClassFile; +import java.lang.classfile.constantpool.ConstantPoolException; import jdk.internal.classfile.impl.LabelContext; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -92,4 +93,10 @@ void testReadingOutOfBounds() { assertThrows(IllegalArgumentException.class, () -> ClassFile.of().parse(new byte[]{(byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE}), "reading magic only"); assertThrows(IllegalArgumentException.class, () -> ClassFile.of().parse(new byte[]{(byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE, 0, 0, 0, 0, 0, 2}), "reading invalid CP size"); } + + @Test + void testInvalidClassEntry() { + assertThrows(ConstantPoolException.class, () -> ClassFile.of().parse(new byte[]{(byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE, + 0, 0, 0, 0, 0, 2, ClassFile.TAG_METHODREF, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}).thisClass()); + } } diff --git a/test/jdk/jdk/internal/vm/Continuation/OSRTest.java b/test/jdk/jdk/internal/vm/Continuation/OSRTest.java index bf0bfeab674..a9eed4e93b6 100644 --- a/test/jdk/jdk/internal/vm/Continuation/OSRTest.java +++ b/test/jdk/jdk/internal/vm/Continuation/OSRTest.java @@ -32,13 +32,13 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI OSRTest true true true -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=inline,*::yield0 OSRTest true true false -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::yield* OSRTest true true false -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=exclude,*::bar() OSRTest true false false -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI OSRTest false true true -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI OSRTest false true false -* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=exclude,*::bar() OSRTest false false false +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* OSRTest true true true +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* -XX:CompileCommand=inline,*::yield0 OSRTest true true false +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* -XX:CompileCommand=dontinline,*::yield* OSRTest true true false +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* -XX:CompileCommand=exclude,*::bar() OSRTest true false false +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* OSRTest false true true +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* OSRTest false true false +* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=dontinline,*::foo* -XX:CompileCommand=exclude,*::bar() OSRTest false false false * */ diff --git a/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java b/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java index 94383298ddc..8edb74b847a 100644 --- a/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java +++ b/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java @@ -88,46 +88,60 @@ public static void main(String... args) throws Exception { private static void testSetOrderedTrue(Path p) throws Exception { for (boolean reuse : BOOLEAN_STATES) { + System.out.println(); + System.out.println("Testing: testSetOrderedTrue reuse = " + reuse); AtomicReference timestamp = new AtomicReference<>(Instant.MIN); + AtomicBoolean unordered = new AtomicBoolean(false); try (EventStream es = EventStream.openFile(p)) { es.setReuse(reuse); es.setOrdered(true); es.onEvent(e -> { Instant endTime = e.getEndTime(); + printTimestamp(endTime); if (endTime.isBefore(timestamp.get())) { - throw new Error("Events are not ordered! Reuse = " + reuse); + unordered.set(true); } timestamp.set(endTime); }); es.start(); } + if (unordered.get()) { + throw new Exception("Events are not ordered! Reuse = " + reuse); + } } } private static void testSetOrderedFalse(Path p) throws Exception { for (boolean reuse : BOOLEAN_STATES) { + System.out.println(); + System.out.println("Testing: testSetOrderedFalse reuse = " + reuse); AtomicReference timestamp = new AtomicReference<>(Instant.MIN); - AtomicBoolean unoreded = new AtomicBoolean(false); + AtomicBoolean unordered = new AtomicBoolean(false); try (EventStream es = EventStream.openFile(p)) { es.setReuse(reuse); es.setOrdered(false); es.onEvent(e -> { Instant endTime = e.getEndTime(); - System.out.println("testSetOrderedFalse: endTime: " + endTime); + printTimestamp(endTime); if (endTime.isBefore(timestamp.get())) { - unoreded.set(true); - es.close(); + unordered.set(true); } timestamp.set(endTime); }); es.start(); - if (!unoreded.get()) { + if (!unordered.get()) { throw new Exception("Expected at least some events to be out of order! Reuse = " + reuse); } } } } + private static void printTimestamp(Instant timestamp) { + long seconds = timestamp.getEpochSecond(); + long nanos = timestamp.getNano(); + System.out.println(timestamp + " seconds = " + seconds + " nanos = " + nanos); + } + private static Path makeUnorderedRecording() throws Exception { CyclicBarrier barrier = new CyclicBarrier(THREAD_COUNT + 1); diff --git a/test/jdk/jdk/jfr/event/compiler/TestCompilerCompile.java b/test/jdk/jdk/jfr/event/compiler/TestCompilerCompile.java index 775d7789bee..8d070db8262 100644 --- a/test/jdk/jdk/jfr/event/compiler/TestCompilerCompile.java +++ b/test/jdk/jdk/jfr/event/compiler/TestCompilerCompile.java @@ -48,6 +48,7 @@ * @run main/othervm -Xbootclasspath/a:. * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * -XX:CompileOnly=jdk.jfr.event.compiler.TestCompilerCompile::dummyMethod,jdk.jfr.event.compiler.TestCompilerCompile::doTest + * -XX:CompileCommand=MemStat,*.* * jdk.jfr.event.compiler.TestCompilerCompile */ public class TestCompilerCompile { @@ -138,5 +139,6 @@ private void verifyEvent(RecordedEvent event) throws Throwable { Events.assertField(event, "inlinedBytes").atLeast(0L); Events.assertField(event, "codeSize").atLeast(0L); Events.assertField(event, "isOsr"); + Events.assertField(event, "arenaBytes").atLeast(1024L); } } diff --git a/test/jdk/jdk/jfr/event/io/TestAsynchronousFileChannelEvents.java b/test/jdk/jdk/jfr/event/io/TestAsynchronousFileChannelEvents.java new file mode 100644 index 00000000000..f1ddba369eb --- /dev/null +++ b/test/jdk/jdk/jfr/event/io/TestAsynchronousFileChannelEvents.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2024, 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. + */ + +package jdk.jfr.event.io; + +import jdk.jfr.Recording; +import jdk.jfr.consumer.RecordedEvent; +import jdk.test.lib.Utils; +import jdk.test.lib.jfr.Events; + +import java.io.File; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousFileChannel; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; + +import static java.nio.file.StandardOpenOption.READ; +import static java.nio.file.StandardOpenOption.WRITE; + +/** + * @test + * @key jfr + * @requires vm.hasJFR + * @library /test/lib /test/jdk + * @run main/othervm jdk.jfr.event.io.TestAsynchronousFileChannelEvents + */ +public class TestAsynchronousFileChannelEvents { + + public static void main(String[] args) throws Throwable { + File tmp = Utils.createTempFile("TestAsynchronousFileChannelEvents", ".tmp").toFile(); + String s = "unremarkable data"; + ByteBuffer data = ByteBuffer.allocate(s.length()); + data.put(s.getBytes()); + + try (Recording recording = new Recording(); + AsynchronousFileChannel ch = AsynchronousFileChannel.open(tmp.toPath(), READ, WRITE)) { + + List expectedEvents = new ArrayList<>(); + recording.enable(IOEvent.EVENT_FILE_FORCE).withThreshold(Duration.ofMillis(0)); + recording.start(); + + data.flip(); + ch.write(data, 0).get(); + + // test force(boolean) + ch.force(true); + expectedEvents.add(IOEvent.createFileForceEvent(tmp)); + + recording.stop(); + List events = Events.fromRecording(recording); + IOHelper.verifyEqualsInOrder(events, expectedEvents); + } + } +} diff --git a/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java b/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java index 344ff5f89e9..02e60ebc75f 100644 --- a/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java +++ b/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, 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 @@ -24,177 +24,29 @@ /* * @test * @library /test/lib - * @bug 8291226 8291638 - * @modules java.base/sun.net:+open - * java.base/sun.net.www.http:+open - * java.base/sun.net.www:+open + * @bug 8291226 8291638 8330523 + * @modules java.base/sun.net.www.http:+open * java.base/sun.net.www.protocol.http:+open - * @run main/othervm KeepAliveTest 0 - * @run main/othervm KeepAliveTest 1 - * @run main/othervm KeepAliveTest 2 - * @run main/othervm KeepAliveTest 3 - * @run main/othervm KeepAliveTest 4 - * @run main/othervm KeepAliveTest 5 - * @run main/othervm KeepAliveTest 6 - * @run main/othervm KeepAliveTest 7 - * @run main/othervm KeepAliveTest 8 - * @run main/othervm KeepAliveTest 9 - * @run main/othervm KeepAliveTest 10 - * @run main/othervm KeepAliveTest 11 - * @run main/othervm KeepAliveTest 12 - * @run main/othervm KeepAliveTest 13 - * @run main/othervm KeepAliveTest 14 - * @run main/othervm KeepAliveTest 15 - * @run main/othervm KeepAliveTest 16 - * @run main/othervm KeepAliveTest 17 - * @run main/othervm KeepAliveTest 18 - * @run main/othervm KeepAliveTest 19 - * @run main/othervm KeepAliveTest 20 - * @run main/othervm KeepAliveTest 21 - * @run main/othervm KeepAliveTest 22 - * @run main/othervm KeepAliveTest 23 - * @run main/othervm KeepAliveTest 24 - * @run main/othervm KeepAliveTest 25 - * @run main/othervm KeepAliveTest 26 - * @run main/othervm KeepAliveTest 27 - * @run main/othervm KeepAliveTest 28 - * @run main/othervm KeepAliveTest 29 - * @run main/othervm KeepAliveTest 30 - * @run main/othervm KeepAliveTest 31 - * @run main/othervm KeepAliveTest 32 - * @run main/othervm KeepAliveTest 33 - * @run main/othervm KeepAliveTest 34 - * @run main/othervm KeepAliveTest 35 - * @run main/othervm KeepAliveTest 36 - * @run main/othervm KeepAliveTest 37 - * @run main/othervm KeepAliveTest 38 - * @run main/othervm KeepAliveTest 39 - * @run main/othervm KeepAliveTest 40 - * @run main/othervm KeepAliveTest 41 - * @run main/othervm KeepAliveTest 42 - * @run main/othervm KeepAliveTest 43 - * @run main/othervm KeepAliveTest 44 - * @run main/othervm KeepAliveTest 45 - * @run main/othervm KeepAliveTest 46 - * @run main/othervm KeepAliveTest 47 - * @run main/othervm KeepAliveTest 48 - * @run main/othervm KeepAliveTest 49 - * @run main/othervm KeepAliveTest 50 - * @run main/othervm KeepAliveTest 51 - * @run main/othervm KeepAliveTest 52 - * @run main/othervm KeepAliveTest 53 - * @run main/othervm KeepAliveTest 54 - * @run main/othervm KeepAliveTest 55 - * @run main/othervm KeepAliveTest 56 - * @run main/othervm KeepAliveTest 57 - * @run main/othervm KeepAliveTest 58 - * @run main/othervm KeepAliveTest 59 - * @run main/othervm KeepAliveTest 60 - * @run main/othervm KeepAliveTest 61 - * @run main/othervm KeepAliveTest 62 - * @run main/othervm KeepAliveTest 63 - * @run main/othervm KeepAliveTest 64 - * @run main/othervm KeepAliveTest 65 - * @run main/othervm KeepAliveTest 66 - * @run main/othervm KeepAliveTest 67 - * @run main/othervm KeepAliveTest 68 - * @run main/othervm KeepAliveTest 69 - * @run main/othervm KeepAliveTest 70 - * @run main/othervm KeepAliveTest 71 - * @run main/othervm KeepAliveTest 72 - * @run main/othervm KeepAliveTest 73 - * @run main/othervm KeepAliveTest 74 - * @run main/othervm KeepAliveTest 75 - * @run main/othervm KeepAliveTest 76 - * @run main/othervm KeepAliveTest 77 - * @run main/othervm KeepAliveTest 78 - * @run main/othervm KeepAliveTest 79 - * @run main/othervm KeepAliveTest 80 - * @run main/othervm KeepAliveTest 81 - * @run main/othervm KeepAliveTest 82 - * @run main/othervm KeepAliveTest 83 - * @run main/othervm KeepAliveTest 84 - * @run main/othervm KeepAliveTest 85 - * @run main/othervm KeepAliveTest 86 - * @run main/othervm KeepAliveTest 87 - * @run main/othervm KeepAliveTest 88 - * @run main/othervm KeepAliveTest 89 - * @run main/othervm KeepAliveTest 90 - * @run main/othervm KeepAliveTest 91 - * @run main/othervm KeepAliveTest 92 - * @run main/othervm KeepAliveTest 93 - * @run main/othervm KeepAliveTest 94 - * @run main/othervm KeepAliveTest 95 - * @run main/othervm KeepAliveTest 96 - * @run main/othervm KeepAliveTest 97 - * @run main/othervm KeepAliveTest 98 - * @run main/othervm KeepAliveTest 99 - * @run main/othervm KeepAliveTest 100 - * @run main/othervm KeepAliveTest 101 - * @run main/othervm KeepAliveTest 102 - * @run main/othervm KeepAliveTest 103 - * @run main/othervm KeepAliveTest 104 - * @run main/othervm KeepAliveTest 105 - * @run main/othervm KeepAliveTest 106 - * @run main/othervm KeepAliveTest 107 - * @run main/othervm KeepAliveTest 108 - * @run main/othervm KeepAliveTest 109 - * @run main/othervm KeepAliveTest 110 - * @run main/othervm KeepAliveTest 111 - * @run main/othervm KeepAliveTest 112 - * @run main/othervm KeepAliveTest 113 - * @run main/othervm KeepAliveTest 114 - * @run main/othervm KeepAliveTest 115 - * @run main/othervm KeepAliveTest 116 - * @run main/othervm KeepAliveTest 117 - * @run main/othervm KeepAliveTest 118 - * @run main/othervm KeepAliveTest 119 - * @run main/othervm KeepAliveTest 120 - * @run main/othervm KeepAliveTest 121 - * @run main/othervm KeepAliveTest 122 - * @run main/othervm KeepAliveTest 123 - * @run main/othervm KeepAliveTest 124 - * @run main/othervm KeepAliveTest 125 - * @run main/othervm KeepAliveTest 126 - * @run main/othervm KeepAliveTest 127 - * @run main/othervm KeepAliveTest 128 - * @run main/othervm KeepAliveTest 129 - * @run main/othervm KeepAliveTest 130 - * @run main/othervm KeepAliveTest 131 - * @run main/othervm KeepAliveTest 132 - * @run main/othervm KeepAliveTest 133 - * @run main/othervm KeepAliveTest 134 - * @run main/othervm KeepAliveTest 135 - * @run main/othervm KeepAliveTest 136 - * @run main/othervm KeepAliveTest 137 - * @run main/othervm KeepAliveTest 138 - * @run main/othervm KeepAliveTest 139 - * @run main/othervm KeepAliveTest 140 - * @run main/othervm KeepAliveTest 141 - * @run main/othervm KeepAliveTest 142 - * @run main/othervm KeepAliveTest 143 - * @run main/othervm KeepAliveTest 144 - * @run main/othervm KeepAliveTest 145 - * @run main/othervm KeepAliveTest 146 - * @run main/othervm KeepAliveTest 147 - * @run main/othervm KeepAliveTest 148 - * @run main/othervm KeepAliveTest 149 - * @run main/othervm KeepAliveTest 150 - * @run main/othervm KeepAliveTest 151 - * @run main/othervm KeepAliveTest 152 - * @run main/othervm KeepAliveTest 153 - * @run main/othervm KeepAliveTest 154 - * @run main/othervm KeepAliveTest 155 - * @run main/othervm KeepAliveTest 156 - * @run main/othervm KeepAliveTest 157 - * @run main/othervm KeepAliveTest 158 - * @run main/othervm KeepAliveTest 159 + * @run main/othervm KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.proxy=200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 -Dhttp.keepAlive.time.proxy=200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 -Dhttp.keepAlive.time.proxy=200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 -Dhttp.keepAlive.time.proxy=200 KeepAliveTest */ - -import java.nio.charset.StandardCharsets; -import java.io.InputStream; import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.lang.reflect.Constructor; @@ -206,841 +58,59 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map.Entry; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Phaser; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; + +import jdk.test.lib.net.URIBuilder; + import sun.net.www.http.HttpClient; import sun.net.www.http.KeepAliveCache; import sun.net.www.protocol.http.HttpURLConnection; -import jdk.test.lib.net.URIBuilder; public class KeepAliveTest { - private static final Logger logger = Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection"); - private static final String NOT_CACHED = "NotCached"; - private static final String CLIENT_SEPARATOR = ";"; - private static final String NEW_LINE = "\r\n"; - private volatile int SERVER_PORT = 0; + /* - * isProxySet is shared variable between server thread and client thread(main) and it should be set and reset to false for each and - * every scenario. - * isProxySet variable should be set by server thread before proceeding to client thread(main). + * This test covers a matrix of 10 server scenarios and 16 client scenarios. */ - private volatile boolean isProxySet = false; + private static final Logger logger = Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection"); + + private static final String NEW_LINE = "\r\n"; + private static final String CONNECTION_KEEP_ALIVE_ONLY = "Connection: keep-alive"; private static final String PROXY_CONNECTION_KEEP_ALIVE_ONLY = "Proxy-Connection: keep-alive"; private static final String KEEP_ALIVE_TIMEOUT_NEG = "Keep-alive: timeout=-20"; private static final String KEEP_ALIVE_TIMEOUT_ZERO = "Keep-alive: timeout=0"; private static final String KEEP_ALIVE_TIMEOUT = "Keep-alive: timeout=20"; private static final String KEEP_ALIVE_PROXY_TIMEOUT = "Keep-alive: timeout=120"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_NEGATIVE = "http.keepAlive.time.server=-100"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_NEGATIVE = "http.keepAlive.time.proxy=-200"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_ZERO = "http.keepAlive.time.server=0"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_ZERO = "http.keepAlive.time.proxy=0"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_POSITIVE = "http.keepAlive.time.server=100"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_POSITIVE = "http.keepAlive.time.proxy=200"; - private static final String CONNECTION_KEEP_ALIVE_WITH_TIMEOUT = CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE - + KEEP_ALIVE_TIMEOUT; - /* - * Following Constants represents Client Side Properties and is used as reference in below table as - * CLIENT_INPUT_CONSTANT_NAMES - */ - private static final String SERVER_100_NEGATIVE = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_NEGATIVE; - private static final String PROXY_200_NEGATIVE = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_NEGATIVE; - private static final String SERVER_ZERO = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_ZERO; - private static final String PROXY_ZERO = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_ZERO; - private static final String SERVER_100 = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_POSITIVE; - private static final String PROXY_200 = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_POSITIVE; - - /* - * CONSTANTS A,B,C,D,E,NI,F,G,H,I represents ServerScenarios and is used as reference in below table - * as SERVER_RESPONSE_CONSTANT_NAME - */ - private static final String A = CONNECTION_KEEP_ALIVE_ONLY; - private static final String B = CONNECTION_KEEP_ALIVE_WITH_TIMEOUT; - private static final String C = PROXY_CONNECTION_KEEP_ALIVE_ONLY; - private static final String D = PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + CONNECTION_KEEP_ALIVE_ONLY; - private static final String E = C + NEW_LINE + KEEP_ALIVE_PROXY_TIMEOUT; - private static final String NI = "NO_INPUT"; - private static final String F = A + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG; - private static final String G = A + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO; - private static final String H = C + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG; - private static final String I = C + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO; - - /* - * There are 160 scenarios run by this program. - * For every scenario there is mapping between serverScenarios[int],clientScenarios[int] and expectedOutput[int] - * - * serverScenarios[0] clientScenarios[0] expectedOutput[0] - * serverScenarios[1] clientScenarios[1] expectedOutput[1] - * serverScenarios[2] clientScenarios[2] expectedOutput[2] - * - * ... - * - * serverScenarios[159] cientScenarios[159] expectedOutput[159] - * - * whereas serverScenarios[int] is retrieved using getServerScenario(int) - * whereas clientScenarios[int] is retrieved using clientScenario[getClientScenarioNumber[int]] - * and - * expectedOutput[int] is retrieved using expectedOuput[int] directly. - * - */ - - /* Here is the complete table of server_response, client system properties input and expected cached timeout at client side */ - /* ScNo | SERVER RESPONSE (SERVER_RESPONSE_CONSTANT_NAME)| CLIENT SYSTEM PROPERTIES INPUT (CLIENT_INPUT_CONSTANT_NAMES) | EXPECTED CACHED TIMEOUT AT CLIENT SIDE - ***************************************************************************************************************************************** - * 0 | Connection: keep-alive (A) | No Input Provided (NI) | Default Timeout set to 5 - *--------------------------------------------------------------------------------------------------------------------------- - * 1 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 (SERVER_100)| Client Timeout set to 100 - *-------------------------------------------------------------------------------------------------------------------------- - * 2 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=200 (PROXY_200) | Default Timeout set to 5 - *--------------------------------------------------------------------------------------------------------------------------- - * 3 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 100 - * | | (SERVER_100 && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 4 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 5 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=-200 | Default Timeout set to 5 - * | | (PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 6 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 7 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 | Connection Closed Immediately - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 8 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=0 | Default Timeout set to 5 - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 9 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Connection Closed Immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 10 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Connection Closed Immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 11 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 12 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 - * | | (SERVER_100 && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 13 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Connection Closed Immediately - * | | (SERVER_ZERO && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 14 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 15 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 16 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | No Input Provided (NI) | Timeout set to 20 - *------------------------------------------------------------------------------------------------------------------------ - * 17 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 | Timeout set to 20 - * | | (SERVER_100) | - *--------------------------------------------------------------------------------------------------------------------------- - * 18 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 19 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_100 && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 20 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 21 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 22 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *--------------------------------------------------------------------------------------------------------------------------- - * 23 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 | Timeout set to 20 - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 24 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 25 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 26 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 27 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 28 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (SERVER_100 && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 29 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 30 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 31 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 32 |Proxy-Connection: keep-alive (C) | No Input Provided (NI) | Default timeout set to 60 - *--------------------------------------------------------------------------------------------------------------------------- - * 33 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 | Default timeout set to 60 - * | | (SERVER_100) | - *--------------------------------------------------------------------------------------------------------------------------- - * 34 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------- - * 35 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100 && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------- - * 36 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=-100 | Default timeout set to 60 - * | | (SERVER_100_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 37 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 38 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | |(SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *--------------------------------------------------------------------------------------------------------------------------- - * 39 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 | Default timeout set to 60 - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 40 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 41 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 42 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 43 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 44 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 45 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_ZERO && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 46 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 47 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 48 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | No Input Provided (NI) | Default timeout set to 60 - *----------------------------------------------------------------------------------------------------------------------------- - * 49 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 | Default timeout set to 60 - * | | (SERVER_100) | - *--------------------------------------------------------------------------------------------------------------------------- - * 50 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 51 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 52 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 | Default timeout set to 60 - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 53 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 54 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100&& | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE | - *------------------------------------------------------------------------------------------------------------------------------- - * 55 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 | Default timeout set to 60 - * | | (SERVER_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 56 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 57 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 58 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 59 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 60 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 61 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 62 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 63 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 64 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| No Input Provided (NI) | Timeout set to 120 - *------------------------------------------------------------------------------------------------------------------------------- - * 65 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 | Timeout set to 120 - * | | (SERVER_100) | - *------------------------------------------------------------------------------------------------------------------------------- - * 66 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 67 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 68 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 69 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 70 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------- - * 71 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 | Timeout set to 120 - * | | (SERVER_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 72 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 73 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 74 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 75 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 76 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 77 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 78 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 79 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *----------------------------------------------------------------------------------------------------------------------------- - * 80 |No Input (NI) | No Input Provided (NI) | default timeout set to 5 - *----------------------------------------------------------------------------------------------------------------------------- - * 81 |No Input (NI) | -Dhttp.keepAlive.time.server=100 | Timeout set to 100 - * | | (SERVER_100) | - *----------------------------------------------------------------------------------------------------------------------------- - * 82 |No Input (NI) | -Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (PROXY_200) | - *----------------------------------------------------------------------------------------------------------------------------- - * 83 |No Input (NI) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | client timeot set to 100 - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 84 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 85 |No Input (NI) | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | | (PROXY_200_NEGATIVE) | - *---------------------------------------------------------------------------------------------------------------------------- - * 86 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------ - * 87 |No Input (NI) | -Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 88 |No Input (NI) | -Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 89 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 90 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 91 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 92 |No Input (NI) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 - * | | (SERVER_100 && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 93 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 94 |No Input (NI) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 95 |No Input (NI) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 96 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) | No Input Provided (NI) | default timeout set to 5 - *-------------------------------------------------------------------------------------------------------------------------------- - * 97 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 | Timeout set to 100 - * | | (SERVER_100) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 98 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 99 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 100 - * | |(SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 100 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 | default timeout set to 5 - * | |(SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 101 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | |(PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 102 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------------- - * 103 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 104 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 105 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 106 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------------- - * 107 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 108 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 109 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | - * | |-Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 110 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 - * | |(SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 111 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 112 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | No Input Provided (NI) | close connection immediately - *------------------------------------------------------------------------------------------------------------------------------------- - * 113 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 | close connection immediately - * | | (SERVER_100) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 114 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 115 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 116 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 | close connection immediately - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 117 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 118 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 119 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 120 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 121 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 122 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 123 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 124 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 125 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 126 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 127 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 128 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| No Input Provided (NI) | default timeout set to 60 - --------------------------------------------------------------------------------------------------------------------------------------- - * 129 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 | default timeout set to 60 - * | | (SERVER_100) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 130 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 131 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100 && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 132 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=-100 | default timeout set to 60 - * | | (SERVER_100_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 133 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 134 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *--------------------------------------------------------------------------------------------------------------------------------- - * 135 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 | default timeout set to 60 - * | | (SERVER_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 136 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *---------------------------------------------------------------------------------------------------------------------------------- - * 137 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 138 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------------------- - * 139 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 140 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 141 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 142 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 143 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 144 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | No Input Provided (NI) | close connection immediately - *-------------------------------------------------------------------------------------------------------------------------------------- - * 145 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 | close connection immediately - * | | (SERVER_100) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 146 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 147 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100 && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 148 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 | close connection immediately - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 149 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 150 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 151 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *----------------------------------------------------------------------------------------------------------------------------------- - * 152 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 153 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 154 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 155 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 156 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 157 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 158 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 159 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - */ - - /* private static final String[] serverScenarios = { - A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, - B, B, B, B, B, B, B, B, B, B,B, B, B, B, B, B, - C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, - D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, - E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, - NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, - F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, - G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, - H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, - I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I - }; */ - /* - * following are client scenarios which are repeated. - */ - private static final String[] a = { - NI, SERVER_100, PROXY_200, SERVER_100 + CLIENT_SEPARATOR + PROXY_200, SERVER_100_NEGATIVE, - PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, - SERVER_ZERO, PROXY_ZERO, SERVER_ZERO + CLIENT_SEPARATOR + PROXY_ZERO, - SERVER_ZERO + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_ZERO, - SERVER_100 + CLIENT_SEPARATOR + PROXY_ZERO, SERVER_ZERO + CLIENT_SEPARATOR + PROXY_200, - SERVER_100 + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_200 - }; + private static final String CONNECTION_KEEP_ALIVE_WITH_TIMEOUT = CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT; - /* private String[] clientScenarios = { - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - }; */ - - private static final String[] clientScenarios = { - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15] + private static final String[] serverHeaders = { + null, + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE, + CONNECTION_KEEP_ALIVE_WITH_TIMEOUT + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_PROXY_TIMEOUT + NEW_LINE, + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG + NEW_LINE, + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO + NEW_LINE }; - private static final int[] expectedValues = { - 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, - 20, 20 , 20, 20, 20, 20, 20, 20, 20, 20 , 20, 20, 20, 20, 20, 20, - 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, - 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, - 120, 120, 120, 120,120,120,120,120,120, 120, 120, 120, 120, 120, 120, 120, - 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, - 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - private final CountDownLatch countDownLatch = new CountDownLatch(1); - - private final CountDownLatch serverCountDownLatch = new CountDownLatch(1); - - /* - * setting of client properties -Dhttp.keepAlive.time.server and -Dhttp.keepAlive.time.proxy is handled through this method. - * There are 16 client scenarios in total starting with scenarioNumber 0(zero) and ending with 15. - * Server Scenarios are grouped into batch of 16 scenarios. - * There are 10 batches in total and each batch contains 16 scenarios so 10 * 16 = 160 scenarios in total. - * 16 Client Scenarios are used repeatedly for every server scenario batch. - * for serverscenario[0],serverscenario[16],serverscenario[32] ... serverscenario[144] is mapped to clientscenario[0] - * for serverscenario[1],serverscenario[17],serverscenario[33] ... serverscenario[145] is mapped to clientscenario[1] - * for serverscenario[2],serverscenario[18],serverscenario[34] ... serverscenario[146] is mapped to clientscenario[2] - * ... - * for serverscenario[15],serverscenario[31],serverscenario[47] ... serverscenario[159] is mapped to clientscenario[15] - */ - private int getClientScenarioNumber(int scenarioNumber) { - return scenarioNumber % 16 ; - } + private static KeepAliveCache keepAliveCache; - /* - * Returns SERVER_RESPONSE as String based on integer inputParameter scenarioNumber. - * Server Scenarios are grouped into batch of 16 scenarios starting with scenarioNumber 0 (zero) - * so there are 10 batches in total and each batch contains 16 scenarios so 10 * 16 = 160 scenarios in total. - * For each batch of 16 scenarios, there will be common SERVER_RESPONSE for all 16 scenarios in batch. - * for scenario numbers from 0 to 15 server response is: Connection:keep-alive - * for scenario numbers from 16 to 31 server response is: SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=20 - * for scenario numbers from 32 to 47 server response is: SERVER_RESPONSE=Proxy-Connection: keep-alive - * for scenario numbers from 48 to 63 server response is: SERVER_RESPONSE=Connection:keep-alive\r\nProxy-connection:keep-alive - * for scenario numbers from 64 to 79 server response is: SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 - * for scenario numbers from 80 to 95 server response is: SERVER_RESPONSE=No Input - * for scenario numbers from 96 to 111 server response is: SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=-20 - * for scenario numbers from 112 to 127 server resonse is: Connection: keep-alive\r\nKeep-alive: timeout=0 - * for scenario numbers from 128 to 143 server response is: Proxy-connection:keep-alive\r\nKeep-alive:timeout=-20 - * for scenario numbers from 144 to 159 server response is: Proxy-connection:keep-alive\r\nKeep-alive:timeout=0 - */ - private String getServerScenario(int scenarioNumber) { - /* - * ServerResponse for scenarios from 0 to 15 - * SERVER_RESPONSE:Connection:keep-alive - */ - if(scenarioNumber >= 0 && scenarioNumber <= 15) { - return A; - } - /* - * ServerResponse for scenarios from 16 to 31 - * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=20 - */ - else if (scenarioNumber >= 16 && scenarioNumber <= 31){ - return B; - } - /* - * ServerResponse for scenarios from 32 to 47 - * SERVER_RESPONSE=Proxy-Connection: keep-alive - */ - else if (scenarioNumber >= 32 && scenarioNumber <= 47){ - return C; - } - /* - * ServerResponse for scenarios from 48 to 63 - * SERVER_RESPONSE=Connection:keep-alive\r\nProxy-connection:keep-alive - */ - else if (scenarioNumber >= 48 && scenarioNumber <= 63){ - return D; - /* - * ServerResponse for scenarios from 64 to 79 - * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 - */ - } else if (scenarioNumber >= 64 && scenarioNumber <= 79){ - return E; - } - /* - * ServerResponse for scenarios from 80 to 95 - * SERVER_RESPONSE=No Input - */ - else if (scenarioNumber >= 80 && scenarioNumber <= 95){ - return NI; - } - /* - * ServerResponse for scenarios from 96 to 111 - * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=-20 - */ - else if (scenarioNumber >= 96 && scenarioNumber <= 111){ - return F; - } - /* - * ServerResponse for scenarios from 112 to 127 - * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=0 - */ - else if (scenarioNumber >= 112 && scenarioNumber <= 127){ - return G; - } - /* - * ServerResponse for scenarios from 128 to 143 - * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=-20 - */ - else if (scenarioNumber >= 128 && scenarioNumber <= 143){ - return H; - } - /* - * ServerResponse for scenarios from 144 to 159 - * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=0 - */ - else if (scenarioNumber >= 144 && scenarioNumber <= 159){ - return I; - } - /*Invalid Case*/ - return null; - } + private static Constructor keepAliveKeyClassconstructor; - private void startScenario(int scenarioNumber) throws Exception { - System.out.println("serverScenarios[" + scenarioNumber + "]=" + getServerScenario(scenarioNumber)); - System.out.println("clientScenarios[" + scenarioNumber + "]=" + clientScenarios[getClientScenarioNumber(scenarioNumber)]); - if(expectedValues[scenarioNumber] == 0) { - System.out.println("ExpectedOutput=" + NOT_CACHED); - } else { - System.out.println("ExpectedOutput=" + expectedValues[scenarioNumber]); - } - System.out.println(); - startServer(scenarioNumber); - runClient(scenarioNumber); - } + // variables set by server thread + private volatile int serverPort; + private volatile boolean isProxySet; - private void startServer(int scenarioNumber) { - Thread server = new Thread(new Runnable() { - @Override - public void run() { - try { - executeServer(scenarioNumber); - } catch (IOException e) { - e.printStackTrace(); - } - } - }, "SERVER"); - server.start(); - } + private static final Phaser serverGate = new Phaser(2); private void readAll(Socket s) throws IOException { byte[] buf = new byte[128]; @@ -1058,215 +128,208 @@ private void readAll(Socket s) throws IOException { } } - private void executeServer(int scenarioNumber) throws IOException { - String serverScenarioContent = null; - if (!getServerScenario(scenarioNumber).equalsIgnoreCase(NI)) { - serverScenarioContent = getServerScenario(scenarioNumber) + NEW_LINE; - /* - * isProxySet should be set before Server is moved to Listen State. - */ - if (serverScenarioContent.contains("Proxy")) { - isProxySet = true; - } else { - isProxySet = false; - } + private void executeServer(int scenarioNumber) { + String scenarioHeaders = serverHeaders[scenarioNumber]; + if (scenarioHeaders != null) { + // isProxySet should be set before Server is moved to Listen State. + isProxySet = scenarioHeaders.contains("Proxy"); } - ServerSocket serverSocket = null; - Socket socket = null; - OutputStreamWriter out = null; - InetAddress loopback = InetAddress.getLoopbackAddress(); - try { - serverSocket = new ServerSocket(); - serverSocket.bind(new InetSocketAddress(loopback, 0)); - SERVER_PORT = serverSocket.getLocalPort(); - //serverReady = true; - this.serverCountDownLatch.countDown(); - System.out - .println("SERVER_PORT= " + SERVER_PORT +" isProxySet=" + isProxySet); - /* - * Server will be waiting for clients to connect. - */ - socket = serverSocket.accept(); - readAll(socket); - out = new OutputStreamWriter(socket.getOutputStream()); - String BODY = "SERVER REPLY: Hello world"; - String CLEN = "Content-Length: " + BODY.length() + NEW_LINE; - /* send the header */ - out.write("HTTP/1.1 200 OK\r\n"); - out.write("Content-Type: text/plain; charset=iso-8859-1\r\n"); - /* - * append each scenario content from array. - */ - if(serverScenarioContent != null) { - out.write(serverScenarioContent); - } - out.write(CLEN); - out.write(NEW_LINE); - out.write(BODY); - out.flush(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (out != null) { - out.flush(); - out.close(); - } - if (socket != null) { - socket.close(); - } - if (serverSocket != null) { - serverSocket.close(); + try (ServerSocket serverSocket = new ServerSocket()) { + serverSocket.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0)); + serverPort = serverSocket.getLocalPort(); + serverGate.arrive(); + + // Server will be waiting for clients to connect. + try (Socket socket = serverSocket.accept()) { + readAll(socket); + try (OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream())) { + String BODY = "SERVER REPLY: Hello world"; + String CLEN = "Content-Length: " + BODY.length() + NEW_LINE; + + // send common headers + out.write("HTTP/1.1 200 OK\r\n"); + out.write("Content-Type: text/plain; charset=iso-8859-1\r\n"); + + // set scenario headers + if (scenarioHeaders != null) { + out.write(scenarioHeaders); + } + + // send content + out.write(CLEN); + out.write(NEW_LINE); + out.write(BODY); + } } + } catch (IOException ioe) { + throw new RuntimeException("IOException in server thread", ioe); } } - private void runClient(int scenarioNumber) throws Exception { - try { - connectToServerURL(scenarioNumber); - } finally { - System.out.println("client count down latch:" + scenarioNumber); - this.countDownLatch.countDown(); - System.out.println(); - System.out.println(); - } - } + private void fetchInfo(int expectedValue, HttpURLConnection httpUrlConnection) throws Exception { + Object expectedKeepAliveKey = keepAliveKeyClassconstructor.newInstance(httpUrlConnection.getURL(), null); + Object clientVectorObjectInMap = keepAliveCache.get(expectedKeepAliveKey); + System.out.println("ClientVector for KeepAliveKey:" + clientVectorObjectInMap); + HttpClient httpClientCached = keepAliveCache.get(httpUrlConnection.getURL(), null); + System.out.println("HttpClient in Cache:" + httpClientCached); - private void connectToServerURL(int scenarioNumber) throws Exception { - // System.setProperty("java.net.useSystemProxies", "false"); - // System.setProperty("http.nonProxyHosts", ""); - // System.setProperty("http.proxyHost", "localhost"); - // System.setProperty("http.proxyPort", String.valueOf(SERVER_PORT)); - System.out.println("Following are Existing System Properties if set any"); - System.out.println("http.keepAlive.time.server:" + System.getProperty("http.keepAlive.time.server")); - System.out.println("http.keepAlive.time.proxy:" + System.getProperty("http.keepAlive.time.proxy")); - System.setProperty("java.net.useSystemProxies", "false"); - System.out.println("http.proxyPort:"+System.getProperty("http.proxyPort")); - System.out.println("http.proxyHost:"+System.getProperty("http.proxyHost")); - System.clearProperty("http.keepAlive.time.server"); - System.clearProperty("http.keepAlive.time.proxy"); - // fetch clientScenearios for each scenarioNumber from array and set it to - // System property. - if (!clientScenarios[getClientScenarioNumber(scenarioNumber)].equalsIgnoreCase(NI)) { - System.out.println("Client Input Parsing"); - for (String clientScenarioString : clientScenarios[getClientScenarioNumber(scenarioNumber)].split(CLIENT_SEPARATOR)) { - System.out.println(clientScenarioString); - String key = clientScenarioString.split("=")[0]; - String value = clientScenarioString.split("=")[1]; - System.setProperty(key, value); + if (httpClientCached != null) { + System.out.println("KeepingAlive:" + httpClientCached.isKeepingAlive()); + System.out.println("UsingProxy:" + httpClientCached.getUsingProxy()); + System.out.println("ProxiedHost:" + httpClientCached.getProxyHostUsed()); + System.out.println("ProxiedPort:" + httpClientCached.getProxyPortUsed()); + Class clientVectorClass = Class.forName("sun.net.www.http.KeepAliveCache$ClientVector"); + Field napField = clientVectorClass.getDeclaredField("nap"); + napField.setAccessible(true); + int napValue = (int) napField.get(clientVectorObjectInMap); + int actualValue = napValue / 1000; + if (expectedValue == actualValue) { + System.out.printf("Cache time:%d\n", actualValue); + } else { + throw new RuntimeException("Sleep time of " + actualValue + " not expected (" + expectedValue + ")"); + } + } else { + if (expectedValue == 0) { + System.out.println("Connection not cached."); + } else { + throw new RuntimeException("Connection was not cached although expected with sleep time of:" + expectedValue); } } + } + + private void connectToServerURL(int expectedValue) throws Exception { // wait until ServerSocket moves to listening state. - this.serverCountDownLatch.await(); - System.out.println("client started"); - URL url = URIBuilder.newBuilder().scheme("http").loopback().port(SERVER_PORT).toURL(); - System.out.println("connecting from client to SERVER URL:" + url); + serverGate.arriveAndAwaitAdvance(); + URL url = URIBuilder.newBuilder().scheme("http").loopback().port(serverPort).toURL(); + System.out.println("connecting to server URL: " + url + ", isProxySet: " + isProxySet); HttpURLConnection httpUrlConnection = null; - /* - * isProxySet is set to true when Expected Server Response contains Proxy-Connection header. - */ + + // isProxySet is set to true when Expected Server Response contains Proxy-Connection header. if (isProxySet) { - httpUrlConnection = (sun.net.www.protocol.http.HttpURLConnection) url - .openConnection(new Proxy(Type.HTTP, new InetSocketAddress("localhost", SERVER_PORT))); + httpUrlConnection = (HttpURLConnection) url + .openConnection(new Proxy(Type.HTTP, new InetSocketAddress("localhost", serverPort))); } else { - httpUrlConnection = (sun.net.www.protocol.http.HttpURLConnection) url.openConnection(); + httpUrlConnection = (HttpURLConnection) url.openConnection(); } - InputStreamReader inputStreamReader = new InputStreamReader(httpUrlConnection.getInputStream()); - BufferedReader bufferedReader = null; - try { - bufferedReader = new BufferedReader(inputStreamReader); + + try (InputStreamReader inputStreamReader = new InputStreamReader(httpUrlConnection.getInputStream()); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) { while (true) { - String eachLine = bufferedReader.readLine(); - if (eachLine == null) { + String line = bufferedReader.readLine(); + if (line == null) { break; } - System.out.println(eachLine); - } - } finally { - if (bufferedReader != null) { - bufferedReader.close(); + System.out.println(line); } } - // System.out.println("ResponseCode:" + httpUrlConnection.getResponseCode()); - // System.out.println("ResponseMessage:" + httpUrlConnection.getResponseMessage()); - // System.out.println("Content:" + httpUrlConnection.getContent()); - // Thread.sleep(2000); for (Entry> header : httpUrlConnection.getHeaderFields().entrySet()) { System.out.println(header.getKey() + "=" + header.getValue()); } - fetchInfo(scenarioNumber, httpUrlConnection); + fetchInfo(expectedValue, httpUrlConnection); } - private void fetchInfo(int scenarioNumber, sun.net.www.protocol.http.HttpURLConnection httpUrlConnection) - throws Exception { - Field field = Class.forName("sun.net.www.protocol.http.HttpURLConnection").getDeclaredField("http"); - field.setAccessible(true); - HttpClient httpClient = (HttpClient) field.get(httpUrlConnection); - // System.out.println("httpclient=" + httpClient); - Field keepAliveField = Class.forName("sun.net.www.http.HttpClient").getDeclaredField("kac"); - keepAliveField.setAccessible(true); - KeepAliveCache keepAliveCache = (KeepAliveCache) keepAliveField.get(httpClient); - System.out.println("keepAliveCache" + keepAliveCache); - System.out.println("SERVER URL:" + httpUrlConnection.getURL()); - /* - * create KeepAliveKey(URL,Object) object and compare created KeepAliveKey and - * existing using equals() method: KeepAliveKey.equals() - */ - Class keepAliveKeyClass = Class.forName("sun.net.www.http.KeepAliveKey"); - // System.out.println("keepAliveKeyClass=" + keepAliveKeyClass); - Constructor keepAliveKeyClassconstructor = keepAliveKeyClass.getDeclaredConstructors()[0]; - keepAliveKeyClassconstructor.setAccessible(true); - Object expectedKeepAliveKey = keepAliveKeyClassconstructor.newInstance(httpUrlConnection.getURL(), null); - System.out.println("ExpectedKeepAliveKey=" + expectedKeepAliveKey); - Object clientVectorObjectInMap = keepAliveCache.get(expectedKeepAliveKey); - System.out.println("ClientVector=" + clientVectorObjectInMap); - HttpClient httpClientCached = keepAliveCache.get(httpUrlConnection.getURL(), null); - System.out.println("HttpClient in Cache:" + httpClientCached); - if(httpClientCached != null) { - System.out.println("KeepingAlive:" + httpClientCached.isKeepingAlive()); - System.out.println("UsingProxy:" + httpClientCached.getUsingProxy()); - System.out.println("ProxiedHost:" + httpClientCached.getProxyHostUsed()); - System.out.println("ProxiedPort:" + httpClientCached.getProxyPortUsed()); - System.out.println("ProxyPortUsingSystemProperty:" + System.getProperty("http.proxyPort")); - System.out.println("ProxyHostUsingSystemProperty:" + System.getProperty("http.proxyHost")); - System.out.println("http.keepAlive.time.server=" + System.getProperty("http.keepAlive.time.server")); - System.out.println("http.keepAlive.time.proxy=" + System.getProperty("http.keepAlive.time.proxy")); - Class clientVectorClass = Class.forName("sun.net.www.http.KeepAliveCache$ClientVector"); - // System.out.println("clientVectorClass=" + clientVectorClass); - Field napField = clientVectorClass.getDeclaredField("nap"); - napField.setAccessible(true); - int napValue = (int) napField.get(clientVectorObjectInMap); - int actualValue = napValue / 1000; - // System.out.println("nap=" + napValue / 1000); - System.out.printf("ExpectedOutput:%d ActualOutput:%d ", expectedValues[scenarioNumber], actualValue); - System.out.println(); - if (expectedValues[scenarioNumber] != actualValue) { - throw new RuntimeException( - "ExpectedOutput:" + expectedValues[scenarioNumber] + " ActualOutput: " + actualValue); + private int getExpectedCachingValue(int serverScenario) { + if (serverScenario == 2) { + // Connection: keep-alive && Keep-alive: timeout=20 + // + // server side keep-alive timeout is what counts here + return 20; + } else if (serverScenario == 3 || serverScenario == 4 || serverScenario == 8) { + // Proxy-Connection: keep-alive + // Connection:keep-alive && Proxy-connection:keep-alive + // Proxy-Connection:keep-alive && Keep-alive:timeout=-20 + // + // Proxy-connection:keep-alive is set, timeout could be invalid -> value of http.keepAlive.time.proxy or default of 60 + int httpKeepAliveTimeProxy; + try { + httpKeepAliveTimeProxy = Integer.valueOf(System.getProperty("http.keepAlive.time.proxy")); + } catch (NumberFormatException e) { + httpKeepAliveTimeProxy = -1; } + return httpKeepAliveTimeProxy < 0 ? 60 : httpKeepAliveTimeProxy; + } else if (serverScenario == 5) { + // Proxy-connection:keep-alive && Keep-alive:timeout=120 + // + // server side keep-alive timeout is what counts here + return 120; + } else if (serverScenario == 7 || serverScenario == 9) { + // Connection: keep-alive && Keep-alive: timeout=0 + // Proxy-Connection:keep-alive && Keep-alive:timeout=0 + // + // no caching + return 0; } else { - //executed when value is not cached. - String expected = expectedValues[scenarioNumber] == 0 ? NOT_CACHED - : String.valueOf(expectedValues[scenarioNumber]); - System.out.println("ExpectedOutput:" + expected + " ActualOutput:" + NOT_CACHED); - if (!expected.equalsIgnoreCase(NOT_CACHED)) { - throw new RuntimeException("ExpectedOutput:" + expected + " ActualOutput:" + NOT_CACHED); + // No server parameters + // Connection: keep-alive + // Connection: keep-alive && Keep-alive: timeout=-20 + // + // Nothing or Connection:keep-alive is set, timeout could be invalid -> value of http.keepAlive.time.server or default of 5 + int httpKeepAliveTimeServer; + try { + httpKeepAliveTimeServer = Integer.valueOf(System.getProperty("http.keepAlive.time.server")); + } catch (NumberFormatException e) { + httpKeepAliveTimeServer = -1; } - } + return httpKeepAliveTimeServer < 0 ? 5 : httpKeepAliveTimeServer; + } } - public static void main(String[] args) throws Exception { - if (args.length != 1) { - throw new IllegalArgumentException("Usage:java KeepAliveTest.java "); + private void runScenario(int scenarioNumber) throws Exception { + int expectedValue = getExpectedCachingValue(scenarioNumber); + System.out.println("Expecting Cache Time of " + expectedValue + " for server headers:"); + if (serverHeaders[scenarioNumber] == null) { + System.out.println(); + } else { + System.out.print(serverHeaders[scenarioNumber]); } + Thread server = Thread.ofPlatform().start(() -> executeServer(scenarioNumber)); + connectToServerURL(expectedValue); + server.join(); + System.out.println(); + } + + private static void initialize() throws Exception { + System.clearProperty("http.proxyPort"); + System.clearProperty("http.proxyHost"); + System.setProperty("java.net.useSystemProxies", "false"); + + Field keepAliveField = sun.net.www.http.HttpClient.class.getDeclaredField("kac"); + keepAliveField.setAccessible(true); + keepAliveCache = (KeepAliveCache) keepAliveField.get(null); + System.out.println("KeepAliveCache: " + keepAliveCache); + keepAliveKeyClassconstructor = Class.forName("sun.net.www.http.KeepAliveKey").getDeclaredConstructors()[0]; + keepAliveKeyClassconstructor.setAccessible(true); + logger.setLevel(Level.FINEST); ConsoleHandler h = new ConsoleHandler(); h.setLevel(Level.FINEST); logger.addHandler(h); - KeepAliveTest keepAliveTest = new KeepAliveTest(); - if (args.length != 0) { - keepAliveTest.startScenario(Integer.valueOf(args[0])); + + System.out.println("Client properties: http.keepAlive.time.server=" + System.getProperty("http.keepAlive.time.server") + + ", http.keepAlive.time.proxy=" + System.getProperty("http.keepAlive.time.proxy")); + } + + public static void main(String[] args) throws Exception { + if (args.length > 1) { + throw new IllegalArgumentException("Usage:java KeepAliveTest.java "); + } else if (args.length == 1) { + // an individual test scenario + try { + int scenarioNumber = Integer.valueOf(args[0]); + if (scenarioNumber < 0 || scenarioNumber > 9) { + throw new IllegalArgumentException("Scenario " + scenarioNumber + " does not exist"); + } + initialize(); + new KeepAliveTest().runScenario(scenarioNumber); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Scenario must be a number, got " + args[0]); + } + } else { + // all server scenarios + initialize(); + for (int i = 0; i < 10; i++) { + new KeepAliveTest().runScenario(i); + } } - // make main thread wait until server and client is completed. - keepAliveTest.countDownLatch.await(); } } diff --git a/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java b/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java index 4af51070468..ff6e5ec8dff 100644 --- a/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java +++ b/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 8004834 8007610 8129909 8182765 8247815 + * @bug 8004834 8007610 8129909 8182765 8247815 8296175 * @summary Add doclint support into javadoc * @modules jdk.compiler/com.sun.tools.javac.main */ @@ -117,7 +117,10 @@ private enum Message { // javadoc messages for bad options OPT_BADARG(ERROR, "error: Invalid argument for -Xdoclint option"), OPT_BADQUAL(ERROR, "error: Access qualifiers not permitted for -Xdoclint arguments"), - OPT_BADPACKAGEARG(ERROR, "error: Invalid argument for -Xdoclint/package option"); + OPT_BADPACKAGEARG(ERROR, "error: Invalid argument for -Xdoclint/package option"), + + // javadoc notice about markers for invalid input + JD_NOTE_MARK(NOTE, "The generated documentation contains diagnostic markers for invalid input."); final Diagnostic.Kind kind; final String text; @@ -151,11 +154,13 @@ void run() throws Exception { test(List.of(htmlVersion), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10A, Message.DL_WRN14A)); + EnumSet.of(Message.DL_ERR10A, Message.DL_WRN14A, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR10, Message.DL_WRN14, + Message.JD_NOTE_MARK)); // test(List.of("-Xdoclint:none"), // Main.Result.OK, @@ -163,7 +168,8 @@ void run() throws Exception { test(List.of(htmlVersion, rawDiags, "-Xdoclint"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR10, Message.DL_WRN14, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:all/public"), Main.Result.ERROR, @@ -175,19 +181,21 @@ void run() throws Exception { test(List.of(htmlVersion, rawDiags, "-Xdoclint:missing"), Main.Result.OK, - EnumSet.of(Message.DL_WRN14)); + EnumSet.of(Message.DL_WRN14, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-private"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR6, Message.DL_ERR10, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR6, Message.DL_ERR10, + Message.DL_WRN14, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:missing,syntax", "-private"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR6, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR6, Message.DL_WRN14, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:reference"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10)); + EnumSet.of(Message.DL_ERR10, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:badarg"), Main.Result.ERROR, @@ -199,12 +207,13 @@ void run() throws Exception { test(List.of(htmlVersion, rawDiags), Main.Result.ERROR, EnumSet.of(Message.DL_ERR_P1TEST, Message.DL_ERR_P2TEST, - Message.DL_WARN_P1TEST, Message.DL_WARN_P2TEST)); + Message.DL_WARN_P1TEST, Message.DL_WARN_P2TEST, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint/package:p1"), Main.Result.ERROR, EnumSet.of(Message.DL_ERR_P1TEST, - Message.DL_WARN_P1TEST)); + Message.DL_WARN_P1TEST, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint/package:*p"), Main.Result.ERROR, diff --git a/test/langtools/jdk/jshell/JLCollisionTest.java b/test/langtools/jdk/jshell/JLCollisionTest.java new file mode 100644 index 00000000000..2859c1a49f7 --- /dev/null +++ b/test/langtools/jdk/jshell/JLCollisionTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024, 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 8327512 + * @summary Clashes between java.lang classes and custom-defined classes with + * the same simple names + * @modules jdk.jshell/jdk.jshell + * @build KullaTesting + * @run testng JLCollisionTest + */ + +import org.testng.annotations.Test; + +@Test +public class JLCollisionTest extends KullaTesting { + + public void testObject() { + assertEval("class Object {}"); + assertEval("1"); + assertEval("null"); + assertEval("$2 = \"\""); + } + + public void testThrowable() { + assertEval("class Throwable {}"); + assertEval("1"); + //var with an "enhanced" (non-denotable) type: + assertEval("var _ = new Object() {};"); + } + + public void testSuppressWarnings() { + assertEval("class SuppressWarnings {}"); + //var with an "enhanced" (non-denotable) type: + assertEval("var _ = new Object() {};"); + } + +} diff --git a/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java b/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java index 4a800d1f415..d696301f6d2 100644 --- a/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java +++ b/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 6199153 * @summary Generic throws and overriding diff --git a/test/langtools/tools/javac/TypeToString.java b/test/langtools/tools/javac/TypeToString.java new file mode 100644 index 00000000000..422eb7e2314 --- /dev/null +++ b/test/langtools/tools/javac/TypeToString.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2024, 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 8309881 + * @library /tools/javac/lib + * @modules java.compiler + * jdk.compiler + * @build JavacTestingAbstractProcessor TypeToString + * @compile -cp . -processor TypeToString -proc:only TypeToString.java + * @compile/process -cp . -processor TypeToString -proc:only Test + */ +import java.lang.Runtime.Version; +import java.util.*; +import javax.annotation.processing.*; +import javax.lang.model.element.*; +import javax.lang.model.util.*; + +@SupportedAnnotationTypes("*") +public class TypeToString extends JavacTestingAbstractProcessor { + + public boolean process(Set typeElementSet,RoundEnvironment renv) { + if (renv.processingOver()) { + TypeElement testClass = processingEnv.getElementUtils().getTypeElement("Test"); + ExecutableElement method = ElementFilter.methodsIn(testClass.getEnclosedElements()) + .iterator() + .next(); + String expectedTypeToString = "java.lang.Runtime.Version"; + String actualToString = method.getReturnType().toString(); + + if (!Objects.equals(expectedTypeToString, actualToString)) { + throw new AssertionError("Unexpected toString value. " + + "Expected: " + expectedTypeToString + ", " + + "but got: " + actualToString); + } + + actualToString = method.getParameters().get(0).asType().toString(); + + if (!Objects.equals(expectedTypeToString, actualToString)) { + throw new AssertionError("Unexpected toString value. " + + "Expected: " + expectedTypeToString + ", " + + "but got: " + actualToString); + } + } + return false; + } +} + +class Test { + public Version get(Version v) { + return null; + } +} diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out new file mode 100644 index 00000000000..76082537ed9 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out @@ -0,0 +1,7 @@ +DanglingDocCommentsClass.java:8:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:11:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:12:8: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:12:69: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:13:5: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:17:5: compiler.warn.dangling.doc.comment +6 warnings diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java new file mode 100644 index 00000000000..2075bf4495a --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java @@ -0,0 +1,46 @@ +/* + * @test /nodynamiccopyright/ + * @compile -Xlint:dangling-doc-comments DanglingDocCommentsClass.java + * @compile/ref=empty.out -XDrawDiagnostics DanglingDocCommentsClass.java + * @compile/ref=DanglingDocCommentsClass.enabled.out -XDrawDiagnostics -Xlint:dangling-doc-comments DanglingDocCommentsClass.java + */ + +/** Bad/Extra Class Comment. */ +/** Good Class Comment. */ +@Deprecated +/** Misplaced: after anno. */ +public /** Misplaced: after mods. */ class DanglingDocCommentsClass /** Misplaced: after ident */ { + /** Bad/Extra Field Comment. */ + /** Good Field Comment. */ + public int i; + + /** Bad/Extra Method Comment. */ + /** Good Method Comment. */ + public void m1() { } + + @SuppressWarnings("dangling-doc-comments") + /** Bad/misplaced/suppressed comment. */ + public void m2() { } + + public void m3(boolean b) { + /**************** + * Box comment * + ***************/ + if (b) return; + } + + public void m4a() { + /** Not a doc comment. */ + System.out.println(); + /** Not a doc comment; not dangling for m4b */ + } + + /** Good comment for m4b; no dangling comments. */ + public void m4b() { } + + /** Comment ignored here: does not affect decls in block */ + static { + /** Good comment. */ + int i = 0; + } +} \ No newline at end of file diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out new file mode 100644 index 00000000000..78dfd6e9633 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out @@ -0,0 +1,8 @@ +DanglingDocCommentsEnum.java:8:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:11:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:12:8: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:12:67: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:14:5: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:20:5: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:26:5: compiler.warn.dangling.doc.comment +7 warnings diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java new file mode 100644 index 00000000000..eae98433b70 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java @@ -0,0 +1,37 @@ +/* + * @test /nodynamiccopyright/ + * @compile -Xlint:dangling-doc-comments DanglingDocCommentsEnum.java + * @compile/ref=empty.out -XDrawDiagnostics DanglingDocCommentsEnum.java + * @compile/ref=DanglingDocCommentsEnum.enabled.out -XDrawDiagnostics -Xlint:dangling-doc-comments DanglingDocCommentsEnum.java + */ + +/** Bad/Extra Enum Comment. */ +/** Good Enum Comment. */ +@Deprecated +/** Misplaced: after anno. */ +public /** Misplaced: after mods. */ enum DanglingDocCommentsEnum /** Misplaced: after ident */ +{ + /** Bad/Extra enum-member Comment. */ + /** + * Good enum-member Comment. + */ + E1; + + /** Bad/Extra Field Comment. */ + /** + * Good Field Comment. + */ + public int i; + + /** Bad/Extra Method Comment. */ + /** + * Good Method Comment. + */ + public void m1() { + } + + @SuppressWarnings("dangling-doc-comments") + /** Bad/misplaced/suppressed comment. */ + public void m2() { + } +} \ No newline at end of file diff --git a/test/langtools/tools/javac/danglingDocComments/empty.out b/test/langtools/tools/javac/danglingDocComments/empty.out new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java b/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java index d7f4dbc0f2c..4765444f069 100644 --- a/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java +++ b/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, 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 @@ -21,11 +21,11 @@ * questions. */ -/** +/* * @test * @bug 7096014 * @summary Javac tokens should retain state - * @compile -Xlint -Werror DeprecatedDocComment3.java + * @compile -Xlint:-dangling-doc-comments -Werror DeprecatedDocComment3.java */ class DeprecatedDocComment3 { diff --git a/src/hotspot/share/gc/shared/softRefPolicy.cpp b/test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java similarity index 74% rename from src/hotspot/share/gc/shared/softRefPolicy.cpp rename to test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java index b3467b523b8..9e87c2d0482 100644 --- a/src/hotspot/share/gc/shared/softRefPolicy.cpp +++ b/test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, 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 @@ -19,17 +19,11 @@ * 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. - * */ -#include "precompiled.hpp" -#include "gc/shared/softRefPolicy.hpp" - -SoftRefPolicy::SoftRefPolicy() : - _should_clear_all_soft_refs(false), - _all_soft_refs_clear(false) { -} +// key: compiler.warn.dangling.doc.comment +// options: -Xlint:dangling-doc-comments -void SoftRefPolicy::cleared_all_soft_refs() { - _all_soft_refs_clear = true; -} +/** Comment 1. */ +/** Comment 2. */ +class DanglingDocCommentWarning { } diff --git a/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java b/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java index 155dd5335d9..a9167fc34df 100644 --- a/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java +++ b/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 8246704 * @summary Verify preview APIs are reported correctly when using --release. diff --git a/test/langtools/tools/javac/recovery/FlowRecovery.java b/test/langtools/tools/javac/recovery/FlowRecovery.java new file mode 100644 index 00000000000..930f230222b --- /dev/null +++ b/test/langtools/tools/javac/recovery/FlowRecovery.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2024, 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 8331212 + * @summary Verify error recovery w.r.t. Flow + * @library /tools/lib + * @enablePreview + * @modules jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * java.base/jdk.internal.classfile.impl + * @build toolbox.ToolBox toolbox.JavacTask + * @run main FlowRecovery + */ + +import java.nio.file.Path; +import java.util.List; +import java.util.Objects; + +import toolbox.JavacTask; +import toolbox.Task.Expect; +import toolbox.Task.OutputKind; +import toolbox.TestRunner; +import toolbox.ToolBox; + +public class FlowRecovery extends TestRunner { + + ToolBox tb; + + public FlowRecovery() { + super(System.err); + tb = new ToolBox(); + } + + public static void main(String[] args) throws Exception { + FlowRecovery t = new FlowRecovery(); + t.runTests(); + } + + @Test //8331212 + public void testYieldErrors() throws Exception { + String code = """ + class Test { + public boolean test() { + return switch (0) { + case 0 -> true; + default -> {} + }; + } + } + """; + Path curPath = Path.of("."); + List actual = new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .sources(code) + .outdir(curPath) + .run(Expect.FAIL) + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + List expected = List.of( + "Test.java:5:25: compiler.err.rule.completes.normally", + "1 error" + ); + + if (!Objects.equals(actual, expected)) { + error("Expected: " + expected + ", but got: " + actual); + } + } + +} diff --git a/test/langtools/tools/javac/warnings/DepAnn.java b/test/langtools/tools/javac/warnings/DepAnn.java index 4f25d290e7b..d725258cf3a 100644 --- a/test/langtools/tools/javac/warnings/DepAnn.java +++ b/test/langtools/tools/javac/warnings/DepAnn.java @@ -1,7 +1,7 @@ /* * @test /nodynamiccopyright/ * @bug 4986256 - * @compile/ref=DepAnn.out -XDrawDiagnostics -Xlint:all DepAnn.java + * @compile/ref=DepAnn.out -XDrawDiagnostics -Xlint:all,-dangling-doc-comments DepAnn.java */ // control: this class should generate warnings diff --git a/test/langtools/tools/javac/warnings/Deprecation.java b/test/langtools/tools/javac/warnings/Deprecation.java index 4a9d4fb2b3a..551ce6dc13e 100644 --- a/test/langtools/tools/javac/warnings/Deprecation.java +++ b/test/langtools/tools/javac/warnings/Deprecation.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 4986256 6598104 8032211 8194764 * @compile/ref=Deprecation.noLint.out -XDrawDiagnostics Deprecation.java diff --git a/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java b/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java index 2e41f72b58b..0e4d19826ee 100644 --- a/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java +++ b/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 6598104 8032211 * @build p.Dep1 p.Dep2 diff --git a/test/langtools/tools/javac/warnings/Unchecked.java b/test/langtools/tools/javac/warnings/Unchecked.java index 7d5e4aa83a4..e64fd760a07 100644 --- a/test/langtools/tools/javac/warnings/Unchecked.java +++ b/test/langtools/tools/javac/warnings/Unchecked.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 4986256 * @compile/ref=Unchecked.noLint.out -XDrawDiagnostics Unchecked.java diff --git a/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java b/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java index 54472a3b682..4a025ca497f 100644 --- a/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java +++ b/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8033961 * @summary Verify that all LintCategories have their descriptions filled. diff --git a/test/langtools/tools/javac/warnings/suppress/T6480588.java b/test/langtools/tools/javac/warnings/suppress/T6480588.java index 84454d251a1..da9513709d9 100644 --- a/test/langtools/tools/javac/warnings/suppress/T6480588.java +++ b/test/langtools/tools/javac/warnings/suppress/T6480588.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 6470588 * @summary Verify that \\@SuppressWarnings("deprecation") works OK for all parts diff --git a/test/micro/org/openjdk/bench/java/lang/StringConcat.java b/test/micro/org/openjdk/bench/java/lang/StringConcat.java index 82254f56e79..c4d2d1bfe11 100644 --- a/test/micro/org/openjdk/bench/java/lang/StringConcat.java +++ b/test/micro/org/openjdk/bench/java/lang/StringConcat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -149,4 +149,74 @@ public String concatConst6Object() { return "string" + objectValue + objectValue + objectValue + objectValue + objectValue + objectValue; } + private String + f0="1", f1="1", f2="1", f3="1", f4="1", f5="1", f6="1", f7="1", f8="1", f9="1", + f10="1", f11="1", f12="1", f13="1", f14="1", f15="1", f16="1", f17="1", f18="1", f19="1", + f20="1", f21="1", f22="1", f23="1", f24="1", f25="1", f26="1", f27="1", f28="1", f29="1", + f30="1", f31="1", f32="1", f33="1", f34="1", f35="1", f36="1", f37="1", f38="1", f39="1", + f40="1", f41="1", f42="1", f43="1", f44="1", f45="1", f46="1", f47="1", f48="1", f49="1", + f50="1", f51="1", f52="1", f53="1", f54="1", f55="1", f56="1", f57="1", f58="1", f59="1", + f60="1", f61="1", f62="1", f63="1", f64="1", f65="1", f66="1", f67="1", f68="1", f69="1", + f70="1", f71="1", f72="1", f73="1", f74="1", f75="1", f76="1", f77="1", f78="1", f79="1", + f80="1", f81="1", f82="1", f83="1", f84="1", f85="1", f86="1", f87="1", f88="1", f89="1", + f90="1", f91="1", f92="1", f93="1", f94="1", f95="1", f96="1", f97="1", f98="1", f99="1", + f100="1",f101="1",f102="1",f103="1",f104="1",f105="1",f106="1",f107="1",f108="1",f109="1", + f110="1",f111="1",f112="1",f113="1",f114="1",f115="1",f116="1",f117="1",f118="1",f119="1", + f120="1",f121="1",f122="1"; + + @Benchmark + public String concat13String() { + return f0 + ","+ f1 + ","+ f2 + ","+ f3 + ","+ f4 + ","+ f5 + ","+ f6 + ","+ f7 + ","+ f8 + ","+ f9 + "," + + f10 + ","+ f11 + ","+ f12; + } + + @Benchmark + public String concat23String() { + return f0 + ","+ f1 + ","+ f2 + ","+ f3 + ","+ f4 + ","+ f5 + ","+ f6 + ","+ f7 + ","+ f8 + ","+ f9 + "," + + f10 + ","+ f11 + ","+ f12 + ","+ f13 + ","+ f14 + ","+ f15 + ","+ f16 + ","+ f17 + ","+ f18 + ","+ f19 + "," + + f20 + ","+ f21 + ","+ f22; + } + @Benchmark + public String concat123String() { + return f0 + ","+ f1 + ","+ f2 + ","+ f3 + ","+ f4 + ","+ f5 + ","+ f6 + ","+ f7 + ","+ f8 + ","+ f9 + "," + + f10 + ","+ f11 + ","+ f12 + ","+ f13 + ","+ f14 + ","+ f15 + ","+ f16 + ","+ f17 + ","+ f18 + ","+ f19 + "," + + f20 + ","+ f21 + ","+ f22 + ","+ f23 + ","+ f24 + ","+ f25 + ","+ f26 + ","+ f27 + ","+ f28 + ","+ f29 + "," + + f30 + ","+ f31 + ","+ f32 + ","+ f33 + ","+ f34 + ","+ f35 + ","+ f36 + ","+ f37 + ","+ f38 + ","+ f39 + "," + + f40 + ","+ f41 + ","+ f42 + ","+ f43 + ","+ f44 + ","+ f45 + ","+ f46 + ","+ f47 + ","+ f48 + ","+ f49 + "," + + f50 + ","+ f51 + ","+ f52 + ","+ f53 + ","+ f54 + ","+ f55 + ","+ f56 + ","+ f57 + ","+ f58 + ","+ f59 + "," + + f60 + ","+ f61 + ","+ f62 + ","+ f63 + ","+ f64 + ","+ f65 + ","+ f66 + ","+ f67 + ","+ f68 + ","+ f69 + "," + + f70 + ","+ f71 + ","+ f72 + ","+ f73 + ","+ f74 + ","+ f75 + ","+ f76 + ","+ f77 + ","+ f78 + ","+ f79 + "," + + f80 + ","+ f81 + ","+ f82 + ","+ f83 + ","+ f84 + ","+ f85 + ","+ f86 + ","+ f87 + ","+ f88 + ","+ f89 + "," + + f90 + ","+ f91 + ","+ f92 + ","+ f93 + ","+ f94 + ","+ f95 + ","+ f96 + ","+ f97 + ","+ f98 + ","+ f99 + "," + +f100 + ","+f101 + ","+f102 + ","+f103 + ","+f104 + ","+f105 + ","+f106 + ","+f107 + ","+f108 + ","+f109 + "," + +f110 + ","+f111 + ","+f112 + ","+f113 + ","+f114 + ","+f115 + ","+f116 + ","+f117 + ","+f118 + ","+f119 + "," + +f120 + ","+f121 + ","+f122; + } + + @Benchmark + public String concat23StringConst() { + return f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + """ + A really long constant string. Such as a copyright header: + * Copyright (c) 2018, 2024, 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. + """; + } } diff --git a/test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java b/test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java new file mode 100644 index 00000000000..c74271995d5 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2024, 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. + */ +package org.openjdk.bench.java.lang.constant; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.lang.constant.ClassDesc; +import java.util.concurrent.TimeUnit; + +/** + * Performance of conversion from and to method type descriptor symbols with + * descriptor strings and class descriptor symbols + */ +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 3, time = 2) +@Measurement(iterations = 6, time = 1) +@Fork(1) +@State(Scope.Thread) +public class ClassDescFactories { + + @Param({ + "Ljava/lang/Object;", + "V", + "I" + }) + public String descString; + + @Benchmark + public ClassDesc ofDescriptor() { + return ClassDesc.ofDescriptor(descString); + } +} diff --git a/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java b/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java index b9614fccfd2..64019c37c14 100644 --- a/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java +++ b/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -54,11 +54,14 @@ public class MethodTypeDescFactories { private static final ClassDesc DUMMY_CD = ClassDesc.of("Dummy_invalid"); + /** Dots will be replaced by the descriptor of this benchmark class. */ @Param({ "(Ljava/lang/Object;Ljava/lang/String;)I", "()V", "([IJLjava/lang/String;Z)Ljava/util/List;", - "()[Ljava/lang/String;" + "()[Ljava/lang/String;", + "(..IIJ)V", + "(.....................)." }) public String descString; public MethodTypeDesc desc; @@ -68,6 +71,7 @@ public class MethodTypeDescFactories { @Setup public void setup() { + descString = descString.replaceAll("\\.", MethodTypeDescFactories.class.descriptorString()); desc = MethodTypeDesc.ofDescriptor(descString); ret = desc.returnType(); args = desc.parameterArray();