diff options
821 files changed, 40238 insertions, 10252 deletions
@@ -1,3 +1,15 @@ +2025-04-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR cobol/119217 + * configure.ac: Restrict cobol to aarch64-*-linux*, + x86_64-*-linux*. + Fix indentation. + * configure: Regenerate. + +2025-04-16 Waffl3x <waffl3x@baylibre.com> + + * MAINTAINERS: Add myself. + 2025-04-02 Iain Sandoe <iain@sandoe.co.uk> * configure: Regenerate. diff --git a/MAINTAINERS b/MAINTAINERS index 756227e..6ff4770 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -862,6 +862,7 @@ Ville Voutilainen ville <ville.voutilainen@gmail.com> Tom de Vries vries <tdevries@suse.de> Nenad Vukicevic nenadv <nenad@intrepid.com> Dmitry Vyukov dvyukov <dvyukov@google.com> +Waffl3x waffl3x <waffl3x@baylibre.com> Jonathan Wakely redi <jwakely@redhat.com> Krister Walfridsson kristerw <krister.walfridsson@gmail.com> Feng Wang - <wangfeng@eswincomputing.com> diff --git a/config/ChangeLog b/config/ChangeLog index 9268a8e..2551f82 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2025-04-15 Kyrylo Tkachov <ktkachov@nvidia.com> + + * bootstrap-lto-locality.mk: New file. + 2024-11-25 Sandra Loosemore <sloosemore@baylibre.com> * mt-nios2-elf: Deleted. diff --git a/config/bootstrap-lto-locality.mk b/config/bootstrap-lto-locality.mk new file mode 100644 index 0000000..b31565c --- /dev/null +++ b/config/bootstrap-lto-locality.mk @@ -0,0 +1,20 @@ +# This option enables LTO and locality partitioning for stage2 and stage3 in slim mode + +STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality +STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality +STAGEprofile_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality +STAGEtrain_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality +STAGEfeedback_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality + +# assumes the host supports the linker plugin +LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ +LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ +LTO_NM = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-nm$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ + +LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \ + RANLIB="$(LTO_RANLIB)"; export RANLIB; \ + NM="$(LTO_NM)"; export NM; +LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" NM="$(LTO_NM)" + +do-compare = $(SHELL) $(srcdir)/contrib/compare-lto $$f1 $$f2 +extra-compare = gcc/lto1$(exeext) @@ -3571,31 +3571,28 @@ case ,${enable_languages}, in *,cobol,*) case ,${enable_languages}, in *,c++,*) - ;; + ;; *) # We have an explicit cobol, but no c++. We need c++, because cobol # requires libstdc++ enable_languages="$enable_languages,c++" - ;; + ;; esac ;; *) case "${target}" in - *-*-darwin*) - unsupported_languages="$unsupported_languages cobol" - ;; - x86_64-*-*|aarch64-*-*) + aarch64-*-linux*|x86_64-*-linux*) ;; *-*-*) - unsupported_languages="$unsupported_languages cobol" - ;; + unsupported_languages="$unsupported_languages cobol" + ;; esac case "${host}" in - x86_64-*-*|aarch64-*-*) + aarch64-*-linux*|x86_64-*-linux*) ;; *-*-*) - unsupported_languages="$unsupported_languages cobol" - ;; + unsupported_languages="$unsupported_languages cobol" + ;; esac ;; esac diff --git a/configure.ac b/configure.ac index 3e120b0..730db3c 100644 --- a/configure.ac +++ b/configure.ac @@ -791,31 +791,28 @@ case ,${enable_languages}, in *,cobol,*) case ,${enable_languages}, in *,c++,*) - ;; + ;; *) # We have an explicit cobol, but no c++. We need c++, because cobol # requires libstdc++ enable_languages="$enable_languages,c++" - ;; + ;; esac ;; *) case "${target}" in - *-*-darwin*) - unsupported_languages="$unsupported_languages cobol" - ;; - x86_64-*-*|aarch64-*-*) + aarch64-*-linux*|x86_64-*-linux*) ;; *-*-*) - unsupported_languages="$unsupported_languages cobol" - ;; + unsupported_languages="$unsupported_languages cobol" + ;; esac case "${host}" in - x86_64-*-*|aarch64-*-*) + aarch64-*-linux*|x86_64-*-linux*) ;; *-*-*) - unsupported_languages="$unsupported_languages cobol" - ;; + unsupported_languages="$unsupported_languages cobol" + ;; esac ;; esac diff --git a/contrib/ChangeLog b/contrib/ChangeLog index c78c0b7..e7a4cab 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,17 @@ +2025-04-17 Jakub Jelinek <jakub@redhat.com> + + * gcc-changelog/git_update_version.py (active_refs): Add + releases/gcc-15. + +2025-04-11 Tomasz KamiÅ„ski <tkaminsk@redhat.com> + + PR libstdc++/109162 + * unicode/README: Mentioned DerivedGeneralCategory.txt. + * unicode/gen_libstdcxx_unicode_data.py: Generation __escape_edges + table from DerivedGeneralCategory.txt. Update file name in comments. + * unicode/DerivedGeneralCategory.txt: Copy of file distributed by + Unicode Consortium. + 2025-03-27 David Malcolm <dmalcolm@redhat.com> PR testsuite/116163 diff --git a/contrib/gcc-changelog/git_update_version.py b/contrib/gcc-changelog/git_update_version.py index 8e36c74..aa9adee 100755 --- a/contrib/gcc-changelog/git_update_version.py +++ b/contrib/gcc-changelog/git_update_version.py @@ -85,8 +85,8 @@ def prepend_to_changelog_files(repo, folder, git_commit, add_to_git): repo.git.add(full_path) -active_refs = ['master', - 'releases/gcc-12', 'releases/gcc-13', 'releases/gcc-14'] +active_refs = ['master', 'releases/gcc-12', + 'releases/gcc-13', 'releases/gcc-14', 'releases/gcc-15'] parser = argparse.ArgumentParser(description='Update DATESTAMP and generate ' 'ChangeLog entries') diff --git a/contrib/unicode/DerivedGeneralCategory.txt b/contrib/unicode/DerivedGeneralCategory.txt new file mode 100644 index 0000000..07bf7bc --- /dev/null +++ b/contrib/unicode/DerivedGeneralCategory.txt @@ -0,0 +1,4323 @@ +# DerivedGeneralCategory-16.0.0.txt +# Date: 2024-04-30, 21:48:17 GMT +# © 2024 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use and license, see https://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see https://www.unicode.org/reports/tr44/ + +# ================================================ + +# Property: General_Category + +# ================================================ + +# General_Category=Unassigned + +0378..0379 ; Cn # [2] <reserved-0378>..<reserved-0379> +0380..0383 ; Cn # [4] <reserved-0380>..<reserved-0383> +038B ; Cn # <reserved-038B> +038D ; Cn # <reserved-038D> +03A2 ; Cn # <reserved-03A2> +0530 ; Cn # <reserved-0530> +0557..0558 ; Cn # [2] <reserved-0557>..<reserved-0558> +058B..058C ; Cn # [2] <reserved-058B>..<reserved-058C> +0590 ; Cn # <reserved-0590> +05C8..05CF ; Cn # [8] <reserved-05C8>..<reserved-05CF> +05EB..05EE ; Cn # [4] <reserved-05EB>..<reserved-05EE> +05F5..05FF ; Cn # [11] <reserved-05F5>..<reserved-05FF> +070E ; Cn # <reserved-070E> +074B..074C ; Cn # [2] <reserved-074B>..<reserved-074C> +07B2..07BF ; Cn # [14] <reserved-07B2>..<reserved-07BF> +07FB..07FC ; Cn # [2] <reserved-07FB>..<reserved-07FC> +082E..082F ; Cn # [2] <reserved-082E>..<reserved-082F> +083F ; Cn # <reserved-083F> +085C..085D ; Cn # [2] <reserved-085C>..<reserved-085D> +085F ; Cn # <reserved-085F> +086B..086F ; Cn # [5] <reserved-086B>..<reserved-086F> +088F ; Cn # <reserved-088F> +0892..0896 ; Cn # [5] <reserved-0892>..<reserved-0896> +0984 ; Cn # <reserved-0984> +098D..098E ; Cn # [2] <reserved-098D>..<reserved-098E> +0991..0992 ; Cn # [2] <reserved-0991>..<reserved-0992> +09A9 ; Cn # <reserved-09A9> +09B1 ; Cn # <reserved-09B1> +09B3..09B5 ; Cn # [3] <reserved-09B3>..<reserved-09B5> +09BA..09BB ; Cn # [2] <reserved-09BA>..<reserved-09BB> +09C5..09C6 ; Cn # [2] <reserved-09C5>..<reserved-09C6> +09C9..09CA ; Cn # [2] <reserved-09C9>..<reserved-09CA> +09CF..09D6 ; Cn # [8] <reserved-09CF>..<reserved-09D6> +09D8..09DB ; Cn # [4] <reserved-09D8>..<reserved-09DB> +09DE ; Cn # <reserved-09DE> +09E4..09E5 ; Cn # [2] <reserved-09E4>..<reserved-09E5> +09FF..0A00 ; Cn # [2] <reserved-09FF>..<reserved-0A00> +0A04 ; Cn # <reserved-0A04> +0A0B..0A0E ; Cn # [4] <reserved-0A0B>..<reserved-0A0E> +0A11..0A12 ; Cn # [2] <reserved-0A11>..<reserved-0A12> +0A29 ; Cn # <reserved-0A29> +0A31 ; Cn # <reserved-0A31> +0A34 ; Cn # <reserved-0A34> +0A37 ; Cn # <reserved-0A37> +0A3A..0A3B ; Cn # [2] <reserved-0A3A>..<reserved-0A3B> +0A3D ; Cn # <reserved-0A3D> +0A43..0A46 ; Cn # [4] <reserved-0A43>..<reserved-0A46> +0A49..0A4A ; Cn # [2] <reserved-0A49>..<reserved-0A4A> +0A4E..0A50 ; Cn # [3] <reserved-0A4E>..<reserved-0A50> +0A52..0A58 ; Cn # [7] <reserved-0A52>..<reserved-0A58> +0A5D ; Cn # <reserved-0A5D> +0A5F..0A65 ; Cn # [7] <reserved-0A5F>..<reserved-0A65> +0A77..0A80 ; Cn # [10] <reserved-0A77>..<reserved-0A80> +0A84 ; Cn # <reserved-0A84> +0A8E ; Cn # <reserved-0A8E> +0A92 ; Cn # <reserved-0A92> +0AA9 ; Cn # <reserved-0AA9> +0AB1 ; Cn # <reserved-0AB1> +0AB4 ; Cn # <reserved-0AB4> +0ABA..0ABB ; Cn # [2] <reserved-0ABA>..<reserved-0ABB> +0AC6 ; Cn # <reserved-0AC6> +0ACA ; Cn # <reserved-0ACA> +0ACE..0ACF ; Cn # [2] <reserved-0ACE>..<reserved-0ACF> +0AD1..0ADF ; Cn # [15] <reserved-0AD1>..<reserved-0ADF> +0AE4..0AE5 ; Cn # [2] <reserved-0AE4>..<reserved-0AE5> +0AF2..0AF8 ; Cn # [7] <reserved-0AF2>..<reserved-0AF8> +0B00 ; Cn # <reserved-0B00> +0B04 ; Cn # <reserved-0B04> +0B0D..0B0E ; Cn # [2] <reserved-0B0D>..<reserved-0B0E> +0B11..0B12 ; Cn # [2] <reserved-0B11>..<reserved-0B12> +0B29 ; Cn # <reserved-0B29> +0B31 ; Cn # <reserved-0B31> +0B34 ; Cn # <reserved-0B34> +0B3A..0B3B ; Cn # [2] <reserved-0B3A>..<reserved-0B3B> +0B45..0B46 ; Cn # [2] <reserved-0B45>..<reserved-0B46> +0B49..0B4A ; Cn # [2] <reserved-0B49>..<reserved-0B4A> +0B4E..0B54 ; Cn # [7] <reserved-0B4E>..<reserved-0B54> +0B58..0B5B ; Cn # [4] <reserved-0B58>..<reserved-0B5B> +0B5E ; Cn # <reserved-0B5E> +0B64..0B65 ; Cn # [2] <reserved-0B64>..<reserved-0B65> +0B78..0B81 ; Cn # [10] <reserved-0B78>..<reserved-0B81> +0B84 ; Cn # <reserved-0B84> +0B8B..0B8D ; Cn # [3] <reserved-0B8B>..<reserved-0B8D> +0B91 ; Cn # <reserved-0B91> +0B96..0B98 ; Cn # [3] <reserved-0B96>..<reserved-0B98> +0B9B ; Cn # <reserved-0B9B> +0B9D ; Cn # <reserved-0B9D> +0BA0..0BA2 ; Cn # [3] <reserved-0BA0>..<reserved-0BA2> +0BA5..0BA7 ; Cn # [3] <reserved-0BA5>..<reserved-0BA7> +0BAB..0BAD ; Cn # [3] <reserved-0BAB>..<reserved-0BAD> +0BBA..0BBD ; Cn # [4] <reserved-0BBA>..<reserved-0BBD> +0BC3..0BC5 ; Cn # [3] <reserved-0BC3>..<reserved-0BC5> +0BC9 ; Cn # <reserved-0BC9> +0BCE..0BCF ; Cn # [2] <reserved-0BCE>..<reserved-0BCF> +0BD1..0BD6 ; Cn # [6] <reserved-0BD1>..<reserved-0BD6> +0BD8..0BE5 ; Cn # [14] <reserved-0BD8>..<reserved-0BE5> +0BFB..0BFF ; Cn # [5] <reserved-0BFB>..<reserved-0BFF> +0C0D ; Cn # <reserved-0C0D> +0C11 ; Cn # <reserved-0C11> +0C29 ; Cn # <reserved-0C29> +0C3A..0C3B ; Cn # [2] <reserved-0C3A>..<reserved-0C3B> +0C45 ; Cn # <reserved-0C45> +0C49 ; Cn # <reserved-0C49> +0C4E..0C54 ; Cn # [7] <reserved-0C4E>..<reserved-0C54> +0C57 ; Cn # <reserved-0C57> +0C5B..0C5C ; Cn # [2] <reserved-0C5B>..<reserved-0C5C> +0C5E..0C5F ; Cn # [2] <reserved-0C5E>..<reserved-0C5F> +0C64..0C65 ; Cn # [2] <reserved-0C64>..<reserved-0C65> +0C70..0C76 ; Cn # [7] <reserved-0C70>..<reserved-0C76> +0C8D ; Cn # <reserved-0C8D> +0C91 ; Cn # <reserved-0C91> +0CA9 ; Cn # <reserved-0CA9> +0CB4 ; Cn # <reserved-0CB4> +0CBA..0CBB ; Cn # [2] <reserved-0CBA>..<reserved-0CBB> +0CC5 ; Cn # <reserved-0CC5> +0CC9 ; Cn # <reserved-0CC9> +0CCE..0CD4 ; Cn # [7] <reserved-0CCE>..<reserved-0CD4> +0CD7..0CDC ; Cn # [6] <reserved-0CD7>..<reserved-0CDC> +0CDF ; Cn # <reserved-0CDF> +0CE4..0CE5 ; Cn # [2] <reserved-0CE4>..<reserved-0CE5> +0CF0 ; Cn # <reserved-0CF0> +0CF4..0CFF ; Cn # [12] <reserved-0CF4>..<reserved-0CFF> +0D0D ; Cn # <reserved-0D0D> +0D11 ; Cn # <reserved-0D11> +0D45 ; Cn # <reserved-0D45> +0D49 ; Cn # <reserved-0D49> +0D50..0D53 ; Cn # [4] <reserved-0D50>..<reserved-0D53> +0D64..0D65 ; Cn # [2] <reserved-0D64>..<reserved-0D65> +0D80 ; Cn # <reserved-0D80> +0D84 ; Cn # <reserved-0D84> +0D97..0D99 ; Cn # [3] <reserved-0D97>..<reserved-0D99> +0DB2 ; Cn # <reserved-0DB2> +0DBC ; Cn # <reserved-0DBC> +0DBE..0DBF ; Cn # [2] <reserved-0DBE>..<reserved-0DBF> +0DC7..0DC9 ; Cn # [3] <reserved-0DC7>..<reserved-0DC9> +0DCB..0DCE ; Cn # [4] <reserved-0DCB>..<reserved-0DCE> +0DD5 ; Cn # <reserved-0DD5> +0DD7 ; Cn # <reserved-0DD7> +0DE0..0DE5 ; Cn # [6] <reserved-0DE0>..<reserved-0DE5> +0DF0..0DF1 ; Cn # [2] <reserved-0DF0>..<reserved-0DF1> +0DF5..0E00 ; Cn # [12] <reserved-0DF5>..<reserved-0E00> +0E3B..0E3E ; Cn # [4] <reserved-0E3B>..<reserved-0E3E> +0E5C..0E80 ; Cn # [37] <reserved-0E5C>..<reserved-0E80> +0E83 ; Cn # <reserved-0E83> +0E85 ; Cn # <reserved-0E85> +0E8B ; Cn # <reserved-0E8B> +0EA4 ; Cn # <reserved-0EA4> +0EA6 ; Cn # <reserved-0EA6> +0EBE..0EBF ; Cn # [2] <reserved-0EBE>..<reserved-0EBF> +0EC5 ; Cn # <reserved-0EC5> +0EC7 ; Cn # <reserved-0EC7> +0ECF ; Cn # <reserved-0ECF> +0EDA..0EDB ; Cn # [2] <reserved-0EDA>..<reserved-0EDB> +0EE0..0EFF ; Cn # [32] <reserved-0EE0>..<reserved-0EFF> +0F48 ; Cn # <reserved-0F48> +0F6D..0F70 ; Cn # [4] <reserved-0F6D>..<reserved-0F70> +0F98 ; Cn # <reserved-0F98> +0FBD ; Cn # <reserved-0FBD> +0FCD ; Cn # <reserved-0FCD> +0FDB..0FFF ; Cn # [37] <reserved-0FDB>..<reserved-0FFF> +10C6 ; Cn # <reserved-10C6> +10C8..10CC ; Cn # [5] <reserved-10C8>..<reserved-10CC> +10CE..10CF ; Cn # [2] <reserved-10CE>..<reserved-10CF> +1249 ; Cn # <reserved-1249> +124E..124F ; Cn # [2] <reserved-124E>..<reserved-124F> +1257 ; Cn # <reserved-1257> +1259 ; Cn # <reserved-1259> +125E..125F ; Cn # [2] <reserved-125E>..<reserved-125F> +1289 ; Cn # <reserved-1289> +128E..128F ; Cn # [2] <reserved-128E>..<reserved-128F> +12B1 ; Cn # <reserved-12B1> +12B6..12B7 ; Cn # [2] <reserved-12B6>..<reserved-12B7> +12BF ; Cn # <reserved-12BF> +12C1 ; Cn # <reserved-12C1> +12C6..12C7 ; Cn # [2] <reserved-12C6>..<reserved-12C7> +12D7 ; Cn # <reserved-12D7> +1311 ; Cn # <reserved-1311> +1316..1317 ; Cn # [2] <reserved-1316>..<reserved-1317> +135B..135C ; Cn # [2] <reserved-135B>..<reserved-135C> +137D..137F ; Cn # [3] <reserved-137D>..<reserved-137F> +139A..139F ; Cn # [6] <reserved-139A>..<reserved-139F> +13F6..13F7 ; Cn # [2] <reserved-13F6>..<reserved-13F7> +13FE..13FF ; Cn # [2] <reserved-13FE>..<reserved-13FF> +169D..169F ; Cn # [3] <reserved-169D>..<reserved-169F> +16F9..16FF ; Cn # [7] <reserved-16F9>..<reserved-16FF> +1716..171E ; Cn # [9] <reserved-1716>..<reserved-171E> +1737..173F ; Cn # [9] <reserved-1737>..<reserved-173F> +1754..175F ; Cn # [12] <reserved-1754>..<reserved-175F> +176D ; Cn # <reserved-176D> +1771 ; Cn # <reserved-1771> +1774..177F ; Cn # [12] <reserved-1774>..<reserved-177F> +17DE..17DF ; Cn # [2] <reserved-17DE>..<reserved-17DF> +17EA..17EF ; Cn # [6] <reserved-17EA>..<reserved-17EF> +17FA..17FF ; Cn # [6] <reserved-17FA>..<reserved-17FF> +181A..181F ; Cn # [6] <reserved-181A>..<reserved-181F> +1879..187F ; Cn # [7] <reserved-1879>..<reserved-187F> +18AB..18AF ; Cn # [5] <reserved-18AB>..<reserved-18AF> +18F6..18FF ; Cn # [10] <reserved-18F6>..<reserved-18FF> +191F ; Cn # <reserved-191F> +192C..192F ; Cn # [4] <reserved-192C>..<reserved-192F> +193C..193F ; Cn # [4] <reserved-193C>..<reserved-193F> +1941..1943 ; Cn # [3] <reserved-1941>..<reserved-1943> +196E..196F ; Cn # [2] <reserved-196E>..<reserved-196F> +1975..197F ; Cn # [11] <reserved-1975>..<reserved-197F> +19AC..19AF ; Cn # [4] <reserved-19AC>..<reserved-19AF> +19CA..19CF ; Cn # [6] <reserved-19CA>..<reserved-19CF> +19DB..19DD ; Cn # [3] <reserved-19DB>..<reserved-19DD> +1A1C..1A1D ; Cn # [2] <reserved-1A1C>..<reserved-1A1D> +1A5F ; Cn # <reserved-1A5F> +1A7D..1A7E ; Cn # [2] <reserved-1A7D>..<reserved-1A7E> +1A8A..1A8F ; Cn # [6] <reserved-1A8A>..<reserved-1A8F> +1A9A..1A9F ; Cn # [6] <reserved-1A9A>..<reserved-1A9F> +1AAE..1AAF ; Cn # [2] <reserved-1AAE>..<reserved-1AAF> +1ACF..1AFF ; Cn # [49] <reserved-1ACF>..<reserved-1AFF> +1B4D ; Cn # <reserved-1B4D> +1BF4..1BFB ; Cn # [8] <reserved-1BF4>..<reserved-1BFB> +1C38..1C3A ; Cn # [3] <reserved-1C38>..<reserved-1C3A> +1C4A..1C4C ; Cn # [3] <reserved-1C4A>..<reserved-1C4C> +1C8B..1C8F ; Cn # [5] <reserved-1C8B>..<reserved-1C8F> +1CBB..1CBC ; Cn # [2] <reserved-1CBB>..<reserved-1CBC> +1CC8..1CCF ; Cn # [8] <reserved-1CC8>..<reserved-1CCF> +1CFB..1CFF ; Cn # [5] <reserved-1CFB>..<reserved-1CFF> +1F16..1F17 ; Cn # [2] <reserved-1F16>..<reserved-1F17> +1F1E..1F1F ; Cn # [2] <reserved-1F1E>..<reserved-1F1F> +1F46..1F47 ; Cn # [2] <reserved-1F46>..<reserved-1F47> +1F4E..1F4F ; Cn # [2] <reserved-1F4E>..<reserved-1F4F> +1F58 ; Cn # <reserved-1F58> +1F5A ; Cn # <reserved-1F5A> +1F5C ; Cn # <reserved-1F5C> +1F5E ; Cn # <reserved-1F5E> +1F7E..1F7F ; Cn # [2] <reserved-1F7E>..<reserved-1F7F> +1FB5 ; Cn # <reserved-1FB5> +1FC5 ; Cn # <reserved-1FC5> +1FD4..1FD5 ; Cn # [2] <reserved-1FD4>..<reserved-1FD5> +1FDC ; Cn # <reserved-1FDC> +1FF0..1FF1 ; Cn # [2] <reserved-1FF0>..<reserved-1FF1> +1FF5 ; Cn # <reserved-1FF5> +1FFF ; Cn # <reserved-1FFF> +2065 ; Cn # <reserved-2065> +2072..2073 ; Cn # [2] <reserved-2072>..<reserved-2073> +208F ; Cn # <reserved-208F> +209D..209F ; Cn # [3] <reserved-209D>..<reserved-209F> +20C1..20CF ; Cn # [15] <reserved-20C1>..<reserved-20CF> +20F1..20FF ; Cn # [15] <reserved-20F1>..<reserved-20FF> +218C..218F ; Cn # [4] <reserved-218C>..<reserved-218F> +242A..243F ; Cn # [22] <reserved-242A>..<reserved-243F> +244B..245F ; Cn # [21] <reserved-244B>..<reserved-245F> +2B74..2B75 ; Cn # [2] <reserved-2B74>..<reserved-2B75> +2B96 ; Cn # <reserved-2B96> +2CF4..2CF8 ; Cn # [5] <reserved-2CF4>..<reserved-2CF8> +2D26 ; Cn # <reserved-2D26> +2D28..2D2C ; Cn # [5] <reserved-2D28>..<reserved-2D2C> +2D2E..2D2F ; Cn # [2] <reserved-2D2E>..<reserved-2D2F> +2D68..2D6E ; Cn # [7] <reserved-2D68>..<reserved-2D6E> +2D71..2D7E ; Cn # [14] <reserved-2D71>..<reserved-2D7E> +2D97..2D9F ; Cn # [9] <reserved-2D97>..<reserved-2D9F> +2DA7 ; Cn # <reserved-2DA7> +2DAF ; Cn # <reserved-2DAF> +2DB7 ; Cn # <reserved-2DB7> +2DBF ; Cn # <reserved-2DBF> +2DC7 ; Cn # <reserved-2DC7> +2DCF ; Cn # <reserved-2DCF> +2DD7 ; Cn # <reserved-2DD7> +2DDF ; Cn # <reserved-2DDF> +2E5E..2E7F ; Cn # [34] <reserved-2E5E>..<reserved-2E7F> +2E9A ; Cn # <reserved-2E9A> +2EF4..2EFF ; Cn # [12] <reserved-2EF4>..<reserved-2EFF> +2FD6..2FEF ; Cn # [26] <reserved-2FD6>..<reserved-2FEF> +3040 ; Cn # <reserved-3040> +3097..3098 ; Cn # [2] <reserved-3097>..<reserved-3098> +3100..3104 ; Cn # [5] <reserved-3100>..<reserved-3104> +3130 ; Cn # <reserved-3130> +318F ; Cn # <reserved-318F> +31E6..31EE ; Cn # [9] <reserved-31E6>..<reserved-31EE> +321F ; Cn # <reserved-321F> +A48D..A48F ; Cn # [3] <reserved-A48D>..<reserved-A48F> +A4C7..A4CF ; Cn # [9] <reserved-A4C7>..<reserved-A4CF> +A62C..A63F ; Cn # [20] <reserved-A62C>..<reserved-A63F> +A6F8..A6FF ; Cn # [8] <reserved-A6F8>..<reserved-A6FF> +A7CE..A7CF ; Cn # [2] <reserved-A7CE>..<reserved-A7CF> +A7D2 ; Cn # <reserved-A7D2> +A7D4 ; Cn # <reserved-A7D4> +A7DD..A7F1 ; Cn # [21] <reserved-A7DD>..<reserved-A7F1> +A82D..A82F ; Cn # [3] <reserved-A82D>..<reserved-A82F> +A83A..A83F ; Cn # [6] <reserved-A83A>..<reserved-A83F> +A878..A87F ; Cn # [8] <reserved-A878>..<reserved-A87F> +A8C6..A8CD ; Cn # [8] <reserved-A8C6>..<reserved-A8CD> +A8DA..A8DF ; Cn # [6] <reserved-A8DA>..<reserved-A8DF> +A954..A95E ; Cn # [11] <reserved-A954>..<reserved-A95E> +A97D..A97F ; Cn # [3] <reserved-A97D>..<reserved-A97F> +A9CE ; Cn # <reserved-A9CE> +A9DA..A9DD ; Cn # [4] <reserved-A9DA>..<reserved-A9DD> +A9FF ; Cn # <reserved-A9FF> +AA37..AA3F ; Cn # [9] <reserved-AA37>..<reserved-AA3F> +AA4E..AA4F ; Cn # [2] <reserved-AA4E>..<reserved-AA4F> +AA5A..AA5B ; Cn # [2] <reserved-AA5A>..<reserved-AA5B> +AAC3..AADA ; Cn # [24] <reserved-AAC3>..<reserved-AADA> +AAF7..AB00 ; Cn # [10] <reserved-AAF7>..<reserved-AB00> +AB07..AB08 ; Cn # [2] <reserved-AB07>..<reserved-AB08> +AB0F..AB10 ; Cn # [2] <reserved-AB0F>..<reserved-AB10> +AB17..AB1F ; Cn # [9] <reserved-AB17>..<reserved-AB1F> +AB27 ; Cn # <reserved-AB27> +AB2F ; Cn # <reserved-AB2F> +AB6C..AB6F ; Cn # [4] <reserved-AB6C>..<reserved-AB6F> +ABEE..ABEF ; Cn # [2] <reserved-ABEE>..<reserved-ABEF> +ABFA..ABFF ; Cn # [6] <reserved-ABFA>..<reserved-ABFF> +D7A4..D7AF ; Cn # [12] <reserved-D7A4>..<reserved-D7AF> +D7C7..D7CA ; Cn # [4] <reserved-D7C7>..<reserved-D7CA> +D7FC..D7FF ; Cn # [4] <reserved-D7FC>..<reserved-D7FF> +FA6E..FA6F ; Cn # [2] <reserved-FA6E>..<reserved-FA6F> +FADA..FAFF ; Cn # [38] <reserved-FADA>..<reserved-FAFF> +FB07..FB12 ; Cn # [12] <reserved-FB07>..<reserved-FB12> +FB18..FB1C ; Cn # [5] <reserved-FB18>..<reserved-FB1C> +FB37 ; Cn # <reserved-FB37> +FB3D ; Cn # <reserved-FB3D> +FB3F ; Cn # <reserved-FB3F> +FB42 ; Cn # <reserved-FB42> +FB45 ; Cn # <reserved-FB45> +FBC3..FBD2 ; Cn # [16] <reserved-FBC3>..<reserved-FBD2> +FD90..FD91 ; Cn # [2] <reserved-FD90>..<reserved-FD91> +FDC8..FDCE ; Cn # [7] <reserved-FDC8>..<reserved-FDCE> +FDD0..FDEF ; Cn # [32] <noncharacter-FDD0>..<noncharacter-FDEF> +FE1A..FE1F ; Cn # [6] <reserved-FE1A>..<reserved-FE1F> +FE53 ; Cn # <reserved-FE53> +FE67 ; Cn # <reserved-FE67> +FE6C..FE6F ; Cn # [4] <reserved-FE6C>..<reserved-FE6F> +FE75 ; Cn # <reserved-FE75> +FEFD..FEFE ; Cn # [2] <reserved-FEFD>..<reserved-FEFE> +FF00 ; Cn # <reserved-FF00> +FFBF..FFC1 ; Cn # [3] <reserved-FFBF>..<reserved-FFC1> +FFC8..FFC9 ; Cn # [2] <reserved-FFC8>..<reserved-FFC9> +FFD0..FFD1 ; Cn # [2] <reserved-FFD0>..<reserved-FFD1> +FFD8..FFD9 ; Cn # [2] <reserved-FFD8>..<reserved-FFD9> +FFDD..FFDF ; Cn # [3] <reserved-FFDD>..<reserved-FFDF> +FFE7 ; Cn # <reserved-FFE7> +FFEF..FFF8 ; Cn # [10] <reserved-FFEF>..<reserved-FFF8> +FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF> +1000C ; Cn # <reserved-1000C> +10027 ; Cn # <reserved-10027> +1003B ; Cn # <reserved-1003B> +1003E ; Cn # <reserved-1003E> +1004E..1004F ; Cn # [2] <reserved-1004E>..<reserved-1004F> +1005E..1007F ; Cn # [34] <reserved-1005E>..<reserved-1007F> +100FB..100FF ; Cn # [5] <reserved-100FB>..<reserved-100FF> +10103..10106 ; Cn # [4] <reserved-10103>..<reserved-10106> +10134..10136 ; Cn # [3] <reserved-10134>..<reserved-10136> +1018F ; Cn # <reserved-1018F> +1019D..1019F ; Cn # [3] <reserved-1019D>..<reserved-1019F> +101A1..101CF ; Cn # [47] <reserved-101A1>..<reserved-101CF> +101FE..1027F ; Cn # [130] <reserved-101FE>..<reserved-1027F> +1029D..1029F ; Cn # [3] <reserved-1029D>..<reserved-1029F> +102D1..102DF ; Cn # [15] <reserved-102D1>..<reserved-102DF> +102FC..102FF ; Cn # [4] <reserved-102FC>..<reserved-102FF> +10324..1032C ; Cn # [9] <reserved-10324>..<reserved-1032C> +1034B..1034F ; Cn # [5] <reserved-1034B>..<reserved-1034F> +1037B..1037F ; Cn # [5] <reserved-1037B>..<reserved-1037F> +1039E ; Cn # <reserved-1039E> +103C4..103C7 ; Cn # [4] <reserved-103C4>..<reserved-103C7> +103D6..103FF ; Cn # [42] <reserved-103D6>..<reserved-103FF> +1049E..1049F ; Cn # [2] <reserved-1049E>..<reserved-1049F> +104AA..104AF ; Cn # [6] <reserved-104AA>..<reserved-104AF> +104D4..104D7 ; Cn # [4] <reserved-104D4>..<reserved-104D7> +104FC..104FF ; Cn # [4] <reserved-104FC>..<reserved-104FF> +10528..1052F ; Cn # [8] <reserved-10528>..<reserved-1052F> +10564..1056E ; Cn # [11] <reserved-10564>..<reserved-1056E> +1057B ; Cn # <reserved-1057B> +1058B ; Cn # <reserved-1058B> +10593 ; Cn # <reserved-10593> +10596 ; Cn # <reserved-10596> +105A2 ; Cn # <reserved-105A2> +105B2 ; Cn # <reserved-105B2> +105BA ; Cn # <reserved-105BA> +105BD..105BF ; Cn # [3] <reserved-105BD>..<reserved-105BF> +105F4..105FF ; Cn # [12] <reserved-105F4>..<reserved-105FF> +10737..1073F ; Cn # [9] <reserved-10737>..<reserved-1073F> +10756..1075F ; Cn # [10] <reserved-10756>..<reserved-1075F> +10768..1077F ; Cn # [24] <reserved-10768>..<reserved-1077F> +10786 ; Cn # <reserved-10786> +107B1 ; Cn # <reserved-107B1> +107BB..107FF ; Cn # [69] <reserved-107BB>..<reserved-107FF> +10806..10807 ; Cn # [2] <reserved-10806>..<reserved-10807> +10809 ; Cn # <reserved-10809> +10836 ; Cn # <reserved-10836> +10839..1083B ; Cn # [3] <reserved-10839>..<reserved-1083B> +1083D..1083E ; Cn # [2] <reserved-1083D>..<reserved-1083E> +10856 ; Cn # <reserved-10856> +1089F..108A6 ; Cn # [8] <reserved-1089F>..<reserved-108A6> +108B0..108DF ; Cn # [48] <reserved-108B0>..<reserved-108DF> +108F3 ; Cn # <reserved-108F3> +108F6..108FA ; Cn # [5] <reserved-108F6>..<reserved-108FA> +1091C..1091E ; Cn # [3] <reserved-1091C>..<reserved-1091E> +1093A..1093E ; Cn # [5] <reserved-1093A>..<reserved-1093E> +10940..1097F ; Cn # [64] <reserved-10940>..<reserved-1097F> +109B8..109BB ; Cn # [4] <reserved-109B8>..<reserved-109BB> +109D0..109D1 ; Cn # [2] <reserved-109D0>..<reserved-109D1> +10A04 ; Cn # <reserved-10A04> +10A07..10A0B ; Cn # [5] <reserved-10A07>..<reserved-10A0B> +10A14 ; Cn # <reserved-10A14> +10A18 ; Cn # <reserved-10A18> +10A36..10A37 ; Cn # [2] <reserved-10A36>..<reserved-10A37> +10A3B..10A3E ; Cn # [4] <reserved-10A3B>..<reserved-10A3E> +10A49..10A4F ; Cn # [7] <reserved-10A49>..<reserved-10A4F> +10A59..10A5F ; Cn # [7] <reserved-10A59>..<reserved-10A5F> +10AA0..10ABF ; Cn # [32] <reserved-10AA0>..<reserved-10ABF> +10AE7..10AEA ; Cn # [4] <reserved-10AE7>..<reserved-10AEA> +10AF7..10AFF ; Cn # [9] <reserved-10AF7>..<reserved-10AFF> +10B36..10B38 ; Cn # [3] <reserved-10B36>..<reserved-10B38> +10B56..10B57 ; Cn # [2] <reserved-10B56>..<reserved-10B57> +10B73..10B77 ; Cn # [5] <reserved-10B73>..<reserved-10B77> +10B92..10B98 ; Cn # [7] <reserved-10B92>..<reserved-10B98> +10B9D..10BA8 ; Cn # [12] <reserved-10B9D>..<reserved-10BA8> +10BB0..10BFF ; Cn # [80] <reserved-10BB0>..<reserved-10BFF> +10C49..10C7F ; Cn # [55] <reserved-10C49>..<reserved-10C7F> +10CB3..10CBF ; Cn # [13] <reserved-10CB3>..<reserved-10CBF> +10CF3..10CF9 ; Cn # [7] <reserved-10CF3>..<reserved-10CF9> +10D28..10D2F ; Cn # [8] <reserved-10D28>..<reserved-10D2F> +10D3A..10D3F ; Cn # [6] <reserved-10D3A>..<reserved-10D3F> +10D66..10D68 ; Cn # [3] <reserved-10D66>..<reserved-10D68> +10D86..10D8D ; Cn # [8] <reserved-10D86>..<reserved-10D8D> +10D90..10E5F ; Cn # [208] <reserved-10D90>..<reserved-10E5F> +10E7F ; Cn # <reserved-10E7F> +10EAA ; Cn # <reserved-10EAA> +10EAE..10EAF ; Cn # [2] <reserved-10EAE>..<reserved-10EAF> +10EB2..10EC1 ; Cn # [16] <reserved-10EB2>..<reserved-10EC1> +10EC5..10EFB ; Cn # [55] <reserved-10EC5>..<reserved-10EFB> +10F28..10F2F ; Cn # [8] <reserved-10F28>..<reserved-10F2F> +10F5A..10F6F ; Cn # [22] <reserved-10F5A>..<reserved-10F6F> +10F8A..10FAF ; Cn # [38] <reserved-10F8A>..<reserved-10FAF> +10FCC..10FDF ; Cn # [20] <reserved-10FCC>..<reserved-10FDF> +10FF7..10FFF ; Cn # [9] <reserved-10FF7>..<reserved-10FFF> +1104E..11051 ; Cn # [4] <reserved-1104E>..<reserved-11051> +11076..1107E ; Cn # [9] <reserved-11076>..<reserved-1107E> +110C3..110CC ; Cn # [10] <reserved-110C3>..<reserved-110CC> +110CE..110CF ; Cn # [2] <reserved-110CE>..<reserved-110CF> +110E9..110EF ; Cn # [7] <reserved-110E9>..<reserved-110EF> +110FA..110FF ; Cn # [6] <reserved-110FA>..<reserved-110FF> +11135 ; Cn # <reserved-11135> +11148..1114F ; Cn # [8] <reserved-11148>..<reserved-1114F> +11177..1117F ; Cn # [9] <reserved-11177>..<reserved-1117F> +111E0 ; Cn # <reserved-111E0> +111F5..111FF ; Cn # [11] <reserved-111F5>..<reserved-111FF> +11212 ; Cn # <reserved-11212> +11242..1127F ; Cn # [62] <reserved-11242>..<reserved-1127F> +11287 ; Cn # <reserved-11287> +11289 ; Cn # <reserved-11289> +1128E ; Cn # <reserved-1128E> +1129E ; Cn # <reserved-1129E> +112AA..112AF ; Cn # [6] <reserved-112AA>..<reserved-112AF> +112EB..112EF ; Cn # [5] <reserved-112EB>..<reserved-112EF> +112FA..112FF ; Cn # [6] <reserved-112FA>..<reserved-112FF> +11304 ; Cn # <reserved-11304> +1130D..1130E ; Cn # [2] <reserved-1130D>..<reserved-1130E> +11311..11312 ; Cn # [2] <reserved-11311>..<reserved-11312> +11329 ; Cn # <reserved-11329> +11331 ; Cn # <reserved-11331> +11334 ; Cn # <reserved-11334> +1133A ; Cn # <reserved-1133A> +11345..11346 ; Cn # [2] <reserved-11345>..<reserved-11346> +11349..1134A ; Cn # [2] <reserved-11349>..<reserved-1134A> +1134E..1134F ; Cn # [2] <reserved-1134E>..<reserved-1134F> +11351..11356 ; Cn # [6] <reserved-11351>..<reserved-11356> +11358..1135C ; Cn # [5] <reserved-11358>..<reserved-1135C> +11364..11365 ; Cn # [2] <reserved-11364>..<reserved-11365> +1136D..1136F ; Cn # [3] <reserved-1136D>..<reserved-1136F> +11375..1137F ; Cn # [11] <reserved-11375>..<reserved-1137F> +1138A ; Cn # <reserved-1138A> +1138C..1138D ; Cn # [2] <reserved-1138C>..<reserved-1138D> +1138F ; Cn # <reserved-1138F> +113B6 ; Cn # <reserved-113B6> +113C1 ; Cn # <reserved-113C1> +113C3..113C4 ; Cn # [2] <reserved-113C3>..<reserved-113C4> +113C6 ; Cn # <reserved-113C6> +113CB ; Cn # <reserved-113CB> +113D6 ; Cn # <reserved-113D6> +113D9..113E0 ; Cn # [8] <reserved-113D9>..<reserved-113E0> +113E3..113FF ; Cn # [29] <reserved-113E3>..<reserved-113FF> +1145C ; Cn # <reserved-1145C> +11462..1147F ; Cn # [30] <reserved-11462>..<reserved-1147F> +114C8..114CF ; Cn # [8] <reserved-114C8>..<reserved-114CF> +114DA..1157F ; Cn # [166] <reserved-114DA>..<reserved-1157F> +115B6..115B7 ; Cn # [2] <reserved-115B6>..<reserved-115B7> +115DE..115FF ; Cn # [34] <reserved-115DE>..<reserved-115FF> +11645..1164F ; Cn # [11] <reserved-11645>..<reserved-1164F> +1165A..1165F ; Cn # [6] <reserved-1165A>..<reserved-1165F> +1166D..1167F ; Cn # [19] <reserved-1166D>..<reserved-1167F> +116BA..116BF ; Cn # [6] <reserved-116BA>..<reserved-116BF> +116CA..116CF ; Cn # [6] <reserved-116CA>..<reserved-116CF> +116E4..116FF ; Cn # [28] <reserved-116E4>..<reserved-116FF> +1171B..1171C ; Cn # [2] <reserved-1171B>..<reserved-1171C> +1172C..1172F ; Cn # [4] <reserved-1172C>..<reserved-1172F> +11747..117FF ; Cn # [185] <reserved-11747>..<reserved-117FF> +1183C..1189F ; Cn # [100] <reserved-1183C>..<reserved-1189F> +118F3..118FE ; Cn # [12] <reserved-118F3>..<reserved-118FE> +11907..11908 ; Cn # [2] <reserved-11907>..<reserved-11908> +1190A..1190B ; Cn # [2] <reserved-1190A>..<reserved-1190B> +11914 ; Cn # <reserved-11914> +11917 ; Cn # <reserved-11917> +11936 ; Cn # <reserved-11936> +11939..1193A ; Cn # [2] <reserved-11939>..<reserved-1193A> +11947..1194F ; Cn # [9] <reserved-11947>..<reserved-1194F> +1195A..1199F ; Cn # [70] <reserved-1195A>..<reserved-1199F> +119A8..119A9 ; Cn # [2] <reserved-119A8>..<reserved-119A9> +119D8..119D9 ; Cn # [2] <reserved-119D8>..<reserved-119D9> +119E5..119FF ; Cn # [27] <reserved-119E5>..<reserved-119FF> +11A48..11A4F ; Cn # [8] <reserved-11A48>..<reserved-11A4F> +11AA3..11AAF ; Cn # [13] <reserved-11AA3>..<reserved-11AAF> +11AF9..11AFF ; Cn # [7] <reserved-11AF9>..<reserved-11AFF> +11B0A..11BBF ; Cn # [182] <reserved-11B0A>..<reserved-11BBF> +11BE2..11BEF ; Cn # [14] <reserved-11BE2>..<reserved-11BEF> +11BFA..11BFF ; Cn # [6] <reserved-11BFA>..<reserved-11BFF> +11C09 ; Cn # <reserved-11C09> +11C37 ; Cn # <reserved-11C37> +11C46..11C4F ; Cn # [10] <reserved-11C46>..<reserved-11C4F> +11C6D..11C6F ; Cn # [3] <reserved-11C6D>..<reserved-11C6F> +11C90..11C91 ; Cn # [2] <reserved-11C90>..<reserved-11C91> +11CA8 ; Cn # <reserved-11CA8> +11CB7..11CFF ; Cn # [73] <reserved-11CB7>..<reserved-11CFF> +11D07 ; Cn # <reserved-11D07> +11D0A ; Cn # <reserved-11D0A> +11D37..11D39 ; Cn # [3] <reserved-11D37>..<reserved-11D39> +11D3B ; Cn # <reserved-11D3B> +11D3E ; Cn # <reserved-11D3E> +11D48..11D4F ; Cn # [8] <reserved-11D48>..<reserved-11D4F> +11D5A..11D5F ; Cn # [6] <reserved-11D5A>..<reserved-11D5F> +11D66 ; Cn # <reserved-11D66> +11D69 ; Cn # <reserved-11D69> +11D8F ; Cn # <reserved-11D8F> +11D92 ; Cn # <reserved-11D92> +11D99..11D9F ; Cn # [7] <reserved-11D99>..<reserved-11D9F> +11DAA..11EDF ; Cn # [310] <reserved-11DAA>..<reserved-11EDF> +11EF9..11EFF ; Cn # [7] <reserved-11EF9>..<reserved-11EFF> +11F11 ; Cn # <reserved-11F11> +11F3B..11F3D ; Cn # [3] <reserved-11F3B>..<reserved-11F3D> +11F5B..11FAF ; Cn # [85] <reserved-11F5B>..<reserved-11FAF> +11FB1..11FBF ; Cn # [15] <reserved-11FB1>..<reserved-11FBF> +11FF2..11FFE ; Cn # [13] <reserved-11FF2>..<reserved-11FFE> +1239A..123FF ; Cn # [102] <reserved-1239A>..<reserved-123FF> +1246F ; Cn # <reserved-1246F> +12475..1247F ; Cn # [11] <reserved-12475>..<reserved-1247F> +12544..12F8F ; Cn # [2636] <reserved-12544>..<reserved-12F8F> +12FF3..12FFF ; Cn # [13] <reserved-12FF3>..<reserved-12FFF> +13456..1345F ; Cn # [10] <reserved-13456>..<reserved-1345F> +143FB..143FF ; Cn # [5] <reserved-143FB>..<reserved-143FF> +14647..160FF ; Cn # [6841] <reserved-14647>..<reserved-160FF> +1613A..167FF ; Cn # [1734] <reserved-1613A>..<reserved-167FF> +16A39..16A3F ; Cn # [7] <reserved-16A39>..<reserved-16A3F> +16A5F ; Cn # <reserved-16A5F> +16A6A..16A6D ; Cn # [4] <reserved-16A6A>..<reserved-16A6D> +16ABF ; Cn # <reserved-16ABF> +16ACA..16ACF ; Cn # [6] <reserved-16ACA>..<reserved-16ACF> +16AEE..16AEF ; Cn # [2] <reserved-16AEE>..<reserved-16AEF> +16AF6..16AFF ; Cn # [10] <reserved-16AF6>..<reserved-16AFF> +16B46..16B4F ; Cn # [10] <reserved-16B46>..<reserved-16B4F> +16B5A ; Cn # <reserved-16B5A> +16B62 ; Cn # <reserved-16B62> +16B78..16B7C ; Cn # [5] <reserved-16B78>..<reserved-16B7C> +16B90..16D3F ; Cn # [432] <reserved-16B90>..<reserved-16D3F> +16D7A..16E3F ; Cn # [198] <reserved-16D7A>..<reserved-16E3F> +16E9B..16EFF ; Cn # [101] <reserved-16E9B>..<reserved-16EFF> +16F4B..16F4E ; Cn # [4] <reserved-16F4B>..<reserved-16F4E> +16F88..16F8E ; Cn # [7] <reserved-16F88>..<reserved-16F8E> +16FA0..16FDF ; Cn # [64] <reserved-16FA0>..<reserved-16FDF> +16FE5..16FEF ; Cn # [11] <reserved-16FE5>..<reserved-16FEF> +16FF2..16FFF ; Cn # [14] <reserved-16FF2>..<reserved-16FFF> +187F8..187FF ; Cn # [8] <reserved-187F8>..<reserved-187FF> +18CD6..18CFE ; Cn # [41] <reserved-18CD6>..<reserved-18CFE> +18D09..1AFEF ; Cn # [8935] <reserved-18D09>..<reserved-1AFEF> +1AFF4 ; Cn # <reserved-1AFF4> +1AFFC ; Cn # <reserved-1AFFC> +1AFFF ; Cn # <reserved-1AFFF> +1B123..1B131 ; Cn # [15] <reserved-1B123>..<reserved-1B131> +1B133..1B14F ; Cn # [29] <reserved-1B133>..<reserved-1B14F> +1B153..1B154 ; Cn # [2] <reserved-1B153>..<reserved-1B154> +1B156..1B163 ; Cn # [14] <reserved-1B156>..<reserved-1B163> +1B168..1B16F ; Cn # [8] <reserved-1B168>..<reserved-1B16F> +1B2FC..1BBFF ; Cn # [2308] <reserved-1B2FC>..<reserved-1BBFF> +1BC6B..1BC6F ; Cn # [5] <reserved-1BC6B>..<reserved-1BC6F> +1BC7D..1BC7F ; Cn # [3] <reserved-1BC7D>..<reserved-1BC7F> +1BC89..1BC8F ; Cn # [7] <reserved-1BC89>..<reserved-1BC8F> +1BC9A..1BC9B ; Cn # [2] <reserved-1BC9A>..<reserved-1BC9B> +1BCA4..1CBFF ; Cn # [3932] <reserved-1BCA4>..<reserved-1CBFF> +1CCFA..1CCFF ; Cn # [6] <reserved-1CCFA>..<reserved-1CCFF> +1CEB4..1CEFF ; Cn # [76] <reserved-1CEB4>..<reserved-1CEFF> +1CF2E..1CF2F ; Cn # [2] <reserved-1CF2E>..<reserved-1CF2F> +1CF47..1CF4F ; Cn # [9] <reserved-1CF47>..<reserved-1CF4F> +1CFC4..1CFFF ; Cn # [60] <reserved-1CFC4>..<reserved-1CFFF> +1D0F6..1D0FF ; Cn # [10] <reserved-1D0F6>..<reserved-1D0FF> +1D127..1D128 ; Cn # [2] <reserved-1D127>..<reserved-1D128> +1D1EB..1D1FF ; Cn # [21] <reserved-1D1EB>..<reserved-1D1FF> +1D246..1D2BF ; Cn # [122] <reserved-1D246>..<reserved-1D2BF> +1D2D4..1D2DF ; Cn # [12] <reserved-1D2D4>..<reserved-1D2DF> +1D2F4..1D2FF ; Cn # [12] <reserved-1D2F4>..<reserved-1D2FF> +1D357..1D35F ; Cn # [9] <reserved-1D357>..<reserved-1D35F> +1D379..1D3FF ; Cn # [135] <reserved-1D379>..<reserved-1D3FF> +1D455 ; Cn # <reserved-1D455> +1D49D ; Cn # <reserved-1D49D> +1D4A0..1D4A1 ; Cn # [2] <reserved-1D4A0>..<reserved-1D4A1> +1D4A3..1D4A4 ; Cn # [2] <reserved-1D4A3>..<reserved-1D4A4> +1D4A7..1D4A8 ; Cn # [2] <reserved-1D4A7>..<reserved-1D4A8> +1D4AD ; Cn # <reserved-1D4AD> +1D4BA ; Cn # <reserved-1D4BA> +1D4BC ; Cn # <reserved-1D4BC> +1D4C4 ; Cn # <reserved-1D4C4> +1D506 ; Cn # <reserved-1D506> +1D50B..1D50C ; Cn # [2] <reserved-1D50B>..<reserved-1D50C> +1D515 ; Cn # <reserved-1D515> +1D51D ; Cn # <reserved-1D51D> +1D53A ; Cn # <reserved-1D53A> +1D53F ; Cn # <reserved-1D53F> +1D545 ; Cn # <reserved-1D545> +1D547..1D549 ; Cn # [3] <reserved-1D547>..<reserved-1D549> +1D551 ; Cn # <reserved-1D551> +1D6A6..1D6A7 ; Cn # [2] <reserved-1D6A6>..<reserved-1D6A7> +1D7CC..1D7CD ; Cn # [2] <reserved-1D7CC>..<reserved-1D7CD> +1DA8C..1DA9A ; Cn # [15] <reserved-1DA8C>..<reserved-1DA9A> +1DAA0 ; Cn # <reserved-1DAA0> +1DAB0..1DEFF ; Cn # [1104] <reserved-1DAB0>..<reserved-1DEFF> +1DF1F..1DF24 ; Cn # [6] <reserved-1DF1F>..<reserved-1DF24> +1DF2B..1DFFF ; Cn # [213] <reserved-1DF2B>..<reserved-1DFFF> +1E007 ; Cn # <reserved-1E007> +1E019..1E01A ; Cn # [2] <reserved-1E019>..<reserved-1E01A> +1E022 ; Cn # <reserved-1E022> +1E025 ; Cn # <reserved-1E025> +1E02B..1E02F ; Cn # [5] <reserved-1E02B>..<reserved-1E02F> +1E06E..1E08E ; Cn # [33] <reserved-1E06E>..<reserved-1E08E> +1E090..1E0FF ; Cn # [112] <reserved-1E090>..<reserved-1E0FF> +1E12D..1E12F ; Cn # [3] <reserved-1E12D>..<reserved-1E12F> +1E13E..1E13F ; Cn # [2] <reserved-1E13E>..<reserved-1E13F> +1E14A..1E14D ; Cn # [4] <reserved-1E14A>..<reserved-1E14D> +1E150..1E28F ; Cn # [320] <reserved-1E150>..<reserved-1E28F> +1E2AF..1E2BF ; Cn # [17] <reserved-1E2AF>..<reserved-1E2BF> +1E2FA..1E2FE ; Cn # [5] <reserved-1E2FA>..<reserved-1E2FE> +1E300..1E4CF ; Cn # [464] <reserved-1E300>..<reserved-1E4CF> +1E4FA..1E5CF ; Cn # [214] <reserved-1E4FA>..<reserved-1E5CF> +1E5FB..1E5FE ; Cn # [4] <reserved-1E5FB>..<reserved-1E5FE> +1E600..1E7DF ; Cn # [480] <reserved-1E600>..<reserved-1E7DF> +1E7E7 ; Cn # <reserved-1E7E7> +1E7EC ; Cn # <reserved-1E7EC> +1E7EF ; Cn # <reserved-1E7EF> +1E7FF ; Cn # <reserved-1E7FF> +1E8C5..1E8C6 ; Cn # [2] <reserved-1E8C5>..<reserved-1E8C6> +1E8D7..1E8FF ; Cn # [41] <reserved-1E8D7>..<reserved-1E8FF> +1E94C..1E94F ; Cn # [4] <reserved-1E94C>..<reserved-1E94F> +1E95A..1E95D ; Cn # [4] <reserved-1E95A>..<reserved-1E95D> +1E960..1EC70 ; Cn # [785] <reserved-1E960>..<reserved-1EC70> +1ECB5..1ED00 ; Cn # [76] <reserved-1ECB5>..<reserved-1ED00> +1ED3E..1EDFF ; Cn # [194] <reserved-1ED3E>..<reserved-1EDFF> +1EE04 ; Cn # <reserved-1EE04> +1EE20 ; Cn # <reserved-1EE20> +1EE23 ; Cn # <reserved-1EE23> +1EE25..1EE26 ; Cn # [2] <reserved-1EE25>..<reserved-1EE26> +1EE28 ; Cn # <reserved-1EE28> +1EE33 ; Cn # <reserved-1EE33> +1EE38 ; Cn # <reserved-1EE38> +1EE3A ; Cn # <reserved-1EE3A> +1EE3C..1EE41 ; Cn # [6] <reserved-1EE3C>..<reserved-1EE41> +1EE43..1EE46 ; Cn # [4] <reserved-1EE43>..<reserved-1EE46> +1EE48 ; Cn # <reserved-1EE48> +1EE4A ; Cn # <reserved-1EE4A> +1EE4C ; Cn # <reserved-1EE4C> +1EE50 ; Cn # <reserved-1EE50> +1EE53 ; Cn # <reserved-1EE53> +1EE55..1EE56 ; Cn # [2] <reserved-1EE55>..<reserved-1EE56> +1EE58 ; Cn # <reserved-1EE58> +1EE5A ; Cn # <reserved-1EE5A> +1EE5C ; Cn # <reserved-1EE5C> +1EE5E ; Cn # <reserved-1EE5E> +1EE60 ; Cn # <reserved-1EE60> +1EE63 ; Cn # <reserved-1EE63> +1EE65..1EE66 ; Cn # [2] <reserved-1EE65>..<reserved-1EE66> +1EE6B ; Cn # <reserved-1EE6B> +1EE73 ; Cn # <reserved-1EE73> +1EE78 ; Cn # <reserved-1EE78> +1EE7D ; Cn # <reserved-1EE7D> +1EE7F ; Cn # <reserved-1EE7F> +1EE8A ; Cn # <reserved-1EE8A> +1EE9C..1EEA0 ; Cn # [5] <reserved-1EE9C>..<reserved-1EEA0> +1EEA4 ; Cn # <reserved-1EEA4> +1EEAA ; Cn # <reserved-1EEAA> +1EEBC..1EEEF ; Cn # [52] <reserved-1EEBC>..<reserved-1EEEF> +1EEF2..1EFFF ; Cn # [270] <reserved-1EEF2>..<reserved-1EFFF> +1F02C..1F02F ; Cn # [4] <reserved-1F02C>..<reserved-1F02F> +1F094..1F09F ; Cn # [12] <reserved-1F094>..<reserved-1F09F> +1F0AF..1F0B0 ; Cn # [2] <reserved-1F0AF>..<reserved-1F0B0> +1F0C0 ; Cn # <reserved-1F0C0> +1F0D0 ; Cn # <reserved-1F0D0> +1F0F6..1F0FF ; Cn # [10] <reserved-1F0F6>..<reserved-1F0FF> +1F1AE..1F1E5 ; Cn # [56] <reserved-1F1AE>..<reserved-1F1E5> +1F203..1F20F ; Cn # [13] <reserved-1F203>..<reserved-1F20F> +1F23C..1F23F ; Cn # [4] <reserved-1F23C>..<reserved-1F23F> +1F249..1F24F ; Cn # [7] <reserved-1F249>..<reserved-1F24F> +1F252..1F25F ; Cn # [14] <reserved-1F252>..<reserved-1F25F> +1F266..1F2FF ; Cn # [154] <reserved-1F266>..<reserved-1F2FF> +1F6D8..1F6DB ; Cn # [4] <reserved-1F6D8>..<reserved-1F6DB> +1F6ED..1F6EF ; Cn # [3] <reserved-1F6ED>..<reserved-1F6EF> +1F6FD..1F6FF ; Cn # [3] <reserved-1F6FD>..<reserved-1F6FF> +1F777..1F77A ; Cn # [4] <reserved-1F777>..<reserved-1F77A> +1F7DA..1F7DF ; Cn # [6] <reserved-1F7DA>..<reserved-1F7DF> +1F7EC..1F7EF ; Cn # [4] <reserved-1F7EC>..<reserved-1F7EF> +1F7F1..1F7FF ; Cn # [15] <reserved-1F7F1>..<reserved-1F7FF> +1F80C..1F80F ; Cn # [4] <reserved-1F80C>..<reserved-1F80F> +1F848..1F84F ; Cn # [8] <reserved-1F848>..<reserved-1F84F> +1F85A..1F85F ; Cn # [6] <reserved-1F85A>..<reserved-1F85F> +1F888..1F88F ; Cn # [8] <reserved-1F888>..<reserved-1F88F> +1F8AE..1F8AF ; Cn # [2] <reserved-1F8AE>..<reserved-1F8AF> +1F8BC..1F8BF ; Cn # [4] <reserved-1F8BC>..<reserved-1F8BF> +1F8C2..1F8FF ; Cn # [62] <reserved-1F8C2>..<reserved-1F8FF> +1FA54..1FA5F ; Cn # [12] <reserved-1FA54>..<reserved-1FA5F> +1FA6E..1FA6F ; Cn # [2] <reserved-1FA6E>..<reserved-1FA6F> +1FA7D..1FA7F ; Cn # [3] <reserved-1FA7D>..<reserved-1FA7F> +1FA8A..1FA8E ; Cn # [5] <reserved-1FA8A>..<reserved-1FA8E> +1FAC7..1FACD ; Cn # [7] <reserved-1FAC7>..<reserved-1FACD> +1FADD..1FADE ; Cn # [2] <reserved-1FADD>..<reserved-1FADE> +1FAEA..1FAEF ; Cn # [6] <reserved-1FAEA>..<reserved-1FAEF> +1FAF9..1FAFF ; Cn # [7] <reserved-1FAF9>..<reserved-1FAFF> +1FB93 ; Cn # <reserved-1FB93> +1FBFA..1FFFF ; Cn # [1030] <reserved-1FBFA>..<noncharacter-1FFFF> +2A6E0..2A6FF ; Cn # [32] <reserved-2A6E0>..<reserved-2A6FF> +2B73A..2B73F ; Cn # [6] <reserved-2B73A>..<reserved-2B73F> +2B81E..2B81F ; Cn # [2] <reserved-2B81E>..<reserved-2B81F> +2CEA2..2CEAF ; Cn # [14] <reserved-2CEA2>..<reserved-2CEAF> +2EBE1..2EBEF ; Cn # [15] <reserved-2EBE1>..<reserved-2EBEF> +2EE5E..2F7FF ; Cn # [2466] <reserved-2EE5E>..<reserved-2F7FF> +2FA1E..2FFFF ; Cn # [1506] <reserved-2FA1E>..<noncharacter-2FFFF> +3134B..3134F ; Cn # [5] <reserved-3134B>..<reserved-3134F> +323B0..E0000 ; Cn # [711761] <reserved-323B0>..<reserved-E0000> +E0002..E001F ; Cn # [30] <reserved-E0002>..<reserved-E001F> +E0080..E00FF ; Cn # [128] <reserved-E0080>..<reserved-E00FF> +E01F0..EFFFF ; Cn # [65040] <reserved-E01F0>..<noncharacter-EFFFF> +FFFFE..FFFFF ; Cn # [2] <noncharacter-FFFFE>..<noncharacter-FFFFF> +10FFFE..10FFFF; Cn # [2] <noncharacter-10FFFE>..<noncharacter-10FFFF> + +# Total code points: 819533 + +# ================================================ + +# General_Category=Uppercase_Letter + +0041..005A ; Lu # [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +00C0..00D6 ; Lu # [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00DE ; Lu # [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN +0100 ; Lu # LATIN CAPITAL LETTER A WITH MACRON +0102 ; Lu # LATIN CAPITAL LETTER A WITH BREVE +0104 ; Lu # LATIN CAPITAL LETTER A WITH OGONEK +0106 ; Lu # LATIN CAPITAL LETTER C WITH ACUTE +0108 ; Lu # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A ; Lu # LATIN CAPITAL LETTER C WITH DOT ABOVE +010C ; Lu # LATIN CAPITAL LETTER C WITH CARON +010E ; Lu # LATIN CAPITAL LETTER D WITH CARON +0110 ; Lu # LATIN CAPITAL LETTER D WITH STROKE +0112 ; Lu # LATIN CAPITAL LETTER E WITH MACRON +0114 ; Lu # LATIN CAPITAL LETTER E WITH BREVE +0116 ; Lu # LATIN CAPITAL LETTER E WITH DOT ABOVE +0118 ; Lu # LATIN CAPITAL LETTER E WITH OGONEK +011A ; Lu # LATIN CAPITAL LETTER E WITH CARON +011C ; Lu # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E ; Lu # LATIN CAPITAL LETTER G WITH BREVE +0120 ; Lu # LATIN CAPITAL LETTER G WITH DOT ABOVE +0122 ; Lu # LATIN CAPITAL LETTER G WITH CEDILLA +0124 ; Lu # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126 ; Lu # LATIN CAPITAL LETTER H WITH STROKE +0128 ; Lu # LATIN CAPITAL LETTER I WITH TILDE +012A ; Lu # LATIN CAPITAL LETTER I WITH MACRON +012C ; Lu # LATIN CAPITAL LETTER I WITH BREVE +012E ; Lu # LATIN CAPITAL LETTER I WITH OGONEK +0130 ; Lu # LATIN CAPITAL LETTER I WITH DOT ABOVE +0132 ; Lu # LATIN CAPITAL LIGATURE IJ +0134 ; Lu # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136 ; Lu # LATIN CAPITAL LETTER K WITH CEDILLA +0139 ; Lu # LATIN CAPITAL LETTER L WITH ACUTE +013B ; Lu # LATIN CAPITAL LETTER L WITH CEDILLA +013D ; Lu # LATIN CAPITAL LETTER L WITH CARON +013F ; Lu # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141 ; Lu # LATIN CAPITAL LETTER L WITH STROKE +0143 ; Lu # LATIN CAPITAL LETTER N WITH ACUTE +0145 ; Lu # LATIN CAPITAL LETTER N WITH CEDILLA +0147 ; Lu # LATIN CAPITAL LETTER N WITH CARON +014A ; Lu # LATIN CAPITAL LETTER ENG +014C ; Lu # LATIN CAPITAL LETTER O WITH MACRON +014E ; Lu # LATIN CAPITAL LETTER O WITH BREVE +0150 ; Lu # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152 ; Lu # LATIN CAPITAL LIGATURE OE +0154 ; Lu # LATIN CAPITAL LETTER R WITH ACUTE +0156 ; Lu # LATIN CAPITAL LETTER R WITH CEDILLA +0158 ; Lu # LATIN CAPITAL LETTER R WITH CARON +015A ; Lu # LATIN CAPITAL LETTER S WITH ACUTE +015C ; Lu # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E ; Lu # LATIN CAPITAL LETTER S WITH CEDILLA +0160 ; Lu # LATIN CAPITAL LETTER S WITH CARON +0162 ; Lu # LATIN CAPITAL LETTER T WITH CEDILLA +0164 ; Lu # LATIN CAPITAL LETTER T WITH CARON +0166 ; Lu # LATIN CAPITAL LETTER T WITH STROKE +0168 ; Lu # LATIN CAPITAL LETTER U WITH TILDE +016A ; Lu # LATIN CAPITAL LETTER U WITH MACRON +016C ; Lu # LATIN CAPITAL LETTER U WITH BREVE +016E ; Lu # LATIN CAPITAL LETTER U WITH RING ABOVE +0170 ; Lu # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172 ; Lu # LATIN CAPITAL LETTER U WITH OGONEK +0174 ; Lu # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176 ; Lu # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178..0179 ; Lu # [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE +017B ; Lu # LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D ; Lu # LATIN CAPITAL LETTER Z WITH CARON +0181..0182 ; Lu # [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR +0184 ; Lu # LATIN CAPITAL LETTER TONE SIX +0186..0187 ; Lu # [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK +0189..018B ; Lu # [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR +018E..0191 ; Lu # [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK +0193..0194 ; Lu # [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA +0196..0198 ; Lu # [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK +019C..019D ; Lu # [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK +019F..01A0 ; Lu # [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN +01A2 ; Lu # LATIN CAPITAL LETTER OI +01A4 ; Lu # LATIN CAPITAL LETTER P WITH HOOK +01A6..01A7 ; Lu # [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO +01A9 ; Lu # LATIN CAPITAL LETTER ESH +01AC ; Lu # LATIN CAPITAL LETTER T WITH HOOK +01AE..01AF ; Lu # [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN +01B1..01B3 ; Lu # [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK +01B5 ; Lu # LATIN CAPITAL LETTER Z WITH STROKE +01B7..01B8 ; Lu # [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED +01BC ; Lu # LATIN CAPITAL LETTER TONE FIVE +01C4 ; Lu # LATIN CAPITAL LETTER DZ WITH CARON +01C7 ; Lu # LATIN CAPITAL LETTER LJ +01CA ; Lu # LATIN CAPITAL LETTER NJ +01CD ; Lu # LATIN CAPITAL LETTER A WITH CARON +01CF ; Lu # LATIN CAPITAL LETTER I WITH CARON +01D1 ; Lu # LATIN CAPITAL LETTER O WITH CARON +01D3 ; Lu # LATIN CAPITAL LETTER U WITH CARON +01D5 ; Lu # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7 ; Lu # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9 ; Lu # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB ; Lu # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE ; Lu # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0 ; Lu # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2 ; Lu # LATIN CAPITAL LETTER AE WITH MACRON +01E4 ; Lu # LATIN CAPITAL LETTER G WITH STROKE +01E6 ; Lu # LATIN CAPITAL LETTER G WITH CARON +01E8 ; Lu # LATIN CAPITAL LETTER K WITH CARON +01EA ; Lu # LATIN CAPITAL LETTER O WITH OGONEK +01EC ; Lu # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE ; Lu # LATIN CAPITAL LETTER EZH WITH CARON +01F1 ; Lu # LATIN CAPITAL LETTER DZ +01F4 ; Lu # LATIN CAPITAL LETTER G WITH ACUTE +01F6..01F8 ; Lu # [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE +01FA ; Lu # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC ; Lu # LATIN CAPITAL LETTER AE WITH ACUTE +01FE ; Lu # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200 ; Lu # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202 ; Lu # LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204 ; Lu # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206 ; Lu # LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208 ; Lu # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A ; Lu # LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C ; Lu # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E ; Lu # LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210 ; Lu # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212 ; Lu # LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214 ; Lu # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216 ; Lu # LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218 ; Lu # LATIN CAPITAL LETTER S WITH COMMA BELOW +021A ; Lu # LATIN CAPITAL LETTER T WITH COMMA BELOW +021C ; Lu # LATIN CAPITAL LETTER YOGH +021E ; Lu # LATIN CAPITAL LETTER H WITH CARON +0220 ; Lu # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222 ; Lu # LATIN CAPITAL LETTER OU +0224 ; Lu # LATIN CAPITAL LETTER Z WITH HOOK +0226 ; Lu # LATIN CAPITAL LETTER A WITH DOT ABOVE +0228 ; Lu # LATIN CAPITAL LETTER E WITH CEDILLA +022A ; Lu # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C ; Lu # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E ; Lu # LATIN CAPITAL LETTER O WITH DOT ABOVE +0230 ; Lu # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232 ; Lu # LATIN CAPITAL LETTER Y WITH MACRON +023A..023B ; Lu # [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE +023D..023E ; Lu # [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241 ; Lu # LATIN CAPITAL LETTER GLOTTAL STOP +0243..0246 ; Lu # [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE +0248 ; Lu # LATIN CAPITAL LETTER J WITH STROKE +024A ; Lu # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C ; Lu # LATIN CAPITAL LETTER R WITH STROKE +024E ; Lu # LATIN CAPITAL LETTER Y WITH STROKE +0370 ; Lu # GREEK CAPITAL LETTER HETA +0372 ; Lu # GREEK CAPITAL LETTER ARCHAIC SAMPI +0376 ; Lu # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037F ; Lu # GREEK CAPITAL LETTER YOT +0386 ; Lu # GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Lu # [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Lu # GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..038F ; Lu # [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS +0391..03A1 ; Lu # [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO +03A3..03AB ; Lu # [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03CF ; Lu # GREEK CAPITAL KAI SYMBOL +03D2..03D4 ; Lu # [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03D8 ; Lu # GREEK LETTER ARCHAIC KOPPA +03DA ; Lu # GREEK LETTER STIGMA +03DC ; Lu # GREEK LETTER DIGAMMA +03DE ; Lu # GREEK LETTER KOPPA +03E0 ; Lu # GREEK LETTER SAMPI +03E2 ; Lu # COPTIC CAPITAL LETTER SHEI +03E4 ; Lu # COPTIC CAPITAL LETTER FEI +03E6 ; Lu # COPTIC CAPITAL LETTER KHEI +03E8 ; Lu # COPTIC CAPITAL LETTER HORI +03EA ; Lu # COPTIC CAPITAL LETTER GANGIA +03EC ; Lu # COPTIC CAPITAL LETTER SHIMA +03EE ; Lu # COPTIC CAPITAL LETTER DEI +03F4 ; Lu # GREEK CAPITAL THETA SYMBOL +03F7 ; Lu # GREEK CAPITAL LETTER SHO +03F9..03FA ; Lu # [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN +03FD..042F ; Lu # [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA +0460 ; Lu # CYRILLIC CAPITAL LETTER OMEGA +0462 ; Lu # CYRILLIC CAPITAL LETTER YAT +0464 ; Lu # CYRILLIC CAPITAL LETTER IOTIFIED E +0466 ; Lu # CYRILLIC CAPITAL LETTER LITTLE YUS +0468 ; Lu # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A ; Lu # CYRILLIC CAPITAL LETTER BIG YUS +046C ; Lu # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E ; Lu # CYRILLIC CAPITAL LETTER KSI +0470 ; Lu # CYRILLIC CAPITAL LETTER PSI +0472 ; Lu # CYRILLIC CAPITAL LETTER FITA +0474 ; Lu # CYRILLIC CAPITAL LETTER IZHITSA +0476 ; Lu # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478 ; Lu # CYRILLIC CAPITAL LETTER UK +047A ; Lu # CYRILLIC CAPITAL LETTER ROUND OMEGA +047C ; Lu # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E ; Lu # CYRILLIC CAPITAL LETTER OT +0480 ; Lu # CYRILLIC CAPITAL LETTER KOPPA +048A ; Lu # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C ; Lu # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E ; Lu # CYRILLIC CAPITAL LETTER ER WITH TICK +0490 ; Lu # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492 ; Lu # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494 ; Lu # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496 ; Lu # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498 ; Lu # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A ; Lu # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C ; Lu # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E ; Lu # CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0 ; Lu # CYRILLIC CAPITAL LETTER BASHKIR KA +04A2 ; Lu # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4 ; Lu # CYRILLIC CAPITAL LIGATURE EN GHE +04A6 ; Lu # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8 ; Lu # CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA ; Lu # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC ; Lu # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE ; Lu # CYRILLIC CAPITAL LETTER STRAIGHT U +04B0 ; Lu # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2 ; Lu # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4 ; Lu # CYRILLIC CAPITAL LIGATURE TE TSE +04B6 ; Lu # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8 ; Lu # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA ; Lu # CYRILLIC CAPITAL LETTER SHHA +04BC ; Lu # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE ; Lu # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0..04C1 ; Lu # [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3 ; Lu # CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5 ; Lu # CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7 ; Lu # CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9 ; Lu # CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB ; Lu # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD ; Lu # CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0 ; Lu # CYRILLIC CAPITAL LETTER A WITH BREVE +04D2 ; Lu # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4 ; Lu # CYRILLIC CAPITAL LIGATURE A IE +04D6 ; Lu # CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8 ; Lu # CYRILLIC CAPITAL LETTER SCHWA +04DA ; Lu # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC ; Lu # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE ; Lu # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0 ; Lu # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2 ; Lu # CYRILLIC CAPITAL LETTER I WITH MACRON +04E4 ; Lu # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6 ; Lu # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8 ; Lu # CYRILLIC CAPITAL LETTER BARRED O +04EA ; Lu # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC ; Lu # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE ; Lu # CYRILLIC CAPITAL LETTER U WITH MACRON +04F0 ; Lu # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2 ; Lu # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4 ; Lu # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6 ; Lu # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8 ; Lu # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA ; Lu # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC ; Lu # CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE ; Lu # CYRILLIC CAPITAL LETTER HA WITH STROKE +0500 ; Lu # CYRILLIC CAPITAL LETTER KOMI DE +0502 ; Lu # CYRILLIC CAPITAL LETTER KOMI DJE +0504 ; Lu # CYRILLIC CAPITAL LETTER KOMI ZJE +0506 ; Lu # CYRILLIC CAPITAL LETTER KOMI DZJE +0508 ; Lu # CYRILLIC CAPITAL LETTER KOMI LJE +050A ; Lu # CYRILLIC CAPITAL LETTER KOMI NJE +050C ; Lu # CYRILLIC CAPITAL LETTER KOMI SJE +050E ; Lu # CYRILLIC CAPITAL LETTER KOMI TJE +0510 ; Lu # CYRILLIC CAPITAL LETTER REVERSED ZE +0512 ; Lu # CYRILLIC CAPITAL LETTER EL WITH HOOK +0514 ; Lu # CYRILLIC CAPITAL LETTER LHA +0516 ; Lu # CYRILLIC CAPITAL LETTER RHA +0518 ; Lu # CYRILLIC CAPITAL LETTER YAE +051A ; Lu # CYRILLIC CAPITAL LETTER QA +051C ; Lu # CYRILLIC CAPITAL LETTER WE +051E ; Lu # CYRILLIC CAPITAL LETTER ALEUT KA +0520 ; Lu # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522 ; Lu # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524 ; Lu # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526 ; Lu # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528 ; Lu # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A ; Lu # CYRILLIC CAPITAL LETTER DZZHE +052C ; Lu # CYRILLIC CAPITAL LETTER DCHE +052E ; Lu # CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0531..0556 ; Lu # [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +10A0..10C5 ; Lu # [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Lu # GEORGIAN CAPITAL LETTER YN +10CD ; Lu # GEORGIAN CAPITAL LETTER AEN +13A0..13F5 ; Lu # [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +1C89 ; Lu # CYRILLIC CAPITAL LETTER TJE +1C90..1CBA ; Lu # [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Lu # [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1E00 ; Lu # LATIN CAPITAL LETTER A WITH RING BELOW +1E02 ; Lu # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04 ; Lu # LATIN CAPITAL LETTER B WITH DOT BELOW +1E06 ; Lu # LATIN CAPITAL LETTER B WITH LINE BELOW +1E08 ; Lu # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A ; Lu # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C ; Lu # LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E ; Lu # LATIN CAPITAL LETTER D WITH LINE BELOW +1E10 ; Lu # LATIN CAPITAL LETTER D WITH CEDILLA +1E12 ; Lu # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14 ; Lu # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16 ; Lu # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18 ; Lu # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A ; Lu # LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C ; Lu # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E ; Lu # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20 ; Lu # LATIN CAPITAL LETTER G WITH MACRON +1E22 ; Lu # LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24 ; Lu # LATIN CAPITAL LETTER H WITH DOT BELOW +1E26 ; Lu # LATIN CAPITAL LETTER H WITH DIAERESIS +1E28 ; Lu # LATIN CAPITAL LETTER H WITH CEDILLA +1E2A ; Lu # LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C ; Lu # LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E ; Lu # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30 ; Lu # LATIN CAPITAL LETTER K WITH ACUTE +1E32 ; Lu # LATIN CAPITAL LETTER K WITH DOT BELOW +1E34 ; Lu # LATIN CAPITAL LETTER K WITH LINE BELOW +1E36 ; Lu # LATIN CAPITAL LETTER L WITH DOT BELOW +1E38 ; Lu # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A ; Lu # LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C ; Lu # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E ; Lu # LATIN CAPITAL LETTER M WITH ACUTE +1E40 ; Lu # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42 ; Lu # LATIN CAPITAL LETTER M WITH DOT BELOW +1E44 ; Lu # LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46 ; Lu # LATIN CAPITAL LETTER N WITH DOT BELOW +1E48 ; Lu # LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A ; Lu # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C ; Lu # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E ; Lu # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50 ; Lu # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52 ; Lu # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54 ; Lu # LATIN CAPITAL LETTER P WITH ACUTE +1E56 ; Lu # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58 ; Lu # LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A ; Lu # LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C ; Lu # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E ; Lu # LATIN CAPITAL LETTER R WITH LINE BELOW +1E60 ; Lu # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62 ; Lu # LATIN CAPITAL LETTER S WITH DOT BELOW +1E64 ; Lu # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66 ; Lu # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68 ; Lu # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A ; Lu # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C ; Lu # LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E ; Lu # LATIN CAPITAL LETTER T WITH LINE BELOW +1E70 ; Lu # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72 ; Lu # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74 ; Lu # LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76 ; Lu # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78 ; Lu # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A ; Lu # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C ; Lu # LATIN CAPITAL LETTER V WITH TILDE +1E7E ; Lu # LATIN CAPITAL LETTER V WITH DOT BELOW +1E80 ; Lu # LATIN CAPITAL LETTER W WITH GRAVE +1E82 ; Lu # LATIN CAPITAL LETTER W WITH ACUTE +1E84 ; Lu # LATIN CAPITAL LETTER W WITH DIAERESIS +1E86 ; Lu # LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88 ; Lu # LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A ; Lu # LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C ; Lu # LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E ; Lu # LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90 ; Lu # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92 ; Lu # LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94 ; Lu # LATIN CAPITAL LETTER Z WITH LINE BELOW +1E9E ; Lu # LATIN CAPITAL LETTER SHARP S +1EA0 ; Lu # LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2 ; Lu # LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4 ; Lu # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6 ; Lu # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8 ; Lu # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA ; Lu # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC ; Lu # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE ; Lu # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0 ; Lu # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2 ; Lu # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4 ; Lu # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6 ; Lu # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8 ; Lu # LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA ; Lu # LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC ; Lu # LATIN CAPITAL LETTER E WITH TILDE +1EBE ; Lu # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0 ; Lu # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2 ; Lu # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4 ; Lu # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6 ; Lu # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8 ; Lu # LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA ; Lu # LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC ; Lu # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE ; Lu # LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0 ; Lu # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2 ; Lu # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4 ; Lu # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6 ; Lu # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8 ; Lu # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA ; Lu # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC ; Lu # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE ; Lu # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0 ; Lu # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2 ; Lu # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4 ; Lu # LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6 ; Lu # LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8 ; Lu # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA ; Lu # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC ; Lu # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE ; Lu # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0 ; Lu # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2 ; Lu # LATIN CAPITAL LETTER Y WITH GRAVE +1EF4 ; Lu # LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6 ; Lu # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8 ; Lu # LATIN CAPITAL LETTER Y WITH TILDE +1EFA ; Lu # LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC ; Lu # LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE ; Lu # LATIN CAPITAL LETTER Y WITH LOOP +1F08..1F0F ; Lu # [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18..1F1D ; Lu # [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28..1F2F ; Lu # [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38..1F3F ; Lu # [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48..1F4D ; Lu # [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F59 ; Lu # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Lu # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Lu # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F ; Lu # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68..1F6F ; Lu # [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1FB8..1FBB ; Lu # [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA +1FC8..1FCB ; Lu # [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA +1FD8..1FDB ; Lu # [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE8..1FEC ; Lu # [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF8..1FFB ; Lu # [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA +2102 ; Lu # DOUBLE-STRUCK CAPITAL C +2107 ; Lu # EULER CONSTANT +210B..210D ; Lu # [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H +2110..2112 ; Lu # [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L +2115 ; Lu # DOUBLE-STRUCK CAPITAL N +2119..211D ; Lu # [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; Lu # DOUBLE-STRUCK CAPITAL Z +2126 ; Lu # OHM SIGN +2128 ; Lu # BLACK-LETTER CAPITAL Z +212A..212D ; Lu # [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +2130..2133 ; Lu # [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M +213E..213F ; Lu # [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI +2145 ; Lu # DOUBLE-STRUCK ITALIC CAPITAL D +2183 ; Lu # ROMAN NUMERAL REVERSED ONE HUNDRED +2C00..2C2F ; Lu # [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +2C60 ; Lu # LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62..2C64 ; Lu # [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL +2C67 ; Lu # LATIN CAPITAL LETTER H WITH DESCENDER +2C69 ; Lu # LATIN CAPITAL LETTER K WITH DESCENDER +2C6B ; Lu # LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D..2C70 ; Lu # [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA +2C72 ; Lu # LATIN CAPITAL LETTER W WITH HOOK +2C75 ; Lu # LATIN CAPITAL LETTER HALF H +2C7E..2C80 ; Lu # [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA +2C82 ; Lu # COPTIC CAPITAL LETTER VIDA +2C84 ; Lu # COPTIC CAPITAL LETTER GAMMA +2C86 ; Lu # COPTIC CAPITAL LETTER DALDA +2C88 ; Lu # COPTIC CAPITAL LETTER EIE +2C8A ; Lu # COPTIC CAPITAL LETTER SOU +2C8C ; Lu # COPTIC CAPITAL LETTER ZATA +2C8E ; Lu # COPTIC CAPITAL LETTER HATE +2C90 ; Lu # COPTIC CAPITAL LETTER THETHE +2C92 ; Lu # COPTIC CAPITAL LETTER IAUDA +2C94 ; Lu # COPTIC CAPITAL LETTER KAPA +2C96 ; Lu # COPTIC CAPITAL LETTER LAULA +2C98 ; Lu # COPTIC CAPITAL LETTER MI +2C9A ; Lu # COPTIC CAPITAL LETTER NI +2C9C ; Lu # COPTIC CAPITAL LETTER KSI +2C9E ; Lu # COPTIC CAPITAL LETTER O +2CA0 ; Lu # COPTIC CAPITAL LETTER PI +2CA2 ; Lu # COPTIC CAPITAL LETTER RO +2CA4 ; Lu # COPTIC CAPITAL LETTER SIMA +2CA6 ; Lu # COPTIC CAPITAL LETTER TAU +2CA8 ; Lu # COPTIC CAPITAL LETTER UA +2CAA ; Lu # COPTIC CAPITAL LETTER FI +2CAC ; Lu # COPTIC CAPITAL LETTER KHI +2CAE ; Lu # COPTIC CAPITAL LETTER PSI +2CB0 ; Lu # COPTIC CAPITAL LETTER OOU +2CB2 ; Lu # COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6 ; Lu # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8 ; Lu # COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA ; Lu # COPTIC CAPITAL LETTER DIALECT-P NI +2CBC ; Lu # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE ; Lu # COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0 ; Lu # COPTIC CAPITAL LETTER SAMPI +2CC2 ; Lu # COPTIC CAPITAL LETTER CROSSED SHEI +2CC4 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8 ; Lu # COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA ; Lu # COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC ; Lu # COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE ; Lu # COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0 ; Lu # COPTIC CAPITAL LETTER L-SHAPED HA +2CD2 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8 ; Lu # COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA ; Lu # COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC ; Lu # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE ; Lu # COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0 ; Lu # COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2 ; Lu # COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB ; Lu # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED ; Lu # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2 ; Lu # COPTIC CAPITAL LETTER BOHAIRIC KHEI +A640 ; Lu # CYRILLIC CAPITAL LETTER ZEMLYA +A642 ; Lu # CYRILLIC CAPITAL LETTER DZELO +A644 ; Lu # CYRILLIC CAPITAL LETTER REVERSED DZE +A646 ; Lu # CYRILLIC CAPITAL LETTER IOTA +A648 ; Lu # CYRILLIC CAPITAL LETTER DJERV +A64A ; Lu # CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C ; Lu # CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E ; Lu # CYRILLIC CAPITAL LETTER NEUTRAL YER +A650 ; Lu # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652 ; Lu # CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654 ; Lu # CYRILLIC CAPITAL LETTER REVERSED YU +A656 ; Lu # CYRILLIC CAPITAL LETTER IOTIFIED A +A658 ; Lu # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A ; Lu # CYRILLIC CAPITAL LETTER BLENDED YUS +A65C ; Lu # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E ; Lu # CYRILLIC CAPITAL LETTER YN +A660 ; Lu # CYRILLIC CAPITAL LETTER REVERSED TSE +A662 ; Lu # CYRILLIC CAPITAL LETTER SOFT DE +A664 ; Lu # CYRILLIC CAPITAL LETTER SOFT EL +A666 ; Lu # CYRILLIC CAPITAL LETTER SOFT EM +A668 ; Lu # CYRILLIC CAPITAL LETTER MONOCULAR O +A66A ; Lu # CYRILLIC CAPITAL LETTER BINOCULAR O +A66C ; Lu # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680 ; Lu # CYRILLIC CAPITAL LETTER DWE +A682 ; Lu # CYRILLIC CAPITAL LETTER DZWE +A684 ; Lu # CYRILLIC CAPITAL LETTER ZHWE +A686 ; Lu # CYRILLIC CAPITAL LETTER CCHE +A688 ; Lu # CYRILLIC CAPITAL LETTER DZZE +A68A ; Lu # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C ; Lu # CYRILLIC CAPITAL LETTER TWE +A68E ; Lu # CYRILLIC CAPITAL LETTER TSWE +A690 ; Lu # CYRILLIC CAPITAL LETTER TSSE +A692 ; Lu # CYRILLIC CAPITAL LETTER TCHE +A694 ; Lu # CYRILLIC CAPITAL LETTER HWE +A696 ; Lu # CYRILLIC CAPITAL LETTER SHWE +A698 ; Lu # CYRILLIC CAPITAL LETTER DOUBLE O +A69A ; Lu # CYRILLIC CAPITAL LETTER CROSSED O +A722 ; Lu # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724 ; Lu # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726 ; Lu # LATIN CAPITAL LETTER HENG +A728 ; Lu # LATIN CAPITAL LETTER TZ +A72A ; Lu # LATIN CAPITAL LETTER TRESILLO +A72C ; Lu # LATIN CAPITAL LETTER CUATRILLO +A72E ; Lu # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732 ; Lu # LATIN CAPITAL LETTER AA +A734 ; Lu # LATIN CAPITAL LETTER AO +A736 ; Lu # LATIN CAPITAL LETTER AU +A738 ; Lu # LATIN CAPITAL LETTER AV +A73A ; Lu # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C ; Lu # LATIN CAPITAL LETTER AY +A73E ; Lu # LATIN CAPITAL LETTER REVERSED C WITH DOT +A740 ; Lu # LATIN CAPITAL LETTER K WITH STROKE +A742 ; Lu # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744 ; Lu # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746 ; Lu # LATIN CAPITAL LETTER BROKEN L +A748 ; Lu # LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A ; Lu # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C ; Lu # LATIN CAPITAL LETTER O WITH LOOP +A74E ; Lu # LATIN CAPITAL LETTER OO +A750 ; Lu # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752 ; Lu # LATIN CAPITAL LETTER P WITH FLOURISH +A754 ; Lu # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756 ; Lu # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758 ; Lu # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A ; Lu # LATIN CAPITAL LETTER R ROTUNDA +A75C ; Lu # LATIN CAPITAL LETTER RUM ROTUNDA +A75E ; Lu # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760 ; Lu # LATIN CAPITAL LETTER VY +A762 ; Lu # LATIN CAPITAL LETTER VISIGOTHIC Z +A764 ; Lu # LATIN CAPITAL LETTER THORN WITH STROKE +A766 ; Lu # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768 ; Lu # LATIN CAPITAL LETTER VEND +A76A ; Lu # LATIN CAPITAL LETTER ET +A76C ; Lu # LATIN CAPITAL LETTER IS +A76E ; Lu # LATIN CAPITAL LETTER CON +A779 ; Lu # LATIN CAPITAL LETTER INSULAR D +A77B ; Lu # LATIN CAPITAL LETTER INSULAR F +A77D..A77E ; Lu # [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G +A780 ; Lu # LATIN CAPITAL LETTER TURNED L +A782 ; Lu # LATIN CAPITAL LETTER INSULAR R +A784 ; Lu # LATIN CAPITAL LETTER INSULAR S +A786 ; Lu # LATIN CAPITAL LETTER INSULAR T +A78B ; Lu # LATIN CAPITAL LETTER SALTILLO +A78D ; Lu # LATIN CAPITAL LETTER TURNED H +A790 ; Lu # LATIN CAPITAL LETTER N WITH DESCENDER +A792 ; Lu # LATIN CAPITAL LETTER C WITH BAR +A796 ; Lu # LATIN CAPITAL LETTER B WITH FLOURISH +A798 ; Lu # LATIN CAPITAL LETTER F WITH STROKE +A79A ; Lu # LATIN CAPITAL LETTER VOLAPUK AE +A79C ; Lu # LATIN CAPITAL LETTER VOLAPUK OE +A79E ; Lu # LATIN CAPITAL LETTER VOLAPUK UE +A7A0 ; Lu # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2 ; Lu # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4 ; Lu # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6 ; Lu # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8 ; Lu # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA..A7AE ; Lu # [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0..A7B4 ; Lu # [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA +A7B6 ; Lu # LATIN CAPITAL LETTER OMEGA +A7B8 ; Lu # LATIN CAPITAL LETTER U WITH STROKE +A7BA ; Lu # LATIN CAPITAL LETTER GLOTTAL A +A7BC ; Lu # LATIN CAPITAL LETTER GLOTTAL I +A7BE ; Lu # LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Lu # LATIN CAPITAL LETTER OLD POLISH O +A7C2 ; Lu # LATIN CAPITAL LETTER ANGLICANA W +A7C4..A7C7 ; Lu # [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +A7C9 ; Lu # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Lu # [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7D0 ; Lu # LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; Lu # LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Lu # LATIN CAPITAL LETTER SIGMOID S +A7DA ; Lu # LATIN CAPITAL LETTER LAMBDA +A7DC ; Lu # LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F5 ; Lu # LATIN CAPITAL LETTER REVERSED HALF H +FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +10400..10427 ; Lu # [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW +104B0..104D3 ; Lu # [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Lu # [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Lu # [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Lu # [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Lu # [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10C80..10CB2 ; Lu # [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Lu # [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +118A0..118BF ; Lu # [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO +16E40..16E5F ; Lu # [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +1D400..1D419 ; Lu # [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z +1D434..1D44D ; Lu # [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z +1D468..1D481 ; Lu # [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z +1D49C ; Lu # MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Lu # [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Lu # MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Lu # [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Lu # [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B5 ; Lu # [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z +1D4D0..1D4E9 ; Lu # [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D504..1D505 ; Lu # [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Lu # [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Lu # [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Lu # [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D538..1D539 ; Lu # [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Lu # [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Lu # [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Lu # MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Lu # [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D56C..1D585 ; Lu # [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D5A0..1D5B9 ; Lu # [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z +1D5D4..1D5ED ; Lu # [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D608..1D621 ; Lu # [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D63C..1D655 ; Lu # [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D670..1D689 ; Lu # [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z +1D6A8..1D6C0 ; Lu # [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6E2..1D6FA ; Lu # [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA +1D71C..1D734 ; Lu # [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D756..1D76E ; Lu # [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D790..1D7A8 ; Lu # [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7CA ; Lu # MATHEMATICAL BOLD CAPITAL DIGAMMA +1E900..1E921 ; Lu # [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA + +# Total code points: 1858 + +# ================================================ + +# General_Category=Lowercase_Letter + +0061..007A ; Ll # [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00B5 ; Ll # MICRO SIGN +00DF..00F6 ; Ll # [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS +00F8..00FF ; Ll # [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS +0101 ; Ll # LATIN SMALL LETTER A WITH MACRON +0103 ; Ll # LATIN SMALL LETTER A WITH BREVE +0105 ; Ll # LATIN SMALL LETTER A WITH OGONEK +0107 ; Ll # LATIN SMALL LETTER C WITH ACUTE +0109 ; Ll # LATIN SMALL LETTER C WITH CIRCUMFLEX +010B ; Ll # LATIN SMALL LETTER C WITH DOT ABOVE +010D ; Ll # LATIN SMALL LETTER C WITH CARON +010F ; Ll # LATIN SMALL LETTER D WITH CARON +0111 ; Ll # LATIN SMALL LETTER D WITH STROKE +0113 ; Ll # LATIN SMALL LETTER E WITH MACRON +0115 ; Ll # LATIN SMALL LETTER E WITH BREVE +0117 ; Ll # LATIN SMALL LETTER E WITH DOT ABOVE +0119 ; Ll # LATIN SMALL LETTER E WITH OGONEK +011B ; Ll # LATIN SMALL LETTER E WITH CARON +011D ; Ll # LATIN SMALL LETTER G WITH CIRCUMFLEX +011F ; Ll # LATIN SMALL LETTER G WITH BREVE +0121 ; Ll # LATIN SMALL LETTER G WITH DOT ABOVE +0123 ; Ll # LATIN SMALL LETTER G WITH CEDILLA +0125 ; Ll # LATIN SMALL LETTER H WITH CIRCUMFLEX +0127 ; Ll # LATIN SMALL LETTER H WITH STROKE +0129 ; Ll # LATIN SMALL LETTER I WITH TILDE +012B ; Ll # LATIN SMALL LETTER I WITH MACRON +012D ; Ll # LATIN SMALL LETTER I WITH BREVE +012F ; Ll # LATIN SMALL LETTER I WITH OGONEK +0131 ; Ll # LATIN SMALL LETTER DOTLESS I +0133 ; Ll # LATIN SMALL LIGATURE IJ +0135 ; Ll # LATIN SMALL LETTER J WITH CIRCUMFLEX +0137..0138 ; Ll # [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA +013A ; Ll # LATIN SMALL LETTER L WITH ACUTE +013C ; Ll # LATIN SMALL LETTER L WITH CEDILLA +013E ; Ll # LATIN SMALL LETTER L WITH CARON +0140 ; Ll # LATIN SMALL LETTER L WITH MIDDLE DOT +0142 ; Ll # LATIN SMALL LETTER L WITH STROKE +0144 ; Ll # LATIN SMALL LETTER N WITH ACUTE +0146 ; Ll # LATIN SMALL LETTER N WITH CEDILLA +0148..0149 ; Ll # [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014B ; Ll # LATIN SMALL LETTER ENG +014D ; Ll # LATIN SMALL LETTER O WITH MACRON +014F ; Ll # LATIN SMALL LETTER O WITH BREVE +0151 ; Ll # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0153 ; Ll # LATIN SMALL LIGATURE OE +0155 ; Ll # LATIN SMALL LETTER R WITH ACUTE +0157 ; Ll # LATIN SMALL LETTER R WITH CEDILLA +0159 ; Ll # LATIN SMALL LETTER R WITH CARON +015B ; Ll # LATIN SMALL LETTER S WITH ACUTE +015D ; Ll # LATIN SMALL LETTER S WITH CIRCUMFLEX +015F ; Ll # LATIN SMALL LETTER S WITH CEDILLA +0161 ; Ll # LATIN SMALL LETTER S WITH CARON +0163 ; Ll # LATIN SMALL LETTER T WITH CEDILLA +0165 ; Ll # LATIN SMALL LETTER T WITH CARON +0167 ; Ll # LATIN SMALL LETTER T WITH STROKE +0169 ; Ll # LATIN SMALL LETTER U WITH TILDE +016B ; Ll # LATIN SMALL LETTER U WITH MACRON +016D ; Ll # LATIN SMALL LETTER U WITH BREVE +016F ; Ll # LATIN SMALL LETTER U WITH RING ABOVE +0171 ; Ll # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0173 ; Ll # LATIN SMALL LETTER U WITH OGONEK +0175 ; Ll # LATIN SMALL LETTER W WITH CIRCUMFLEX +0177 ; Ll # LATIN SMALL LETTER Y WITH CIRCUMFLEX +017A ; Ll # LATIN SMALL LETTER Z WITH ACUTE +017C ; Ll # LATIN SMALL LETTER Z WITH DOT ABOVE +017E..0180 ; Ll # [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE +0183 ; Ll # LATIN SMALL LETTER B WITH TOPBAR +0185 ; Ll # LATIN SMALL LETTER TONE SIX +0188 ; Ll # LATIN SMALL LETTER C WITH HOOK +018C..018D ; Ll # [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA +0192 ; Ll # LATIN SMALL LETTER F WITH HOOK +0195 ; Ll # LATIN SMALL LETTER HV +0199..019B ; Ll # [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE +019E ; Ll # LATIN SMALL LETTER N WITH LONG RIGHT LEG +01A1 ; Ll # LATIN SMALL LETTER O WITH HORN +01A3 ; Ll # LATIN SMALL LETTER OI +01A5 ; Ll # LATIN SMALL LETTER P WITH HOOK +01A8 ; Ll # LATIN SMALL LETTER TONE TWO +01AA..01AB ; Ll # [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK +01AD ; Ll # LATIN SMALL LETTER T WITH HOOK +01B0 ; Ll # LATIN SMALL LETTER U WITH HORN +01B4 ; Ll # LATIN SMALL LETTER Y WITH HOOK +01B6 ; Ll # LATIN SMALL LETTER Z WITH STROKE +01B9..01BA ; Ll # [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL +01BD..01BF ; Ll # [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN +01C6 ; Ll # LATIN SMALL LETTER DZ WITH CARON +01C9 ; Ll # LATIN SMALL LETTER LJ +01CC ; Ll # LATIN SMALL LETTER NJ +01CE ; Ll # LATIN SMALL LETTER A WITH CARON +01D0 ; Ll # LATIN SMALL LETTER I WITH CARON +01D2 ; Ll # LATIN SMALL LETTER O WITH CARON +01D4 ; Ll # LATIN SMALL LETTER U WITH CARON +01D6 ; Ll # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D8 ; Ll # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01DA ; Ll # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DC..01DD ; Ll # [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E +01DF ; Ll # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E1 ; Ll # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E3 ; Ll # LATIN SMALL LETTER AE WITH MACRON +01E5 ; Ll # LATIN SMALL LETTER G WITH STROKE +01E7 ; Ll # LATIN SMALL LETTER G WITH CARON +01E9 ; Ll # LATIN SMALL LETTER K WITH CARON +01EB ; Ll # LATIN SMALL LETTER O WITH OGONEK +01ED ; Ll # LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EF..01F0 ; Ll # [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON +01F3 ; Ll # LATIN SMALL LETTER DZ +01F5 ; Ll # LATIN SMALL LETTER G WITH ACUTE +01F9 ; Ll # LATIN SMALL LETTER N WITH GRAVE +01FB ; Ll # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FD ; Ll # LATIN SMALL LETTER AE WITH ACUTE +01FF ; Ll # LATIN SMALL LETTER O WITH STROKE AND ACUTE +0201 ; Ll # LATIN SMALL LETTER A WITH DOUBLE GRAVE +0203 ; Ll # LATIN SMALL LETTER A WITH INVERTED BREVE +0205 ; Ll # LATIN SMALL LETTER E WITH DOUBLE GRAVE +0207 ; Ll # LATIN SMALL LETTER E WITH INVERTED BREVE +0209 ; Ll # LATIN SMALL LETTER I WITH DOUBLE GRAVE +020B ; Ll # LATIN SMALL LETTER I WITH INVERTED BREVE +020D ; Ll # LATIN SMALL LETTER O WITH DOUBLE GRAVE +020F ; Ll # LATIN SMALL LETTER O WITH INVERTED BREVE +0211 ; Ll # LATIN SMALL LETTER R WITH DOUBLE GRAVE +0213 ; Ll # LATIN SMALL LETTER R WITH INVERTED BREVE +0215 ; Ll # LATIN SMALL LETTER U WITH DOUBLE GRAVE +0217 ; Ll # LATIN SMALL LETTER U WITH INVERTED BREVE +0219 ; Ll # LATIN SMALL LETTER S WITH COMMA BELOW +021B ; Ll # LATIN SMALL LETTER T WITH COMMA BELOW +021D ; Ll # LATIN SMALL LETTER YOGH +021F ; Ll # LATIN SMALL LETTER H WITH CARON +0221 ; Ll # LATIN SMALL LETTER D WITH CURL +0223 ; Ll # LATIN SMALL LETTER OU +0225 ; Ll # LATIN SMALL LETTER Z WITH HOOK +0227 ; Ll # LATIN SMALL LETTER A WITH DOT ABOVE +0229 ; Ll # LATIN SMALL LETTER E WITH CEDILLA +022B ; Ll # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022D ; Ll # LATIN SMALL LETTER O WITH TILDE AND MACRON +022F ; Ll # LATIN SMALL LETTER O WITH DOT ABOVE +0231 ; Ll # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0233..0239 ; Ll # [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH +023C ; Ll # LATIN SMALL LETTER C WITH STROKE +023F..0240 ; Ll # [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL +0242 ; Ll # LATIN SMALL LETTER GLOTTAL STOP +0247 ; Ll # LATIN SMALL LETTER E WITH STROKE +0249 ; Ll # LATIN SMALL LETTER J WITH STROKE +024B ; Ll # LATIN SMALL LETTER Q WITH HOOK TAIL +024D ; Ll # LATIN SMALL LETTER R WITH STROKE +024F..0293 ; Ll # [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL +0295..02AF ; Ll # [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0371 ; Ll # GREEK SMALL LETTER HETA +0373 ; Ll # GREEK SMALL LETTER ARCHAIC SAMPI +0377 ; Ll # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037B..037D ; Ll # [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +0390 ; Ll # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AC..03CE ; Ll # [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS +03D0..03D1 ; Ll # [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL +03D5..03D7 ; Ll # [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL +03D9 ; Ll # GREEK SMALL LETTER ARCHAIC KOPPA +03DB ; Ll # GREEK SMALL LETTER STIGMA +03DD ; Ll # GREEK SMALL LETTER DIGAMMA +03DF ; Ll # GREEK SMALL LETTER KOPPA +03E1 ; Ll # GREEK SMALL LETTER SAMPI +03E3 ; Ll # COPTIC SMALL LETTER SHEI +03E5 ; Ll # COPTIC SMALL LETTER FEI +03E7 ; Ll # COPTIC SMALL LETTER KHEI +03E9 ; Ll # COPTIC SMALL LETTER HORI +03EB ; Ll # COPTIC SMALL LETTER GANGIA +03ED ; Ll # COPTIC SMALL LETTER SHIMA +03EF..03F3 ; Ll # [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT +03F5 ; Ll # GREEK LUNATE EPSILON SYMBOL +03F8 ; Ll # GREEK SMALL LETTER SHO +03FB..03FC ; Ll # [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL +0430..045F ; Ll # [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE +0461 ; Ll # CYRILLIC SMALL LETTER OMEGA +0463 ; Ll # CYRILLIC SMALL LETTER YAT +0465 ; Ll # CYRILLIC SMALL LETTER IOTIFIED E +0467 ; Ll # CYRILLIC SMALL LETTER LITTLE YUS +0469 ; Ll # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +046B ; Ll # CYRILLIC SMALL LETTER BIG YUS +046D ; Ll # CYRILLIC SMALL LETTER IOTIFIED BIG YUS +046F ; Ll # CYRILLIC SMALL LETTER KSI +0471 ; Ll # CYRILLIC SMALL LETTER PSI +0473 ; Ll # CYRILLIC SMALL LETTER FITA +0475 ; Ll # CYRILLIC SMALL LETTER IZHITSA +0477 ; Ll # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0479 ; Ll # CYRILLIC SMALL LETTER UK +047B ; Ll # CYRILLIC SMALL LETTER ROUND OMEGA +047D ; Ll # CYRILLIC SMALL LETTER OMEGA WITH TITLO +047F ; Ll # CYRILLIC SMALL LETTER OT +0481 ; Ll # CYRILLIC SMALL LETTER KOPPA +048B ; Ll # CYRILLIC SMALL LETTER SHORT I WITH TAIL +048D ; Ll # CYRILLIC SMALL LETTER SEMISOFT SIGN +048F ; Ll # CYRILLIC SMALL LETTER ER WITH TICK +0491 ; Ll # CYRILLIC SMALL LETTER GHE WITH UPTURN +0493 ; Ll # CYRILLIC SMALL LETTER GHE WITH STROKE +0495 ; Ll # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0497 ; Ll # CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0499 ; Ll # CYRILLIC SMALL LETTER ZE WITH DESCENDER +049B ; Ll # CYRILLIC SMALL LETTER KA WITH DESCENDER +049D ; Ll # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049F ; Ll # CYRILLIC SMALL LETTER KA WITH STROKE +04A1 ; Ll # CYRILLIC SMALL LETTER BASHKIR KA +04A3 ; Ll # CYRILLIC SMALL LETTER EN WITH DESCENDER +04A5 ; Ll # CYRILLIC SMALL LIGATURE EN GHE +04A7 ; Ll # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A9 ; Ll # CYRILLIC SMALL LETTER ABKHASIAN HA +04AB ; Ll # CYRILLIC SMALL LETTER ES WITH DESCENDER +04AD ; Ll # CYRILLIC SMALL LETTER TE WITH DESCENDER +04AF ; Ll # CYRILLIC SMALL LETTER STRAIGHT U +04B1 ; Ll # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B3 ; Ll # CYRILLIC SMALL LETTER HA WITH DESCENDER +04B5 ; Ll # CYRILLIC SMALL LIGATURE TE TSE +04B7 ; Ll # CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B9 ; Ll # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BB ; Ll # CYRILLIC SMALL LETTER SHHA +04BD ; Ll # CYRILLIC SMALL LETTER ABKHASIAN CHE +04BF ; Ll # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C2 ; Ll # CYRILLIC SMALL LETTER ZHE WITH BREVE +04C4 ; Ll # CYRILLIC SMALL LETTER KA WITH HOOK +04C6 ; Ll # CYRILLIC SMALL LETTER EL WITH TAIL +04C8 ; Ll # CYRILLIC SMALL LETTER EN WITH HOOK +04CA ; Ll # CYRILLIC SMALL LETTER EN WITH TAIL +04CC ; Ll # CYRILLIC SMALL LETTER KHAKASSIAN CHE +04CE..04CF ; Ll # [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA +04D1 ; Ll # CYRILLIC SMALL LETTER A WITH BREVE +04D3 ; Ll # CYRILLIC SMALL LETTER A WITH DIAERESIS +04D5 ; Ll # CYRILLIC SMALL LIGATURE A IE +04D7 ; Ll # CYRILLIC SMALL LETTER IE WITH BREVE +04D9 ; Ll # CYRILLIC SMALL LETTER SCHWA +04DB ; Ll # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DD ; Ll # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DF ; Ll # CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E1 ; Ll # CYRILLIC SMALL LETTER ABKHASIAN DZE +04E3 ; Ll # CYRILLIC SMALL LETTER I WITH MACRON +04E5 ; Ll # CYRILLIC SMALL LETTER I WITH DIAERESIS +04E7 ; Ll # CYRILLIC SMALL LETTER O WITH DIAERESIS +04E9 ; Ll # CYRILLIC SMALL LETTER BARRED O +04EB ; Ll # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04ED ; Ll # CYRILLIC SMALL LETTER E WITH DIAERESIS +04EF ; Ll # CYRILLIC SMALL LETTER U WITH MACRON +04F1 ; Ll # CYRILLIC SMALL LETTER U WITH DIAERESIS +04F3 ; Ll # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F5 ; Ll # CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F7 ; Ll # CYRILLIC SMALL LETTER GHE WITH DESCENDER +04F9 ; Ll # CYRILLIC SMALL LETTER YERU WITH DIAERESIS +04FB ; Ll # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +04FD ; Ll # CYRILLIC SMALL LETTER HA WITH HOOK +04FF ; Ll # CYRILLIC SMALL LETTER HA WITH STROKE +0501 ; Ll # CYRILLIC SMALL LETTER KOMI DE +0503 ; Ll # CYRILLIC SMALL LETTER KOMI DJE +0505 ; Ll # CYRILLIC SMALL LETTER KOMI ZJE +0507 ; Ll # CYRILLIC SMALL LETTER KOMI DZJE +0509 ; Ll # CYRILLIC SMALL LETTER KOMI LJE +050B ; Ll # CYRILLIC SMALL LETTER KOMI NJE +050D ; Ll # CYRILLIC SMALL LETTER KOMI SJE +050F ; Ll # CYRILLIC SMALL LETTER KOMI TJE +0511 ; Ll # CYRILLIC SMALL LETTER REVERSED ZE +0513 ; Ll # CYRILLIC SMALL LETTER EL WITH HOOK +0515 ; Ll # CYRILLIC SMALL LETTER LHA +0517 ; Ll # CYRILLIC SMALL LETTER RHA +0519 ; Ll # CYRILLIC SMALL LETTER YAE +051B ; Ll # CYRILLIC SMALL LETTER QA +051D ; Ll # CYRILLIC SMALL LETTER WE +051F ; Ll # CYRILLIC SMALL LETTER ALEUT KA +0521 ; Ll # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +0523 ; Ll # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +0525 ; Ll # CYRILLIC SMALL LETTER PE WITH DESCENDER +0527 ; Ll # CYRILLIC SMALL LETTER SHHA WITH DESCENDER +0529 ; Ll # CYRILLIC SMALL LETTER EN WITH LEFT HOOK +052B ; Ll # CYRILLIC SMALL LETTER DZZHE +052D ; Ll # CYRILLIC SMALL LETTER DCHE +052F ; Ll # CYRILLIC SMALL LETTER EL WITH DESCENDER +0560..0588 ; Ll # [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +10D0..10FA ; Ll # [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FD..10FF ; Ll # [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +13F8..13FD ; Ll # [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C88 ; Ll # [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Ll # CYRILLIC SMALL LETTER TJE +1D00..1D2B ; Ll # [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D6B..1D77 ; Ll # [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D79..1D9A ; Ll # [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1E01 ; Ll # LATIN SMALL LETTER A WITH RING BELOW +1E03 ; Ll # LATIN SMALL LETTER B WITH DOT ABOVE +1E05 ; Ll # LATIN SMALL LETTER B WITH DOT BELOW +1E07 ; Ll # LATIN SMALL LETTER B WITH LINE BELOW +1E09 ; Ll # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E0B ; Ll # LATIN SMALL LETTER D WITH DOT ABOVE +1E0D ; Ll # LATIN SMALL LETTER D WITH DOT BELOW +1E0F ; Ll # LATIN SMALL LETTER D WITH LINE BELOW +1E11 ; Ll # LATIN SMALL LETTER D WITH CEDILLA +1E13 ; Ll # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E15 ; Ll # LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E17 ; Ll # LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E19 ; Ll # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E1B ; Ll # LATIN SMALL LETTER E WITH TILDE BELOW +1E1D ; Ll # LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1F ; Ll # LATIN SMALL LETTER F WITH DOT ABOVE +1E21 ; Ll # LATIN SMALL LETTER G WITH MACRON +1E23 ; Ll # LATIN SMALL LETTER H WITH DOT ABOVE +1E25 ; Ll # LATIN SMALL LETTER H WITH DOT BELOW +1E27 ; Ll # LATIN SMALL LETTER H WITH DIAERESIS +1E29 ; Ll # LATIN SMALL LETTER H WITH CEDILLA +1E2B ; Ll # LATIN SMALL LETTER H WITH BREVE BELOW +1E2D ; Ll # LATIN SMALL LETTER I WITH TILDE BELOW +1E2F ; Ll # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E31 ; Ll # LATIN SMALL LETTER K WITH ACUTE +1E33 ; Ll # LATIN SMALL LETTER K WITH DOT BELOW +1E35 ; Ll # LATIN SMALL LETTER K WITH LINE BELOW +1E37 ; Ll # LATIN SMALL LETTER L WITH DOT BELOW +1E39 ; Ll # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E3B ; Ll # LATIN SMALL LETTER L WITH LINE BELOW +1E3D ; Ll # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3F ; Ll # LATIN SMALL LETTER M WITH ACUTE +1E41 ; Ll # LATIN SMALL LETTER M WITH DOT ABOVE +1E43 ; Ll # LATIN SMALL LETTER M WITH DOT BELOW +1E45 ; Ll # LATIN SMALL LETTER N WITH DOT ABOVE +1E47 ; Ll # LATIN SMALL LETTER N WITH DOT BELOW +1E49 ; Ll # LATIN SMALL LETTER N WITH LINE BELOW +1E4B ; Ll # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4D ; Ll # LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4F ; Ll # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E51 ; Ll # LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E53 ; Ll # LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E55 ; Ll # LATIN SMALL LETTER P WITH ACUTE +1E57 ; Ll # LATIN SMALL LETTER P WITH DOT ABOVE +1E59 ; Ll # LATIN SMALL LETTER R WITH DOT ABOVE +1E5B ; Ll # LATIN SMALL LETTER R WITH DOT BELOW +1E5D ; Ll # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5F ; Ll # LATIN SMALL LETTER R WITH LINE BELOW +1E61 ; Ll # LATIN SMALL LETTER S WITH DOT ABOVE +1E63 ; Ll # LATIN SMALL LETTER S WITH DOT BELOW +1E65 ; Ll # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E67 ; Ll # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E69 ; Ll # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6B ; Ll # LATIN SMALL LETTER T WITH DOT ABOVE +1E6D ; Ll # LATIN SMALL LETTER T WITH DOT BELOW +1E6F ; Ll # LATIN SMALL LETTER T WITH LINE BELOW +1E71 ; Ll # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E73 ; Ll # LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E75 ; Ll # LATIN SMALL LETTER U WITH TILDE BELOW +1E77 ; Ll # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E79 ; Ll # LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E7B ; Ll # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7D ; Ll # LATIN SMALL LETTER V WITH TILDE +1E7F ; Ll # LATIN SMALL LETTER V WITH DOT BELOW +1E81 ; Ll # LATIN SMALL LETTER W WITH GRAVE +1E83 ; Ll # LATIN SMALL LETTER W WITH ACUTE +1E85 ; Ll # LATIN SMALL LETTER W WITH DIAERESIS +1E87 ; Ll # LATIN SMALL LETTER W WITH DOT ABOVE +1E89 ; Ll # LATIN SMALL LETTER W WITH DOT BELOW +1E8B ; Ll # LATIN SMALL LETTER X WITH DOT ABOVE +1E8D ; Ll # LATIN SMALL LETTER X WITH DIAERESIS +1E8F ; Ll # LATIN SMALL LETTER Y WITH DOT ABOVE +1E91 ; Ll # LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E93 ; Ll # LATIN SMALL LETTER Z WITH DOT BELOW +1E95..1E9D ; Ll # [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE +1E9F ; Ll # LATIN SMALL LETTER DELTA +1EA1 ; Ll # LATIN SMALL LETTER A WITH DOT BELOW +1EA3 ; Ll # LATIN SMALL LETTER A WITH HOOK ABOVE +1EA5 ; Ll # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA7 ; Ll # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA9 ; Ll # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAB ; Ll # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAD ; Ll # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAF ; Ll # LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EB1 ; Ll # LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB3 ; Ll # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB5 ; Ll # LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB7 ; Ll # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB9 ; Ll # LATIN SMALL LETTER E WITH DOT BELOW +1EBB ; Ll # LATIN SMALL LETTER E WITH HOOK ABOVE +1EBD ; Ll # LATIN SMALL LETTER E WITH TILDE +1EBF ; Ll # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC1 ; Ll # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC3 ; Ll # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC5 ; Ll # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC7 ; Ll # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC9 ; Ll # LATIN SMALL LETTER I WITH HOOK ABOVE +1ECB ; Ll # LATIN SMALL LETTER I WITH DOT BELOW +1ECD ; Ll # LATIN SMALL LETTER O WITH DOT BELOW +1ECF ; Ll # LATIN SMALL LETTER O WITH HOOK ABOVE +1ED1 ; Ll # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED3 ; Ll # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED5 ; Ll # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED7 ; Ll # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED9 ; Ll # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDB ; Ll # LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDD ; Ll # LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDF ; Ll # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EE1 ; Ll # LATIN SMALL LETTER O WITH HORN AND TILDE +1EE3 ; Ll # LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE5 ; Ll # LATIN SMALL LETTER U WITH DOT BELOW +1EE7 ; Ll # LATIN SMALL LETTER U WITH HOOK ABOVE +1EE9 ; Ll # LATIN SMALL LETTER U WITH HORN AND ACUTE +1EEB ; Ll # LATIN SMALL LETTER U WITH HORN AND GRAVE +1EED ; Ll # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEF ; Ll # LATIN SMALL LETTER U WITH HORN AND TILDE +1EF1 ; Ll # LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF3 ; Ll # LATIN SMALL LETTER Y WITH GRAVE +1EF5 ; Ll # LATIN SMALL LETTER Y WITH DOT BELOW +1EF7 ; Ll # LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF9 ; Ll # LATIN SMALL LETTER Y WITH TILDE +1EFB ; Ll # LATIN SMALL LETTER MIDDLE-WELSH LL +1EFD ; Ll # LATIN SMALL LETTER MIDDLE-WELSH V +1EFF..1F07 ; Ll # [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F10..1F15 ; Ll # [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F27 ; Ll # [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F30..1F37 ; Ll # [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F40..1F45 ; Ll # [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Ll # [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F60..1F67 ; Ll # [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F70..1F7D ; Ll # [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1F87 ; Ll # [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F90..1F97 ; Ll # [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA0..1FA7 ; Ll # [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FB0..1FB4 ; Ll # [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FB7 ; Ll # [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FBE ; Ll # GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Ll # [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FC7 ; Ll # [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FD0..1FD3 ; Ll # [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FD7 ; Ll # [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FE0..1FE7 ; Ll # [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FF2..1FF4 ; Ll # [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FF7 ; Ll # [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +210A ; Ll # SCRIPT SMALL G +210E..210F ; Ll # [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI +2113 ; Ll # SCRIPT SMALL L +212F ; Ll # SCRIPT SMALL E +2134 ; Ll # SCRIPT SMALL O +2139 ; Ll # INFORMATION SOURCE +213C..213D ; Ll # [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA +2146..2149 ; Ll # [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; Ll # TURNED SMALL F +2184 ; Ll # LATIN SMALL LETTER REVERSED C +2C30..2C5F ; Ll # [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +2C61 ; Ll # LATIN SMALL LETTER L WITH DOUBLE BAR +2C65..2C66 ; Ll # [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE +2C68 ; Ll # LATIN SMALL LETTER H WITH DESCENDER +2C6A ; Ll # LATIN SMALL LETTER K WITH DESCENDER +2C6C ; Ll # LATIN SMALL LETTER Z WITH DESCENDER +2C71 ; Ll # LATIN SMALL LETTER V WITH RIGHT HOOK +2C73..2C74 ; Ll # [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL +2C76..2C7B ; Ll # [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E +2C81 ; Ll # COPTIC SMALL LETTER ALFA +2C83 ; Ll # COPTIC SMALL LETTER VIDA +2C85 ; Ll # COPTIC SMALL LETTER GAMMA +2C87 ; Ll # COPTIC SMALL LETTER DALDA +2C89 ; Ll # COPTIC SMALL LETTER EIE +2C8B ; Ll # COPTIC SMALL LETTER SOU +2C8D ; Ll # COPTIC SMALL LETTER ZATA +2C8F ; Ll # COPTIC SMALL LETTER HATE +2C91 ; Ll # COPTIC SMALL LETTER THETHE +2C93 ; Ll # COPTIC SMALL LETTER IAUDA +2C95 ; Ll # COPTIC SMALL LETTER KAPA +2C97 ; Ll # COPTIC SMALL LETTER LAULA +2C99 ; Ll # COPTIC SMALL LETTER MI +2C9B ; Ll # COPTIC SMALL LETTER NI +2C9D ; Ll # COPTIC SMALL LETTER KSI +2C9F ; Ll # COPTIC SMALL LETTER O +2CA1 ; Ll # COPTIC SMALL LETTER PI +2CA3 ; Ll # COPTIC SMALL LETTER RO +2CA5 ; Ll # COPTIC SMALL LETTER SIMA +2CA7 ; Ll # COPTIC SMALL LETTER TAU +2CA9 ; Ll # COPTIC SMALL LETTER UA +2CAB ; Ll # COPTIC SMALL LETTER FI +2CAD ; Ll # COPTIC SMALL LETTER KHI +2CAF ; Ll # COPTIC SMALL LETTER PSI +2CB1 ; Ll # COPTIC SMALL LETTER OOU +2CB3 ; Ll # COPTIC SMALL LETTER DIALECT-P ALEF +2CB5 ; Ll # COPTIC SMALL LETTER OLD COPTIC AIN +2CB7 ; Ll # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +2CB9 ; Ll # COPTIC SMALL LETTER DIALECT-P KAPA +2CBB ; Ll # COPTIC SMALL LETTER DIALECT-P NI +2CBD ; Ll # COPTIC SMALL LETTER CRYPTOGRAMMIC NI +2CBF ; Ll # COPTIC SMALL LETTER OLD COPTIC OOU +2CC1 ; Ll # COPTIC SMALL LETTER SAMPI +2CC3 ; Ll # COPTIC SMALL LETTER CROSSED SHEI +2CC5 ; Ll # COPTIC SMALL LETTER OLD COPTIC SHEI +2CC7 ; Ll # COPTIC SMALL LETTER OLD COPTIC ESH +2CC9 ; Ll # COPTIC SMALL LETTER AKHMIMIC KHEI +2CCB ; Ll # COPTIC SMALL LETTER DIALECT-P HORI +2CCD ; Ll # COPTIC SMALL LETTER OLD COPTIC HORI +2CCF ; Ll # COPTIC SMALL LETTER OLD COPTIC HA +2CD1 ; Ll # COPTIC SMALL LETTER L-SHAPED HA +2CD3 ; Ll # COPTIC SMALL LETTER OLD COPTIC HEI +2CD5 ; Ll # COPTIC SMALL LETTER OLD COPTIC HAT +2CD7 ; Ll # COPTIC SMALL LETTER OLD COPTIC GANGIA +2CD9 ; Ll # COPTIC SMALL LETTER OLD COPTIC DJA +2CDB ; Ll # COPTIC SMALL LETTER OLD COPTIC SHIMA +2CDD ; Ll # COPTIC SMALL LETTER OLD NUBIAN SHIMA +2CDF ; Ll # COPTIC SMALL LETTER OLD NUBIAN NGI +2CE1 ; Ll # COPTIC SMALL LETTER OLD NUBIAN NYI +2CE3..2CE4 ; Ll # [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI +2CEC ; Ll # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +2CEE ; Ll # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF3 ; Ll # COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Ll # [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Ll # GEORGIAN SMALL LETTER YN +2D2D ; Ll # GEORGIAN SMALL LETTER AEN +A641 ; Ll # CYRILLIC SMALL LETTER ZEMLYA +A643 ; Ll # CYRILLIC SMALL LETTER DZELO +A645 ; Ll # CYRILLIC SMALL LETTER REVERSED DZE +A647 ; Ll # CYRILLIC SMALL LETTER IOTA +A649 ; Ll # CYRILLIC SMALL LETTER DJERV +A64B ; Ll # CYRILLIC SMALL LETTER MONOGRAPH UK +A64D ; Ll # CYRILLIC SMALL LETTER BROAD OMEGA +A64F ; Ll # CYRILLIC SMALL LETTER NEUTRAL YER +A651 ; Ll # CYRILLIC SMALL LETTER YERU WITH BACK YER +A653 ; Ll # CYRILLIC SMALL LETTER IOTIFIED YAT +A655 ; Ll # CYRILLIC SMALL LETTER REVERSED YU +A657 ; Ll # CYRILLIC SMALL LETTER IOTIFIED A +A659 ; Ll # CYRILLIC SMALL LETTER CLOSED LITTLE YUS +A65B ; Ll # CYRILLIC SMALL LETTER BLENDED YUS +A65D ; Ll # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +A65F ; Ll # CYRILLIC SMALL LETTER YN +A661 ; Ll # CYRILLIC SMALL LETTER REVERSED TSE +A663 ; Ll # CYRILLIC SMALL LETTER SOFT DE +A665 ; Ll # CYRILLIC SMALL LETTER SOFT EL +A667 ; Ll # CYRILLIC SMALL LETTER SOFT EM +A669 ; Ll # CYRILLIC SMALL LETTER MONOCULAR O +A66B ; Ll # CYRILLIC SMALL LETTER BINOCULAR O +A66D ; Ll # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A681 ; Ll # CYRILLIC SMALL LETTER DWE +A683 ; Ll # CYRILLIC SMALL LETTER DZWE +A685 ; Ll # CYRILLIC SMALL LETTER ZHWE +A687 ; Ll # CYRILLIC SMALL LETTER CCHE +A689 ; Ll # CYRILLIC SMALL LETTER DZZE +A68B ; Ll # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +A68D ; Ll # CYRILLIC SMALL LETTER TWE +A68F ; Ll # CYRILLIC SMALL LETTER TSWE +A691 ; Ll # CYRILLIC SMALL LETTER TSSE +A693 ; Ll # CYRILLIC SMALL LETTER TCHE +A695 ; Ll # CYRILLIC SMALL LETTER HWE +A697 ; Ll # CYRILLIC SMALL LETTER SHWE +A699 ; Ll # CYRILLIC SMALL LETTER DOUBLE O +A69B ; Ll # CYRILLIC SMALL LETTER CROSSED O +A723 ; Ll # LATIN SMALL LETTER EGYPTOLOGICAL ALEF +A725 ; Ll # LATIN SMALL LETTER EGYPTOLOGICAL AIN +A727 ; Ll # LATIN SMALL LETTER HENG +A729 ; Ll # LATIN SMALL LETTER TZ +A72B ; Ll # LATIN SMALL LETTER TRESILLO +A72D ; Ll # LATIN SMALL LETTER CUATRILLO +A72F..A731 ; Ll # [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S +A733 ; Ll # LATIN SMALL LETTER AA +A735 ; Ll # LATIN SMALL LETTER AO +A737 ; Ll # LATIN SMALL LETTER AU +A739 ; Ll # LATIN SMALL LETTER AV +A73B ; Ll # LATIN SMALL LETTER AV WITH HORIZONTAL BAR +A73D ; Ll # LATIN SMALL LETTER AY +A73F ; Ll # LATIN SMALL LETTER REVERSED C WITH DOT +A741 ; Ll # LATIN SMALL LETTER K WITH STROKE +A743 ; Ll # LATIN SMALL LETTER K WITH DIAGONAL STROKE +A745 ; Ll # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +A747 ; Ll # LATIN SMALL LETTER BROKEN L +A749 ; Ll # LATIN SMALL LETTER L WITH HIGH STROKE +A74B ; Ll # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +A74D ; Ll # LATIN SMALL LETTER O WITH LOOP +A74F ; Ll # LATIN SMALL LETTER OO +A751 ; Ll # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +A753 ; Ll # LATIN SMALL LETTER P WITH FLOURISH +A755 ; Ll # LATIN SMALL LETTER P WITH SQUIRREL TAIL +A757 ; Ll # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +A759 ; Ll # LATIN SMALL LETTER Q WITH DIAGONAL STROKE +A75B ; Ll # LATIN SMALL LETTER R ROTUNDA +A75D ; Ll # LATIN SMALL LETTER RUM ROTUNDA +A75F ; Ll # LATIN SMALL LETTER V WITH DIAGONAL STROKE +A761 ; Ll # LATIN SMALL LETTER VY +A763 ; Ll # LATIN SMALL LETTER VISIGOTHIC Z +A765 ; Ll # LATIN SMALL LETTER THORN WITH STROKE +A767 ; Ll # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +A769 ; Ll # LATIN SMALL LETTER VEND +A76B ; Ll # LATIN SMALL LETTER ET +A76D ; Ll # LATIN SMALL LETTER IS +A76F ; Ll # LATIN SMALL LETTER CON +A771..A778 ; Ll # [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM +A77A ; Ll # LATIN SMALL LETTER INSULAR D +A77C ; Ll # LATIN SMALL LETTER INSULAR F +A77F ; Ll # LATIN SMALL LETTER TURNED INSULAR G +A781 ; Ll # LATIN SMALL LETTER TURNED L +A783 ; Ll # LATIN SMALL LETTER INSULAR R +A785 ; Ll # LATIN SMALL LETTER INSULAR S +A787 ; Ll # LATIN SMALL LETTER INSULAR T +A78C ; Ll # LATIN SMALL LETTER SALTILLO +A78E ; Ll # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A791 ; Ll # LATIN SMALL LETTER N WITH DESCENDER +A793..A795 ; Ll # [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK +A797 ; Ll # LATIN SMALL LETTER B WITH FLOURISH +A799 ; Ll # LATIN SMALL LETTER F WITH STROKE +A79B ; Ll # LATIN SMALL LETTER VOLAPUK AE +A79D ; Ll # LATIN SMALL LETTER VOLAPUK OE +A79F ; Ll # LATIN SMALL LETTER VOLAPUK UE +A7A1 ; Ll # LATIN SMALL LETTER G WITH OBLIQUE STROKE +A7A3 ; Ll # LATIN SMALL LETTER K WITH OBLIQUE STROKE +A7A5 ; Ll # LATIN SMALL LETTER N WITH OBLIQUE STROKE +A7A7 ; Ll # LATIN SMALL LETTER R WITH OBLIQUE STROKE +A7A9 ; Ll # LATIN SMALL LETTER S WITH OBLIQUE STROKE +A7AF ; Ll # LATIN LETTER SMALL CAPITAL Q +A7B5 ; Ll # LATIN SMALL LETTER BETA +A7B7 ; Ll # LATIN SMALL LETTER OMEGA +A7B9 ; Ll # LATIN SMALL LETTER U WITH STROKE +A7BB ; Ll # LATIN SMALL LETTER GLOTTAL A +A7BD ; Ll # LATIN SMALL LETTER GLOTTAL I +A7BF ; Ll # LATIN SMALL LETTER GLOTTAL U +A7C1 ; Ll # LATIN SMALL LETTER OLD POLISH O +A7C3 ; Ll # LATIN SMALL LETTER ANGLICANA W +A7C8 ; Ll # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY +A7CA ; Ll # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Ll # LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D1 ; Ll # LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Ll # LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Ll # LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Ll # LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Ll # LATIN SMALL LETTER SIGMOID S +A7DB ; Ll # LATIN SMALL LETTER LAMBDA +A7F6 ; Ll # LATIN SMALL LETTER REVERSED HALF H +A7FA ; Ll # LATIN LETTER SMALL CAPITAL TURNED M +AB30..AB5A ; Ll # [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB60..AB68 ; Ll # [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB70..ABBF ; Ll # [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Ll # [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Ll # [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10428..1044F ; Ll # [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW +104D8..104FB ; Ll # [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Ll # [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Ll # [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Ll # [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Ll # [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10CC0..10CF2 ; Ll # [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Ll # [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +118C0..118DF ; Ll # [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +16E60..16E7F ; Ll # [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +1D41A..1D433 ; Ll # [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z +1D44E..1D454 ; Ll # [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G +1D456..1D467 ; Ll # [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z +1D482..1D49B ; Ll # [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z +1D4B6..1D4B9 ; Ll # [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Ll # MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Ll # [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D4CF ; Ll # [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z +1D4EA..1D503 ; Ll # [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z +1D51E..1D537 ; Ll # [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z +1D552..1D56B ; Ll # [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z +1D586..1D59F ; Ll # [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z +1D5BA..1D5D3 ; Ll # [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z +1D5EE..1D607 ; Ll # [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z +1D622..1D63B ; Ll # [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z +1D656..1D66F ; Ll # [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z +1D68A..1D6A5 ; Ll # [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6C2..1D6DA ; Ll # [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6E1 ; Ll # [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL +1D6FC..1D714 ; Ll # [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D71B ; Ll # [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL +1D736..1D74E ; Ll # [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D755 ; Ll # [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL +1D770..1D788 ; Ll # [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D78F ; Ll # [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL +1D7AA..1D7C2 ; Ll # [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7C9 ; Ll # [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +1D7CB ; Ll # MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Ll # [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Ll # [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; Ll # [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E922..1E943 ; Ll # [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA + +# Total code points: 2258 + +# ================================================ + +# General_Category=Titlecase_Letter + +01C5 ; Lt # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C8 ; Lt # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CB ; Lt # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01F2 ; Lt # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +1F88..1F8F ; Lt # [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F98..1F9F ; Lt # [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA8..1FAF ; Lt # [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FBC ; Lt # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FCC ; Lt # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FFC ; Lt # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI + +# Total code points: 31 + +# ================================================ + +# General_Category=Modifier_Letter + +02B0..02C1 ; Lm # [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C6..02D1 ; Lm # [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; Lm # [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EC ; Lm # MODIFIER LETTER VOICING +02EE ; Lm # MODIFIER LETTER DOUBLE APOSTROPHE +0374 ; Lm # GREEK NUMERAL SIGN +037A ; Lm # GREEK YPOGEGRAMMENI +0559 ; Lm # ARMENIAN MODIFIER LETTER LEFT HALF RING +0640 ; Lm # ARABIC TATWEEL +06E5..06E6 ; Lm # [2] ARABIC SMALL WAW..ARABIC SMALL YEH +07F4..07F5 ; Lm # [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; Lm # NKO LAJANYALAN +081A ; Lm # SAMARITAN MODIFIER LETTER EPENTHETIC YUT +0824 ; Lm # SAMARITAN MODIFIER LETTER SHORT A +0828 ; Lm # SAMARITAN MODIFIER LETTER I +08C9 ; Lm # ARABIC SMALL FARSI YEH +0971 ; Lm # DEVANAGARI SIGN HIGH SPACING DOT +0E46 ; Lm # THAI CHARACTER MAIYAMOK +0EC6 ; Lm # LAO KO LA +10FC ; Lm # MODIFIER LETTER GEORGIAN NAR +17D7 ; Lm # KHMER SIGN LEK TOO +1843 ; Lm # MONGOLIAN LETTER TODO LONG VOWEL SIGN +1AA7 ; Lm # TAI THAM SIGN MAI YAMOK +1C78..1C7D ; Lm # [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1D2C..1D6A ; Lm # [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D78 ; Lm # MODIFIER LETTER CYRILLIC EN +1D9B..1DBF ; Lm # [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +2071 ; Lm # SUPERSCRIPT LATIN SMALL LETTER I +207F ; Lm # SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; Lm # [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +2C7C..2C7D ; Lm # [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2D6F ; Lm # TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2E2F ; Lm # VERTICAL TILDE +3005 ; Lm # IDEOGRAPHIC ITERATION MARK +3031..3035 ; Lm # [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +303B ; Lm # VERTICAL IDEOGRAPHIC ITERATION MARK +309D..309E ; Lm # [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +30FC..30FE ; Lm # [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +A015 ; Lm # YI SYLLABLE WU +A4F8..A4FD ; Lm # [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A60C ; Lm # VAI SYLLABLE LENGTHENER +A67F ; Lm # CYRILLIC PAYEROK +A69C..A69D ; Lm # [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A717..A71F ; Lm # [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A770 ; Lm # MODIFIER LETTER US +A788 ; Lm # MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A7F2..A7F4 ; Lm # [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F8..A7F9 ; Lm # [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A9CF ; Lm # JAVANESE PANGRANGKEP +A9E6 ; Lm # MYANMAR MODIFIER LETTER SHAN REDUPLICATION +AA70 ; Lm # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AADD ; Lm # TAI VIET SYMBOL SAM +AAF3..AAF4 ; Lm # [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AB5C..AB5F ; Lm # [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB69 ; Lm # MODIFIER LETTER SMALL TURNED W +FF70 ; Lm # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +10780..10785 ; Lm # [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Lm # [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Lm # [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10D4E ; Lm # GARAY VOWEL LENGTH MARK +10D6F ; Lm # GARAY REDUPLICATION MARK +16B40..16B43 ; Lm # [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16D40..16D42 ; Lm # [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D6B..16D6C ; Lm # [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16F93..16F9F ; Lm # [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; Lm # [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; Lm # OLD CHINESE ITERATION MARK +1AFF0..1AFF3 ; Lm # [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Lm # [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Lm # [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1E030..1E06D ; Lm # [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E137..1E13D ; Lm # [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E4EB ; Lm # NAG MUNDARI SIGN OJOD +1E94B ; Lm # ADLAM NASALIZATION MARK + +# Total code points: 404 + +# ================================================ + +# General_Category=Other_Letter + +00AA ; Lo # FEMININE ORDINAL INDICATOR +00BA ; Lo # MASCULINE ORDINAL INDICATOR +01BB ; Lo # LATIN LETTER TWO WITH STROKE +01C0..01C3 ; Lo # [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +0294 ; Lo # LATIN LETTER GLOTTAL STOP +05D0..05EA ; Lo # [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; Lo # [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +0620..063F ; Lo # [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0641..064A ; Lo # [10] ARABIC LETTER FEH..ARABIC LETTER YEH +066E..066F ; Lo # [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0671..06D3 ; Lo # [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D5 ; Lo # ARABIC LETTER AE +06EE..06EF ; Lo # [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06FA..06FC ; Lo # [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FF ; Lo # ARABIC LETTER HEH WITH INVERTED V +0710 ; Lo # SYRIAC LETTER ALAPH +0712..072F ; Lo # [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +074D..07A5 ; Lo # [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07B1 ; Lo # THAANA LETTER NAA +07CA..07EA ; Lo # [33] NKO LETTER A..NKO LETTER JONA RA +0800..0815 ; Lo # [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +0840..0858 ; Lo # [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0860..086A ; Lo # [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; Lo # [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; Lo # [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; Lo # [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +0904..0939 ; Lo # [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093D ; Lo # DEVANAGARI SIGN AVAGRAHA +0950 ; Lo # DEVANAGARI OM +0958..0961 ; Lo # [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0972..0980 ; Lo # [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0985..098C ; Lo # [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; Lo # [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; Lo # [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; Lo # [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; Lo # BENGALI LETTER LA +09B6..09B9 ; Lo # [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BD ; Lo # BENGALI SIGN AVAGRAHA +09CE ; Lo # BENGALI LETTER KHANDA TA +09DC..09DD ; Lo # [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; Lo # [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09F0..09F1 ; Lo # [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09FC ; Lo # BENGALI LETTER VEDIC ANUSVARA +0A05..0A0A ; Lo # [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; Lo # [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; Lo # [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; Lo # [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; Lo # [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; Lo # [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; Lo # [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A59..0A5C ; Lo # [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; Lo # GURMUKHI LETTER FA +0A72..0A74 ; Lo # [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A85..0A8D ; Lo # [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; Lo # [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; Lo # [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; Lo # [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; Lo # [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; Lo # [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABD ; Lo # GUJARATI SIGN AVAGRAHA +0AD0 ; Lo # GUJARATI OM +0AE0..0AE1 ; Lo # [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AF9 ; Lo # GUJARATI LETTER ZHA +0B05..0B0C ; Lo # [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; Lo # [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; Lo # [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; Lo # [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; Lo # [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; Lo # [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3D ; Lo # ORIYA SIGN AVAGRAHA +0B5C..0B5D ; Lo # [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; Lo # [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B71 ; Lo # ORIYA LETTER WA +0B83 ; Lo # TAMIL SIGN VISARGA +0B85..0B8A ; Lo # [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; Lo # [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; Lo # [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; Lo # [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; Lo # TAMIL LETTER JA +0B9E..0B9F ; Lo # [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; Lo # [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; Lo # [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; Lo # [12] TAMIL LETTER MA..TAMIL LETTER HA +0BD0 ; Lo # TAMIL OM +0C05..0C0C ; Lo # [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; Lo # [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; Lo # [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; Lo # [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3D ; Lo # TELUGU SIGN AVAGRAHA +0C58..0C5A ; Lo # [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; Lo # TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; Lo # [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C80 ; Lo # KANNADA SIGN SPACING CANDRABINDU +0C85..0C8C ; Lo # [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; Lo # [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; Lo # [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; Lo # [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; Lo # [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBD ; Lo # KANNADA SIGN AVAGRAHA +0CDD..0CDE ; Lo # [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CE0..0CE1 ; Lo # [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CF1..0CF2 ; Lo # [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0D04..0D0C ; Lo # [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; Lo # [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; Lo # [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3D ; Lo # MALAYALAM SIGN AVAGRAHA +0D4E ; Lo # MALAYALAM LETTER DOT REPH +0D54..0D56 ; Lo # [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D5F..0D61 ; Lo # [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D7A..0D7F ; Lo # [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D85..0D96 ; Lo # [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; Lo # [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; Lo # [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; Lo # SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; Lo # [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0E01..0E30 ; Lo # [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E32..0E33 ; Lo # [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E40..0E45 ; Lo # [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E81..0E82 ; Lo # [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; Lo # LAO LETTER KHO TAM +0E86..0E8A ; Lo # [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; Lo # [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; Lo # LAO LETTER LO LOOT +0EA7..0EB0 ; Lo # [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB2..0EB3 ; Lo # [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EBD ; Lo # LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; Lo # [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EDC..0EDF ; Lo # [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; Lo # TIBETAN SYLLABLE OM +0F40..0F47 ; Lo # [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; Lo # [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F88..0F8C ; Lo # [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +1000..102A ; Lo # [43] MYANMAR LETTER KA..MYANMAR LETTER AU +103F ; Lo # MYANMAR LETTER GREAT SA +1050..1055 ; Lo # [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +105A..105D ; Lo # [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +1061 ; Lo # MYANMAR LETTER SGAW KAREN SHA +1065..1066 ; Lo # [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +106E..1070 ; Lo # [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1075..1081 ; Lo # [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +108E ; Lo # MYANMAR LETTER RUMAI PALAUNG FA +1100..1248 ; Lo # [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; Lo # [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; Lo # [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; Lo # ETHIOPIC SYLLABLE QHWA +125A..125D ; Lo # [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; Lo # [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; Lo # [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; Lo # [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; Lo # [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; Lo # [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; Lo # ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; Lo # [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; Lo # [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; Lo # [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; Lo # [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; Lo # [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1380..138F ; Lo # [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +1401..166C ; Lo # [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166F..167F ; Lo # [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1681..169A ; Lo # [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; Lo # [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16F1..16F8 ; Lo # [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; Lo # [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; Lo # [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1740..1751 ; Lo # [18] BUHID LETTER A..BUHID LETTER HA +1760..176C ; Lo # [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; Lo # [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1780..17B3 ; Lo # [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17DC ; Lo # KHMER SIGN AVAKRAHASANYA +1820..1842 ; Lo # [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1844..1878 ; Lo # [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; Lo # [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1887..18A8 ; Lo # [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18AA ; Lo # MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; Lo # [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; Lo # [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1950..196D ; Lo # [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; Lo # [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; Lo # [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; Lo # [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +1A00..1A16 ; Lo # [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A20..1A54 ; Lo # [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1B05..1B33 ; Lo # [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B45..1B4C ; Lo # [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B83..1BA0 ; Lo # [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BAE..1BAF ; Lo # [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BBA..1BE5 ; Lo # [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1C00..1C23 ; Lo # [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C4D..1C4F ; Lo # [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C5A..1C77 ; Lo # [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1CE9..1CEC ; Lo # [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE..1CF3 ; Lo # [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF5..1CF6 ; Lo # [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CFA ; Lo # VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +2135..2138 ; Lo # [4] ALEF SYMBOL..DALET SYMBOL +2D30..2D67 ; Lo # [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D80..2D96 ; Lo # [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; Lo # [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; Lo # [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; Lo # [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; Lo # [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; Lo # [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; Lo # [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; Lo # [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; Lo # [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +3006 ; Lo # IDEOGRAPHIC CLOSING MARK +303C ; Lo # MASU MARK +3041..3096 ; Lo # [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309F ; Lo # HIRAGANA DIGRAPH YORI +30A1..30FA ; Lo # [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FF ; Lo # KATAKANA DIGRAPH KOTO +3105..312F ; Lo # [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; Lo # [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +31A0..31BF ; Lo # [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31F0..31FF ; Lo # [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3400..4DBF ; Lo # [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4E00..A014 ; Lo # [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A016..A48C ; Lo # [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A4D0..A4F7 ; Lo # [40] LISU LETTER BA..LISU LETTER OE +A500..A60B ; Lo # [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A610..A61F ; Lo # [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A62A..A62B ; Lo # [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A66E ; Lo # CYRILLIC LETTER MULTIOCULAR O +A6A0..A6E5 ; Lo # [70] BAMUM LETTER A..BAMUM LETTER KI +A78F ; Lo # LATIN LETTER SINOLOGICAL DOT +A7F7 ; Lo # LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7FB..A801 ; Lo # [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A803..A805 ; Lo # [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; Lo # [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80C..A822 ; Lo # [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A840..A873 ; Lo # [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A882..A8B3 ; Lo # [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8F2..A8F7 ; Lo # [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; Lo # DEVANAGARI HEADSTROKE +A8FD..A8FE ; Lo # [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A90A..A925 ; Lo # [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A930..A946 ; Lo # [23] REJANG LETTER KA..REJANG LETTER A +A960..A97C ; Lo # [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A984..A9B2 ; Lo # [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9E0..A9E4 ; Lo # [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E7..A9EF ; Lo # [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9FA..A9FE ; Lo # [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; Lo # [41] CHAM LETTER A..CHAM LETTER HA +AA40..AA42 ; Lo # [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA44..AA4B ; Lo # [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA60..AA6F ; Lo # [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA71..AA76 ; Lo # [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA7A ; Lo # MYANMAR LETTER AITON RA +AA7E..AAAF ; Lo # [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB1 ; Lo # TAI VIET VOWEL AA +AAB5..AAB6 ; Lo # [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB9..AABD ; Lo # [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AAC0 ; Lo # TAI VIET TONE MAI NUENG +AAC2 ; Lo # TAI VIET TONE MAI SONG +AADB..AADC ; Lo # [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AAE0..AAEA ; Lo # [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAF2 ; Lo # MEETEI MAYEK ANJI +AB01..AB06 ; Lo # [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; Lo # [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; Lo # [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; Lo # [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; Lo # [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +ABC0..ABE2 ; Lo # [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +AC00..D7A3 ; Lo # [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; Lo # [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; Lo # [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; Lo # [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; Lo # [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB1D ; Lo # HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; Lo # [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; Lo # [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Lo # [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Lo # HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Lo # [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Lo # [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; Lo # [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FD3D ; Lo # [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; Lo # [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; Lo # [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; Lo # [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FE70..FE74 ; Lo # [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; Lo # [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF66..FF6F ; Lo # [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF71..FF9D ; Lo # [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FFA0..FFBE ; Lo # [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; Lo # [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; Lo # [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; Lo # [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; Lo # [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; Lo # [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; Lo # [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; Lo # [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; Lo # [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; Lo # [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; Lo # [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10280..1029C ; Lo # [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; Lo # [49] CARIAN LETTER A..CARIAN LETTER UUU3 +10300..1031F ; Lo # [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +1032D..10340 ; Lo # [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10342..10349 ; Lo # [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +10350..10375 ; Lo # [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10380..1039D ; Lo # [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +103A0..103C3 ; Lo # [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; Lo # [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +10450..1049D ; Lo # [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +10500..10527 ; Lo # [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; Lo # [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +105C0..105F3 ; Lo # [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; Lo # [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; Lo # [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; Lo # [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10800..10805 ; Lo # [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; Lo # CYPRIOT SYLLABLE JO +1080A..10835 ; Lo # [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; Lo # [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; Lo # CYPRIOT SYLLABLE ZA +1083F..10855 ; Lo # [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10860..10876 ; Lo # [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10880..1089E ; Lo # [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108E0..108F2 ; Lo # [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; Lo # [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +10900..10915 ; Lo # [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10920..10939 ; Lo # [26] LYDIAN LETTER A..LYDIAN LETTER C +10980..109B7 ; Lo # [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BE..109BF ; Lo # [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +10A00 ; Lo # KHAROSHTHI LETTER A +10A10..10A13 ; Lo # [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; Lo # [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; Lo # [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A60..10A7C ; Lo # [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A80..10A9C ; Lo # [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10AC0..10AC7 ; Lo # [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC9..10AE4 ; Lo # [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10B00..10B35 ; Lo # [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B40..10B55 ; Lo # [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B60..10B72 ; Lo # [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B80..10B91 ; Lo # [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10C00..10C48 ; Lo # [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10D00..10D23 ; Lo # [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D4A..10D4D ; Lo # [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4F ; Lo # GARAY SUKUN +10E80..10EA9 ; Lo # [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EB0..10EB1 ; Lo # [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; Lo # [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10F00..10F1C ; Lo # [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F27 ; Lo # OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; Lo # [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; Lo # [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10FB0..10FC4 ; Lo # [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FE0..10FF6 ; Lo # [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11003..11037 ; Lo # [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; Lo # [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; Lo # BRAHMI LETTER OLD TAMIL LLA +11083..110AF ; Lo # [45] KAITHI LETTER A..KAITHI LETTER HA +110D0..110E8 ; Lo # [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +11103..11126 ; Lo # [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11144 ; Lo # CHAKMA LETTER LHAA +11147 ; Lo # CHAKMA LETTER VAA +11150..11172 ; Lo # [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11176 ; Lo # MAHAJANI LIGATURE SHRI +11183..111B2 ; Lo # [48] SHARADA LETTER A..SHARADA LETTER HA +111C1..111C4 ; Lo # [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111DA ; Lo # SHARADA EKAM +111DC ; Lo # SHARADA HEADSTROKE +11200..11211 ; Lo # [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; Lo # [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1123F..11240 ; Lo # [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11280..11286 ; Lo # [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; Lo # MULTANI LETTER GHA +1128A..1128D ; Lo # [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; Lo # [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; Lo # [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112B0..112DE ; Lo # [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +11305..1130C ; Lo # [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; Lo # [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; Lo # [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; Lo # [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; Lo # [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; Lo # [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133D ; Lo # GRANTHA SIGN AVAGRAHA +11350 ; Lo # GRANTHA OM +1135D..11361 ; Lo # [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11380..11389 ; Lo # [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; Lo # TULU-TIGALARI LETTER EE +1138E ; Lo # TULU-TIGALARI LETTER AI +11390..113B5 ; Lo # [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; Lo # TULU-TIGALARI SIGN AVAGRAHA +113D1 ; Lo # TULU-TIGALARI REPHA +113D3 ; Lo # TULU-TIGALARI SIGN PLUTA +11400..11434 ; Lo # [53] NEWA LETTER A..NEWA LETTER HA +11447..1144A ; Lo # [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1145F..11461 ; Lo # [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; Lo # [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114C4..114C5 ; Lo # [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C7 ; Lo # TIRHUTA OM +11580..115AE ; Lo # [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115D8..115DB ; Lo # [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +11600..1162F ; Lo # [48] MODI LETTER A..MODI LETTER LLA +11644 ; Lo # MODI SIGN HUVA +11680..116AA ; Lo # [43] TAKRI LETTER A..TAKRI LETTER RRA +116B8 ; Lo # TAKRI LETTER ARCHAIC KHA +11700..1171A ; Lo # [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; Lo # [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; Lo # [44] DOGRA LETTER A..DOGRA LETTER RRA +118FF..11906 ; Lo # [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; Lo # DIVES AKURU LETTER O +1190C..11913 ; Lo # [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; Lo # [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; Lo # [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +1193F ; Lo # DIVES AKURU PREFIXED NASAL SIGN +11941 ; Lo # DIVES AKURU INITIAL RA +119A0..119A7 ; Lo # [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; Lo # [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119E1 ; Lo # NANDINAGARI SIGN AVAGRAHA +119E3 ; Lo # NANDINAGARI HEADSTROKE +11A00 ; Lo # ZANABAZAR SQUARE LETTER A +11A0B..11A32 ; Lo # [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A3A ; Lo # ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A50 ; Lo # SOYOMBO LETTER A +11A5C..11A89 ; Lo # [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A9D ; Lo # SOYOMBO MARK PLUTA +11AB0..11AF8 ; Lo # [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; Lo # [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11C00..11C08 ; Lo # [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; Lo # [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C40 ; Lo # BHAIKSUKI SIGN AVAGRAHA +11C72..11C8F ; Lo # [30] MARCHEN LETTER KA..MARCHEN LETTER A +11D00..11D06 ; Lo # [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; Lo # [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; Lo # [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D46 ; Lo # MASARAM GONDI REPHA +11D60..11D65 ; Lo # [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; Lo # [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; Lo # [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D98 ; Lo # GUNJALA GONDI OM +11EE0..11EF2 ; Lo # [19] MAKASAR LETTER KA..MAKASAR ANGKA +11F02 ; Lo # KAWI SIGN REPHA +11F04..11F10 ; Lo # [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; Lo # [34] KAWI LETTER KA..KAWI LETTER JNYA +11FB0 ; Lo # LISU LETTER YHA +12000..12399 ; Lo # [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12480..12543 ; Lo # [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; Lo # [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +13000..1342F ; Lo # [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13441..13446 ; Lo # [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; Lo # [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; Lo # [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; Lo # [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +16800..16A38 ; Lo # [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; Lo # [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; Lo # [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AD0..16AED ; Lo # [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16B00..16B2F ; Lo # [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B63..16B77 ; Lo # [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; Lo # [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D43..16D6A ; Lo # [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16F00..16F4A ; Lo # [75] MIAO LETTER PA..MIAO LETTER RTE +16F50 ; Lo # MIAO LETTER NASALIZATION +17000..187F7 ; Lo # [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 +18800..18CD5 ; Lo # [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D08 ; Lo # [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +1B000..1B122 ; Lo # [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; Lo # HIRAGANA LETTER SMALL KO +1B150..1B152 ; Lo # [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; Lo # KATAKANA LETTER SMALL KO +1B164..1B167 ; Lo # [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; Lo # [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; Lo # [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; Lo # [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; Lo # [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; Lo # [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1DF0A ; Lo # LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1E100..1E12C ; Lo # [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E14E ; Lo # NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; Lo # [30] TOTO LETTER PA..TOTO LETTER A +1E2C0..1E2EB ; Lo # [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E4D0..1E4EA ; Lo # [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E5D0..1E5ED ; Lo # [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; Lo # OL ONAL SIGN HODDOND +1E7E0..1E7E6 ; Lo # [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; Lo # [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; Lo # [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; Lo # [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; Lo # [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1EE00..1EE03 ; Lo # [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; Lo # [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; Lo # [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; Lo # ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; Lo # ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; Lo # [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; Lo # [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; Lo # ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; Lo # ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; Lo # ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; Lo # ARABIC MATHEMATICAL TAILED HAH +1EE49 ; Lo # ARABIC MATHEMATICAL TAILED YEH +1EE4B ; Lo # ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; Lo # [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; Lo # [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; Lo # ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; Lo # ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; Lo # ARABIC MATHEMATICAL TAILED DAD +1EE5B ; Lo # ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; Lo # ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; Lo # ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; Lo # [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; Lo # ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; Lo # [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; Lo # [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; Lo # [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; Lo # [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; Lo # ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; Lo # [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; Lo # [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; Lo # [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; Lo # [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; Lo # [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +20000..2A6DF ; Lo # [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B739 ; Lo # [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 +2B740..2B81D ; Lo # [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEA1 ; Lo # [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2CEB0..2EBE0 ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Lo # [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..323AF ; Lo # [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF + +# Total code points: 136477 + +# ================================================ + +# General_Category=Nonspacing_Mark + +0300..036F ; Mn # [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0483..0487 ; Mn # [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0591..05BD ; Mn # [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; Mn # HEBREW POINT RAFE +05C1..05C2 ; Mn # [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; Mn # [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Mn # HEBREW POINT QAMATS QATAN +0610..061A ; Mn # [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +064B..065F ; Mn # [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; Mn # ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; Mn # [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; Mn # [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; Mn # [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; Mn # [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; Mn # SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; Mn # [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; Mn # [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; Mn # [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07FD ; Mn # NKO DANTAYALAN +0816..0819 ; Mn # [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081B..0823 ; Mn # [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0825..0827 ; Mn # [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0829..082D ; Mn # [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; Mn # [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0897..089F ; Mn # [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Mn # [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; Mn # [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; Mn # DEVANAGARI VOWEL SIGN OE +093C ; Mn # DEVANAGARI SIGN NUKTA +0941..0948 ; Mn # [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +094D ; Mn # DEVANAGARI SIGN VIRAMA +0951..0957 ; Mn # [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; Mn # [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; Mn # BENGALI SIGN CANDRABINDU +09BC ; Mn # BENGALI SIGN NUKTA +09C1..09C4 ; Mn # [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09CD ; Mn # BENGALI SIGN VIRAMA +09E2..09E3 ; Mn # [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09FE ; Mn # BENGALI SANDHI MARK +0A01..0A02 ; Mn # [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; Mn # GURMUKHI SIGN NUKTA +0A41..0A42 ; Mn # [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Mn # [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; Mn # [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; Mn # GURMUKHI SIGN UDAAT +0A70..0A71 ; Mn # [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; Mn # GURMUKHI SIGN YAKASH +0A81..0A82 ; Mn # [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; Mn # GUJARATI SIGN NUKTA +0AC1..0AC5 ; Mn # [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Mn # [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0ACD ; Mn # GUJARATI SIGN VIRAMA +0AE2..0AE3 ; Mn # [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; Mn # [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; Mn # ORIYA SIGN CANDRABINDU +0B3C ; Mn # ORIYA SIGN NUKTA +0B3F ; Mn # ORIYA VOWEL SIGN I +0B41..0B44 ; Mn # [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B4D ; Mn # ORIYA SIGN VIRAMA +0B55..0B56 ; Mn # [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B62..0B63 ; Mn # [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; Mn # TAMIL SIGN ANUSVARA +0BC0 ; Mn # TAMIL VOWEL SIGN II +0BCD ; Mn # TAMIL SIGN VIRAMA +0C00 ; Mn # TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; Mn # TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Mn # TELUGU SIGN NUKTA +0C3E..0C40 ; Mn # [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; Mn # [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; Mn # [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; Mn # [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; Mn # [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; Mn # KANNADA SIGN CANDRABINDU +0CBC ; Mn # KANNADA SIGN NUKTA +0CBF ; Mn # KANNADA VOWEL SIGN I +0CC6 ; Mn # KANNADA VOWEL SIGN E +0CCC..0CCD ; Mn # [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CE2..0CE3 ; Mn # [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; Mn # [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D3B..0D3C ; Mn # [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D41..0D44 ; Mn # [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D4D ; Mn # MALAYALAM SIGN VIRAMA +0D62..0D63 ; Mn # [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D81 ; Mn # SINHALA SIGN CANDRABINDU +0DCA ; Mn # SINHALA SIGN AL-LAKUNA +0DD2..0DD4 ; Mn # [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Mn # SINHALA VOWEL SIGN DIGA PAA-PILLA +0E31 ; Mn # THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; Mn # [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; Mn # [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; Mn # LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; Mn # [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC8..0ECE ; Mn # [7] LAO TONE MAI EK..LAO YAMAKKAN +0F18..0F19 ; Mn # [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; Mn # TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; Mn # TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; Mn # TIBETAN MARK TSA -PHRU +0F71..0F7E ; Mn # [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; Mn # [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; Mn # [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; Mn # [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Mn # [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; Mn # TIBETAN SYMBOL PADMA GDAN +102D..1030 ; Mn # [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; Mn # [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1039..103A ; Mn # [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103D..103E ; Mn # [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; Mn # [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; Mn # [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; Mn # [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; Mn # MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; Mn # [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +108D ; Mn # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; Mn # MYANMAR VOWEL SIGN AITON AI +135D..135F ; Mn # [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; Mn # [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1732..1733 ; Mn # [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1752..1753 ; Mn # [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; Mn # [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; Mn # [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; Mn # [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; Mn # KHMER SIGN NIKAHIT +17C9..17D3 ; Mn # [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17DD ; Mn # KHMER SIGN ATTHACAN +180B..180D ; Mn # [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Mn # MONGOLIAN FREE VARIATION SELECTOR FOUR +1885..1886 ; Mn # [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +18A9 ; Mn # MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; Mn # [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; Mn # [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; Mn # LIMBU SMALL LETTER ANUSVARA +1939..193B ; Mn # [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; Mn # [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; Mn # BUGINESE VOWEL SIGN AE +1A56 ; Mn # TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; Mn # [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; Mn # TAI THAM SIGN SAKOT +1A62 ; Mn # TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; Mn # [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; Mn # [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; Mn # TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AB0..1ABD ; Mn # [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABF..1ACE ; Mn # [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1B00..1B03 ; Mn # [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; Mn # BALINESE SIGN REREKAN +1B36..1B3A ; Mn # [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; Mn # BALINESE VOWEL SIGN LA LENGA +1B42 ; Mn # BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; Mn # [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; Mn # [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; Mn # [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; Mn # [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAB..1BAD ; Mn # [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BE6 ; Mn # BATAK SIGN TOMPI +1BE8..1BE9 ; Mn # [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; Mn # BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; Mn # [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1C2C..1C33 ; Mn # [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; Mn # [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1CD0..1CD2 ; Mn # [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; Mn # [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; Mn # [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; Mn # VEDIC SIGN TIRYAK +1CF4 ; Mn # VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; Mn # [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DFF ; Mn # [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +20D0..20DC ; Mn # [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20E1 ; Mn # COMBINING LEFT RIGHT ARROW ABOVE +20E5..20F0 ; Mn # [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2CEF..2CF1 ; Mn # [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D7F ; Mn # TIFINAGH CONSONANT JOINER +2DE0..2DFF ; Mn # [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +302A..302D ; Mn # [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +3099..309A ; Mn # [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A66F ; Mn # COMBINING CYRILLIC VZMET +A674..A67D ; Mn # [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A69E..A69F ; Mn # [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; Mn # [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A802 ; Mn # SYLOTI NAGRI SIGN DVISVARA +A806 ; Mn # SYLOTI NAGRI SIGN HASANTA +A80B ; Mn # SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; Mn # [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A82C ; Mn # SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4..A8C5 ; Mn # [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8E0..A8F1 ; Mn # [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8FF ; Mn # DEVANAGARI VOWEL SIGN AY +A926..A92D ; Mn # [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; Mn # [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A980..A982 ; Mn # [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A9B3 ; Mn # JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; Mn # [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; Mn # [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9E5 ; Mn # MYANMAR SIGN SHAN SAW +AA29..AA2E ; Mn # [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; Mn # [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; Mn # [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; Mn # CHAM CONSONANT SIGN FINAL NG +AA4C ; Mn # CHAM CONSONANT SIGN FINAL M +AA7C ; Mn # MYANMAR SIGN TAI LAING TONE-2 +AAB0 ; Mn # TAI VIET MAI KANG +AAB2..AAB4 ; Mn # [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; Mn # [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; Mn # [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; Mn # TAI VIET TONE MAI THO +AAEC..AAED ; Mn # [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAF6 ; Mn # MEETEI MAYEK VIRAMA +ABE5 ; Mn # MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; Mn # MEETEI MAYEK VOWEL SIGN UNAP +ABED ; Mn # MEETEI MAYEK APUN IYEK +FB1E ; Mn # HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; Mn # [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +101FD ; Mn # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; Mn # COPTIC EPACT THOUSANDS MARK +10376..1037A ; Mn # [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10A01..10A03 ; Mn # [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Mn # [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Mn # [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; Mn # [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; Mn # KHAROSHTHI VIRAMA +10AE5..10AE6 ; Mn # [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; Mn # [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D69..10D6D ; Mn # [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10EAB..10EAC ; Mn # [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EFC..10EFF ; Mn # [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10F46..10F50 ; Mn # [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Mn # [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11001 ; Mn # BRAHMI SIGN ANUSVARA +11038..11046 ; Mn # [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Mn # BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Mn # [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +1107F..11081 ; Mn # [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; Mn # [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; Mn # [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Mn # KAITHI VOWEL SIGN VOCALIC R +11100..11102 ; Mn # [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11127..1112B ; Mn # [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11134 ; Mn # [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11173 ; Mn # MAHAJANI SIGN NUKTA +11180..11181 ; Mn # [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; Mn # [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C9..111CC ; Mn # [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CF ; Mn # SHARADA SIGN INVERTED CANDRABINDU +1122F..11231 ; Mn # [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; Mn # KHOJKI SIGN ANUSVARA +11236..11237 ; Mn # [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; Mn # KHOJKI SIGN SUKUN +11241 ; Mn # KHOJKI VOWEL SIGN VOCALIC R +112DF ; Mn # KHUDAWADI SIGN ANUSVARA +112E3..112EA ; Mn # [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; Mn # [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +1133B..1133C ; Mn # [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +11340 ; Mn # GRANTHA VOWEL SIGN II +11366..1136C ; Mn # [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; Mn # [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113BB..113C0 ; Mn # [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113CE ; Mn # TULU-TIGALARI SIGN VIRAMA +113D0 ; Mn # TULU-TIGALARI CONJOINER +113D2 ; Mn # TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; Mn # [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11438..1143F ; Mn # [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; Mn # [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11446 ; Mn # NEWA SIGN NUKTA +1145E ; Mn # NEWA SANDHI MARK +114B3..114B8 ; Mn # [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; Mn # TIRHUTA VOWEL SIGN SHORT E +114BF..114C0 ; Mn # [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; Mn # [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115B2..115B5 ; Mn # [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; Mn # [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; Mn # [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; Mn # [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; Mn # [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; Mn # MODI SIGN ANUSVARA +1163F..11640 ; Mn # [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; Mn # TAKRI SIGN ANUSVARA +116AD ; Mn # TAKRI VOWEL SIGN AA +116B0..116B5 ; Mn # [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B7 ; Mn # TAKRI SIGN NUKTA +1171D ; Mn # AHOM CONSONANT SIGN MEDIAL LA +1171F ; Mn # AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; Mn # [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; Mn # [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; Mn # [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; Mn # [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +1193B..1193C ; Mn # [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193E ; Mn # DIVES AKURU VIRAMA +11943 ; Mn # DIVES AKURU SIGN NUKTA +119D4..119D7 ; Mn # [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; Mn # [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; Mn # NANDINAGARI SIGN VIRAMA +11A01..11A0A ; Mn # [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; Mn # [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; Mn # [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; Mn # ZANABAZAR SQUARE SUBJOINER +11A51..11A56 ; Mn # [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; Mn # [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; Mn # [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98..11A99 ; Mn # [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11C30..11C36 ; Mn # [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Mn # [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; Mn # BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; Mn # [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; Mn # [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; Mn # [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; Mn # [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; Mn # [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Mn # MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Mn # [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; Mn # [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; Mn # MASARAM GONDI RA-KARA +11D90..11D91 ; Mn # [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; Mn # GUNJALA GONDI SIGN ANUSVARA +11D97 ; Mn # GUNJALA GONDI VIRAMA +11EF3..11EF4 ; Mn # [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11F00..11F01 ; Mn # [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F36..11F3A ; Mn # [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F40 ; Mn # KAWI VOWEL SIGN EU +11F42 ; Mn # KAWI CONJOINER +11F5A ; Mn # KAWI SIGN NUKTA +13440 ; Mn # EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13447..13455 ; Mn # [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; Mn # [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; Mn # [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16AF0..16AF4 ; Mn # [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; Mn # [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16F4F ; Mn # MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; Mn # [4] MIAO TONE RIGHT..MIAO TONE BELOW +16FE4 ; Mn # KHITAN SMALL SCRIPT FILLER +1BC9D..1BC9E ; Mn # [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Mn # [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Mn # [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D167..1D169 ; Mn # [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D17B..1D182 ; Mn # [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; Mn # [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; Mn # [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; Mn # [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; Mn # [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; Mn # [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; Mn # SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; Mn # SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; Mn # [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; Mn # [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1E000..1E006 ; Mn # [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Mn # [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Mn # [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Mn # [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Mn # [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E08F ; Mn # COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E130..1E136 ; Mn # [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Mn # TOTO SIGN RISING TONE +1E2EC..1E2EF ; Mn # [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E4EC..1E4EF ; Mn # [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; Mn # [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E8D0..1E8D6 ; Mn # [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; Mn # [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +E0100..E01EF ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 2020 + +# ================================================ + +# General_Category=Enclosing_Mark + +0488..0489 ; Me # [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +1ABE ; Me # COMBINING PARENTHESES OVERLAY +20DD..20E0 ; Me # [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E2..20E4 ; Me # [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +A670..A672 ; Me # [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN + +# Total code points: 13 + +# ================================================ + +# General_Category=Spacing_Mark + +0903 ; Mc # DEVANAGARI SIGN VISARGA +093B ; Mc # DEVANAGARI VOWEL SIGN OOE +093E..0940 ; Mc # [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0949..094C ; Mc # [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094E..094F ; Mc # [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0982..0983 ; Mc # [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +09BE..09C0 ; Mc # [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C7..09C8 ; Mc # [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; Mc # [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09D7 ; Mc # BENGALI AU LENGTH MARK +0A03 ; Mc # GURMUKHI SIGN VISARGA +0A3E..0A40 ; Mc # [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A83 ; Mc # GUJARATI SIGN VISARGA +0ABE..0AC0 ; Mc # [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC9 ; Mc # GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; Mc # [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0B02..0B03 ; Mc # [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B3E ; Mc # ORIYA VOWEL SIGN AA +0B40 ; Mc # ORIYA VOWEL SIGN II +0B47..0B48 ; Mc # [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; Mc # [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B57 ; Mc # ORIYA AU LENGTH MARK +0BBE..0BBF ; Mc # [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC1..0BC2 ; Mc # [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; Mc # [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; Mc # [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BD7 ; Mc # TAMIL AU LENGTH MARK +0C01..0C03 ; Mc # [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C41..0C44 ; Mc # [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C82..0C83 ; Mc # [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0CBE ; Mc # KANNADA VOWEL SIGN AA +0CC0..0CC4 ; Mc # [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC7..0CC8 ; Mc # [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Mc # [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CD5..0CD6 ; Mc # [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CF3 ; Mc # KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D02..0D03 ; Mc # [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D3E..0D40 ; Mc # [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D46..0D48 ; Mc # [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; Mc # [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D57 ; Mc # MALAYALAM AU LENGTH MARK +0D82..0D83 ; Mc # [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0DCF..0DD1 ; Mc # [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD8..0DDF ; Mc # [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DF2..0DF3 ; Mc # [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0F3E..0F3F ; Mc # [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F7F ; Mc # TIBETAN SIGN RNAM BCAD +102B..102C ; Mc # [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +1031 ; Mc # MYANMAR VOWEL SIGN E +1038 ; Mc # MYANMAR SIGN VISARGA +103B..103C ; Mc # [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +1056..1057 ; Mc # [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1062..1064 ; Mc # [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1067..106D ; Mc # [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +1083..1084 ; Mc # [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1087..108C ; Mc # [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108F ; Mc # MYANMAR SIGN RUMAI PALAUNG TONE-5 +109A..109C ; Mc # [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +1715 ; Mc # TAGALOG SIGN PAMUDPOD +1734 ; Mc # HANUNOO SIGN PAMUDPOD +17B6 ; Mc # KHMER VOWEL SIGN AA +17BE..17C5 ; Mc # [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C7..17C8 ; Mc # [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +1923..1926 ; Mc # [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1929..192B ; Mc # [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; Mc # [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1933..1938 ; Mc # [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1A19..1A1A ; Mc # [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A55 ; Mc # TAI THAM CONSONANT SIGN MEDIAL RA +1A57 ; Mc # TAI THAM CONSONANT SIGN LA TANG LAI +1A61 ; Mc # TAI THAM VOWEL SIGN A +1A63..1A64 ; Mc # [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A6D..1A72 ; Mc # [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1B04 ; Mc # BALINESE SIGN BISAH +1B35 ; Mc # BALINESE VOWEL SIGN TEDUNG +1B3B ; Mc # BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D..1B41 ; Mc # [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43..1B44 ; Mc # [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B82 ; Mc # SUNDANESE SIGN PANGWISAD +1BA1 ; Mc # SUNDANESE CONSONANT SIGN PAMINGKAL +1BA6..1BA7 ; Mc # [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BAA ; Mc # SUNDANESE SIGN PAMAAEH +1BE7 ; Mc # BATAK VOWEL SIGN E +1BEA..1BEC ; Mc # [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BEE ; Mc # BATAK VOWEL SIGN U +1BF2..1BF3 ; Mc # [2] BATAK PANGOLAT..BATAK PANONGONAN +1C24..1C2B ; Mc # [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C34..1C35 ; Mc # [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1CE1 ; Mc # VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CF7 ; Mc # VEDIC SIGN ATIKRAMA +302E..302F ; Mc # [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +A823..A824 ; Mc # [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A827 ; Mc # SYLOTI NAGRI VOWEL SIGN OO +A880..A881 ; Mc # [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A8B4..A8C3 ; Mc # [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A952..A953 ; Mc # [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A983 ; Mc # JAVANESE SIGN WIGNYAN +A9B4..A9B5 ; Mc # [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9BA..A9BB ; Mc # [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BE..A9C0 ; Mc # [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +AA2F..AA30 ; Mc # [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA33..AA34 ; Mc # [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA4D ; Mc # CHAM CONSONANT SIGN FINAL H +AA7B ; Mc # MYANMAR SIGN PAO KAREN TONE +AA7D ; Mc # MYANMAR SIGN TAI LAING TONE-5 +AAEB ; Mc # MEETEI MAYEK VOWEL SIGN II +AAEE..AAEF ; Mc # [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF5 ; Mc # MEETEI MAYEK VOWEL SIGN VISARGA +ABE3..ABE4 ; Mc # [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE6..ABE7 ; Mc # [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE9..ABEA ; Mc # [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEC ; Mc # MEETEI MAYEK LUM IYEK +11000 ; Mc # BRAHMI SIGN CANDRABINDU +11002 ; Mc # BRAHMI SIGN VISARGA +11082 ; Mc # KAITHI SIGN VISARGA +110B0..110B2 ; Mc # [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B7..110B8 ; Mc # [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +1112C ; Mc # CHAKMA VOWEL SIGN E +11145..11146 ; Mc # [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11182 ; Mc # SHARADA SIGN VISARGA +111B3..111B5 ; Mc # [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111BF..111C0 ; Mc # [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111CE ; Mc # SHARADA VOWEL SIGN PRISHTHAMATRA E +1122C..1122E ; Mc # [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +11232..11233 ; Mc # [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11235 ; Mc # KHOJKI SIGN VIRAMA +112E0..112E2 ; Mc # [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +11302..11303 ; Mc # [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +1133E..1133F ; Mc # [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I +11341..11344 ; Mc # [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; Mc # [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; Mc # [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11357 ; Mc # GRANTHA AU LENGTH MARK +11362..11363 ; Mc # [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +113B8..113BA ; Mc # [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113C2 ; Mc # TULU-TIGALARI VOWEL SIGN EE +113C5 ; Mc # TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; Mc # [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; Mc # [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113CF ; Mc # TULU-TIGALARI SIGN LOOPED VIRAMA +11435..11437 ; Mc # [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11440..11441 ; Mc # [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11445 ; Mc # NEWA SIGN VISARGA +114B0..114B2 ; Mc # [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II +114B9 ; Mc # TIRHUTA VOWEL SIGN E +114BB..114BE ; Mc # [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU +114C1 ; Mc # TIRHUTA SIGN VISARGA +115AF..115B1 ; Mc # [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II +115B8..115BB ; Mc # [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BE ; Mc # SIDDHAM SIGN VISARGA +11630..11632 ; Mc # [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +1163B..1163C ; Mc # [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163E ; Mc # MODI SIGN VISARGA +116AC ; Mc # TAKRI SIGN VISARGA +116AE..116AF ; Mc # [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B6 ; Mc # TAKRI SIGN VIRAMA +1171E ; Mc # AHOM CONSONANT SIGN MEDIAL RA +11720..11721 ; Mc # [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11726 ; Mc # AHOM VOWEL SIGN E +1182C..1182E ; Mc # [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +11838 ; Mc # DOGRA SIGN VISARGA +11930..11935 ; Mc # [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E +11937..11938 ; Mc # [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193D ; Mc # DIVES AKURU SIGN HALANTA +11940 ; Mc # DIVES AKURU MEDIAL YA +11942 ; Mc # DIVES AKURU MEDIAL RA +119D1..119D3 ; Mc # [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119DC..119DF ; Mc # [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E4 ; Mc # NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A39 ; Mc # ZANABAZAR SQUARE SIGN VISARGA +11A57..11A58 ; Mc # [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A97 ; Mc # SOYOMBO SIGN VISARGA +11C2F ; Mc # BHAIKSUKI VOWEL SIGN AA +11C3E ; Mc # BHAIKSUKI SIGN VISARGA +11CA9 ; Mc # MARCHEN SUBJOINED LETTER YA +11CB1 ; Mc # MARCHEN VOWEL SIGN I +11CB4 ; Mc # MARCHEN VOWEL SIGN O +11D8A..11D8E ; Mc # [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D93..11D94 ; Mc # [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D96 ; Mc # GUNJALA GONDI SIGN VISARGA +11EF5..11EF6 ; Mc # [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11F03 ; Mc # KAWI SIGN VISARGA +11F34..11F35 ; Mc # [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F3E..11F3F ; Mc # [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F41 ; Mc # KAWI SIGN KILLER +1612A..1612C ; Mc # [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +16F51..16F87 ; Mc # [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16FF0..16FF1 ; Mc # [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +1D165..1D166 ; Mc # [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D16D..1D172 ; Mc # [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 + +# Total code points: 468 + +# ================================================ + +# General_Category=Decimal_Number + +0030..0039 ; Nd # [10] DIGIT ZERO..DIGIT NINE +0660..0669 ; Nd # [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +06F0..06F9 ; Nd # [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +07C0..07C9 ; Nd # [10] NKO DIGIT ZERO..NKO DIGIT NINE +0966..096F ; Nd # [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +09E6..09EF ; Nd # [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +0A66..0A6F ; Nd # [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0AE6..0AEF ; Nd # [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0B66..0B6F ; Nd # [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0BE6..0BEF ; Nd # [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0C66..0C6F ; Nd # [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0CE6..0CEF ; Nd # [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0D66..0D6F ; Nd # [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0DE6..0DEF ; Nd # [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE +0E50..0E59 ; Nd # [10] THAI DIGIT ZERO..THAI DIGIT NINE +0ED0..0ED9 ; Nd # [10] LAO DIGIT ZERO..LAO DIGIT NINE +0F20..0F29 ; Nd # [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +1040..1049 ; Nd # [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +1090..1099 ; Nd # [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE +17E0..17E9 ; Nd # [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +1810..1819 ; Nd # [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1946..194F ; Nd # [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +19D0..19D9 ; Nd # [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +1A80..1A89 ; Nd # [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE +1A90..1A99 ; Nd # [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1B50..1B59 ; Nd # [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1BB0..1BB9 ; Nd # [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE +1C40..1C49 ; Nd # [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE +1C50..1C59 ; Nd # [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE +A620..A629 ; Nd # [10] VAI DIGIT ZERO..VAI DIGIT NINE +A8D0..A8D9 ; Nd # [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE +A900..A909 ; Nd # [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE +A9D0..A9D9 ; Nd # [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE +A9F0..A9F9 ; Nd # [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE +AA50..AA59 ; Nd # [10] CHAM DIGIT ZERO..CHAM DIGIT NINE +ABF0..ABF9 ; Nd # [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE +FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +104A0..104A9 ; Nd # [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +10D30..10D39 ; Nd # [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; Nd # [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +11066..1106F ; Nd # [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +110F0..110F9 ; Nd # [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE +11136..1113F ; Nd # [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE +111D0..111D9 ; Nd # [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE +112F0..112F9 ; Nd # [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE +11450..11459 ; Nd # [10] NEWA DIGIT ZERO..NEWA DIGIT NINE +114D0..114D9 ; Nd # [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE +11650..11659 ; Nd # [10] MODI DIGIT ZERO..MODI DIGIT NINE +116C0..116C9 ; Nd # [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; Nd # [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE +11730..11739 ; Nd # [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +118E0..118E9 ; Nd # [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE +11950..11959 ; Nd # [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE +11BF0..11BF9 ; Nd # [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE +11C50..11C59 ; Nd # [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE +11D50..11D59 ; Nd # [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE +11DA0..11DA9 ; Nd # [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11F50..11F59 ; Nd # [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +16130..16139 ; Nd # [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE +16A60..16A69 ; Nd # [10] MRO DIGIT ZERO..MRO DIGIT NINE +16AC0..16AC9 ; Nd # [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE +16B50..16B59 ; Nd # [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE +16D70..16D79 ; Nd # [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE +1CCF0..1CCF9 ; Nd # [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1D7CE..1D7FF ; Nd # [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1E140..1E149 ; Nd # [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE +1E2F0..1E2F9 ; Nd # [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E4F0..1E4F9 ; Nd # [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5F1..1E5FA ; Nd # [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E950..1E959 ; Nd # [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE +1FBF0..1FBF9 ; Nd # [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE + +# Total code points: 760 + +# ================================================ + +# General_Category=Letter_Number + +16EE..16F0 ; Nl # [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +2160..2182 ; Nl # [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2185..2188 ; Nl # [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +3007 ; Nl # IDEOGRAPHIC NUMBER ZERO +3021..3029 ; Nl # [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3038..303A ; Nl # [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +A6E6..A6EF ; Nl # [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +10140..10174 ; Nl # [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10341 ; Nl # GOTHIC LETTER NINETY +1034A ; Nl # GOTHIC LETTER NINE HUNDRED +103D1..103D5 ; Nl # [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +12400..1246E ; Nl # [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM + +# Total code points: 236 + +# ================================================ + +# General_Category=Other_Number + +00B2..00B3 ; No # [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B9 ; No # SUPERSCRIPT ONE +00BC..00BE ; No # [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +09F4..09F9 ; No # [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN +0B72..0B77 ; No # [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS +0BF0..0BF2 ; No # [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND +0C78..0C7E ; No # [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR +0D58..0D5E ; No # [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH +0D70..0D78 ; No # [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS +0F2A..0F33 ; No # [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO +1369..137C ; No # [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND +17F0..17F9 ; No # [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON +19DA ; No # NEW TAI LUE THAM DIGIT ONE +2070 ; No # SUPERSCRIPT ZERO +2074..2079 ; No # [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +2080..2089 ; No # [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +2150..215F ; No # [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE +2189 ; No # VULGAR FRACTION ZERO THIRDS +2460..249B ; No # [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP +24EA..24FF ; No # [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO +2776..2793 ; No # [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +2CFD ; No # COPTIC FRACTION ONE HALF +3192..3195 ; No # [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3220..3229 ; No # [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +3248..324F ; No # [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE +3251..325F ; No # [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +3280..3289 ; No # [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +32B1..32BF ; No # [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +A830..A835 ; No # [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS +10107..10133 ; No # [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND +10175..10178 ; No # [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN +1018A..1018B ; No # [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN +102E1..102FB ; No # [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED +10320..10323 ; No # [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +10858..1085F ; No # [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND +10879..1087F ; No # [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY +108A7..108AF ; No # [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED +108FB..108FF ; No # [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED +10916..1091B ; No # [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE +109BC..109BD ; No # [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF +109C0..109CF ; No # [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY +109D2..109FF ; No # [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS +10A40..10A48 ; No # [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF +10A7D..10A7E ; No # [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY +10A9D..10A9F ; No # [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY +10AEB..10AEF ; No # [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED +10B58..10B5F ; No # [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND +10B78..10B7F ; No # [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND +10BA9..10BAF ; No # [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED +10CFA..10CFF ; No # [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND +10E60..10E7E ; No # [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS +10F1D..10F26 ; No # [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF +10F51..10F54 ; No # [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED +10FC5..10FCB ; No # [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED +11052..11065 ; No # [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND +111E1..111F4 ; No # [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND +1173A..1173B ; No # [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY +118EA..118F2 ; No # [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY +11C5A..11C6C ; No # [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK +11FC0..11FD4 ; No # [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH +16B5B..16B61 ; No # [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS +16E80..16E96 ; No # [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM +1D2C0..1D2D3 ; No # [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN +1D2E0..1D2F3 ; No # [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN +1D360..1D378 ; No # [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE +1E8C7..1E8CF ; No # [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE +1EC71..1ECAB ; No # [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE +1ECAD..1ECAF ; No # [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS +1ECB1..1ECB4 ; No # [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK +1ED01..1ED2D ; No # [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND +1ED2F..1ED3D ; No # [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH +1F100..1F10C ; No # [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO + +# Total code points: 915 + +# ================================================ + +# General_Category=Space_Separator + +0020 ; Zs # SPACE +00A0 ; Zs # NO-BREAK SPACE +1680 ; Zs # OGHAM SPACE MARK +2000..200A ; Zs # [11] EN QUAD..HAIR SPACE +202F ; Zs # NARROW NO-BREAK SPACE +205F ; Zs # MEDIUM MATHEMATICAL SPACE +3000 ; Zs # IDEOGRAPHIC SPACE + +# Total code points: 17 + +# ================================================ + +# General_Category=Line_Separator + +2028 ; Zl # LINE SEPARATOR + +# Total code points: 1 + +# ================================================ + +# General_Category=Paragraph_Separator + +2029 ; Zp # PARAGRAPH SEPARATOR + +# Total code points: 1 + +# ================================================ + +# General_Category=Control + +0000..001F ; Cc # [32] <control-0000>..<control-001F> +007F..009F ; Cc # [33] <control-007F>..<control-009F> + +# Total code points: 65 + +# ================================================ + +# General_Category=Format + +00AD ; Cf # SOFT HYPHEN +0600..0605 ; Cf # [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE +061C ; Cf # ARABIC LETTER MARK +06DD ; Cf # ARABIC END OF AYAH +070F ; Cf # SYRIAC ABBREVIATION MARK +0890..0891 ; Cf # [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +08E2 ; Cf # ARABIC DISPUTED END OF AYAH +180E ; Cf # MONGOLIAN VOWEL SEPARATOR +200B..200F ; Cf # [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK +202A..202E ; Cf # [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +2060..2064 ; Cf # [5] WORD JOINER..INVISIBLE PLUS +2066..206F ; Cf # [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +FEFF ; Cf # ZERO WIDTH NO-BREAK SPACE +FFF9..FFFB ; Cf # [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +110BD ; Cf # KAITHI NUMBER SIGN +110CD ; Cf # KAITHI NUMBER SIGN ABOVE +13430..1343F ; Cf # [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE +1BCA0..1BCA3 ; Cf # [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1D173..1D17A ; Cf # [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +E0001 ; Cf # LANGUAGE TAG +E0020..E007F ; Cf # [96] TAG SPACE..CANCEL TAG + +# Total code points: 170 + +# ================================================ + +# General_Category=Private_Use + +E000..F8FF ; Co # [6400] <private-use-E000>..<private-use-F8FF> +F0000..FFFFD ; Co # [65534] <private-use-F0000>..<private-use-FFFFD> +100000..10FFFD; Co # [65534] <private-use-100000>..<private-use-10FFFD> + +# Total code points: 137468 + +# ================================================ + +# General_Category=Surrogate + +D800..DFFF ; Cs # [2048] <surrogate-D800>..<surrogate-DFFF> + +# Total code points: 2048 + +# ================================================ + +# General_Category=Dash_Punctuation + +002D ; Pd # HYPHEN-MINUS +058A ; Pd # ARMENIAN HYPHEN +05BE ; Pd # HEBREW PUNCTUATION MAQAF +1400 ; Pd # CANADIAN SYLLABICS HYPHEN +1806 ; Pd # MONGOLIAN TODO SOFT HYPHEN +2010..2015 ; Pd # [6] HYPHEN..HORIZONTAL BAR +2E17 ; Pd # DOUBLE OBLIQUE HYPHEN +2E1A ; Pd # HYPHEN WITH DIAERESIS +2E3A..2E3B ; Pd # [2] TWO-EM DASH..THREE-EM DASH +2E40 ; Pd # DOUBLE HYPHEN +2E5D ; Pd # OBLIQUE HYPHEN +301C ; Pd # WAVE DASH +3030 ; Pd # WAVY DASH +30A0 ; Pd # KATAKANA-HIRAGANA DOUBLE HYPHEN +FE31..FE32 ; Pd # [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE58 ; Pd # SMALL EM DASH +FE63 ; Pd # SMALL HYPHEN-MINUS +FF0D ; Pd # FULLWIDTH HYPHEN-MINUS +10D6E ; Pd # GARAY HYPHEN +10EAD ; Pd # YEZIDI HYPHENATION MARK + +# Total code points: 27 + +# ================================================ + +# General_Category=Open_Punctuation + +0028 ; Ps # LEFT PARENTHESIS +005B ; Ps # LEFT SQUARE BRACKET +007B ; Ps # LEFT CURLY BRACKET +0F3A ; Ps # TIBETAN MARK GUG RTAGS GYON +0F3C ; Ps # TIBETAN MARK ANG KHANG GYON +169B ; Ps # OGHAM FEATHER MARK +201A ; Ps # SINGLE LOW-9 QUOTATION MARK +201E ; Ps # DOUBLE LOW-9 QUOTATION MARK +2045 ; Ps # LEFT SQUARE BRACKET WITH QUILL +207D ; Ps # SUPERSCRIPT LEFT PARENTHESIS +208D ; Ps # SUBSCRIPT LEFT PARENTHESIS +2308 ; Ps # LEFT CEILING +230A ; Ps # LEFT FLOOR +2329 ; Ps # LEFT-POINTING ANGLE BRACKET +2768 ; Ps # MEDIUM LEFT PARENTHESIS ORNAMENT +276A ; Ps # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276C ; Ps # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276E ; Ps # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770 ; Ps # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2772 ; Ps # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2774 ; Ps # MEDIUM LEFT CURLY BRACKET ORNAMENT +27C5 ; Ps # LEFT S-SHAPED BAG DELIMITER +27E6 ; Ps # MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E8 ; Ps # MATHEMATICAL LEFT ANGLE BRACKET +27EA ; Ps # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EC ; Ps # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27EE ; Ps # MATHEMATICAL LEFT FLATTENED PARENTHESIS +2983 ; Ps # LEFT WHITE CURLY BRACKET +2985 ; Ps # LEFT WHITE PARENTHESIS +2987 ; Ps # Z NOTATION LEFT IMAGE BRACKET +2989 ; Ps # Z NOTATION LEFT BINDING BRACKET +298B ; Ps # LEFT SQUARE BRACKET WITH UNDERBAR +298D ; Ps # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298F ; Ps # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2991 ; Ps # LEFT ANGLE BRACKET WITH DOT +2993 ; Ps # LEFT ARC LESS-THAN BRACKET +2995 ; Ps # DOUBLE LEFT ARC GREATER-THAN BRACKET +2997 ; Ps # LEFT BLACK TORTOISE SHELL BRACKET +29D8 ; Ps # LEFT WIGGLY FENCE +29DA ; Ps # LEFT DOUBLE WIGGLY FENCE +29FC ; Ps # LEFT-POINTING CURVED ANGLE BRACKET +2E22 ; Ps # TOP LEFT HALF BRACKET +2E24 ; Ps # BOTTOM LEFT HALF BRACKET +2E26 ; Ps # LEFT SIDEWAYS U BRACKET +2E28 ; Ps # LEFT DOUBLE PARENTHESIS +2E42 ; Ps # DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E55 ; Ps # LEFT SQUARE BRACKET WITH STROKE +2E57 ; Ps # LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Ps # TOP HALF LEFT PARENTHESIS +2E5B ; Ps # BOTTOM HALF LEFT PARENTHESIS +3008 ; Ps # LEFT ANGLE BRACKET +300A ; Ps # LEFT DOUBLE ANGLE BRACKET +300C ; Ps # LEFT CORNER BRACKET +300E ; Ps # LEFT WHITE CORNER BRACKET +3010 ; Ps # LEFT BLACK LENTICULAR BRACKET +3014 ; Ps # LEFT TORTOISE SHELL BRACKET +3016 ; Ps # LEFT WHITE LENTICULAR BRACKET +3018 ; Ps # LEFT WHITE TORTOISE SHELL BRACKET +301A ; Ps # LEFT WHITE SQUARE BRACKET +301D ; Ps # REVERSED DOUBLE PRIME QUOTATION MARK +FD3F ; Ps # ORNATE RIGHT PARENTHESIS +FE17 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE35 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE37 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE39 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3B ; Ps # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3D ; Ps # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3F ; Ps # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE41 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE43 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE47 ; Ps # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE59 ; Ps # SMALL LEFT PARENTHESIS +FE5B ; Ps # SMALL LEFT CURLY BRACKET +FE5D ; Ps # SMALL LEFT TORTOISE SHELL BRACKET +FF08 ; Ps # FULLWIDTH LEFT PARENTHESIS +FF3B ; Ps # FULLWIDTH LEFT SQUARE BRACKET +FF5B ; Ps # FULLWIDTH LEFT CURLY BRACKET +FF5F ; Ps # FULLWIDTH LEFT WHITE PARENTHESIS +FF62 ; Ps # HALFWIDTH LEFT CORNER BRACKET + +# Total code points: 79 + +# ================================================ + +# General_Category=Close_Punctuation + +0029 ; Pe # RIGHT PARENTHESIS +005D ; Pe # RIGHT SQUARE BRACKET +007D ; Pe # RIGHT CURLY BRACKET +0F3B ; Pe # TIBETAN MARK GUG RTAGS GYAS +0F3D ; Pe # TIBETAN MARK ANG KHANG GYAS +169C ; Pe # OGHAM REVERSED FEATHER MARK +2046 ; Pe # RIGHT SQUARE BRACKET WITH QUILL +207E ; Pe # SUPERSCRIPT RIGHT PARENTHESIS +208E ; Pe # SUBSCRIPT RIGHT PARENTHESIS +2309 ; Pe # RIGHT CEILING +230B ; Pe # RIGHT FLOOR +232A ; Pe # RIGHT-POINTING ANGLE BRACKET +2769 ; Pe # MEDIUM RIGHT PARENTHESIS ORNAMENT +276B ; Pe # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276D ; Pe # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276F ; Pe # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2771 ; Pe # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2773 ; Pe # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2775 ; Pe # MEDIUM RIGHT CURLY BRACKET ORNAMENT +27C6 ; Pe # RIGHT S-SHAPED BAG DELIMITER +27E7 ; Pe # MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E9 ; Pe # MATHEMATICAL RIGHT ANGLE BRACKET +27EB ; Pe # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27ED ; Pe # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EF ; Pe # MATHEMATICAL RIGHT FLATTENED PARENTHESIS +2984 ; Pe # RIGHT WHITE CURLY BRACKET +2986 ; Pe # RIGHT WHITE PARENTHESIS +2988 ; Pe # Z NOTATION RIGHT IMAGE BRACKET +298A ; Pe # Z NOTATION RIGHT BINDING BRACKET +298C ; Pe # RIGHT SQUARE BRACKET WITH UNDERBAR +298E ; Pe # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; Pe # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2992 ; Pe # RIGHT ANGLE BRACKET WITH DOT +2994 ; Pe # RIGHT ARC GREATER-THAN BRACKET +2996 ; Pe # DOUBLE RIGHT ARC LESS-THAN BRACKET +2998 ; Pe # RIGHT BLACK TORTOISE SHELL BRACKET +29D9 ; Pe # RIGHT WIGGLY FENCE +29DB ; Pe # RIGHT DOUBLE WIGGLY FENCE +29FD ; Pe # RIGHT-POINTING CURVED ANGLE BRACKET +2E23 ; Pe # TOP RIGHT HALF BRACKET +2E25 ; Pe # BOTTOM RIGHT HALF BRACKET +2E27 ; Pe # RIGHT SIDEWAYS U BRACKET +2E29 ; Pe # RIGHT DOUBLE PARENTHESIS +2E56 ; Pe # RIGHT SQUARE BRACKET WITH STROKE +2E58 ; Pe # RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E5A ; Pe # TOP HALF RIGHT PARENTHESIS +2E5C ; Pe # BOTTOM HALF RIGHT PARENTHESIS +3009 ; Pe # RIGHT ANGLE BRACKET +300B ; Pe # RIGHT DOUBLE ANGLE BRACKET +300D ; Pe # RIGHT CORNER BRACKET +300F ; Pe # RIGHT WHITE CORNER BRACKET +3011 ; Pe # RIGHT BLACK LENTICULAR BRACKET +3015 ; Pe # RIGHT TORTOISE SHELL BRACKET +3017 ; Pe # RIGHT WHITE LENTICULAR BRACKET +3019 ; Pe # RIGHT WHITE TORTOISE SHELL BRACKET +301B ; Pe # RIGHT WHITE SQUARE BRACKET +301E..301F ; Pe # [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK +FD3E ; Pe # ORNATE LEFT PARENTHESIS +FE18 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE36 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE38 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE3A ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3C ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3E ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE40 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE42 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE44 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE48 ; Pe # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE5A ; Pe # SMALL RIGHT PARENTHESIS +FE5C ; Pe # SMALL RIGHT CURLY BRACKET +FE5E ; Pe # SMALL RIGHT TORTOISE SHELL BRACKET +FF09 ; Pe # FULLWIDTH RIGHT PARENTHESIS +FF3D ; Pe # FULLWIDTH RIGHT SQUARE BRACKET +FF5D ; Pe # FULLWIDTH RIGHT CURLY BRACKET +FF60 ; Pe # FULLWIDTH RIGHT WHITE PARENTHESIS +FF63 ; Pe # HALFWIDTH RIGHT CORNER BRACKET + +# Total code points: 77 + +# ================================================ + +# General_Category=Connector_Punctuation + +005F ; Pc # LOW LINE +203F..2040 ; Pc # [2] UNDERTIE..CHARACTER TIE +2054 ; Pc # INVERTED UNDERTIE +FE33..FE34 ; Pc # [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE4D..FE4F ; Pc # [3] DASHED LOW LINE..WAVY LOW LINE +FF3F ; Pc # FULLWIDTH LOW LINE + +# Total code points: 10 + +# ================================================ + +# General_Category=Other_Punctuation + +0021..0023 ; Po # [3] EXCLAMATION MARK..NUMBER SIGN +0025..0027 ; Po # [3] PERCENT SIGN..APOSTROPHE +002A ; Po # ASTERISK +002C ; Po # COMMA +002E..002F ; Po # [2] FULL STOP..SOLIDUS +003A..003B ; Po # [2] COLON..SEMICOLON +003F..0040 ; Po # [2] QUESTION MARK..COMMERCIAL AT +005C ; Po # REVERSE SOLIDUS +00A1 ; Po # INVERTED EXCLAMATION MARK +00A7 ; Po # SECTION SIGN +00B6..00B7 ; Po # [2] PILCROW SIGN..MIDDLE DOT +00BF ; Po # INVERTED QUESTION MARK +037E ; Po # GREEK QUESTION MARK +0387 ; Po # GREEK ANO TELEIA +055A..055F ; Po # [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK +0589 ; Po # ARMENIAN FULL STOP +05C0 ; Po # HEBREW PUNCTUATION PASEQ +05C3 ; Po # HEBREW PUNCTUATION SOF PASUQ +05C6 ; Po # HEBREW PUNCTUATION NUN HAFUKHA +05F3..05F4 ; Po # [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM +0609..060A ; Po # [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN +060C..060D ; Po # [2] ARABIC COMMA..ARABIC DATE SEPARATOR +061B ; Po # ARABIC SEMICOLON +061D..061F ; Po # [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK +066A..066D ; Po # [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR +06D4 ; Po # ARABIC FULL STOP +0700..070D ; Po # [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS +07F7..07F9 ; Po # [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK +0830..083E ; Po # [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU +085E ; Po # MANDAIC PUNCTUATION +0964..0965 ; Po # [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA +0970 ; Po # DEVANAGARI ABBREVIATION SIGN +09FD ; Po # BENGALI ABBREVIATION SIGN +0A76 ; Po # GURMUKHI ABBREVIATION SIGN +0AF0 ; Po # GUJARATI ABBREVIATION SIGN +0C77 ; Po # TELUGU SIGN SIDDHAM +0C84 ; Po # KANNADA SIGN SIDDHAM +0DF4 ; Po # SINHALA PUNCTUATION KUNDDALIYA +0E4F ; Po # THAI CHARACTER FONGMAN +0E5A..0E5B ; Po # [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT +0F04..0F12 ; Po # [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD +0F14 ; Po # TIBETAN MARK GTER TSHEG +0F85 ; Po # TIBETAN MARK PALUTA +0FD0..0FD4 ; Po # [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA +0FD9..0FDA ; Po # [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS +104A..104F ; Po # [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE +10FB ; Po # GEORGIAN PARAGRAPH SEPARATOR +1360..1368 ; Po # [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR +166E ; Po # CANADIAN SYLLABICS FULL STOP +16EB..16ED ; Po # [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION +1735..1736 ; Po # [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION +17D4..17D6 ; Po # [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH +17D8..17DA ; Po # [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT +1800..1805 ; Po # [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS +1807..180A ; Po # [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU +1944..1945 ; Po # [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK +1A1E..1A1F ; Po # [2] BUGINESE PALLAWA..BUGINESE END OF SECTION +1AA0..1AA6 ; Po # [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA +1AA8..1AAD ; Po # [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG +1B4E..1B4F ; Po # [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN +1B5A..1B60 ; Po # [7] BALINESE PANTI..BALINESE PAMENENG +1B7D..1B7F ; Po # [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK +1BFC..1BFF ; Po # [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT +1C3B..1C3F ; Po # [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK +1C7E..1C7F ; Po # [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD +1CC0..1CC7 ; Po # [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA +1CD3 ; Po # VEDIC SIGN NIHSHVASA +2016..2017 ; Po # [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE +2020..2027 ; Po # [8] DAGGER..HYPHENATION POINT +2030..2038 ; Po # [9] PER MILLE SIGN..CARET +203B..203E ; Po # [4] REFERENCE MARK..OVERLINE +2041..2043 ; Po # [3] CARET INSERTION POINT..HYPHEN BULLET +2047..2051 ; Po # [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY +2053 ; Po # SWUNG DASH +2055..205E ; Po # [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS +2CF9..2CFC ; Po # [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER +2CFE..2CFF ; Po # [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER +2D70 ; Po # TIFINAGH SEPARATOR MARK +2E00..2E01 ; Po # [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E06..2E08 ; Po # [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER +2E0B ; Po # RAISED SQUARE +2E0E..2E16 ; Po # [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE +2E18..2E19 ; Po # [2] INVERTED INTERROBANG..PALM BRANCH +2E1B ; Po # TILDE WITH RING ABOVE +2E1E..2E1F ; Po # [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW +2E2A..2E2E ; Po # [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK +2E30..2E39 ; Po # [10] RING POINT..TOP HALF SECTION SIGN +2E3C..2E3F ; Po # [4] STENOGRAPHIC FULL STOP..CAPITULUM +2E41 ; Po # REVERSED COMMA +2E43..2E4F ; Po # [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER +2E52..2E54 ; Po # [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +3001..3003 ; Po # [3] IDEOGRAPHIC COMMA..DITTO MARK +303D ; Po # PART ALTERNATION MARK +30FB ; Po # KATAKANA MIDDLE DOT +A4FE..A4FF ; Po # [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP +A60D..A60F ; Po # [3] VAI COMMA..VAI QUESTION MARK +A673 ; Po # SLAVONIC ASTERISK +A67E ; Po # CYRILLIC KAVYKA +A6F2..A6F7 ; Po # [6] BAMUM NJAEMLI..BAMUM QUESTION MARK +A874..A877 ; Po # [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD +A8CE..A8CF ; Po # [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA +A8F8..A8FA ; Po # [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET +A8FC ; Po # DEVANAGARI SIGN SIDDHAM +A92E..A92F ; Po # [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA +A95F ; Po # REJANG SECTION MARK +A9C1..A9CD ; Po # [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH +A9DE..A9DF ; Po # [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN +AA5C..AA5F ; Po # [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA +AADE..AADF ; Po # [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI +AAF0..AAF1 ; Po # [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM +ABEB ; Po # MEETEI MAYEK CHEIKHEI +FE10..FE16 ; Po # [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE19 ; Po # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; Po # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE45..FE46 ; Po # [2] SESAME DOT..WHITE SESAME DOT +FE49..FE4C ; Po # [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE50..FE52 ; Po # [3] SMALL COMMA..SMALL FULL STOP +FE54..FE57 ; Po # [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE5F..FE61 ; Po # [3] SMALL NUMBER SIGN..SMALL ASTERISK +FE68 ; Po # SMALL REVERSE SOLIDUS +FE6A..FE6B ; Po # [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT +FF01..FF03 ; Po # [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN +FF05..FF07 ; Po # [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE +FF0A ; Po # FULLWIDTH ASTERISK +FF0C ; Po # FULLWIDTH COMMA +FF0E..FF0F ; Po # [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF1A..FF1B ; Po # [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON +FF1F..FF20 ; Po # [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF3C ; Po # FULLWIDTH REVERSE SOLIDUS +FF61 ; Po # HALFWIDTH IDEOGRAPHIC FULL STOP +FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +10100..10102 ; Po # [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK +1039F ; Po # UGARITIC WORD DIVIDER +103D0 ; Po # OLD PERSIAN WORD DIVIDER +1056F ; Po # CAUCASIAN ALBANIAN CITATION MARK +10857 ; Po # IMPERIAL ARAMAIC SECTION SIGN +1091F ; Po # PHOENICIAN WORD SEPARATOR +1093F ; Po # LYDIAN TRIANGULAR MARK +10A50..10A58 ; Po # [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +10A7F ; Po # OLD SOUTH ARABIAN NUMERIC INDICATOR +10AF0..10AF6 ; Po # [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER +10B39..10B3F ; Po # [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION +10B99..10B9C ; Po # [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT +10F55..10F59 ; Po # [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F86..10F89 ; Po # [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS +11047..1104D ; Po # [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS +110BB..110BC ; Po # [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN +110BE..110C1 ; Po # [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +11140..11143 ; Po # [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK +11174..11175 ; Po # [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK +111C5..111C8 ; Po # [4] SHARADA DANDA..SHARADA SEPARATOR +111CD ; Po # SHARADA SUTRA MARK +111DB ; Po # SHARADA SIGN SIDDHAM +111DD..111DF ; Po # [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 +11238..1123D ; Po # [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN +112A9 ; Po # MULTANI SECTION MARK +113D4..113D5 ; Po # [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA +113D7..113D8 ; Po # [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA +1144B..1144F ; Po # [5] NEWA DANDA..NEWA ABBREVIATION SIGN +1145A..1145B ; Po # [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK +1145D ; Po # NEWA INSERTION SIGN +114C6 ; Po # TIRHUTA ABBREVIATION SIGN +115C1..115D7 ; Po # [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES +11641..11643 ; Po # [3] MODI DANDA..MODI ABBREVIATION SIGN +11660..1166C ; Po # [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT +116B9 ; Po # TAKRI ABBREVIATION SIGN +1173C..1173E ; Po # [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI +1183B ; Po # DOGRA ABBREVIATION SIGN +11944..11946 ; Po # [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK +119E2 ; Po # NANDINAGARI SIGN SIDDHAM +11A3F..11A46 ; Po # [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK +11A9A..11A9C ; Po # [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD +11A9E..11AA2 ; Po # [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 +11B00..11B09 ; Po # [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11BE1 ; Po # SUNUWAR SIGN PVO +11C41..11C45 ; Po # [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 +11C70..11C71 ; Po # [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD +11EF7..11EF8 ; Po # [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION +11F43..11F4F ; Po # [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL +11FFF ; Po # TAMIL PUNCTUATION END OF TEXT +12470..12474 ; Po # [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON +12FF1..12FF2 ; Po # [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 +16A6E..16A6F ; Po # [2] MRO DANDA..MRO DOUBLE DANDA +16AF5 ; Po # BASSA VAH FULL STOP +16B37..16B3B ; Po # [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM +16B44 ; Po # PAHAWH HMONG SIGN XAUS +16D6D..16D6F ; Po # [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA +16E97..16E9A ; Po # [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH +16FE2 ; Po # OLD CHINESE HOOK MARK +1BC9F ; Po # DUPLOYAN PUNCTUATION CHINOOK FULL STOP +1DA87..1DA8B ; Po # [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS +1E5FF ; Po # OL ONAL ABBREVIATION SIGN +1E95E..1E95F ; Po # [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK + +# Total code points: 640 + +# ================================================ + +# General_Category=Math_Symbol + +002B ; Sm # PLUS SIGN +003C..003E ; Sm # [3] LESS-THAN SIGN..GREATER-THAN SIGN +007C ; Sm # VERTICAL LINE +007E ; Sm # TILDE +00AC ; Sm # NOT SIGN +00B1 ; Sm # PLUS-MINUS SIGN +00D7 ; Sm # MULTIPLICATION SIGN +00F7 ; Sm # DIVISION SIGN +03F6 ; Sm # GREEK REVERSED LUNATE EPSILON SYMBOL +0606..0608 ; Sm # [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY +2044 ; Sm # FRACTION SLASH +2052 ; Sm # COMMERCIAL MINUS SIGN +207A..207C ; Sm # [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +208A..208C ; Sm # [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +2118 ; Sm # SCRIPT CAPITAL P +2140..2144 ; Sm # [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y +214B ; Sm # TURNED AMPERSAND +2190..2194 ; Sm # [5] LEFTWARDS ARROW..LEFT RIGHT ARROW +219A..219B ; Sm # [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +21A0 ; Sm # RIGHTWARDS TWO HEADED ARROW +21A3 ; Sm # RIGHTWARDS ARROW WITH TAIL +21A6 ; Sm # RIGHTWARDS ARROW FROM BAR +21AE ; Sm # LEFT RIGHT ARROW WITH STROKE +21CE..21CF ; Sm # [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +21D2 ; Sm # RIGHTWARDS DOUBLE ARROW +21D4 ; Sm # LEFT RIGHT DOUBLE ARROW +21F4..22FF ; Sm # [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP +2320..2321 ; Sm # [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL +237C ; Sm # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +239B..23B3 ; Sm # [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM +23DC..23E1 ; Sm # [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +25B7 ; Sm # WHITE RIGHT-POINTING TRIANGLE +25C1 ; Sm # WHITE LEFT-POINTING TRIANGLE +25F8..25FF ; Sm # [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE +266F ; Sm # MUSIC SHARP SIGN +27C0..27C4 ; Sm # [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C7..27E5 ; Sm # [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK +27F0..27FF ; Sm # [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW +2900..2982 ; Sm # [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON +2999..29D7 ; Sm # [63] DOTTED FENCE..BLACK HOURGLASS +29DC..29FB ; Sm # [32] INCOMPLETE INFINITY..TRIPLE PLUS +29FE..2AFF ; Sm # [258] TINY..N-ARY WHITE VERTICAL BAR +2B30..2B44 ; Sm # [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET +2B47..2B4C ; Sm # [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +FB29 ; Sm # HEBREW LETTER ALTERNATIVE PLUS SIGN +FE62 ; Sm # SMALL PLUS SIGN +FE64..FE66 ; Sm # [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FF0B ; Sm # FULLWIDTH PLUS SIGN +FF1C..FF1E ; Sm # [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF5C ; Sm # FULLWIDTH VERTICAL LINE +FF5E ; Sm # FULLWIDTH TILDE +FFE2 ; Sm # FULLWIDTH NOT SIGN +FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +10D8E..10D8F ; Sm # [2] GARAY PLUS SIGN..GARAY MINUS SIGN +1D6C1 ; Sm # MATHEMATICAL BOLD NABLA +1D6DB ; Sm # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6FB ; Sm # MATHEMATICAL ITALIC NABLA +1D715 ; Sm # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D735 ; Sm # MATHEMATICAL BOLD ITALIC NABLA +1D74F ; Sm # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D76F ; Sm # MATHEMATICAL SANS-SERIF BOLD NABLA +1D789 ; Sm # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D7A9 ; Sm # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7C3 ; Sm # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1EEF0..1EEF1 ; Sm # [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL + +# Total code points: 950 + +# ================================================ + +# General_Category=Currency_Symbol + +0024 ; Sc # DOLLAR SIGN +00A2..00A5 ; Sc # [4] CENT SIGN..YEN SIGN +058F ; Sc # ARMENIAN DRAM SIGN +060B ; Sc # AFGHANI SIGN +07FE..07FF ; Sc # [2] NKO DOROME SIGN..NKO TAMAN SIGN +09F2..09F3 ; Sc # [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN +09FB ; Sc # BENGALI GANDA MARK +0AF1 ; Sc # GUJARATI RUPEE SIGN +0BF9 ; Sc # TAMIL RUPEE SIGN +0E3F ; Sc # THAI CURRENCY SYMBOL BAHT +17DB ; Sc # KHMER CURRENCY SYMBOL RIEL +20A0..20C0 ; Sc # [33] EURO-CURRENCY SIGN..SOM SIGN +A838 ; Sc # NORTH INDIC RUPEE MARK +FDFC ; Sc # RIAL SIGN +FE69 ; Sc # SMALL DOLLAR SIGN +FF04 ; Sc # FULLWIDTH DOLLAR SIGN +FFE0..FFE1 ; Sc # [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE5..FFE6 ; Sc # [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN +11FDD..11FE0 ; Sc # [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN +1E2FF ; Sc # WANCHO NGUN SIGN +1ECB0 ; Sc # INDIC SIYAQ RUPEE MARK + +# Total code points: 63 + +# ================================================ + +# General_Category=Modifier_Symbol + +005E ; Sk # CIRCUMFLEX ACCENT +0060 ; Sk # GRAVE ACCENT +00A8 ; Sk # DIAERESIS +00AF ; Sk # MACRON +00B4 ; Sk # ACUTE ACCENT +00B8 ; Sk # CEDILLA +02C2..02C5 ; Sk # [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD +02D2..02DF ; Sk # [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT +02E5..02EB ; Sk # [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK +02ED ; Sk # MODIFIER LETTER UNASPIRATED +02EF..02FF ; Sk # [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW +0375 ; Sk # GREEK LOWER NUMERAL SIGN +0384..0385 ; Sk # [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0888 ; Sk # ARABIC RAISED ROUND DOT +1FBD ; Sk # GREEK KORONIS +1FBF..1FC1 ; Sk # [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FCD..1FCF ; Sk # [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FDD..1FDF ; Sk # [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FED..1FEF ; Sk # [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FFD..1FFE ; Sk # [2] GREEK OXIA..GREEK DASIA +309B..309C ; Sk # [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A700..A716 ; Sk # [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A720..A721 ; Sk # [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A789..A78A ; Sk # [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +AB5B ; Sk # MODIFIER BREVE WITH INVERTED BREVE +AB6A..AB6B ; Sk # [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK +FBB2..FBC2 ; Sk # [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FF3E ; Sk # FULLWIDTH CIRCUMFLEX ACCENT +FF40 ; Sk # FULLWIDTH GRAVE ACCENT +FFE3 ; Sk # FULLWIDTH MACRON +1F3FB..1F3FF ; Sk # [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 + +# Total code points: 125 + +# ================================================ + +# General_Category=Other_Symbol + +00A6 ; So # BROKEN BAR +00A9 ; So # COPYRIGHT SIGN +00AE ; So # REGISTERED SIGN +00B0 ; So # DEGREE SIGN +0482 ; So # CYRILLIC THOUSANDS SIGN +058D..058E ; So # [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN +060E..060F ; So # [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA +06DE ; So # ARABIC START OF RUB EL HIZB +06E9 ; So # ARABIC PLACE OF SAJDAH +06FD..06FE ; So # [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN +07F6 ; So # NKO SYMBOL OO DENNEN +09FA ; So # BENGALI ISSHAR +0B70 ; So # ORIYA ISSHAR +0BF3..0BF8 ; So # [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN +0BFA ; So # TAMIL NUMBER SIGN +0C7F ; So # TELUGU SIGN TUUMU +0D4F ; So # MALAYALAM SIGN PARA +0D79 ; So # MALAYALAM DATE MARK +0F01..0F03 ; So # [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA +0F13 ; So # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN +0F15..0F17 ; So # [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS +0F1A..0F1F ; So # [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG +0F34 ; So # TIBETAN MARK BSDUS RTAGS +0F36 ; So # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN +0F38 ; So # TIBETAN MARK CHE MGO +0FBE..0FC5 ; So # [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE +0FC7..0FCC ; So # [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCE..0FCF ; So # [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM +0FD5..0FD8 ; So # [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS +109E..109F ; So # [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION +1390..1399 ; So # [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT +166D ; So # CANADIAN SYLLABICS CHI SIGN +1940 ; So # LIMBU SIGN LOO +19DE..19FF ; So # [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC +1B61..1B6A ; So # [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE +1B74..1B7C ; So # [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +2100..2101 ; So # [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2103..2106 ; So # [4] DEGREE CELSIUS..CADA UNA +2108..2109 ; So # [2] SCRUPLE..DEGREE FAHRENHEIT +2114 ; So # L B BAR SYMBOL +2116..2117 ; So # [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT +211E..2123 ; So # [6] PRESCRIPTION TAKE..VERSICLE +2125 ; So # OUNCE SIGN +2127 ; So # INVERTED OHM SIGN +2129 ; So # TURNED GREEK SMALL LETTER IOTA +212E ; So # ESTIMATED SYMBOL +213A..213B ; So # [2] ROTATED CAPITAL Q..FACSIMILE SIGN +214A ; So # PROPERTY LINE +214C..214D ; So # [2] PER SIGN..AKTIESELSKAB +214F ; So # SYMBOL FOR SAMARITAN SOURCE +218A..218B ; So # [2] TURNED DIGIT TWO..TURNED DIGIT THREE +2195..2199 ; So # [5] UP DOWN ARROW..SOUTH WEST ARROW +219C..219F ; So # [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW +21A1..21A2 ; So # [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL +21A4..21A5 ; So # [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR +21A7..21AD ; So # [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW +21AF..21CD ; So # [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE +21D0..21D1 ; So # [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW +21D3 ; So # DOWNWARDS DOUBLE ARROW +21D5..21F3 ; So # [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW +2300..2307 ; So # [8] DIAMETER SIGN..WAVY LINE +230C..231F ; So # [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER +2322..2328 ; So # [7] FROWN..KEYBOARD +232B..237B ; So # [81] ERASE TO THE LEFT..NOT CHECK MARK +237D..239A ; So # [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL +23B4..23DB ; So # [40] TOP SQUARE BRACKET..FUSE +23E2..2429 ; So # [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM +2440..244A ; So # [11] OCR HOOK..OCR DOUBLE BACKSLASH +249C..24E9 ; So # [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +2500..25B6 ; So # [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE +25B8..25C0 ; So # [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE +25C2..25F7 ; So # [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT +2600..266E ; So # [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN +2670..2767 ; So # [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET +2794..27BF ; So # [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP +2800..28FF ; So # [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 +2B00..2B2F ; So # [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE +2B45..2B46 ; So # [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW +2B4D..2B73 ; So # [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR +2B76..2B95 ; So # [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW +2B97..2BFF ; So # [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2CE5..2CEA ; So # [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA +2E50..2E51 ; So # [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR +2E80..2E99 ; So # [26] CJK RADICAL REPEAT..CJK RADICAL RAP +2E9B..2EF3 ; So # [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; So # [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +2FF0..2FFF ; So # [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION +3004 ; So # JAPANESE INDUSTRIAL STANDARD SYMBOL +3012..3013 ; So # [2] POSTAL MARK..GETA MARK +3020 ; So # POSTAL MARK FACE +3036..3037 ; So # [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +303E..303F ; So # [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE +3190..3191 ; So # [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK +3196..319F ; So # [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +31C0..31E5 ; So # [38] CJK STROKE T..CJK STROKE SZP +31EF ; So # IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION +3200..321E ; So # [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +322A..3247 ; So # [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO +3250 ; So # PARTNERSHIP SIGN +3260..327F ; So # [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL +328A..32B0 ; So # [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32C0..33FF ; So # [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL +4DC0..4DFF ; So # [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION +A490..A4C6 ; So # [55] YI RADICAL QOT..YI RADICAL KE +A828..A82B ; So # [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 +A836..A837 ; So # [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK +A839 ; So # NORTH INDIC QUANTITY MARK +AA77..AA79 ; So # [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO +FD40..FD4F ; So # [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH +FDCF ; So # ARABIC LIGATURE SALAAMUHU ALAYNAA +FDFD..FDFF ; So # [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL +FFE4 ; So # FULLWIDTH BROKEN BAR +FFE8 ; So # HALFWIDTH FORMS LIGHT VERTICAL +FFED..FFEE ; So # [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER +10137..1013F ; So # [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT +10179..10189 ; So # [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN +1018C..1018E ; So # [3] GREEK SINUSOID SIGN..NOMISMA SIGN +10190..1019C ; So # [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL +101A0 ; So # GREEK SYMBOL TAU RHO +101D0..101FC ; So # [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND +10877..10878 ; So # [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON +10AC8 ; So # MANICHAEAN SIGN UD +1173F ; So # AHOM SYMBOL VI +11FD5..11FDC ; So # [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI +11FE1..11FF1 ; So # [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA +16B3C..16B3F ; So # [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB +16B45 ; So # PAHAWH HMONG SIGN CIM TSOV ROG +1BC9C ; So # DUPLOYAN SIGN O WITH CROSS +1CC00..1CCEF ; So # [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z +1CD00..1CEB3 ; So # [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CF50..1CFC3 ; So # [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK +1D000..1D0F5 ; So # [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D100..1D126 ; So # [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 +1D129..1D164 ; So # [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D16A..1D16C ; So # [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 +1D183..1D184 ; So # [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN +1D18C..1D1A9 ; So # [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH +1D1AE..1D1EA ; So # [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON +1D200..1D241 ; So # [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D245 ; So # GREEK MUSICAL LEIMMA +1D300..1D356 ; So # [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING +1D800..1D9FF ; So # [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD +1DA37..1DA3A ; So # [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE +1DA6D..1DA74 ; So # [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING +1DA76..1DA83 ; So # [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH +1DA85..1DA86 ; So # [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS +1E14F ; So # NYIAKENG PUACHUE HMONG CIRCLED CA +1ECAC ; So # INDIC SIYAQ PLACEHOLDER +1ED2E ; So # OTTOMAN SIYAQ MARRATAN +1F000..1F02B ; So # [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK +1F030..1F093 ; So # [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F0A0..1F0AE ; So # [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES +1F0B1..1F0BF ; So # [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER +1F0C1..1F0CF ; So # [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER +1F0D1..1F0F5 ; So # [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 +1F10D..1F1AD ; So # [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL +1F1E6..1F202 ; So # [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA +1F210..1F23B ; So # [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D +1F240..1F248 ; So # [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F250..1F251 ; So # [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT +1F260..1F265 ; So # [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI +1F300..1F3FA ; So # [251] CYCLONE..AMPHORA +1F400..1F6D7 ; So # [728] RAT..ELEVATOR +1F6DC..1F6EC ; So # [17] WIRELESS..AIRPLANE ARRIVING +1F6F0..1F6FC ; So # [13] SATELLITE..ROLLER SKATE +1F700..1F776 ; So # [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE +1F77B..1F7D9 ; So # [95] HAUMEA..NINE POINTED WHITE STAR +1F7E0..1F7EB ; So # [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; So # HEAVY EQUALS SIGN +1F800..1F80B ; So # [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F810..1F847 ; So # [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW +1F850..1F859 ; So # [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW +1F860..1F887 ; So # [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW +1F890..1F8AD ; So # [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS +1F8B0..1F8BB ; So # [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR +1F8C0..1F8C1 ; So # [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW +1F900..1FA53 ; So # [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP +1FA60..1FA6D ; So # [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER +1FA70..1FA7C ; So # [13] BALLET SHOES..CRUTCH +1FA80..1FA89 ; So # [10] YO-YO..HARP +1FA8F..1FAC6 ; So # [56] SHOVEL..FINGERPRINT +1FACE..1FADC ; So # [15] MOOSE..ROOT VEGETABLE +1FADF..1FAE9 ; So # [11] SPLATTER..FACE WITH BAGS UNDER EYES +1FAF0..1FAF8 ; So # [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FB00..1FB92 ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK +1FB94..1FBEF ; So # [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE + +# Total code points: 7376 + +# ================================================ + +# General_Category=Initial_Punctuation + +00AB ; Pi # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +2018 ; Pi # LEFT SINGLE QUOTATION MARK +201B..201C ; Pi # [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK +201F ; Pi # DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2039 ; Pi # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +2E02 ; Pi # LEFT SUBSTITUTION BRACKET +2E04 ; Pi # LEFT DOTTED SUBSTITUTION BRACKET +2E09 ; Pi # LEFT TRANSPOSITION BRACKET +2E0C ; Pi # LEFT RAISED OMISSION BRACKET +2E1C ; Pi # LEFT LOW PARAPHRASE BRACKET +2E20 ; Pi # LEFT VERTICAL BAR WITH QUILL + +# Total code points: 12 + +# ================================================ + +# General_Category=Final_Punctuation + +00BB ; Pf # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +2019 ; Pf # RIGHT SINGLE QUOTATION MARK +201D ; Pf # RIGHT DOUBLE QUOTATION MARK +203A ; Pf # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +2E03 ; Pf # RIGHT SUBSTITUTION BRACKET +2E05 ; Pf # RIGHT DOTTED SUBSTITUTION BRACKET +2E0A ; Pf # RIGHT TRANSPOSITION BRACKET +2E0D ; Pf # RIGHT RAISED OMISSION BRACKET +2E1D ; Pf # RIGHT LOW PARAPHRASE BRACKET +2E21 ; Pf # RIGHT VERTICAL BAR WITH QUILL + +# Total code points: 10 + +# EOF diff --git a/contrib/unicode/README b/contrib/unicode/README index 9ef80fb..a459f34 100644 --- a/contrib/unicode/README +++ b/contrib/unicode/README @@ -16,10 +16,11 @@ ftp://ftp.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt ftp://ftp.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt ftp://ftp.unicode.org/Public/UNIDATA/NameAliases.txt -Two additional files are needed for lookup tables in libstdc++: +Three additional files are needed for lookup tables in libstdc++: ftp://ftp.unicode.org/Public/UNIDATA/auxiliary/GraphemeBreakProperty.txt ftp://ftp.unicode.org/Public/UNIDATA/emoji/emoji-data.txt +ftp://ftp.unicode.org/Public/UNIDATA/extracted/DerivedGeneralCategory.txt All these files have been added to source control in this directory; please see unicode-license.txt for the relevant copyright information. diff --git a/contrib/unicode/gen_libstdcxx_unicode_data.py b/contrib/unicode/gen_libstdcxx_unicode_data.py index ff4bee4..c50884d 100755 --- a/contrib/unicode/gen_libstdcxx_unicode_data.py +++ b/contrib/unicode/gen_libstdcxx_unicode_data.py @@ -126,7 +126,7 @@ edges = find_edges(all_code_points, 1) # Table for std::__unicode::__format_width(char32_t) -print(" // Table generated by contrib/unicode/gen_std_format_width.py,") +print(" // Table generated by contrib/unicode/gen_libstdcxx_unicode_data.py,") print(" // from EastAsianWidth.txt from the Unicode standard."); print(" inline constexpr char32_t __width_edges[] = {", end="") for i, e in enumerate(edges): @@ -138,6 +138,45 @@ for i, e in enumerate(edges): print("{:#x},".format(c), end="") print("\n };\n") +# By default escape each code point +all_code_points = [True] * (1 + 0x10FFFF) + +escaped_general_categories = { + # Separator (Z) + "Zs", "Zl", "Zp", + # Other (C) + "Cc", "Cf", "Cs", "Co", "Cn", +} + +# Extract General_Category and detrmine if it should be escaped +# for all code points. +for line in open("DerivedGeneralCategory.txt", "r"): + # Example lines: + # 0530 ; Cn # <reserved-0530> + # 0557..0558 ; Cn # [2] <reserved-0557>..<reserved-0558> + line = line.split("#")[0] + if re.match(r'^[\dA-Fa-f][^;]+;', line): + code_points, general_category = line.split(";") + gc_escaped = general_category.strip() in escaped_general_categories + process_code_points(code_points, gc_escaped) + +edges = find_edges(all_code_points) + +shift_bits = 1 +print(" // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py,") +print(" // from DerivedGeneralCategory.txt from the Unicode standard."); +print(" // Entries are (code_point << 1) + escape.") +print(" inline constexpr uint32_t __escape_edges[] = {", end="") +for i, e in enumerate(edges): + if i % 6: + print(" ", end="") + else: + print("\n ", end="") + c, p = e + x = (c << shift_bits) + (1 if p else 0) + print("{0:#x},".format(x), end="") +print("\n };\n") + # By default every code point has Grapheme_Cluster_Break=Other. all_code_points = ["Other"] * (1 + 0x10FFFF) @@ -167,7 +206,7 @@ print(" };\n") # Tables for std::__unicode::_Grapheme_cluster_state -print(" // Values generated by contrib/unicode/gen_std_format_width.py,") +print(" // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py,") print(" // from GraphemeBreakProperty.txt from the Unicode standard."); print(" // Entries are (code_point << shift_bits) + property.") print(" inline constexpr int __gcb_shift_bits = {:#x};".format(shift_bits)) @@ -209,7 +248,7 @@ edges = find_edges(all_code_points) incb_props = {None:0, "Consonant":1, "Extend":2} print(" enum class _InCB { _Consonant = 1, _Extend = 2 };\n") # Table for std::__unicode::__incb_property -print(" // Values generated by contrib/unicode/gen_std_format_width.py,") +print(" // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py,") print(" // from DerivedCoreProperties.txt from the Unicode standard."); print(" // Entries are (code_point << 2) + property.") print(" inline constexpr uint32_t __incb_edges[] = {", end="") @@ -238,7 +277,7 @@ for line in open("emoji-data.txt", "r"): edges = find_edges(all_code_points, False) # Table for std::__unicode::__is_extended_pictographic -print(" // Table generated by contrib/unicode/gen_std_format_width.py,") +print(" // Table generated by contrib/unicode/gen_libstdcxx_unicode_data.py,") print(" // from emoji-data.txt from the Unicode standard."); print(" inline constexpr char32_t __xpicto_edges[] = {", end="") for i, e in enumerate(edges): diff --git a/gcc/BASE-VER b/gcc/BASE-VER index 2bbd2b4..946789e 100644 --- a/gcc/BASE-VER +++ b/gcc/BASE-VER @@ -1 +1 @@ -15.0.1 +16.0.0 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 18812b2..c838fcd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,775 @@ +2025-04-22 Jan Hubicka <hubicka@ucw.cz> + + * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): Add special cases + for COND_EXPR; make MIN_EXPR, MAX_EXPR, ABS_EXPR and ABSU_EXPR more realistic. + +2025-04-22 Jakub Jelinek <jakub@redhat.com> + + PR target/119327 + * config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore also + OPTION_MASK_SAVE_TOC_INDIRECT differences. + +2025-04-22 Richard Sandiford <richard.sandiford@arm.com> + + * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Define + __ARM_FEATURE_FAMINMAX. + +2025-04-22 Spencer Abson <spencer.abson@arm.com> + + * tree-vect-loop.cc (vectorizable_induction): Add target support + checks for vectorized MULT_EXPR and FLOAT_EXPR where necessary for + scalable types. + Prefer target_supports_op_p over directly_supports_p for these tree + codes. + (vectorizable_nonlinear_induction): Fix a doc comment while I'm + here. + +2025-04-22 Spencer Abson <spencer.abson@arm.com> + + * config/aarch64/aarch64.md: Update cbranch, cstore, fcmp + and fcmpe to use the GPF_F16 iterator for floating-point + modes. + +2025-04-22 Spencer Abson <spencer.abson@arm.com> + + PR target/117013 + * config/aarch64/aarch64-protos.h (aarch64_expand_fp_spaceship): + Declare optab expander function for floating-point types. + * config/aarch64/aarch64.cc (aarch64_expand_fp_spaceship): + Define optab expansion for floating-point types (new function). + * config/aarch64/aarch64.md (spaceship<mode>4): + Add define_expands for spaceship<mode>4 on integer and + floating-point types. + +2025-04-22 Kyrylo Tkachov <ktkachov@nvidia.com> + + * config/aarch64/aarch64-cores.def (olympus): Add fp8fma, fp8dot4 + explicitly. + +2025-04-22 Yixuan Chen <chenyixuan@iscas.ac.cn> + + * config/riscv/riscv-cores.def (RISCV_TUNE): Add xt-c908, xt-c908v, + xt-c910, xt-c910v2, xt-c920, xt-c920v2. + (RISCV_CORE): Add xt-c908, xt-c908v, xt-c910, xt-c910v2, xt-c920, + xt-c920v2. + * doc/invoke.texi: Add xt-c908, xt-c908v, xt-c910, xt-c910v2, + xt-c920, xt-c920v2. + +2025-04-22 Kyrylo Tkachov <ktkachov@nvidia.com> + + * doc/invoke.texi (lto-partition-locality-frequency-cutoff, + lto-partition-locality-size-cutoff, lto-max-locality-partition): + Document. + +2025-04-22 Alexandre Oliva <oliva@adacore.com> + + PR target/118182 + * config/riscv/vector.md (@pred_broadcast<mode>): Expand to + _zero and _imm variants without vec_duplicate. + +2025-04-21 Jan Hubicka <hubicka@ucw.cz> + + PR target/119879 + * config/i386/i386.cc (fp_conversion_stmt_cost): Inline to ... + (ix86_vector_costs::add_stmt_cost): ... here; fix handling of NOP_EXPR. + +2025-04-21 Matthew Fortune <matthew.fortune@imgtec.com> + + * config/mips/mips.cc (mips_option_override): Error out for + -mmicromips -mmsa. + +2025-04-21 Andrew Pinski <quic_apinski@quicinc.com> + + PR middle-end/119507 + * except.cc (switch_to_exception_section): Don't use the cached section if + the current function is in comdat. + +2025-04-21 Andrew Pinski <quic_apinski@quicinc.com> + + * vec.h (array_slice::begin): Assert that the + slice is valid. + (array_slice::end): Likewise. + +2025-04-21 hongtao.liu <hongtao.liu@intel.com> + + * config/i386/i386-expand.cc (ix86_emit_swdivsf): Generate 2 + FMA instructions when TARGET_FMA. + +2025-04-19 Jeff Law <jlaw@ventanamicro.com> + + PR target/119865 + * config/riscv/riscv.cc (parse_features_for_version): Do not + explicitly free the architecture string. + +2025-04-19 Jeff Law <jlaw@ventanamicro.com> + + PR target/118410 + * config/riscv/bitmanip.md (logical with constant argument): New + splitter for cases where synthesizing ~C is cheaper than synthesizing + the original constant C. + +2025-04-19 Jan Hubicka <hubicka@ucw.cz> + + * config/i386/i386.cc (vec_fp_conversion_cost): New function. + (ix86_rtx_costs): Use it for SSE/AVX FP conversoins. + (ix86_builtin_vectorization_cost): Fix indentation; + and use vec_fp_conversion_cost in vec_promote_demote. + (fp_conversion_stmt_cost): New function. + (ix86_vector_costs::add_stmt_cost): Use it to cost NOP_EXPR + and vec_promote_demote. + * config/i386/i386.h (struct processor_costs): + * config/i386/x86-tune-costs.h (struct processor_costs): + +2025-04-19 Andrew Pinski <quic_apinski@quicinc.com> + + PR rtl-optimization/111949 + * combine.cc (find_split_point): Add a split point + for `(and (not X) Y)` if not in the outer set already. + +2025-04-19 Jiaxun Yang <jiaxun.yang@flygoat.com> + + PR target/111814 + * config/sh/sh-modes.def (RESET_FLOAT_FORMAT): Use mips format. + (FLOAT_MODE): Use mips mode. + +2025-04-19 Maciej W. Rozycki <macro@orcam.me.uk> + + * config/alpha/alpha.cc + (alpha_get_mem_rtx_alignment_and_offset): Recurse into + COMPONENT_REF nodes. + +2025-04-18 Jeff Law <jlaw@ventanamicro.com> + + * config/riscv/bitmanip.md (*bext<mode>_mask_pos): New pattern + for extracting a single bit at masked bit position. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/87901 + * tree-ssa-dse.cc (maybe_trim_constructor_store): Add was_integer_cst argument. + Check for was_integer_cst instead of `{}` when was_integer_cst is true. + (maybe_trim_partially_dead_store): Handle INTEGER_CST stores of 0 as stores of `{}`. + Udpate call to maybe_trim_constructor_store for CONSTRUCTOR. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/87901 + * tree-ssa-dse.cc (maybe_trim_constructor_store): Strip over useless type + conversions after taking the address of the MEM_REF. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/118902 + * fold-const.cc (tree_swap_operands_p): Place invariants in the first operand + if not used with constants. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/118947 + * gimple-fold.cc (optimize_memcpy_to_memset): Walk back until we get a + statement that may clobber the read. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/78408 + PR tree-optimization/118947 + * gimple-fold.cc (optimize_memcpy_to_memset): Handle STRING_CST case too. + +2025-04-18 Richard Braun <rbraun@sceen.net> + + * config/c6x/c6x.h (ASM_PREFERRED_EH_DATA_FORMAT): Remove the + DW_EH_PE_indirect flag. + +2025-04-18 Richard Biener <rguenther@suse.de> + + PR tree-optimization/119858 + * tree-vect-loop.cc (vectorizable_live_operation): Convert + pointer offset to sizetype. + +2025-04-18 Hakan Candar <hakancandar@protonmail.com> + + * config.gcc: Recognize riscv*-*-gnu* targets. + * config/riscv/gnu.h: New file. + +2025-04-18 Alexey Merzlyakov <alexey.merzlyakov@samsung.com> + + PR middle-end/108016 + PR middle-end/108016 + * config/riscv/riscv.md (addv<mode>4, uaddv<mode>4, subv<mode>4, + usubv<mode>4): Tunes for unnecessary sext.w elimination. + +2025-04-18 kelefth <konstantinos.eleftheriou@vrull.eu> + + PR rtl-optimization/119160 + * avoid-store-forwarding.cc (process_store_forwarding): + Zero-extend the value stored in the base register, in case + of load-elimination, only when the mode of the destination + is wider. + +2025-04-18 kelefth <konstantinos.eleftheriou@vrull.eu> + + * doc/cfg.texi: Update the exception handling section for the + REG_EH_REGION notes to make it clear that the note is attached + to the instruction throwing the exception. + +2025-04-17 ç¿æ„·é‚‘ <kaiweng9487@gmail.com> + + * config/riscv/riscv-target-attr.cc + (riscv_target_attr_parser::update_settings): + Do not manually free any arch string. + +2025-04-17 Eric Botcazou <ebotcazou@gcc.gnu.org> + + * tree.def (BOOLEAN_TYPE): Add more details. + +2025-04-17 Sam James <sam@gentoo.org> + + * doc/invoke.texi: Use "compatible types" term. Rephrase to be + more precise (and correct). + +2025-04-17 Tamar Christina <tamar.christina@arm.com> + + PR tree-optimization/119351 + * tree-vect-stmts.cc (vectorizable_early_exit): Mask both operands of + the gcond for partial masking support. + +2025-04-17 Jakub Jelinek <jakub@redhat.com> + + PR target/119834 + * config/s390/s390.md (define_split after *cpymem_short): Use + (clobber (match_scratch N)) instead of (clobber (scratch)). Use + (match_dup 4) and operands[4] instead of (match_dup 3) and operands[3] + in the last of those. + (define_split after *clrmem_short): Use (clobber (match_scratch N)) + instead of (clobber (scratch)). + (define_split after *cmpmem_short): Likewise. + +2025-04-17 Thomas Schwinge <tschwinge@baylibre.com> + + * config/nvptx/nvptx.cc (TARGET_ASM_NEED_VAR_DECL_BEFORE_USE): + Don't '#define'. + +2025-04-17 Hans-Peter Nilsson <hp@axis.com> + + * combine.cc: Correct comments about combine_validate_cost. + +2025-04-16 Sandra Loosemore <sloosemore@baylibre.com> + + PR c/88382 + * doc/extend.texi (Syntax Extensions): Adjust menu. + (Raw String Literals): New section. + +2025-04-16 Keith Packard <keithp@keithp.com> + + * config/rx/rx.md (cmpstrnsi): Allow constant length. For + static length 0, just store 0 into the output register. + For dynamic zero, set C/Z appropriately. + (rxcmpstrn): No longer set C/Z. + +2025-04-16 Eric Botcazou <ebotcazou@gcc.gnu.org> + + * tree-ssa-phiopt.cc (factor_out_conditional_operation): Do not + bypass the int_fits_type_p test for boolean types whose precision + is not 1. + +2025-04-16 Sandra Loosemore <sloosemore@baylibre.com> + + * common.opt.urls: Regenerated. + +2025-04-16 Ard Biesheuvel <ardb@kernel.org> + + PR target/119386 + * config/i386/i386-options.cc: Permit -mnop-mcount when + using -fpic with PLTs. + +2025-04-16 Ard Biesheuvel <ardb@kernel.org> + + PR target/119386 + * config/i386/i386.cc (x86_print_call_or_nop): Add @PLT suffix + where appropriate. + (x86_function_profiler): Fall through to x86_print_call_or_nop() + for PIC codegen when flag_plt is set. + +2025-04-16 Sandra Loosemore <sloosemore@baylibre.com> + + PR driver/90465 + * doc/invoke.texi (Overall Options): Add a @cindex for -Q in + connection with --help=. + (Developer Options): Point at --help= documentation for the + other use of -Q. + +2025-04-16 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/97106 + * config/nvptx/nvptx.cc (nvptx_asm_output_def_from_decls) + [ACCEL_COMPILER]: Make sure to emit C++ constructor, destructor + aliases. + +2025-04-16 Jan Hubicka <hubicka@ucw.cz> + + PR tree-optimization/119614 + * ipa-prop.cc (ipa_write_return_summaries): New function. + (ipa_record_return_value_range_1): Break out from .... + (ipa_record_return_value_range): ... here. + (ipa_read_return_summaries): New function. + (ipa_prop_read_section): Read return summaries. + (read_ipcp_transformation_info): Read return summaries. + (ipcp_write_transformation_summaries): Write return summaries; + do not stream stray 0. + +2025-04-16 Tamar Christina <tamar.christina@arm.com> + + PR tree-optimization/119351 + * tree-vectorizer.h (LOOP_VINFO_MASK_NITERS_PFA_OFFSET, + LOOP_VINFO_NON_LINEAR_IV): New. + (class _loop_vec_info): Add mask_skip_niters_pfa_offset and + nonlinear_iv. + * tree-vect-loop.cc (_loop_vec_info::_loop_vec_info): Initialize them. + (vect_analyze_scalar_cycles_1): Record non-linear inductions. + (vectorizable_induction): If early break and PFA using masking create a + new phi which tracks where the scalar code needs to start... + (vectorizable_live_operation): ...and generate the adjustments here. + (vect_use_loop_mask_for_alignment_p): Reject non-linear inductions and + early break needing peeling. + +2025-04-16 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/119808 + * gimple-lower-bitint.cc (gimple_lower_bitint): Don't set + m_single_use_names bits for SSA_NAMEs which have single use but + their SSA_NAME_DEF_STMT is a copy from another SSA_NAME which doesn't + have a single use, or single use which is such a copy etc. + +2025-04-16 Jesse Huang <jesse.huang@sifive.com> + + * config/riscv/riscv.cc (riscv_file_end): Fix .p2align value. + +2025-04-16 Kito Cheng <kito.cheng@sifive.com> + + * config/riscv/riscv.h (JUMP_TABLES_IN_TEXT_SECTION): Check if + large code model. + +2025-04-16 Tejas Belagod <tejas.belagod@arm.com> + + * config/aarch64/aarch64-sve.md (vec_extract<vpred><Vel>): Fix operand + order to gen_vcond_mask_*. + +2025-04-16 Alice Carlotti <alice.carlotti@arm.com> + + * config/aarch64/aarch64.cc + (aarch64_valid_sysreg_name_p): Remove feature check. + (aarch64_retrieve_sysreg): Ditto. + +2025-04-15 Sandra Loosemore <sloosemore@baylibre.com> + + PR tree-optimization/71094 + * doc/invoke.texi (Optimize Options): Document that -fivopts is + enabled at -O1 and higher. Add blurb about -O0 causing GCC to + completely ignore most optimization options. + +2025-04-15 Iain Sandoe <iain@sandoe.co.uk> + + * configure: Regenerate. + * configure.ac: Recognise PROJECT:ld-mmmm.nn.aa as an identifier + for Darwin's static linker. + +2025-04-15 Iain Sandoe <iainsandoe@mini-05-seq.local> + + PR target/116827 + * ginclude/stddef.h: Undefine __PTRDIFF_T and __SIZE_T for module- + enabled c++ on Darwin/macOS platforms. + +2025-04-15 Kyrylo Tkachov <ktkachov@nvidia.com> + + * common.opt.urls: Regenerate. + +2025-04-15 Jan Hubicka <hubicka@ucw.cz> + + * config/i386/x86-tune-sched.cc (ix86_issue_rate): Set + to 4 for znver5. + +2025-04-15 Jan Hubicka <hubicka@ucw.cz> + + PR target/119298 + * config/i386/x86-tune-costs.h (znver5_cost): Set ADDSS cost to 3. + +2025-04-15 Vineet Gupta <vineetg@rivosinc.com> + + PR target/119533 + * config/riscv/riscv-vsetvl.cc (invalid_opt_bb_p): Check for + EDGE_ABNOMAL. + (pre_vsetvl::compute_lcm_local_properties): Initialize kill + bitmap. + Debug dump skipped edge. + +2025-04-15 Robin Dapp <rdapp@ventanamicro.com> + + PR target/119547 + * config/riscv/riscv-vsetvl.cc (pre_vsetvl::earliest_fuse_vsetvl_info): + Do not perform lift if block is not transparent. + +2025-04-15 Kyrylo Tkachov <ktkachov@nvidia.com> + + * Makefile.in (OBJS): Add ipa-locality-cloning.o. + * cgraph.h (set_new_clone_decl_and_node_flags): Declare prototype. + * cgraphclones.cc (set_new_clone_decl_and_node_flags): Remove static + qualifier. + * common.opt (fipa-reorder-for-locality): New flag. + (LTO_PARTITION_DEFAULT): Declare. + (flto-partition): Change default to LTO_PARTITION_DFEAULT. + * doc/invoke.texi: Document -fipa-reorder-for-locality. + * flag-types.h (enum lto_locality_cloning_model): Declare. + (lto_partitioning_model): Add LTO_PARTITION_DEFAULT. + * lto-cgraph.cc (lto_set_symtab_encoder_in_partition): Add dumping of + node and index. + * opts.cc (validate_ipa_reorder_locality_lto_partition): Define. + (finish_options): Handle LTO_PARTITION_DEFAULT. + * params.opt (lto_locality_cloning_model): New enum. + (lto-partition-locality-cloning): New param. + (lto-partition-locality-frequency-cutoff): Likewise. + (lto-partition-locality-size-cutoff): Likewise. + (lto-max-locality-partition): Likewise. + * passes.def: Register pass_ipa_locality_cloning. + * timevar.def (TV_IPA_LC): New timevar. + * tree-pass.h (make_pass_ipa_locality_cloning): Declare. + * ipa-locality-cloning.cc: New file. + * ipa-locality-cloning.h: New file. + +2025-04-15 Martin Jambor <mjambor@suse.cz> + Jakub Jelinek <jakub@redhat.com> + + PR ipa/119803 + * ipa-cp.cc (ipcp_bits_lattice::meet_with_1): Move m_value adjustmed + according to m_mask below the adjustment of the latter according to + cap_mask. Optimize the calculation of cap_mask a bit. + (ipcp_bits_lattice::meet_with): Optimize the calculation of cap_mask a + bit. + +2025-04-15 Jakub Jelinek <jakub@redhat.com> + + * ipa-cp.cc (ipcp_print_widest_int): Print values with all ones in + bits 128+ with "0xf..f" prefix instead of "all ones folled by ". + Simplify wide_int check for -1 or all ones above least significant + 128 bits. + +2025-04-15 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/119801 + * sanitizer.def (BUILT_IN_TSAN_FUNC_EXIT): Use BT_FN_VOID rather + than BT_FN_VOID_PTR. + * tree-tailcall.cc: Include attribs.h and asan.h. + (struct tailcall): Add has_tsan_func_exit member. + (empty_eh_cleanup): Add eh_has_tsan_func_exit argument, set what + it points to to 1 if there is exactly one __tsan_func_exit call + and ignore that call otherwise. Adjust recursive call. + (find_tail_calls): Add RETRY_TSAN_FUNC_EXIT argument, pass it + to recursive calls. When seeing __tsan_func_exit call with + RETRY_TSAN_FUNC_EXIT 0, set it to -1. If RETRY_TSAN_FUNC_EXIT + is 1, initially ignore __tsan_func_exit calls. Adjust + empty_eh_cleanup caller. When looking through stmts after the call, + ignore exactly one __tsan_func_exit call but remember it in + t->has_tsan_func_exit. Diagnose if EH cleanups didn't have + __tsan_func_exit and normal path did or vice versa. + (optimize_tail_call): Emit __tsan_func_exit before the tail call + or tail recursion. + (tree_optimize_tail_calls_1): Adjust find_tail_calls callers. If + find_tail_calls changes retry_tsan_func_exit to -1, set it to 1 + and call it again with otherwise the same arguments. + +2025-04-15 Sandra Loosemore <sloosemore@baylibre.com> + + PR ipa/113203 + * doc/extend.texi (Common Function Attributes): Explain how to + use always_inline in programs that have multiple translation + units, and that LTO inlining additionally needs optimization + enabled. + +2025-04-15 liuhongt <hongtao.liu@intel.com> + + PR target/108134 + * doc/extend.texi: Remove documents from r11-344-g0fec3f62b9bfc0. + +2025-04-15 Sandra Loosemore <sloosemore@baylibre.com> + + PR target/42683 + * doc/invoke.texi (x86 Options): Clarify that -march=pentiumpro + doesn't include MMX. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/118794 + * config/gcn/gcn.opt (-mfake-exceptions): Support. + * config/nvptx/nvptx.opt (-mfake-exceptions): Likewise. + * config/gcn/gcn.md (define_expand "exception_receiver"): Use it. + * config/nvptx/nvptx.md (define_expand "exception_receiver"): + Likewise. + * config/gcn/mkoffload.cc (main): Set it. + * config/nvptx/mkoffload.cc (main): Likewise. + * config/nvptx/nvptx.cc (nvptx_assemble_integer) + <in_section == exception_section>: Special handling for + 'SYMBOL_REF's. + * except.cc (expand_dw2_landing_pad_for_region): Don't generate + bogus code for (default) + '#define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM'. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/119785 + * expmed.cc (init_expmed): Always pass QImode rather than mode to + set_src_cost passed to set_zero_cost. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119718 + * tree-pretty-print.cc (dump_generic_node) <case CALL_EXPR>: Dump + also CALL_EXPR_MUST_TAIL_CALL flag. + * calls.cc (maybe_complain_about_tail_call): Emit error about + CALL_EXPR_MUST_TAIL_CALL only after emitting dump message, not before + it. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * doc/install.texi: Add requirements for building gccrs. + +2025-04-14 H.J. Lu <hjl.tools@gmail.com> + + PR target/119784 + * config/i386/i386.cc (ix86_using_red_zone): Don't use red-zone + with 32 GPRs and no caller-saved registers. + +2025-04-14 Martin Jambor <mjambor@suse.cz> + + PR ipa/118097 + * ipa-cp.cc (ipa_get_jf_arith_result): Require res_operand for + anything except NOP_EXPR or ADDR_EXPR, document it and remove the code + trying to deduce it. + (ipa_value_from_jfunc): Use the stored and streamed type of arithmetic + pass-through functions. + (ipa_agg_value_from_jfunc): Use the stored and streamed type of + arithmetic pass-through functions, convert to the type used to store + the value if necessary. + (get_val_across_arith_op): New parameter op_type, pass it to + ipa_get_jf_arith_result. + (propagate_vals_across_arith_jfunc): New parameter op_type, pass it to + get_val_across_arith_op. + (propagate_vals_across_pass_through): Use the stored and streamed type + of arithmetic pass-through functions. + (propagate_aggregate_lattice): Likewise. + (push_agg_values_for_index_from_edge): Use the stored and streamed + type of arithmetic pass-through functions, convert to the type used to + store the value if necessary. + +2025-04-14 Martin Jambor <mjambor@suse.cz> + + PR ipa/118785 + * ipa-cp.cc (ipa_vr_intersect_with_arith_jfunc): Use the stored + and streamed type of arithmetic pass-through functions. + +2025-04-14 Martin Jambor <mjambor@suse.cz> + + * ipa-cp.cc (ipcp_print_widest_int): Also add a truncated form of + dumping of widest ints which only have zeros in the lowest 128 bits. + Update the comment. + (ipcp_bits_lattice::print): Also dump the mask using + ipcp_print_widest_int. + (ipcp_store_vr_results): Likewise. + +2025-04-14 Martin Jambor <mjambor@suse.cz> + + PR ipa/119318 + * ipa-cp.cc (ipcp_bits_lattice::meet_with_1): Set all mask bits + not covered by precision to one. + (ipcp_bits_lattice::meet_with): Likewise. + (propagate_bits_across_jump_function): Use the stored operation + type to perform meet with other lattices. + +2025-04-14 Martin Jambor <mjambor@suse.cz> + + PR ipa/118097 + PR ipa/118785 + PR ipa/119318 + * lto-streamer.h (lto_variably_modified_type_p): Declare. + * ipa-prop.h (ipa_pass_through_data): New field op_type. + (ipa_get_jf_pass_through_op_type): New function. + * ipa-prop.cc: Include lto-streamer.h. + (ipa_dump_jump_function): Dump also pass-through + operation types, if any. Dump pass-through operands only if not NULL. + (ipa_set_jf_simple_pass_through): Set op_type accordingly. + (compute_complex_assign_jump_func): Set op_type of arithmetic + pass-through jump_functions. + (analyze_agg_content_value): Update lhs when walking assighment + copies. Set op_type of aggregate arithmetic pass-through + jump_functions. + (update_jump_functions_after_inlining): Also transfer the operation + type from the source arithmentic pass-through jump function to the + destination jump function. + (ipa_write_jump_function): Stream also the op_type when necessary. + (ipa_read_jump_function): Likewise. + (ipa_agg_pass_through_jf_equivalent_p): Also compare operation types. + * lto-streamer-out.cc (lto_variably_modified_type_p): Make public. + +2025-04-14 Richard Biener <rguenther@suse.de> + + PR tree-optimization/119757 + * tree-vect-slp.cc (vect_build_slp_tree_1): Record and compare + whether a stmt uses a maks. + +2025-04-14 Richard Biener <rguenther@suse.de> + + PR tree-optimization/119778 + * tree-inline.cc (copy_edges_for_bb): Mark calls that are + source of abnormal edges as altering control-flow. + +2025-04-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/119779 + * doc/gm2.texi (Interface to assembly language): Use eax + rather than rax in both examples. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR driver/119727 + * configure.ac (HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE): New check. + * gcc.cc: Include sys/personality.h if + HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE is defined. + (try_generate_repro): Call + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE) + if HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE is defined. + * config.in: Regenerate. + * configure: Regenerate. + +2025-04-13 Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> + + * config/s390/s390.cc: Add z17 scheduler description. + * config/s390/s390.h: Ditto. + * config/s390/s390.md: Ditto. + * config/s390/9175.md: New file. + +2025-04-13 Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org> + + * common/config/s390/s390-common.cc: Rename arch15 to z17. + * config.gcc: Add z17. + * config/s390/driver-native.cc: Detect z17 machine. + * config/s390/s390-builtins.def (B_VXE3): Rename arch15 to z17. + * config/s390/s390-c.cc (s390_resolve_overloaded_builtin): Ditto. + * config/s390/s390-opts.h (enum processor_type): Ditto. + * config/s390/s390.cc: Ditto. + * config/s390/s390.h: Ditto. + * config/s390/s390.md: Ditto. + * config/s390/s390.opt: Add z17. + * doc/invoke.texi: Ditto. + +2025-04-12 Sandra Loosemore <sloosemore@baylibre.com> + + PR target/97585 + * doc/invoke.texi (x86 Options): Document list of extensions + supported by -march=x86_64, according to the declaration of + PTA_X86_64_BASELINE in config/i386/i386.h. + +2025-04-12 Jakub Jelinek <jakub@redhat.com> + + PR driver/119727 + * gcc.cc (files_equal_p): Rewritten using fopen/fgets/fclose instead + of open/fstat/read/close. At the start of lines, ignore lowercase + hexadecimal addresses followed by space. + +2025-04-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119722 + * gimple-lower-bitint.h (build_bitint_stmt_ssa_conflicts): Add + CLEAR argument. + * gimple-lower-bitint.cc (build_bitint_stmt_ssa_conflicts): Add + CLEAR argument. Call clear on gimple_assign_copy_p rhs1 if lhs + is large/huge bitint unless lhs is not in names. + * tree-ssa-coalesce.cc (build_ssa_conflict_graph): Adjust + build_bitint_stmt_ssa_conflicts caller. Move gimple_assign_copy_p + handling to after the build_bitint_stmt_ssa_conflicts call. + +2025-04-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119718 + * tree-tailcall.cc (maybe_error_musttail): Dump the GIMPLE at the + end of the Cannot tail-call line rather than on the line before it. + * calls.cc (maybe_complain_about_tail_call): Dump the GENERIC + at the end of the ;; Cannot tail-call line rather than on the + line before it. + +2025-04-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119718 + * tree-tailcall.cc (maybe_error_musttail): Only dump into dump_file + if dump_flags & TDF_DETAILS. Use "Cannot tail-call: " prefix instead + of "Cannot convert: ". + (find_tail_calls, tree_optimize_tail_calls_1): Formatting fixes + for maybe_error_musttail calls. + * calls.cc (maybe_complain_about_tail_call): Emit also a message + into dump_file when dump_flags & TDF_DETAILS for CALL_EXPR_TAILCALL + calls. + (initialize_argument_information): Formatting fix for + maybe_complain_about_tail_call calls. + (can_implement_as_sibling_call_p, expand_call): Likewise. + +2025-04-11 Sandra Loosemore <sloosemore@baylibre.com> + + PR c++/106618 + * doc/invoke.texi (Option Summary): Remove -fargs-in-order, add + -fstrong-eval-order. + (C++ Dialect Options): Explicitly document that -fstrong-eval-order + takes an optional argument and what the choices are. Generalize + references to C++17. + +2025-04-11 Sandra Loosemore <sloosemore@baylibre.com> + + PR middle-end/105548 + * doc/invoke.texi (Optimize Options): Delete misleading sentence + about conversions. + +2025-04-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119707 + * gimple-lower-bitint.cc (bitint_large_huge::handle_cast): Only use + m_data[save_data_cnt] instead of m_data[save_data_cnt + 1] if + idx is odd and equal to low + 1. Remember tree_to_uhwi (idx) in + a temporary instead of calling the function multiple times. + +2025-04-11 Sandra Loosemore <sloosemore@baylibre.com> + + PR tree-optimization/87909 + * common.opt.urls: Regenerate. + * doc/invoke.texi (Option Summary): Add -ftree-cselim. + (Optimize Options): Likewise. + +2025-04-11 Sandra Loosemore <sloosemore@baylibre.com> + + PR middle-end/14708 + * doc/invoke.texi (Optimize Options): List -fexcess-precision + before -ffloat-store, moving some background discussion to the + former from the latter. Recommend using -fexcess-precision=standard + instead of -ffloat-store. + +2025-04-10 Iain Sandoe <iain@sandoe.co.uk> + + * config/darwin.h (LINK_SPEC): Add support for + -static-libgcobol. + +2025-04-10 Richard Biener <rguenther@suse.de> + + PR middle-end/119706 + * gimple-expr.cc (is_gimple_mem_ref_addr): Also allow + POLY_INT_CST. + +2025-04-10 Richard Sandiford <richard.sandiford@arm.com> + + PR tree-optimization/119399 + * tree-data-ref.cc (create_waw_or_war_checks): Use a MINUS_EXPR + on two converted pointers, rather than converting a POINTER_DIFF_EXPR + on the pointers. + +2025-04-10 Kito Cheng <kito.cheng@sifive.com> + + * config/riscv/multilib-generator: Remove the compact code model + and check large code model for RV32. + 2025-04-09 Jakub Jelinek <jakub@redhat.com> * pretty-print.cc (pretty_printer::format): Use %.Ns instead of diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 4013552..1041049 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20250410 +20250423 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index ebfcd8a..55b4cd7 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1555,6 +1555,7 @@ OBJS = \ incpath.o \ init-regs.o \ internal-fn.o \ + ipa-locality-cloning.o \ ipa-cp.o \ ipa-sra.o \ ipa-devirt.o \ @@ -3026,6 +3027,7 @@ GTFILES = $(CPPLIB_H) $(srcdir)/input.h $(srcdir)/coretypes.h \ $(srcdir)/ipa-param-manipulation.h $(srcdir)/ipa-sra.cc \ $(srcdir)/ipa-modref.h $(srcdir)/ipa-modref.cc \ $(srcdir)/ipa-modref-tree.h \ + $(srcdir)/ipa-locality-cloning.cc \ $(srcdir)/signop.h \ $(srcdir)/diagnostic-spec.h $(srcdir)/diagnostic-spec.cc \ $(srcdir)/dwarf2out.h \ diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f7a9025..650de8b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2025-04-17 Jakub Jelinek <jakub@redhat.com> + + * gnatvsn.ads: Bump Library_Version to 16. + +2025-04-12 Eric Botcazou <ebotcazou@adacore.com> + + PR ada/119643 + * sem_ch8.adb (Inherit_Renamed_Profile): Add guard against the + peculiarities of Natural and Positive. + 2025-04-07 Eric Botcazou <ebotcazou@adacore.com> * gcc-interface/utils.cc (convert) <POINTER_TYPE>: Use fold_convert diff --git a/gcc/ada/gnatvsn.ads b/gcc/ada/gnatvsn.ads index 176f88a..ad11c30 100644 --- a/gcc/ada/gnatvsn.ads +++ b/gcc/ada/gnatvsn.ads @@ -32,7 +32,7 @@ package Gnatvsn is -- Static string identifying this version, that can be used as an argument -- to e.g. pragma Ident. - Library_Version : constant String := "15"; + Library_Version : constant String := "16"; -- Library version. It needs to be updated whenever the major version -- number is changed. -- diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index d4ab44f..0a9ef41 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -9314,11 +9314,12 @@ package body Sem_Ch8 is -- If the new type is a renaming of the old one, as is the case -- for actuals in instances, retain its name, to simplify later - -- disambiguation. + -- disambiguation. Beware of Natural and Positive, see Cstand. if Nkind (Parent (New_T)) = N_Subtype_Declaration and then Is_Entity_Name (Subtype_Indication (Parent (New_T))) and then Entity (Subtype_Indication (Parent (New_T))) = Old_T + and then Scope (New_T) /= Standard_Standard then null; else diff --git a/gcc/avoid-store-forwarding.cc b/gcc/avoid-store-forwarding.cc index 34a7bba..ded8d7e 100644 --- a/gcc/avoid-store-forwarding.cc +++ b/gcc/avoid-store-forwarding.cc @@ -238,10 +238,15 @@ process_store_forwarding (vec<store_fwd_info> &stores, rtx_insn *load_insn, { start_sequence (); - rtx ext0 = gen_rtx_ZERO_EXTEND (GET_MODE (dest), it->mov_reg); - if (ext0) + machine_mode dest_mode = GET_MODE (dest); + rtx base_reg = it->mov_reg; + if (known_gt (GET_MODE_BITSIZE (dest_mode), + GET_MODE_BITSIZE (GET_MODE (it->mov_reg)))) + base_reg = gen_rtx_ZERO_EXTEND (dest_mode, it->mov_reg); + + if (base_reg) { - rtx_insn *move0 = emit_move_insn (dest, ext0); + rtx_insn *move0 = emit_move_insn (dest, base_reg); if (recog_memoized (move0) >= 0) { insns = get_insns (); diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index dec9f16..f75a0f6 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2025-04-15 Qing Zhao <qing.zhao@oracle.com> + + PR c/119717 + * c-typeck.cc (build_access_with_size_for_counted_by): Fully fold the + parameters for call to .ACCESS_WITH_SIZE. + 2025-04-08 Martin Uecker <uecker@tugraz.at> PR c/119612 diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 3870e8a..55d896e 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -3013,12 +3013,16 @@ build_access_with_size_for_counted_by (location_t loc, tree ref, gcc_assert (c_flexible_array_member_type_p (TREE_TYPE (ref))); /* The result type of the call is a pointer to the flexible array type. */ tree result_type = c_build_pointer_type (TREE_TYPE (ref)); + tree first_param + = c_fully_fold (array_to_pointer_conversion (loc, ref), false, NULL); + tree second_param + = c_fully_fold (counted_by_ref, false, NULL); tree call = build_call_expr_internal_loc (loc, IFN_ACCESS_WITH_SIZE, result_type, 6, - array_to_pointer_conversion (loc, ref), - counted_by_ref, + first_param, + second_param, build_int_cst (integer_type_node, 1), build_int_cst (counted_by_type, 0), build_int_cst (integer_type_node, -1), diff --git a/gcc/calls.cc b/gcc/calls.cc index b3dccd8..076e046 100644 --- a/gcc/calls.cc +++ b/gcc/calls.cc @@ -1273,11 +1273,19 @@ void maybe_complain_about_tail_call (tree call_expr, const char *reason) { gcc_assert (TREE_CODE (call_expr) == CALL_EXPR); - if (!CALL_EXPR_MUST_TAIL_CALL (call_expr)) - return; - - error_at (EXPR_LOCATION (call_expr), "cannot tail-call: %s", reason); - CALL_EXPR_MUST_TAIL_CALL (call_expr) = 0; + if (CALL_EXPR_TAILCALL (call_expr) + && dump_file + && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, ";; Cannot tail-call: %s: ", reason); + print_generic_expr (dump_file, call_expr, TDF_SLIM); + fprintf (dump_file, "\n"); + } + if (CALL_EXPR_MUST_TAIL_CALL (call_expr)) + { + error_at (EXPR_LOCATION (call_expr), "cannot tail-call: %s", reason); + CALL_EXPR_MUST_TAIL_CALL (call_expr) = 0; + } } /* Fill in ARGS_SIZE and ARGS array based on the parameters found in @@ -1447,10 +1455,10 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base)) { *may_tailcall = false; - maybe_complain_about_tail_call (exp, - _("a callee-copied argument is" - " stored in the current" - " function's frame")); + maybe_complain_about_tail_call (exp, _("a callee-copied " + "argument is stored " + "in the current " + "function's frame")); } args[i].tree_value = build_fold_addr_expr_loc (loc, @@ -2534,10 +2542,9 @@ can_implement_as_sibling_call_p (tree exp, if (!targetm.have_sibcall_epilogue () && !targetm.emit_epilogue_for_sibcall) { - maybe_complain_about_tail_call - (exp, - _("machine description does not have" - " a sibcall_epilogue instruction pattern")); + maybe_complain_about_tail_call (exp, _("machine description does not " + "have a sibcall_epilogue " + "instruction pattern")); return false; } @@ -2555,9 +2562,8 @@ can_implement_as_sibling_call_p (tree exp, into a sibcall. */ if (!targetm.function_ok_for_sibcall (fndecl, exp)) { - maybe_complain_about_tail_call (exp, - _("target is not able to optimize the" - " call into a sibling call")); + maybe_complain_about_tail_call (exp, _("target is not able to optimize " + "the call into a sibling call")); return false; } @@ -2606,9 +2612,8 @@ can_implement_as_sibling_call_p (tree exp, if (maybe_gt (args_size.constant, crtl->args.size - crtl->args.pretend_args_size)) { - maybe_complain_about_tail_call (exp, - _("callee required more stack slots" - " than the caller")); + maybe_complain_about_tail_call (exp, _("callee required more stack " + "slots than the caller")); return false; } @@ -2621,9 +2626,8 @@ can_implement_as_sibling_call_p (tree exp, (current_function_decl), crtl->args.size))) { - maybe_complain_about_tail_call (exp, - _("inconsistent number of" - " popped arguments")); + maybe_complain_about_tail_call (exp, _("inconsistent number of" + " popped arguments")); return false; } @@ -2685,7 +2689,7 @@ expand_call (tree exp, rtx target, int ignore) so this shouldn't really happen unless the the musttail pass gave up walking before finding the call. */ if (!try_tail_call) - maybe_complain_about_tail_call (exp, _("other reasons")); + maybe_complain_about_tail_call (exp, _("other reasons")); int pass; /* Register in which non-BLKmode value will be returned, @@ -3092,8 +3096,9 @@ expand_call (tree exp, rtx target, int ignore) if (MEM_P (*iter)) { try_tail_call = 0; - maybe_complain_about_tail_call (exp, - _("hidden string length argument passed on stack")); + maybe_complain_about_tail_call (exp, _("hidden string length " + "argument passed on " + "stack")); break; } } @@ -3140,10 +3145,9 @@ expand_call (tree exp, rtx target, int ignore) || partial_subreg_p (caller_mode, callee_mode))))) { try_tail_call = 0; - maybe_complain_about_tail_call (exp, - _("caller and callee disagree in" - " promotion of function" - " return value")); + maybe_complain_about_tail_call (exp, _("caller and callee disagree " + "in promotion of function " + "return value")); } } diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 065fcc7..abde770 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -2627,6 +2627,7 @@ void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *, void dump_callgraph_transformation (const cgraph_node *original, const cgraph_node *clone, const char *suffix); +void set_new_clone_decl_and_node_flags (cgraph_node *new_node); /* In cgraphbuild.cc */ int compute_call_stmt_bb_frequency (tree, basic_block bb); void record_references_in_initializer (tree, bool); diff --git a/gcc/cgraphclones.cc b/gcc/cgraphclones.cc index 5332a43..e6223fa 100644 --- a/gcc/cgraphclones.cc +++ b/gcc/cgraphclones.cc @@ -158,7 +158,7 @@ cgraph_edge::clone (cgraph_node *n, gcall *call_stmt, unsigned stmt_uid, /* Set flags of NEW_NODE and its decl. NEW_NODE is a newly created private clone or its thunk. */ -static void +void set_new_clone_decl_and_node_flags (cgraph_node *new_node) { DECL_EXTERNAL (new_node->decl) = 0; diff --git a/gcc/cobol/ChangeLog b/gcc/cobol/ChangeLog index a792b3a..27c31c1 100644 --- a/gcc/cobol/ChangeLog +++ b/gcc/cobol/ChangeLog @@ -1,3 +1,77 @@ +2025-04-16 Bob Dubner <rdubner@symas.com> + + PR cobol/119759 + * LICENSE: Deleted. + +2025-04-15 Richard Biener <rguenther@suse.de> + + PR cobol/119302 + * Make-lang.in (GCOBOLIO_INSTALL_NAME): Define. + Use $(GCOBOLIO_INSTALL_NAME) for gcobol.3 manpage source + upon install. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR cobol/119776 + * lang.opt (fmax-errors): Remove. + * lang.opt.urls: Regenerate. + * cobol1.cc (cobol_langhook_handle_option) <case OPT_fmax_errors>: + Remove. + * gcobol.1: Document -fmax-errors=nerror rather than + -fmax-errors nerror. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR cobol/119777 + * lang.opt (include): Remove Var(cobol_include). + * cobol1.cc (cobol_langhook_handle_option) <case OPT_include>: Use + arg instead of cobol_include. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR cobol/119777 + * lang.opt (fsyntax-only): Remove. + * lang.opt.urls: Regenerate. + +2025-04-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + Simon Sobisch <simonsobisch@gnu.org> + + PR cobol/119217 + * parse.y: Rename OVERFLOW to OVERFLOW_kw. + Specify type name in %token directive. + * scan.l: Likewise. + * token_names.h: Regenerate. + +2025-04-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR cobol/119217 + * util.cc (class timespec_t): Rename to cbl_timespec. + +2025-04-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * genapi.cc: Include target.h. + (section_label): Use ASM_COMMENT_START. + (paragraph_label): Likewise. + (parser_perform): Likewise. + (internal_perform_through): Likewise. + (hijack_for_development): Likewise. + +2025-04-12 Bob Dubner <rdubner@symas.com> + + PR cobol/119694 + * cbldiag.h: Eliminate getenv() calls. + * cdf.y: Likewise. + * cobol1.cc: Likewise. + * except.cc: Likewise. + * genapi.cc: Likewise. + * lexio.cc: Likewise. + * parse.y: Likewise. + * scan_ante.h: Likewise. + * show_parse.h: Likewise. + * symbols.cc: Likewise. + * symfind.cc: Likewise. + * util.cc: Likewise. + 2025-04-09 Bob Dubner <rdubner@symas.com> PR cobol/119682 diff --git a/gcc/cobol/LICENSE b/gcc/cobol/LICENSE deleted file mode 100644 index aa5ba60..0000000 --- a/gcc/cobol/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -######################################################################### -# -# Copyright (c) 2021-2025 Symas Corporation -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Symas Corporation nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/gcc/cobol/Make-lang.in b/gcc/cobol/Make-lang.in index 422ebe2..9b74dd3 100644 --- a/gcc/cobol/Make-lang.in +++ b/gcc/cobol/Make-lang.in @@ -35,6 +35,7 @@ # - define the names for selecting the language in LANGUAGES. GCOBOL_INSTALL_NAME := $(shell echo gcobol|sed '$(program_transform_name)') +GCOBOLIO_INSTALL_NAME := $(shell echo gcobol-io|sed '$(program_transform_name)') GCOBOL_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcobol|sed '$(program_transform_name)') GCOBC_INSTALL_NAME := $(shell echo gcobc|sed '$(program_transform_name)') @@ -293,7 +294,7 @@ cobol.install-common: installdirs cobol.install-man: installdirs $(INSTALL_DATA) $(srcdir)/cobol/gcobol.1 $(DESTDIR)$(man1dir)/$(GCOBOL_INSTALL_NAME)$(man1ext) - $(INSTALL_DATA) $(srcdir)/cobol/gcobol.3 $(DESTDIR)$(man3dir)/ + $(INSTALL_DATA) $(srcdir)/cobol/gcobol.3 $(DESTDIR)$(man3dir)/$(GCOBOLIO_INSTALL_NAME)$(man3ext) cobol.install-info: @@ -342,8 +343,8 @@ cobol.uninstall: rm -rf $(DESTDIR)$(bindir)/$(GCOBOL_INSTALL_NAME)$(exeext) \ $(DESTDIR)$(bindir)/$(GCOBC_INSTALL_NAME) \ $(DESTDIR)$(datadir)/gcobol/ \ - $(DESTDIR)$(man1dir)/$(GCOBOL_INSTALL_NAME).1 \ - $(DESTDIR)$(man3dir)/gcobol.3 + $(DESTDIR)$(man1dir)/$(GCOBOL_INSTALL_NAME)$(man1ext) \ + $(DESTDIR)$(man3dir)/$(GCOBOLIO_INSTALL_NAME)$(man3ext) cobol.man: cobol.srcman: diff --git a/gcc/cobol/cbldiag.h b/gcc/cobol/cbldiag.h index ed754f1..d7ee98f 100644 --- a/gcc/cobol/cbldiag.h +++ b/gcc/cobol/cbldiag.h @@ -33,6 +33,12 @@ #else #define _CBLDIAG_H +#if 0 +#define gcobol_getenv(x) getenv(x) +#else +#define gcobol_getenv(x) ((char *)nullptr) +#endif + const char * cobol_filename(); /* @@ -101,7 +107,7 @@ template <typename LOC> static void location_dump( const char func[], int line, const char tag[], const LOC& loc) { extern int yy_flex_debug; - if( yy_flex_debug && getenv("update_location") ) + if( yy_flex_debug && gcobol_getenv("update_location") ) fprintf(stderr, "%s:%d: %s location (%d,%d) to (%d,%d)\n", func, line, tag, loc.first_line, loc.first_column, loc.last_line, loc.last_column); diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y index 6392f89..e06ccf3 100644 --- a/gcc/cobol/cdf.y +++ b/gcc/cobol/cdf.y @@ -226,7 +226,7 @@ apply_cdf_turn( exception_turns_t& turns ) { turns.location, elem.first, files); } - if( getenv("SHOW_PARSE") ) enabled_exceptions.dump(); + if( getenv("GCOBOL_SHOW") ) enabled_exceptions.dump(); return true; } %} diff --git a/gcc/cobol/cobol1.cc b/gcc/cobol/cobol1.cc index 1e690ff..3bd21c7 100644 --- a/gcc/cobol/cobol1.cc +++ b/gcc/cobol/cobol1.cc @@ -294,7 +294,7 @@ cobol_langhook_init_options_struct (struct gcc_options *opts) { cobol_set_debugging( false, false, false ); - copybook_directory_add( getenv("GCOB_COPYBOOK") ); + copybook_directory_add( getenv("GCOBOL_COPYBOOK") ); } static unsigned int @@ -385,10 +385,6 @@ cobol_langhook_handle_option (size_t scode, return true; } - case OPT_fmax_errors: - flag_max_errors = atoi(arg); - return true; - case OPT_ffixed_form: cobol_set_indicator_column(-7); return true; @@ -413,8 +409,8 @@ cobol_langhook_handle_option (size_t scode, } return true; case OPT_include: - if( ! include_file_add(cobol_include) ) { - cbl_errx( "could not include %s", cobol_include); + if( ! include_file_add(arg) ) { + cbl_errx( "could not include %s", arg); } return true; diff --git a/gcc/cobol/except.cc b/gcc/cobol/except.cc index 1485a33..7a6a922 100644 --- a/gcc/cobol/except.cc +++ b/gcc/cobol/except.cc @@ -312,11 +312,11 @@ file_status_t current_file_handled_status(); void declarative_runtime_match( cbl_field_t *declaratives, cbl_label_t *lave ) { - if( getenv("SHOW_PARSE") ) + if( getenv("GCOBOL_SHOW") ) { fprintf(stderr, "( %d ) %s: \n", cobol_location().first_line, __func__); } - if( getenv("TRACE1") ) + if( getenv("GCOBOL_TRACE") ) { gg_printf(">>>>>>( %d )(%s) declaratives:%s lave:%s\n", build_int_cst_type(INT, cobol_location().first_line), diff --git a/gcc/cobol/gcobol.1 b/gcc/cobol/gcobol.1 index 64c017c..4377c14 100644 --- a/gcc/cobol/gcobol.1 +++ b/gcc/cobol/gcobol.1 @@ -224,7 +224,7 @@ had appeared. Not all exception conditions are implemented. Any that are not produce a warning message. . -.It Fl fmax-errors Ar nerror +.It Fl fmax-errors Ns Li = Ns Ar nerror .Ar nerror represents the number of error messages produced. Without this option, .Nm diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index fdf76aa..c8911f9 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -34,6 +34,7 @@ #include "tree-iterator.h" #include "stringpool.h" #include "diagnostic-core.h" +#include "target.h" #include "../../libgcobol/ec.h" #include "../../libgcobol/common-defs.h" @@ -75,7 +76,7 @@ static int pseudo_label = 1; static bool suppress_cobol_entry_point = false; static char ach_cobol_entry_point[256] = ""; -bool bSHOW_PARSE = getenv("SHOW_PARSE"); +bool bSHOW_PARSE = getenv("GCOBOL_SHOW"); bool show_parse_sol = true; int show_parse_indent = 0; @@ -198,7 +199,7 @@ trace1_init() trace_handle = gg_define_variable(INT, "trace_handle", vs_static); trace_indent = gg_define_variable(INT, "trace_indent", vs_static); - bTRACE1 = getenv("TRACE1") ? getenv("TRACE1") : gv_trace_switch; + bTRACE1 = getenv("GCOBOL_TRACE") ? getenv("GCOBOL_TRACE") : gv_trace_switch; if( bTRACE1 && strcmp(bTRACE1, "0") != 0 ) { @@ -2357,7 +2358,8 @@ section_label(struct cbl_proc_t *procedure) cbl_label_t *label = procedure->label; // The _initialize_program section isn't relevant. - char *psz = xasprintf("# SECTION %s in %s (%ld)", + char *psz = xasprintf("%s SECTION %s in %s (%ld)", + ASM_COMMENT_START, label->name, current_function->our_unmangled_name, deconflictor); @@ -2408,7 +2410,8 @@ paragraph_label(struct cbl_proc_t *procedure) char *psz1 = xasprintf( - "# PARAGRAPH %s of %s in %s (%ld)", + "%s PARAGRAPH %s of %s in %s (%ld)", + ASM_COMMENT_START, para_name ? para_name: "" , section_name ? section_name: "(null)" , current_function->our_unmangled_name ? current_function->our_unmangled_name: "" , @@ -3006,7 +3009,8 @@ parser_perform(cbl_label_t *label, bool suppress_nexting) para_name = label->name; sect_name = section_label->name; sprintf(ach, - "# PERFORM %s of %s of %s (%ld)", + "%s PERFORM %s of %s of %s (%ld)", + ASM_COMMENT_START, para_name, sect_name, program_name, @@ -3018,7 +3022,8 @@ parser_perform(cbl_label_t *label, bool suppress_nexting) { sect_name = label->name; sprintf(ach, - "# PERFORM %s of %s (%ld)", + "%s PERFORM %s of %s (%ld)", + ASM_COMMENT_START, sect_name, program_name, deconflictor); @@ -3170,8 +3175,8 @@ internal_perform_through( cbl_label_t *proc_1, pseudo_return_push(proc2, return_addr); // Create the code that will launch the first procedure - gg_insert_into_assembler("# PERFORM %s THROUGH %s", - proc_1->name, proc_2->name); + gg_insert_into_assembler("%s PERFORM %s THROUGH %s", + ASM_COMMENT_START, proc_1->name, proc_2->name); if( !suppress_nexting ) { @@ -6632,22 +6637,6 @@ parser_division(cbl_division_t division, } gg_assign(base, gg_cast(UCHAR_P, parameter)); - IF( gg_call_expr( CHAR_P, - "getenv", - gg_string_literal("PARAMETERS_ON_ENTRY"), - NULL_TREE), - ne_op, - gg_cast(CHAR_P, null_pointer_node)); - { - gg_printf("parameter_on_entry: %s(): %d %p\n", - gg_string_literal(current_function->our_unmangled_name), - build_int_cst_type(INT, i+1), - base, - NULL_TREE); - } - ELSE - ENDIF - if( args[i].refer.field->attr & any_length_e ) { // gg_printf("side channel: Length of \"%s\" is %ld\n", @@ -13622,7 +13611,7 @@ hijack_for_development(const char *funcname) // Assume that funcname is lowercase with no hyphens enter_program_common(funcname, funcname); parser_display_literal("You have been hijacked by a program named \"dubner\""); - gg_insert_into_assembler("# HIJACKED DUBNER CODE START"); + gg_insert_into_assembler("%s HIJACKED DUBNER CODE START", ASM_COMMENT_START); for(int i=0; i<10; i++) { @@ -13635,7 +13624,7 @@ hijack_for_development(const char *funcname) NULL_TREE); } - gg_insert_into_assembler("# HIJACKED DUBNER CODE END"); + gg_insert_into_assembler("%s HIJACKED DUBNER CODE END", ASM_COMMENT_START); gg_return(0); } @@ -15871,38 +15860,6 @@ psa_global(cbl_field_t *new_var) sprintf(ach, "__gg__%s", mname); free(mname); - if( getenv("SHOW_GLOBAL_VARIABLES") ) - { - char ach_type[32]; - strcpy(ach_type, cbl_field_type_str(new_var->type)); - - fprintf(stderr, "struct cblc_field_t %s = {\n", ach); - fprintf(stderr, " .data = NULL ,\n" ); - fprintf(stderr, " .capacity = %d ,\n", new_var->data.capacity ); - fprintf(stderr, " .offset = %ld ,\n" , new_var->offset ); - fprintf(stderr, " .name = \"%s\" ,\n" , new_var->name ); - fprintf(stderr, " .picture = \"%s\" ,\n" , new_var->data.picture ? new_var->data.picture : "" ); - if( new_var->data.initial || new_var->type == FldPointer ) - { - fprintf(stderr, " .initial = \"%s\" ,\n" , new_var->data.picture ? new_var->data.picture : "" ); - } - else - { - fprintf(stderr, " .initial = NULL ,\n" ); - } - fprintf(stderr, " .parent = NULL,\n" ); - fprintf(stderr, " .depending_on = NULL ,\n" ); - fprintf(stderr, " .depends_on = NULL ,\n" ); - fprintf(stderr, " .occurs_lower = 0 ,\n" ); - fprintf(stderr, " .occurs_upper = 0 ,\n" ); - fprintf(stderr, " .attr = 0x%lx ,\n" , new_var->attr ); - fprintf(stderr, " .type = %s ,\n" , ach_type); - fprintf(stderr, " .level = %d ,\n" , new_var->level ); - fprintf(stderr, " .digits = %d ,\n" , new_var->data.digits ); - fprintf(stderr, " .rdigits = %d ,\n" , new_var->data.rdigits ); - fprintf(stderr, " };\n"); - } - if( strcmp(new_var->name, "_VERY_TRUE") == 0 ) { new_var->var_decl_node = boolean_true_node; diff --git a/gcc/cobol/lang.opt b/gcc/cobol/lang.opt index 42c4020..59278a1 100644 --- a/gcc/cobol/lang.opt +++ b/gcc/cobol/lang.opt @@ -77,10 +77,6 @@ ffixed-form Cobol RejectNegative Assume that the source file is fixed form. -fsyntax-only -Cobol RejectNegative -; Documented in c.opt - ffree-form Cobol RejectNegative Assume that the source file is free form. @@ -93,10 +89,6 @@ finternal-ebcdic Cobol Var(cobol_ebcdic, 1) Init(0) -finternal-ebcdic Internal processing is in EBCDIC Code Page 1140 -fmax-errors -Cobol Joined Separate -; Documented in C - fstatic-call Cobol Var(cobol_static_call, 1) Init(1) Enable/disable static linkage for CALL literals @@ -118,7 +110,7 @@ Cobol Joined Separate ; Documented in C include -Cobol Joined Separate Var(cobol_include) +Cobol Joined Separate ; Documented in C isysroot diff --git a/gcc/cobol/lang.opt.urls b/gcc/cobol/lang.opt.urls index 6a5dc1c..69f5297 100644 --- a/gcc/cobol/lang.opt.urls +++ b/gcc/cobol/lang.opt.urls @@ -13,15 +13,9 @@ UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Opti ffixed-form LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-ffixed-form) -fsyntax-only -UrlSuffix(gcc/Warning-Options.html#index-fsyntax-only) LangUrlSuffix_D(gdc/Warnings.html#index-fno-syntax-only) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-fsyntax-only) - ffree-form LangUrlSuffix_Fortran(gfortran/Fortran-Dialect-Options.html#index-ffree-form) -fmax-errors -UrlSuffix(gcc/Warning-Options.html#index-fmax-errors) LangUrlSuffix_D(gdc/Warnings.html#index-fmax-errors) - iprefix UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-iprefix) diff --git a/gcc/cobol/lexio.cc b/gcc/cobol/lexio.cc index 82bacf2..afe3725 100644 --- a/gcc/cobol/lexio.cc +++ b/gcc/cobol/lexio.cc @@ -380,7 +380,9 @@ struct buffer_t : public bytespan_t { dbgmsg("flex input buffer: '%.*s'\n[xelf]", int(pos - data), data); } void dump() const { +#ifdef GETENV_OK if( getenv("lexer_input") ) show(); +#endif } }; @@ -457,11 +459,11 @@ update_yylloc( const csub_match& stmt, const csub_match& term ) { class dump_loc_on_exit { public: dump_loc_on_exit() { - if( getenv( "update_yylloc" ) ) + if( gcobol_getenv( "update_yylloc" ) ) location_dump( "update_yylloc", __LINE__, "begin", yylloc); } ~dump_loc_on_exit() { - if( getenv( "update_yylloc" ) ) + if( gcobol_getenv( "update_yylloc" ) ) location_dump( "update_yylloc", __LINE__, "end ", yylloc); } } dloe; diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index 61ffa7c..55c26fe 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -338,7 +338,7 @@ %token <number> INVALID %token <number> NUMBER NEGATIVE %token <numstr> NUMSTR "numeric literal" -%token <number> OVERFLOW +%token <number> OVERFLOW_kw "OVERFLOW" %token <computational> COMPUTATIONAL %token <boolean> PERFORM BACKWARD @@ -997,7 +997,7 @@ DELETE DISPLAY DIVIDE EVALUATE END EOP EXIT FILLER_kw GOBACK GOTO INITIALIZE INSPECT - MERGE MOVE MULTIPLY OPEN OVERFLOW PARAGRAPH PERFORM + MERGE MOVE MULTIPLY OPEN OVERFLOW_kw PARAGRAPH PERFORM READ RELEASE RETURN REWRITE SEARCH SET SELECT SORT SORT_MERGE STRING_kw STOP SUBTRACT START @@ -3306,13 +3306,6 @@ level_name: LEVEL ctx_name data_descr: data_descr1 { $$ = current_field($1); // make available for occurs, etc. - char *env = getenv("symbols_update"); - if( env && env[0] == 'P' ) { - dbgmsg("parse.y:%d: %-15s %s (%s)", __LINE__, - cbl_field_type_str($$->type) + 3, - field_str($$), - cbl_field_type_str($$->usage) + 3); - } } | error { static cbl_field_t none = {}; $$ = &none; } ; @@ -9495,7 +9488,7 @@ call_except: EXCEPTION std::swap($$.on_error, $$.not_error); } } - | OVERFLOW + | OVERFLOW_kw { $$.not_error = NULL; $$.on_error = label_add(LblArith, @@ -9503,7 +9496,7 @@ call_except: EXCEPTION if( !$$.on_error ) YYERROR; parser_call_exception( $$.on_error ); - assert( $1 == OVERFLOW || $1 == NOT ); + assert( $1 == OVERFLOW_kw || $1 == NOT ); if( $1 == NOT ) { std::swap($$.on_error, $$.not_error); } @@ -9758,7 +9751,7 @@ on_overflows: on_overflow[over] statements %prec ADD } ; -on_overflow: OVERFLOW +on_overflow: OVERFLOW_kw { $$.not_error = NULL; $$.on_error = label_add(LblString, @@ -9766,7 +9759,7 @@ on_overflow: OVERFLOW if( !$$.on_error ) YYERROR; parser_string_overflow( $$.on_error ); - assert( $1 == OVERFLOW || $1 == NOT ); + assert( $1 == OVERFLOW_kw || $1 == NOT ); if( $1 == NOT ) { std::swap($$.on_error, $$.not_error); } @@ -11078,23 +11071,6 @@ void ast_call( const YYLTYPE& loc, cbl_refer_t name, cbl_refer_t returning, parser_symbol_add(name.field); } - if( getenv("ast_call") ) { - dbgmsg("%s: calling %s returning %s with %zu args:", __func__, - name_of(name.field), - (returning.field)? returning.field->name : "[none]", - narg); - for( size_t i=0; i < narg; i++ ) { - const char *crv = "?"; - switch(args[i].crv) { - case by_default_e: crv = "def"; break; - case by_reference_e: crv = "ref"; break; - case by_content_e: crv = "con"; break; - case by_value_e: crv = "val"; break; - } - dbgmsg("%s: %4zu: %s @%p %s", __func__, - i, crv, args[i].refer.field, args[i].refer.field->name); - } - } parser_call( name, returning, narg, args, except, not_except, is_function ); } @@ -11403,11 +11379,6 @@ label_add( const YYLTYPE& loc, assert( !(p->type == LblSection && p->parent > 0) ); - if( getenv(__func__) ) { - yywarn("%s: added label %3zu %10s for '%s' of %zu", __func__, - symbol_elem_of(p) - symbols_begin(), p->type_str()+3, p->name, p->parent); - } - return p; } @@ -11468,20 +11439,12 @@ paragraph_reference( const char name[], size_t section ) strcpy(label.name, name); if( label.type == LblNone ) assert(label.parent == 0); - const symbol_elem_t *last = symbols_end(); - p = symbol_label_add(PROGRAM, &label); assert(p); const char *sect_name = section? cbl_label_of(symbol_at(section))->name : NULL; procedure_reference_add(sect_name, p->name, yylineno, current.program_section()); - if( getenv(__func__) ) { - yywarn("%s: %s label %3zu %10s for '%s' of %zu", __func__, - symbols_end() == last? "added" : "found", - symbol_index(symbol_elem_of(p)), p->type_str()+3, p->name, p->parent); - } - return p; } @@ -11675,10 +11638,6 @@ ast_add( arith_t *arith ) { pC = use_any(arith->tgts, C); pA = use_any(arith->A, A); - if( getenv(__func__) ) { - dbgmsg("%s:%d: %-12s C{%zu %p} A{%zu %p}", __func__, __LINE__, - arith->format_str(), nC, pC, nA, pA ); - } parser_add( nC, pC, nA, pA, arith->format, arith->on_error, arith->not_error ); ec_type_t handled = arith->on_error || arith->not_error ? ec_size_e : ec_none_e; @@ -11780,9 +11739,6 @@ stringify( refer_collection_t *inputs, } assert( inputs->lists.back().marker ); std::copy( inputs->lists.begin(), inputs->lists.end(), sources.begin() ); - if( yydebug && getenv(__func__) ) { - std::for_each(sources.begin(), sources.end(), stringify_src_t::dump); - } parser_string( into, pointer, sources.size(), sources.data(), on_error, not_error ); } @@ -12227,9 +12183,6 @@ initialize_one( cbl_num_result_t target, bool with_filler, } else { parser_move(tgt, src, current_rounded_mode()); } - if( getenv(__func__) ) { - yywarn("%s:%-5s: %s", __func__, keyword_str(token), field_str(tgt.field)); - } return true; } @@ -12246,10 +12199,6 @@ initialize_one( cbl_num_result_t target, bool with_filler, parser_initialize(tgt); } } - - if( getenv(__func__) ) { - yywarn("%s: value: %s", __func__, field_str(tgt.field)); - } } // apply REPLACING, possibly overwriting VALUE @@ -12262,75 +12211,15 @@ initialize_one( cbl_num_result_t target, bool with_filler, if( r != replacements.end() ) { parser_move( tgt, *r->second ); - if( getenv(__func__) ) { - cbl_field_t *from = r->second->field; - char from_str[128]; // copy static buffer from field_str - strcpy( from_str, field_str(from) ); - yywarn("%s: move: %-18s %s \n\t from %-18s %s", __func__, - cbl_field_type_str(tgt.field->type) + 3, field_str(tgt.field), - cbl_field_type_str(from->type) + 3, from_str); - } return true; } return true; - } typedef std::pair<cbl_field_t*,cbl_field_t*> field_span_t; typedef std::pair<size_t, size_t> cbl_bytespan_t; -static void -dump_spans( size_t isym, - const cbl_field_t *table, - const std::list<field_span_t>& spans, - size_t nrange, - const cbl_bytespan_t ranges[], - size_t depth, - const std::list<cbl_subtable_t>& subtables ) -{ - int i=0; - assert( nrange == 0 || nrange == spans.size() ); - - if( isym != field_index(table) ) { - dbgmsg("%s:%d: isym %zu is not #%zu %02u %s", __func__, __LINE__, - isym, field_index(table), table->level, table->name); - } - dbgmsg( "%s: [%zu] #%zu %s has %zu spans and %zu subtables", - __func__, depth, isym, table->name, nrange, subtables.size() ); - for( auto span : spans ) { - unsigned int last_level = 0; - const char *last_name = "<none>"; - if( span.second ) { - last_level = span.second->level; - last_name = span.second->name; - } - - char at_subtable[64] = {}; - size_t offset = nrange? ranges[i].first : 0; - auto p = std::find_if(subtables.begin(), subtables.end(), - [offset]( const cbl_subtable_t& tbl ) { - return tbl.offset == offset; - }); - if( p != subtables.end() ) { - sprintf(at_subtable, "(subtable #%zu)", p->isym); - } - dbgmsg("\t %02u %-20s to %02u %-20s: %3zu-%zu %s", - span.first->level, span.first->name, - last_level, last_name, - nrange? ranges[i].first : 1, - nrange? ranges[i].second : 0, - at_subtable); - i++; - } - if( ! subtables.empty() ) { - dbgmsg("\ttable #%zu has %zu subtables", isym, subtables.size()); - for( auto tbl : subtables ) { - dbgmsg("\t #%zu @ %4zu", tbl.isym, tbl.offset); - } - } -} - /* * After the 1st record is initialized, copy it to the others. */ @@ -12339,9 +12228,6 @@ initialize_table( cbl_num_result_t target, size_t nspan, const cbl_bytespan_t spans[], const std::list<cbl_subtable_t>& subtables ) { - if( getenv("initialize_statement") ) { - dbgmsg("%s:%d: %s ", __func__, __LINE__, target.refer.str()); - } assert( target.refer.nsubscript == dimensions(target.refer.field) ); const cbl_refer_t& src( target.refer ); size_t n( src.field->occurs.ntimes()); @@ -12391,12 +12277,6 @@ initialize_statement( const cbl_num_result_t& target, bool with_filler, const category_map_t& replacements, size_t depth = 0 ) { - if( getenv(__func__) ) { - dbgmsg("%s:%d: %2zu: %s (%s%zuR)", - __func__, __LINE__, depth, target.refer.str(), - with_filler? "F" : "", - replacements.size()); - } const cbl_refer_t& tgt( target.refer ); assert(dimensions(tgt.field) == tgt.nsubscript || 0 < depth); assert(!is_literal(tgt.field)); @@ -12480,10 +12360,6 @@ initialize_statement( const cbl_num_result_t& target, bool with_filler, return std::make_pair(first, second); } ); } - if( getenv("initialize_statement") ) { - dump_spans( field_index(output.refer.field), output.refer.field, - field_spans, ranges.size(), ranges.data(), depth, subtables ); - } return initialize_table( output, nrange, ranges.data(), subtables ); } } @@ -12550,18 +12426,6 @@ static void initialize_statement( std::list<cbl_num_result_t>& tgts, bool with_filler, data_category_t value_category, const category_map_t& replacements) { - if( yydebug && getenv(__func__) ) { - yywarn( "%s: %zu targets, %s filler", - __func__, tgts.size(), with_filler? "with" : "no"); - for( auto tgt : tgts ) { - fprintf( stderr, "%28s: %s\n", __func__, name_of(tgt.refer.field) ); - } - for( const auto& elem : replacements ) { - fprintf( stderr, "%28s: %s <-%s\n", __func__, - data_category_str(elem.first), - name_of(elem.second->field) ); - } - } bool is_refmod = std::any_of( tgts.begin(), tgts.end(), []( const auto& tgt ) { diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l index 2cb7d30..e30634d 100644 --- a/gcc/cobol/scan.l +++ b/gcc/cobol/scan.l @@ -1543,9 +1543,9 @@ USE({SPC}FOR)? { return USE; } NOT{SPC}(ON{SPC})?EXCEPTION { yylval.number = NOT; return EXCEPTION; } - (ON{SPC})?OVERFLOW { yylval.number = OVERFLOW; return OVERFLOW; } + (ON{SPC})?OVERFLOW { yylval.number = OVERFLOW_kw; return OVERFLOW_kw; } NOT{SPC}(ON{SPC})?OVERFLOW { - yylval.number = NOT; return OVERFLOW; } + yylval.number = NOT; return OVERFLOW_kw; } (AT{SPC})?END/[[:space:]] { yylval.number = END; return END; } @@ -2312,7 +2312,7 @@ BASIS { yy_push_state(basis); return BASIS; } ORGANIZATION { return ORGANIZATION; } OTHER { return OTHER; } OUTPUT { return OUTPUT; } - OVERFLOW { return OVERFLOW; } + OVERFLOW { return OVERFLOW_kw; } OVERRIDE { return OVERRIDE; } PACKED-DECIMAL { return PACKED_DECIMAL; } PAGE { return PAGE; } diff --git a/gcc/cobol/scan_ante.h b/gcc/cobol/scan_ante.h index b9bbd30..cfeacfc 100644 --- a/gcc/cobol/scan_ante.h +++ b/gcc/cobol/scan_ante.h @@ -694,9 +694,6 @@ tmpstring_append( int len ) { const char *extant = tmpstring == NULL ? "" : tmpstring; char *s = xasprintf("%s%.*s", extant, len, yytext); free(tmpstring); - if( yy_flex_debug && getenv(__func__) ) { - yywarn("%s: value is now '%s'", __func__, s); - } return tmpstring = s; } diff --git a/gcc/cobol/show_parse.h b/gcc/cobol/show_parse.h index ad26584..9b1abb4 100644 --- a/gcc/cobol/show_parse.h +++ b/gcc/cobol/show_parse.h @@ -42,9 +42,6 @@ // SHOW_PARSE must be followed by a bracketed set of instructions, no semicolon -// This construction isn't really necessary; getenv() apparently runs pretty -// fast. But using makes compiling a large number of programs just perceptably -// quicker. So, I am using it; it's cheap. extern bool bSHOW_PARSE; extern bool show_parse_sol; extern int show_parse_indent; diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc index 4067459..ddb8e68 100644 --- a/gcc/cobol/symbols.cc +++ b/gcc/cobol/symbols.cc @@ -369,12 +369,6 @@ special_pair_cmp( const cbl_special_name_t& key, const cbl_special_name_t& elem ) { const bool matched = key.id == elem.id || 0 == strcasecmp(key.name, elem.name); - if( getenv(__func__) ) { - dbgmsg("%s:%d: key: id=%2d, %s", __func__, __LINE__, key.id, key.name); - dbgmsg("%s:%d: elem: id=%2d, %s => %s", __func__, __LINE__, - elem.id, elem.name, matched? "match" : "no match"); - } - return matched; } @@ -893,13 +887,6 @@ update_block_offsets( struct symbol_elem_t *block) uint32_t offset = cbl_field_of(block)->offset; const uint32_t block_level = cbl_field_of(block)->level; - if( getenv(__func__) ) { - cbl_field_t *field = cbl_field_of(block); - dbgmsg( "%s: offset is %3zu for %2u %-30s #%3zu P%zu", - __func__, field->offset, field->level, field->name, - symbol_index(block), field->parent ); - } - struct symbol_elem_t *e = block; for( ++e; e < symbols_end(); e++ ) { if( e->type != SymField ) { @@ -929,12 +916,6 @@ update_block_offsets( struct symbol_elem_t *block) offset += field_memsize(field); } - if( getenv(__func__) ) { - dbgmsg( "%s: offset is %3zu for %2u %-30s #%3zu P%zu", - __func__, field->offset, field->level, field->name, - symbol_index(e), field->parent ); - } - if( field->type == FldGroup ) { e = update_block_offsets(e) - 1; } @@ -1051,7 +1032,6 @@ symbol_find_odo_debug( cbl_field_t * field ) { // Return OCCURS DEPENDING ON table subordinate to field, if any. struct cbl_field_t * symbol_find_odo( cbl_field_t * field ) { - if( getenv(__func__) ) return symbol_find_odo_debug(field); size_t bog = field_index(field), eog = end_of_group(bog); auto e = std::find_if( symbol_at(bog), symbol_at_impl(eog, true), has_odo ); return e == symbol_at_impl(eog, true)? NULL : cbl_field_of(e); @@ -1288,10 +1268,6 @@ static struct symbol_elem_t * // Print accumulating details for one group to debug log. bool details = false; - if( yydebug ) { - const auto details_for = getenv("symbols_update"); - details = details_for && 0 == strcasecmp(details_for, group->name); - } // At end of group, members is a list of all immediate children, any // of which might have been redefined and so acquired a memsize. @@ -1363,23 +1339,6 @@ verify_block( const struct symbol_elem_t *block, if( e->type != SymField ) { continue; } - const struct cbl_field_t *field = cbl_field_of(e); - - if( getenv(__func__) ) { - if( e == block ) { - static const char ds[] = "--------------------------------"; - dbgmsg( "%17s %-3s %-3s %-18s %-3s %3s %-16s C/D/R = init\n" - "%.25s %-.3s %-.3s %-.18s %-.3s %.3s %-.16s %-.7s %-.16s", - "", "ndx", "off", "type", "par", "lvl", "name", - ds, ds, ds, ds, ds, ds, ds, ds, ds ); - } - dbgmsg( "%s:%d: %3zu %3zu %-18s %3zu %02d %-16s %2u/%u/%d = '%s'", - __func__, __LINE__, e - symbols.elems, field->offset, - cbl_field_type_str(field->type), - field->parent, field->level, field->name, - field->data.capacity, field->data.digits, field->data.rdigits, - field->data.initial? field->data.initial : "(none)" ); - } } } @@ -1694,6 +1653,9 @@ operator<<( std::ostream& os, const cbl_occurs_bounds_t& bound ) { return os << bound.lower << ',' << bound.upper; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +// Keep this debugging function around for when it is needed static std::ostream& operator<<( std::ostream& os, const cbl_field_data_t& field ) { return os << field.memsize << ',' @@ -1717,16 +1679,7 @@ operator<<( std::ostream& os, const cbl_field_t& field ) { << ',' << field.line << ',' << field.data; } - -static void -write_field_csv( size_t isym, const cbl_field_t *field ) { - static std::ofstream os( getenv("GCOBOL_DATA") ); - assert(os.is_open()); - - if( symbols.first_program < isym) { - os << isym << "," << *field << std::endl; - } -} +#pragma GCC diagnostic pop static std::map<size_t, std::set<size_t>> same_record_areas; size_t parse_error_count(); @@ -1747,11 +1700,6 @@ symbols_update( size_t first, bool parsed_ok ) { struct symbol_elem_t *p, *pend; std::list<cbl_field_t*> shared_record_areas; - if( getenv(__func__) ) { - fprintf(stderr, "Initial"); - symbols_dump(std::max(first, symbols.first_program), true); - } - for( p = symbols_begin(first); p < symbols_end(); p++ ) { if( p->type == SymAlphabet ) continue; // Alphabets already processed. @@ -1796,10 +1744,6 @@ symbols_update( size_t first, bool parsed_ok ) { // no special processing for other levels } - if( getenv("GCOBOL_DATA") ) { - write_field_csv( p - symbols_begin(), field ); - } - // Update ODO field in situ. if( is_table(field) ) { size_t& odo = field->occurs.depending_on; @@ -1869,11 +1813,6 @@ symbols_update( size_t first, bool parsed_ok ) { assert( !(field->data.memsize > 0 && symbol_explicitly_redefines(field)) ); } - if( getenv(__func__) ) { - fprintf(stderr, "Pre"); - symbols_dump(std::max(first, symbols.first_program), true); - } - // A shared record area has no 01 child because that child redefines its parent. for( auto sharer : shared_record_areas ) { auto redefined = cbl_field_of(symbol_at(sharer->parent)); @@ -2391,8 +2330,6 @@ symbol_table_init(void) { symbols.registers.return_code = symbol_index(symbol_field(0,0, "RETURN-CODE")); symbols.registers.very_true = symbol_index(symbol_field(0,0, "_VERY_TRUE")); symbols.registers.very_false = symbol_index(symbol_field(0,0, "_VERY_FALSE")); - - if( getenv(__func__) ) symbols_dump(0, true); } /* @@ -2589,26 +2526,6 @@ symbol_field_add( size_t program, struct cbl_field_t *field ) } } - char *s; - if( (s = getenv(__func__)) != NULL ) { - if( s[0] == 'D' ) { - for( struct symbol_elem_t *e = symbols_begin(); e < symbols_end(); e++ ) { - fprintf(stderr, "%zu: %s ", e - symbols.elems, symbol_type_str(e->type)); - if( e->type == SymField ) { - fprintf(stderr, "%s = %s", - cbl_field_of(e)->name, cbl_field_of(e)->data.initial); - } - fprintf(stderr, "\n"); - } - } - - dbgmsg( "%s:%d: %3zu %-18s %02d %-16s %u/%u/%d = '%s'", __func__, __LINE__, - field->offset, - cbl_field_type_str(field->type), field->level, field->name, - field->data.capacity, field->data.digits, field->data.rdigits, - field->data.initial? field->data.initial : "(none)" ); - } - if( is_forward(field) ) { auto *e = symbol_field( program, field->parent, field->name ); if( e ) { @@ -3120,12 +3037,6 @@ symbol_file_record_sizes( struct cbl_file_t *file ) { output.min = cbl_field_of(&*p.first)->data.capacity; output.max = cbl_field_of(&*p.second)->data.capacity; - if( yydebug && getenv(__func__) ) { - dbgmsg("%s: %s: min '%s' %zu, max '%s' %zu", __func__, file->name, - cbl_field_of(&*p.first)->name, output.min, - cbl_field_of(&*p.second)->name, output.max); - } - assert(output.min > 0 && "min record size is 0"); assert(output.min <= output.max); @@ -3304,10 +3215,6 @@ new_temporary_impl( enum cbl_field_type_t type ) snprintf(f->name, sizeof(f->name), "_literal%d",++nliteral); } else { snprintf(f->name, sizeof(f->name), "_stack%d",++nstack); - - if( getenv("symbol_temporaries_free") ) { - dbgmsg("%s: %s, %s", __func__, f->name, 3 + cbl_field_type_str(f->type)); - } } return f; @@ -3400,14 +3307,6 @@ temporaries_t::dump() const { } temporaries_t::~temporaries_t() { - if( getenv( "symbol_temporaries_free" ) ) { - dbgmsg("%s: %zu literals", __func__, literals.size()); - for( const auto& elem : literals ) { - const literal_an& key(elem.first); - fprintf(stderr, "%c '%s'\n", key.is_quoted? 'Q' : ' ', key.value.c_str()); - } - dump(); - } } cbl_field_t * @@ -3451,7 +3350,6 @@ temporaries_t::acquire( cbl_field_type_t type ) { void symbol_temporaries_free() { - if( getenv(__func__) ) temporaries.dump(); for( auto& elem : temporaries.used ) { const cbl_field_type_t& type(elem.first); temporaries_t::fieldset_t& used(elem.second); @@ -3599,9 +3497,6 @@ cbl_field_t::internalize() { yywarn("failed iconv_open tocode = '%s' fromcode = %s", tocode, fromcode); } - // Sat Mar 16 11:45:08 2024: require temporary environment for testing - if( getenv( "INTERNALIZE_NO") ) return data.initial; - bool using_assumed = fromcode == os_locale.assumed; if( fromcode == tocode || has_attr(hex_encoded_e) ) { @@ -3649,16 +3544,6 @@ cbl_field_t::internalize() { if( 0 != memcmp(data.initial, output.data(), out - output.data()) ) { assert(out <= output.data() + data.capacity); - if( getenv(__func__) ) { - const char *eoi = data.initial + data.capacity, *p; - char nullitude[64] = "no null"; - if( (p = std::find(data.initial, eoi, '\0')) != eoi ) { - sprintf(nullitude, "NUL @ %zu", p - data.initial); - } - dbgmsg("%s:%d: before: %-15s %-20s: '%.*s'{%u}, %s", __func__, __LINE__, - 3 + cbl_field_type_str(type), name, - data.capacity, data.initial, data.capacity, nullitude); - } dbgmsg("%s: converted '%.*s' to %s", __func__, data.capacity, data.initial, tocode); @@ -3677,18 +3562,6 @@ cbl_field_t::internalize() { free(const_cast<char*>(data.initial)); data.initial = mem; - - if( getenv(__func__) ) { - const char *eoi = data.initial + data.capacity, *p; - char nullitude[64] = "no null"; - if( (p = std::find(data.initial, eoi, '\0')) != eoi ) { - sprintf(nullitude, "NUL @ %zu", p - data.initial); - } - dbgmsg("%s:%d: after: %-15s %-20s: '%.*s'{%u}, %s", __func__, __LINE__, - "", name, - data.capacity, data.initial, data.capacity, nullitude); - } - } return data.initial; @@ -3808,37 +3681,14 @@ common_callables_update( const size_t iprog ) { cbl_label_t * symbol_label_add( size_t program, cbl_label_t *input ) { - if( getenv(__func__) ) { - const cbl_label_t *L = input; - dbgmsg( "%s:%d: %-5s #%3zu %-9s '%s' of '%s' at line %d", __func__, __LINE__, - "input", - size_t(0), - L->type_str()+3, - L->name, - L->parent? cbl_label_of(symbol_at(L->parent))->name : "", - L->line ); - } - cbl_label_t *label = symbol_label(program, input->type, input->parent, input->name); if( label && label->type == LblNone ) { - const char *verb = "set"; label->type = input->type; label->parent = input->parent; label->line = input->line; - if( getenv(__func__) ) { - const cbl_label_t *L = label; - dbgmsg( "%s:%d: %-5s #%3zu %-9s '%s' of '%s' at line %d", - __func__, __LINE__, - verb, - symbol_elem_of(L) - symbols_begin(), - L->type_str()+3, - L->name, - L->parent? cbl_label_of(symbol_at(L->parent))->name : "", - L->line ); - } return label; } @@ -3864,15 +3714,6 @@ symbol_label_add( size_t program, cbl_label_t *input ) // restore munged line number unless symbol_add returned an existing label if( e->elem.label.line < 0 ) e->elem.label.line = -e->elem.label.line; - if( getenv(__func__) ) { - const cbl_label_t *L = cbl_label_of(e); - dbgmsg( "%s:%d: added #%3zu %-9s '%s' of '%s' at line %d", __func__, __LINE__, - e - symbols_begin(), - L->type_str()+3, - L->name, - L->parent? cbl_label_of(symbol_at(L->parent))->name : "", - L->line ); - } symbols.labelmap_add(e); return cbl_label_of(e); } @@ -3965,11 +3806,6 @@ symbol_special_add( size_t program, struct cbl_special_name_t *special ) struct symbol_elem_t *e = symbol_special(program, special->name); if( e ) { - cbl_special_name_t *s = cbl_special_name_of(e); - if( getenv(__func__) ) { - dbgmsg("%s:%d matches %s %d (%s)", __func__, __LINE__, - special->name, int(s->id), s->name); - } return e; } assert(e == NULL); @@ -3980,11 +3816,6 @@ symbol_special_add( size_t program, struct cbl_special_name_t *special ) cbl_errx( "%s:%d: could not add '%s'", __func__, __LINE__, special->name); } - if( getenv(__func__) ) { - dbgmsg( "%s:%d: added special '%s'", __func__, __LINE__, - e->elem.special.name); - } - elem_key_t key(program, cbl_special_name_of(e)->name); symbols.specials[key] = symbol_index(e); diff --git a/gcc/cobol/symfind.cc b/gcc/cobol/symfind.cc index 8995715..8c5f4af 100644 --- a/gcc/cobol/symfind.cc +++ b/gcc/cobol/symfind.cc @@ -200,12 +200,6 @@ field_structure( symbol_elem_t& sym ) { static const symbol_map_t::value_type none( symbol_map_t::key_type( 0, "", 0 ), std::vector<size_t>() ); - if( getenv(__func__) && sym.type == SymField ) { - const auto& field = *cbl_field_of(&sym); - dbgmsg("%s: #%zu %s: '%s' is_data_field: %s", __func__, - symbol_index(&sym), cbl_field_type_str(field.type), field.name, - is_data_field(sym)? "yes" : "no" ); - } if( !is_data_field(sym) ) return none; cbl_field_t *field = cbl_field_of(&sym); @@ -233,12 +227,6 @@ field_structure( symbol_elem_t& sym ) { } } - if( getenv(__func__) && yydebug ) { - dbgmsg( "%s:%d: '%s' has %zu ancestors", __func__, __LINE__, - elem.first.c_str(), elem.second.size() ); - dump_symbol_map_value(__func__, elem); - } - return elem; } @@ -270,12 +258,6 @@ build_symbol_map() { if( yydebug ) { dbgmsg( "%s:%d: %zu of %zu symbols inserted into %zu in symbol_map", __func__, __LINE__, nsym, end, symbol_map.size() ); - - if( getenv(__func__) ) { - for( const auto& elem : symbol_map ) { - dump_symbol_map_value1(elem); - } - } } } @@ -291,9 +273,6 @@ public: is_name( const char *name ) : name(name) {} bool operator()( symbol_map_t::value_type& elem ) { const bool tf = elem.first == name; - if( tf && getenv("is_name") ) { - dump_key( "matched", elem.first ); - } return tf; } protected: @@ -587,12 +566,6 @@ symbol_elem_t * symbol_find_of( size_t program, std::list<const char *> names, size_t group ) { symbol_map_t input = symbol_match(program, names); - if( getenv(__func__) && input.size() != 1 ) { - dbgmsg( "%s:%d: '%s' has %zu candidates for group %zu", - __func__, __LINE__, names.back(), input.size(), group ); - std::for_each( input.begin(), input.end(), dump_symbol_map_value1 ); - } - symbol_map_t items; std::copy_if( input.begin(), input.end(), std::inserter(items, items.begin()), in_group(group) ); diff --git a/gcc/cobol/token_names.h b/gcc/cobol/token_names.h index a082078..d1e3b5d 100644 --- a/gcc/cobol/token_names.h +++ b/gcc/cobol/token_names.h @@ -49,7 +49,7 @@ tokens = { { "number", NUMBER }, // 302 { "negative", NEGATIVE }, // 303 { "numstr", NUMSTR }, // 304 - { "overflow", OVERFLOW }, // 305 + { "overflow", OVERFLOW_kw }, // 305 { "computational", COMPUTATIONAL }, // 306 { "perform", PERFORM }, // 307 { "backward", BACKWARD }, // 308 diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc index 1c0810b..f28fddf 100644 --- a/gcc/cobol/util.cc +++ b/gcc/cobol/util.cc @@ -1172,12 +1172,6 @@ valid_move( const struct cbl_field_t *tgt, const struct cbl_field_t *src ) } } - if( yydebug && getenv(__func__) ) { - dbgmsg("%s:%d: ok to move %s to %s (0x%02x)", __func__, __LINE__, - cbl_field_type_str(src->type), cbl_field_type_str(tgt->type), - retval); - } - return retval; } @@ -1443,15 +1437,6 @@ locally_unique( size_t program, const procdef_t& key, const procref_t& ref ) { const char *section_name = ref.has_section()? ref.section() : key.section(); procref_base_t full_ref(section_name, ref.paragraph()); - if( getenv(__func__) ) { - dbgmsg("%s: %zu for ref %s of '%s' (line %d) " - "in %s of '%s' (as %s of '%s')", __func__, - procedures.count(full_ref), - ref.paragraph(), ref.section(), ref.line_number(), - key.paragraph(), key.section(), - full_ref.paragraph(), full_ref.section() ); - } - return 1 == procedures.count(full_ref); } @@ -1473,9 +1458,6 @@ procedure_definition_add( size_t program, const cbl_label_t *procedure ) { } procdef_t key( section_name, paragraph_name, isym ); - if( getenv(__func__) ) { - dbgmsg("%s: #%3zu %s of %s", __func__, isym, paragraph_name, section_name); - } current_procedure = programs[program].insert( make_pair(key, procedures_t::mapped_type()) ); } @@ -1485,9 +1467,6 @@ void procedure_reference_add( const char *section, const char *paragraph, int line, size_t context ) { - if( getenv(__func__) ) { - dbgmsg("%s: line %3d %s of %s", __func__, line, paragraph, section); - } current_procedure->second.push_back( procref_t(section, paragraph, line, context) ); } @@ -1518,7 +1497,7 @@ ambiguous_reference( size_t program ) { ambiguous = find_if_not( proc.second.begin(), proc.second.end(), is_unique(program, proc.first) ); if( proc.second.end() != ambiguous ) { - if( yydebug || getenv("symbol_label_add")) { + if( yydebug ) { dbgmsg("%s: %s of '%s' has %zu potential matches", __func__, ambiguous->paragraph(), ambiguous->section(), procedures.count(*ambiguous)); @@ -1842,10 +1821,6 @@ bool cobol_filename( const char *name, ino_t inode ) { input_filename_vestige = name; bool pushed = input_filenames.push( input_file_t(name, inode, 1, lines) ); input_filenames.top().lineno = yylineno = 1; - if( getenv(__func__) ) { - dbgmsg(" saving %s with lineno as %d", - input_filenames.top().name, input_filenames.top().lineno); - } return pushed; } @@ -1854,9 +1829,6 @@ cobol_lineno_save() { if( input_filenames.empty() ) return NULL; auto& input( input_filenames.top() ); input.lineno = yylineno; - if( getenv(__func__) ) { - dbgmsg(" setting %s with lineno as %d", input.name, input.lineno); - } return input.name; } @@ -1880,9 +1852,6 @@ cobol_filename_restore() { input.lines = linemap_add(line_table, LC_LEAVE, sysp, NULL, 0); yylineno = input.lineno; - if( getenv("cobol_filename") ) { - dbgmsg("restoring %s with lineno to %d", input.name, input.lineno); - } return input.name; } @@ -2118,8 +2087,6 @@ cobol_fileline_set( const char line[] ) { input_file_t input_file( filename, ino_t(0), fileline ); // constructor sets inode - if( getenv(__func__) ) return filename; // ignore #line directive - if( input_filenames.empty() ) { input_file.lines = linemap_add(line_table, LC_ENTER, sysp, filename, 1); input_filenames.push(input_file); @@ -2132,20 +2099,20 @@ cobol_fileline_set( const char line[] ) { return file.name; } -class timespec_t { +class cbl_timespec { struct timespec now; public: - timespec_t() { + cbl_timespec() { clock_gettime(CLOCK_MONOTONIC, &now); } double ns() const { return now.tv_sec * 1000000000 + now.tv_nsec; } - friend double operator-( const timespec_t& now, const timespec_t& then ); + friend double operator-( const cbl_timespec& now, const cbl_timespec& then ); }; double -operator-( const timespec_t& then, const timespec_t& now ) { +operator-( const cbl_timespec& then, const cbl_timespec& now ) { return (now.ns() - then.ns()) / 1000000000; } @@ -2158,11 +2125,11 @@ parse_file( const char filename[] ) parser_enter_file(filename); - timespec_t start; + cbl_timespec start; int erc = yyparse(); - timespec_t finish; + cbl_timespec finish; double dt = finish - start; parser_leave_file(); diff --git a/gcc/combine.cc b/gcc/combine.cc index 5f08518..873c2bd 100644 --- a/gcc/combine.cc +++ b/gcc/combine.cc @@ -815,7 +815,7 @@ do_SUBST_LINK (struct insn_link **into, struct insn_link *newval) #define SUBST_LINK(oldval, newval) do_SUBST_LINK (&oldval, newval) /* Subroutine of try_combine. Determine whether the replacement patterns - NEWPAT, NEWI2PAT and NEWOTHERPAT are cheaper according to insn_cost + NEWPAT, NEWI2PAT and NEWOTHERPAT are more expensive according to insn_cost than the original sequence I0, I1, I2, I3 and undobuf.other_insn. Note that I0, I1 and/or NEWI2PAT may be NULL_RTX. Similarly, NEWOTHERPAT and undobuf.other_insn may also both be NULL_RTX. Return false if the cost @@ -4129,8 +4129,8 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, } } - /* Only allow this combination if insn_cost reports that the - replacement instructions are cheaper than the originals. */ + /* Reject this combination if insn_cost reports that the replacement + instructions are more expensive than the originals. */ if (!combine_validate_cost (i0, i1, i2, i3, newpat, newi2pat, other_pat)) { undo_all (); @@ -5280,6 +5280,12 @@ find_split_point (rtx *loc, rtx_insn *insn, bool set_src) SUBST (XEXP (x, 0), XEXP (x, 1)); SUBST (XEXP (x, 1), tem); } + /* Many targets have a `(and (not X) Y)` and/or `(ior (not X) Y)` instructions. + Split at that insns. However if this is + the SET_SRC, we likely do not have such an instruction and it's + worthless to try this split. */ + if (!set_src && GET_CODE (XEXP (x, 0)) == NOT) + return loc; break; case PLUS: diff --git a/gcc/common.opt b/gcc/common.opt index 2c8fdde..e3fa0da 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2116,6 +2116,10 @@ fipa-modref Common Var(flag_ipa_modref) Optimization Perform interprocedural modref analysis. +fipa-reorder-for-locality +Common Var(flag_ipa_reorder_for_locality) Init(0) Optimization +Perform reordering and cloning of functions to maximize locality. + fipa-profile Common Var(flag_ipa_profile) Init(0) Optimization Perform interprocedural profile propagation. diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls index 860ebd0..0077511 100644 --- a/gcc/common.opt.urls +++ b/gcc/common.opt.urls @@ -31,8 +31,9 @@ UrlSuffix(gcc/Optimize-Options.html#index-Og) Oz UrlSuffix(gcc/Optimize-Options.html#index-Oz) -Q -UrlSuffix(gcc/Developer-Options.html#index-Q) +; skipping UrlSuffix for 'Q' due to multiple URLs: +; duplicate: 'gcc/Developer-Options.html#index-Q-1' +; duplicate: 'gcc/Overall-Options.html#index-Q' Qn UrlSuffix(gcc/System-V-Options.html#index-Qn) @@ -868,6 +869,9 @@ UrlSuffix(gcc/Optimize-Options.html#index-fipa-bit-cp) fipa-modref UrlSuffix(gcc/Optimize-Options.html#index-fipa-modref) +fipa-reorder-for-locality +UrlSuffix(gcc/Optimize-Options.html#index-fipa-reorder-for-locality) + fipa-profile UrlSuffix(gcc/Optimize-Options.html#index-fipa-profile) @@ -1459,6 +1463,9 @@ UrlSuffix(gcc/Optimize-Options.html#index-ftree-coalesce-vars) ftree-copy-prop UrlSuffix(gcc/Optimize-Options.html#index-ftree-copy-prop) +ftree-cselim +UrlSuffix(gcc/Optimize-Options.html#index-ftree-cselim) + ftree-switch-conversion UrlSuffix(gcc/Optimize-Options.html#index-ftree-switch-conversion) diff --git a/gcc/common/config/s390/s390-common.cc b/gcc/common/config/s390/s390-common.cc index 4b0691d..8a147d7 100644 --- a/gcc/common/config/s390/s390-common.cc +++ b/gcc/common/config/s390/s390-common.cc @@ -54,10 +54,10 @@ EXPORTED_CONST int processor_flags_table[] = | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX | PF_Z13 | PF_VX | PF_VXE | PF_Z14 | PF_VXE2 | PF_Z15 | PF_NNPA | PF_Z16, - /* arch15 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT + /* z17 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX | PF_Z13 | PF_VX | PF_VXE | PF_Z14 | PF_VXE2 | PF_Z15 - | PF_NNPA | PF_Z16 | PF_VXE3 | PF_ARCH15 + | PF_NNPA | PF_Z16 | PF_VXE3 | PF_Z17 }; /* Change optimizations to be performed, depending on the diff --git a/gcc/config.gcc b/gcc/config.gcc index f7f2002..d98df88 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -2540,6 +2540,20 @@ riscv*-*-linux*) gcc_cv_initfini_array=yes with_tls=${with_tls:-trad} ;; +riscv*-*-gnu*) + tm_file="elfos.h gnu-user.h gnu.h glibc-stdint.h ${tm_file} riscv/gnu.h" + tmake_file="${tmake_file} riscv/t-riscv" + gnu_ld=yes + gas=yes + case $target in + riscv32be-*|riscv64be-*) + tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" + ;; + esac + # Force .init_array support. The configure script cannot always + # automatically detect that GAS supports it, yet we require it. + gcc_cv_initfini_array=yes + ;; riscv*-*-elf* | riscv*-*-rtems*) tm_file="elfos.h newlib-stdint.h ${tm_file} riscv/elf.h" case ${target} in @@ -5756,7 +5770,7 @@ case "${target}" in for which in arch tune; do eval "val=\$with_$which" case ${val} in - "" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | z15 | z16 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12 | arch13 | arch14 | arch15 ) + "" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | z15 | z16 | z17 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12 | arch13 | arch14 | arch15 ) # OK ;; *) diff --git a/gcc/config.in b/gcc/config.in index 7c89cab..a79c51a 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -2320,6 +2320,13 @@ #endif +/* Define if personality and ADDR_NO_RANDOMIZE are declared in + sys/personality.h. */ +#ifndef USED_FOR_TARGET +#undef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE +#endif + + /* Define which stat syscall is able to handle 64bit indodes. */ #ifndef USED_FOR_TARGET #undef HOST_STAT_FOR_64BIT_INODES diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc index d1e2ab9..98337b7 100644 --- a/gcc/config/aarch64/aarch64-c.cc +++ b/gcc/config/aarch64/aarch64-c.cc @@ -293,6 +293,7 @@ aarch64_update_cpp_builtins (cpp_reader *pfile) aarch64_def_or_undef (TARGET_SME2, "__ARM_FEATURE_SME2", pfile); aarch64_def_or_undef (AARCH64_HAVE_ISA (SME2p1), "__ARM_FEATURE_SME2p1", pfile); + aarch64_def_or_undef (TARGET_FAMINMAX, "__ARM_FEATURE_FAMINMAX", pfile); /* Not for ACLE, but required to keep "float.h" correct if we switch target between implementations that do or do not support ARMv8.2-A diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def index 7f204fd..1209630 100644 --- a/gcc/config/aarch64/aarch64-cores.def +++ b/gcc/config/aarch64/aarch64-cores.def @@ -224,7 +224,7 @@ AARCH64_CORE("neoverse-v3ae", neoversev3ae, cortexa57, V9_2A, (SVE2_BITPERM, RNG AARCH64_CORE("demeter", demeter, cortexa57, V9A, (I8MM, BF16, SVE2_BITPERM, RNG, MEMTAG, PROFILE), neoversev2, 0x41, 0xd4f, -1) /* NVIDIA ('N') cores. */ -AARCH64_CORE("olympus", olympus, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE, FAMINMAX, FP8DOT2, LUT, SVE2_AES, SVE2_SHA3, SVE2_SM4), neoversev3, 0x4e, 0x10, -1) +AARCH64_CORE("olympus", olympus, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE, FAMINMAX, FP8FMA, FP8DOT2, FP8DOT4, LUT, SVE2_AES, SVE2_SHA3, SVE2_SM4), neoversev3, 0x4e, 0x10, -1) /* Generic Architecture Processors. */ AARCH64_CORE("generic", generic, cortexa53, V8A, (), generic, 0x0, 0x0, -1) diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index 8f44aea..1ca86c9 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -1260,6 +1260,7 @@ void aarch64_restore_za (rtx); void aarch64_expand_crc_using_pmull (scalar_mode, scalar_mode, rtx *); void aarch64_expand_reversed_crc_using_pmull (scalar_mode, scalar_mode, rtx *); +void aarch64_expand_fp_spaceship (rtx, rtx, rtx, rtx); extern bool aarch64_gcs_enabled (); diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index 3dbd659..d4af370 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -3133,9 +3133,9 @@ "TARGET_SVE" { rtx tmp = gen_reg_rtx (<MODE>mode); - emit_insn (gen_vcond_mask_<mode><vpred> (tmp, operands[1], - CONST1_RTX (<MODE>mode), - CONST0_RTX (<MODE>mode))); + emit_insn (gen_vcond_mask_<mode><vpred> (tmp, CONST1_RTX (<MODE>mode), + CONST0_RTX (<MODE>mode), + operands[1])); emit_insn (gen_vec_extract<mode><Vel> (operands[0], tmp, operands[2])); DONE; } diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 4e80114..f7bccf5 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -9417,13 +9417,16 @@ aarch64_emit_stack_tie (rtx reg) } /* Allocate POLY_SIZE bytes of stack space using TEMP1 and TEMP2 as scratch - registers. If POLY_SIZE is not large enough to require a probe this function - will only adjust the stack. When allocating the stack space - FRAME_RELATED_P is then used to indicate if the allocation is frame related. - FINAL_ADJUSTMENT_P indicates whether we are allocating the area below - the saved registers. If we are then we ensure that any allocation - larger than the ABI defined buffer needs a probe so that the - invariant of having a 1KB buffer is maintained. + registers, given that the stack pointer is currently BYTES_BELOW_SP bytes + above the bottom of the static frame. + + If POLY_SIZE is not large enough to require a probe this function will only + adjust the stack. When allocating the stack space FRAME_RELATED_P is then + used to indicate if the allocation is frame related. FINAL_ADJUSTMENT_P + indicates whether we are allocating the area below the saved registers. + If we are then we ensure that any allocation larger than the ABI defined + buffer needs a probe so that the invariant of having a 1KB buffer is + maintained. We emit barriers after each stack adjustment to prevent optimizations from breaking the invariant that we never drop the stack more than a page. This @@ -9440,6 +9443,7 @@ aarch64_emit_stack_tie (rtx reg) static void aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2, poly_int64 poly_size, + poly_int64 bytes_below_sp, aarch64_isa_mode force_isa_mode, bool frame_related_p, bool final_adjustment_p) @@ -9503,8 +9507,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2, poly_size, temp1, temp2, force_isa_mode, false, true); - rtx_insn *insn = get_last_insn (); - + auto initial_cfa_offset = frame.frame_size - bytes_below_sp; + auto final_cfa_offset = initial_cfa_offset + poly_size; if (frame_related_p) { /* This is done to provide unwinding information for the stack @@ -9514,28 +9518,31 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2, The tie will expand to nothing but the optimizers will not touch the instruction. */ rtx stack_ptr_copy = gen_rtx_REG (Pmode, STACK_CLASH_SVE_CFA_REGNUM); - emit_move_insn (stack_ptr_copy, stack_pointer_rtx); + auto *insn = emit_move_insn (stack_ptr_copy, stack_pointer_rtx); aarch64_emit_stack_tie (stack_ptr_copy); /* We want the CFA independent of the stack pointer for the duration of the loop. */ - add_reg_note (insn, REG_CFA_DEF_CFA, stack_ptr_copy); + add_reg_note (insn, REG_CFA_DEF_CFA, + plus_constant (Pmode, stack_ptr_copy, + initial_cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } rtx probe_const = gen_int_mode (min_probe_threshold, Pmode); rtx guard_const = gen_int_mode (guard_size, Pmode); - insn = emit_insn (gen_probe_sve_stack_clash (Pmode, stack_pointer_rtx, - stack_pointer_rtx, temp1, - probe_const, guard_const)); + auto *insn + = emit_insn (gen_probe_sve_stack_clash (Pmode, stack_pointer_rtx, + stack_pointer_rtx, temp1, + probe_const, guard_const)); /* Now reset the CFA register if needed. */ if (frame_related_p) { add_reg_note (insn, REG_CFA_DEF_CFA, - gen_rtx_PLUS (Pmode, stack_pointer_rtx, - gen_int_mode (poly_size, Pmode))); + plus_constant (Pmode, stack_pointer_rtx, + final_cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } @@ -9581,12 +9588,13 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2, We can determine which allocation we are doing by looking at the value of FRAME_RELATED_P since the final allocations are not frame related. */ + auto cfa_offset = frame.frame_size - (bytes_below_sp - rounded_size); if (frame_related_p) { /* We want the CFA independent of the stack pointer for the duration of the loop. */ add_reg_note (insn, REG_CFA_DEF_CFA, - plus_constant (Pmode, temp1, rounded_size)); + plus_constant (Pmode, temp1, cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } @@ -9608,7 +9616,7 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2, if (frame_related_p) { add_reg_note (insn, REG_CFA_DEF_CFA, - plus_constant (Pmode, stack_pointer_rtx, rounded_size)); + plus_constant (Pmode, stack_pointer_rtx, cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } @@ -9916,17 +9924,22 @@ aarch64_expand_prologue (void) code below does not handle it for -fstack-clash-protection. */ gcc_assert (known_eq (initial_adjust, 0) || callee_adjust == 0); + /* The offset of the current SP from the bottom of the static frame. */ + poly_int64 bytes_below_sp = frame_size; + /* Will only probe if the initial adjustment is larger than the guard less the amount of the guard reserved for use by the caller's outgoing args. */ aarch64_allocate_and_probe_stack_space (tmp0_rtx, tmp1_rtx, initial_adjust, - force_isa_mode, true, false); + bytes_below_sp, force_isa_mode, + true, false); + bytes_below_sp -= initial_adjust; if (callee_adjust != 0) - aarch64_push_regs (reg1, reg2, callee_adjust); - - /* The offset of the current SP from the bottom of the static frame. */ - poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust; + { + aarch64_push_regs (reg1, reg2, callee_adjust); + bytes_below_sp -= callee_adjust; + } if (emit_frame_chain) { @@ -9994,7 +10007,7 @@ aarch64_expand_prologue (void) || known_eq (frame.reg_offset[VG_REGNUM], bytes_below_sp)); aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, sve_callee_adjust, - force_isa_mode, + bytes_below_sp, force_isa_mode, !frame_pointer_needed, false); bytes_below_sp -= sve_callee_adjust; } @@ -10005,10 +10018,11 @@ aarch64_expand_prologue (void) /* We may need to probe the final adjustment if it is larger than the guard that is assumed by the called. */ - gcc_assert (known_eq (bytes_below_sp, final_adjust)); aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust, - force_isa_mode, + bytes_below_sp, force_isa_mode, !frame_pointer_needed, true); + bytes_below_sp -= final_adjust; + gcc_assert (known_eq (bytes_below_sp, 0)); if (emit_frame_chain && maybe_ne (final_adjust, 0)) aarch64_emit_stack_tie (hard_frame_pointer_rtx); @@ -31073,8 +31087,6 @@ aarch64_valid_sysreg_name_p (const char *regname) const sysreg_t *sysreg = aarch64_lookup_sysreg_map (regname); if (sysreg == NULL) return aarch64_is_implem_def_reg (regname); - if (sysreg->arch_reqs) - return bool (aarch64_isa_flags & sysreg->arch_reqs); return true; } @@ -31098,8 +31110,6 @@ aarch64_retrieve_sysreg (const char *regname, bool write_p, bool is128op) if ((write_p && (sysreg->properties & F_REG_READ)) || (!write_p && (sysreg->properties & F_REG_WRITE))) return NULL; - if ((~aarch64_isa_flags & sysreg->arch_reqs) != 0) - return NULL; return sysreg->encoding; } @@ -31298,6 +31308,79 @@ aarch64_expand_reversed_crc_using_pmull (scalar_mode crc_mode, } } +/* Expand the spaceship optab for floating-point operands. + + If the result is compared against (-1, 0, 1 , 2), expand into + fcmpe + conditional branch insns. + + Otherwise (the result is just stored as an integer), expand into + fcmpe + a sequence of conditional select/increment/invert insns. */ +void +aarch64_expand_fp_spaceship (rtx dest, rtx op0, rtx op1, rtx hint) +{ + rtx cc_reg = gen_rtx_REG (CCFPEmode, CC_REGNUM); + emit_set_insn (cc_reg, gen_rtx_COMPARE (CCFPEmode, op0, op1)); + + rtx cc_gt = gen_rtx_GT (VOIDmode, cc_reg, const0_rtx); + rtx cc_lt = gen_rtx_LT (VOIDmode, cc_reg, const0_rtx); + rtx cc_un = gen_rtx_UNORDERED (VOIDmode, cc_reg, const0_rtx); + + if (hint == const0_rtx) + { + rtx un_label = gen_label_rtx (); + rtx lt_label = gen_label_rtx (); + rtx gt_label = gen_label_rtx (); + rtx end_label = gen_label_rtx (); + + rtx temp = gen_rtx_IF_THEN_ELSE (VOIDmode, cc_un, + gen_rtx_LABEL_REF (Pmode, un_label), pc_rtx); + aarch64_emit_unlikely_jump (gen_rtx_SET (pc_rtx, temp)); + + temp = gen_rtx_IF_THEN_ELSE (VOIDmode, cc_lt, + gen_rtx_LABEL_REF (Pmode, lt_label), pc_rtx); + emit_jump_insn (gen_rtx_SET (pc_rtx, temp)); + + temp = gen_rtx_IF_THEN_ELSE (VOIDmode, cc_gt, + gen_rtx_LABEL_REF (Pmode, gt_label), pc_rtx); + emit_jump_insn (gen_rtx_SET (pc_rtx, temp)); + + /* Equality. */ + emit_move_insn (dest, const0_rtx); + emit_jump (end_label); + + emit_label (un_label); + emit_move_insn (dest, const2_rtx); + emit_jump (end_label); + + emit_label (gt_label); + emit_move_insn (dest, const1_rtx); + emit_jump (end_label); + + emit_label (lt_label); + emit_move_insn (dest, constm1_rtx); + + emit_label (end_label); + } + else + { + rtx temp0 = gen_reg_rtx (SImode); + rtx temp1 = gen_reg_rtx (SImode); + rtx cc_ungt = gen_rtx_UNGT (VOIDmode, cc_reg, const0_rtx); + + /* The value of hint is stored if the operands are unordered. */ + rtx temp_un = gen_int_mode (UINTVAL (hint) - 1, SImode); + if (!aarch64_reg_zero_or_m1_or_1 (temp_un, SImode)) + temp_un = force_reg (SImode, temp_un); + + emit_set_insn (temp0, gen_rtx_IF_THEN_ELSE (SImode, cc_lt, + constm1_rtx, const0_rtx)); + emit_set_insn (temp1, gen_rtx_IF_THEN_ELSE (SImode, cc_un, + temp_un, const0_rtx)); + emit_set_insn (dest, gen_rtx_IF_THEN_ELSE (SImode, cc_ungt, + gen_rtx_PLUS (SImode, temp1, const1_rtx), temp0)); + } +} + /* Target-specific selftests. */ #if CHECKING_P diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 031e621..c678f7a 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -707,11 +707,12 @@ ) (define_expand "cbranch<mode>4" - [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator" - [(match_operand:GPF 1 "register_operand") - (match_operand:GPF 2 "aarch64_fp_compare_operand")]) - (label_ref (match_operand 3 "" "")) - (pc)))] + [(set (pc) (if_then_else + (match_operator 0 "aarch64_comparison_operator" + [(match_operand:GPF_F16 1 "register_operand") + (match_operand:GPF_F16 2 "aarch64_fp_compare_operand")]) + (label_ref (match_operand 3 "" "")) + (pc)))] "" " operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]), operands[1], @@ -4337,26 +4338,28 @@ (define_insn "fcmp<mode>" [(set (reg:CCFP CC_REGNUM) - (compare:CCFP (match_operand:GPF 0 "register_operand") - (match_operand:GPF 1 "aarch64_fp_compare_operand")))] + (compare:CCFP + (match_operand:GPF_F16 0 "register_operand") + (match_operand:GPF_F16 1 "aarch64_fp_compare_operand")))] "TARGET_FLOAT" {@ [ cons: 0 , 1 ] [ w , Y ] fcmp\t%<s>0, #0.0 [ w , w ] fcmp\t%<s>0, %<s>1 } - [(set_attr "type" "fcmp<s>")] + [(set_attr "type" "fcmp<stype>")] ) (define_insn "fcmpe<mode>" [(set (reg:CCFPE CC_REGNUM) - (compare:CCFPE (match_operand:GPF 0 "register_operand") - (match_operand:GPF 1 "aarch64_fp_compare_operand")))] + (compare:CCFPE + (match_operand:GPF_F16 0 "register_operand") + (match_operand:GPF_F16 1 "aarch64_fp_compare_operand")))] "TARGET_FLOAT" {@ [ cons: 0 , 1 ] [ w , Y ] fcmpe\t%<s>0, #0.0 [ w , w ] fcmpe\t%<s>0, %<s>1 } - [(set_attr "type" "fcmp<s>")] + [(set_attr "type" "fcmp<stype>")] ) (define_insn "*cmp_swp_<shift>_reg<mode>" @@ -4392,6 +4395,49 @@ [(set_attr "type" "alus_ext")] ) +;; <=> operator pattern (integer) +;; (a == b) ? 0 : (a < b) ? -1 : 1. +(define_expand "spaceship<mode>4" + [(match_operand:SI 0 "register_operand") + (match_operand:GPI 1 "register_operand") + (match_operand:GPI 2 "register_operand") + (match_operand:SI 3 "const_int_operand")] + "" + { + // 1 indicates unsigned comparison, -1 indicates signed. + gcc_assert (operands[3] == constm1_rtx || operands[3] == const1_rtx); + + rtx cc_reg = aarch64_gen_compare_reg (EQ, operands[1], operands[2]); + RTX_CODE code_gt = operands[3] == const1_rtx ? GTU : GT; + RTX_CODE code_lt = operands[3] == const1_rtx ? LTU : LT; + + rtx cc_gt = gen_rtx_fmt_ee (code_gt, VOIDmode, cc_reg, const0_rtx); + rtx cc_lt = gen_rtx_fmt_ee (code_lt, VOIDmode, cc_reg, const0_rtx); + + rtx temp = gen_reg_rtx (SImode); + emit_insn (gen_rtx_SET (temp, gen_rtx_IF_THEN_ELSE (SImode, cc_gt, + const1_rtx, const0_rtx))); + emit_insn (gen_rtx_SET (operands[0], gen_rtx_IF_THEN_ELSE (SImode, cc_lt, + constm1_rtx, temp))); + DONE; + } +) + +;; <=> operator pattern (floating-point) +;; (a == b) ? 0 : (a < b) ? -1 : (a > b) ? 1 : UNORDERED. +(define_expand "spaceship<mode>4" + [(match_operand:SI 0 "register_operand") + (match_operand:GPF 1 "register_operand") + (match_operand:GPF 2 "register_operand") + (match_operand:SI 3 "const_int_operand")] + "TARGET_FLOAT" + { + aarch64_expand_fp_spaceship (operands[0], operands[1], operands[2], + operands[3]); + DONE; + } +) + ;; ------------------------------------------------------------------- ;; Store-flag and conditional select insns ;; ------------------------------------------------------------------- @@ -4424,8 +4470,8 @@ (define_expand "cstore<mode>4" [(set (match_operand:SI 0 "register_operand") (match_operator:SI 1 "aarch64_comparison_operator_mode" - [(match_operand:GPF 2 "register_operand") - (match_operand:GPF 3 "aarch64_fp_compare_operand")]))] + [(match_operand:GPF_F16 2 "register_operand") + (match_operand:GPF_F16 3 "aarch64_fp_compare_operand")]))] "" " operands[2] = aarch64_gen_compare_reg (GET_CODE (operands[1]), operands[2], diff --git a/gcc/config/alpha/alpha.cc b/gcc/config/alpha/alpha.cc index ba470d9..14e7da5 100644 --- a/gcc/config/alpha/alpha.cc +++ b/gcc/config/alpha/alpha.cc @@ -4291,14 +4291,10 @@ alpha_get_mem_rtx_alignment_and_offset (rtx expr, int &a, HOST_WIDE_INT &o) tree mem = MEM_EXPR (expr); if (mem != NULL_TREE) - switch (TREE_CODE (mem)) - { - case MEM_REF: - tree_offset = mem_ref_offset (mem).force_shwi (); - tree_align = get_object_alignment (get_base_address (mem)); - break; + { + HOST_WIDE_INT comp_offset = 0; - case COMPONENT_REF: + for (; TREE_CODE (mem) == COMPONENT_REF; mem = TREE_OPERAND (mem, 0)) { tree byte_offset = component_ref_field_offset (mem); tree bit_offset = DECL_FIELD_BIT_OFFSET (TREE_OPERAND (mem, 1)); @@ -4307,14 +4303,15 @@ alpha_get_mem_rtx_alignment_and_offset (rtx expr, int &a, HOST_WIDE_INT &o) || !poly_int_tree_p (byte_offset, &offset) || !tree_fits_shwi_p (bit_offset)) break; - tree_offset = offset + tree_to_shwi (bit_offset) / BITS_PER_UNIT; + comp_offset += offset + tree_to_shwi (bit_offset) / BITS_PER_UNIT; } - tree_align = get_object_alignment (get_base_address (mem)); - break; - default: - break; - } + if (TREE_CODE (mem) == MEM_REF) + { + tree_offset = comp_offset + mem_ref_offset (mem).force_shwi (); + tree_align = get_object_alignment (get_base_address (mem)); + } + } if (reg_align > mem_align) { diff --git a/gcc/config/c6x/c6x.h b/gcc/config/c6x/c6x.h index e7da250..50bad27 100644 --- a/gcc/config/c6x/c6x.h +++ b/gcc/config/c6x/c6x.h @@ -444,11 +444,9 @@ struct GTY(()) machine_function #define TARG_VEC_PERMUTE_COST 1 #endif -/* ttype entries (the only interesting data references used) are - sb-relative got-indirect (aka .ehtype). */ +/* .ehtype ttype entries are sb-relative. */ #define ASM_PREFERRED_EH_DATA_FORMAT(code, data) \ - (((code) == 0 && (data) == 1) ? (DW_EH_PE_datarel | DW_EH_PE_indirect) \ - : DW_EH_PE_absptr) + (((code) == 0 && (data) == 1) ? DW_EH_PE_datarel : DW_EH_PE_absptr) /* This should be the same as the definition in elfos.h, plus the call to output special unwinding directives. */ diff --git a/gcc/config/gcn/gcn.md b/gcc/config/gcn/gcn.md index 695656f..e0fb735 100644 --- a/gcc/config/gcn/gcn.md +++ b/gcc/config/gcn/gcn.md @@ -1018,7 +1018,9 @@ [(const_int 0)] "" { - sorry ("exception handling not supported"); + if (!fake_exceptions) + sorry ("exception handling not supported"); + DONE; }) ;; }}} diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt index 142b439..99d6aeb 100644 --- a/gcc/config/gcn/gcn.opt +++ b/gcc/config/gcn/gcn.opt @@ -101,3 +101,11 @@ Enum(gcn_preferred_vectorization_factor) String(32) Value(32) EnumValue Enum(gcn_preferred_vectorization_factor) String(64) Value(64) + +mfake-exceptions +Target Var(fake_exceptions) Init(0) Undocumented +; With '-mfake-exceptions' enabled, the user-visible behavior in presence of +; exception handling constructs changes such that the compile-time +; 'sorry, unimplemented: exception handling not supported' is skipped, code +; generation proceeds, and instead, exception handling constructs 'abort' at +; run time. (..., or don't, if they're in dead code.) diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc index f5b89c9..b284ff4 100644 --- a/gcc/config/gcn/mkoffload.cc +++ b/gcc/config/gcn/mkoffload.cc @@ -1160,6 +1160,9 @@ main (int argc, char **argv) obstack_ptr_grow (&cc_argv_obstack, "-xlto"); if (fopenmp) obstack_ptr_grow (&cc_argv_obstack, "-mgomp"); + /* The host code may contain exception handling constructs. + Handle these as good as we can. */ + obstack_ptr_grow (&cc_argv_obstack, "-mfake-exceptions"); for (int ix = 1; ix != argc; ix++) { diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index cdfd94d..a314800 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -4138,6 +4138,10 @@ ix86_expand_sse_fp_minmax (rtx dest, enum rtx_code code, rtx cmp_op0, return false; mode = GET_MODE (dest); + if (immediate_operand (if_false, mode)) + if_false = force_reg (mode, if_false); + if (immediate_operand (if_true, mode)) + if_true = force_reg (mode, if_true); /* We want to check HONOR_NANS and HONOR_SIGNED_ZEROS here, but MODE may be a vector mode and thus not appropriate. */ @@ -4687,6 +4691,8 @@ ix86_expand_fp_movcc (rtx operands[]) compare_op = ix86_expand_compare (NE, tmp, const0_rtx); } + operands[2] = force_reg (mode, operands[2]); + operands[3] = force_reg (mode, operands[3]); emit_insn (gen_rtx_SET (operands[0], gen_rtx_IF_THEN_ELSE (mode, compare_op, operands[2], operands[3]))); @@ -19256,8 +19262,6 @@ ix86_emit_swdivsf (rtx res, rtx a, rtx b, machine_mode mode) e1 = gen_reg_rtx (mode); x1 = gen_reg_rtx (mode); - /* a / b = a * ((rcp(b) + rcp(b)) - (b * rcp(b) * rcp (b))) */ - b = force_reg (mode, b); /* x0 = rcp(b) estimate */ @@ -19270,20 +19274,42 @@ ix86_emit_swdivsf (rtx res, rtx a, rtx b, machine_mode mode) emit_insn (gen_rtx_SET (x0, gen_rtx_UNSPEC (mode, gen_rtvec (1, b), UNSPEC_RCP))); - /* e0 = x0 * b */ - emit_insn (gen_rtx_SET (e0, gen_rtx_MULT (mode, x0, b))); + unsigned vector_size = GET_MODE_SIZE (mode); + + /* (a - (rcp(b) * a * b)) * rcp(b) + rcp(b) * a + N-R step with 2 fma implementation. */ + if (TARGET_FMA + || (TARGET_AVX512F && vector_size == 64) + || (TARGET_AVX512VL && (vector_size == 32 || vector_size == 16))) + { + /* e0 = x0 * a */ + emit_insn (gen_rtx_SET (e0, gen_rtx_MULT (mode, x0, a))); + /* e1 = e0 * b - a */ + emit_insn (gen_rtx_SET (e1, gen_rtx_FMA (mode, e0, b, + gen_rtx_NEG (mode, a)))); + /* res = - e1 * x0 + e0 */ + emit_insn (gen_rtx_SET (res, gen_rtx_FMA (mode, + gen_rtx_NEG (mode, e1), + x0, e0))); + } + else + /* a / b = a * ((rcp(b) + rcp(b)) - (b * rcp(b) * rcp (b))) */ + { + /* e0 = x0 * b */ + emit_insn (gen_rtx_SET (e0, gen_rtx_MULT (mode, x0, b))); - /* e0 = x0 * e0 */ - emit_insn (gen_rtx_SET (e0, gen_rtx_MULT (mode, x0, e0))); + /* e1 = x0 + x0 */ + emit_insn (gen_rtx_SET (e1, gen_rtx_PLUS (mode, x0, x0))); - /* e1 = x0 + x0 */ - emit_insn (gen_rtx_SET (e1, gen_rtx_PLUS (mode, x0, x0))); + /* e0 = x0 * e0 */ + emit_insn (gen_rtx_SET (e0, gen_rtx_MULT (mode, x0, e0))); - /* x1 = e1 - e0 */ - emit_insn (gen_rtx_SET (x1, gen_rtx_MINUS (mode, e1, e0))); + /* x1 = e1 - e0 */ + emit_insn (gen_rtx_SET (x1, gen_rtx_MINUS (mode, e1, e0))); - /* res = a * x1 */ - emit_insn (gen_rtx_SET (res, gen_rtx_MULT (mode, a, x1))); + /* res = a * x1 */ + emit_insn (gen_rtx_SET (res, gen_rtx_MULT (mode, a, x1))); + } } /* Output code to perform a Newton-Rhapson approximation of a diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index a9fac01..964449f 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -2828,8 +2828,8 @@ ix86_option_override_internal (bool main_args_p, if (flag_nop_mcount) error ("%<-mnop-mcount%> is not compatible with this target"); #endif - if (flag_nop_mcount && flag_pic) - error ("%<-mnop-mcount%> is not implemented for %<-fPIC%>"); + if (flag_nop_mcount && flag_pic && !flag_plt) + error ("%<-mnop-mcount%> is not implemented for %<-fno-plt%>"); /* Accept -msseregparm only if at least SSE support is enabled. */ if (TARGET_SSEREGPARM_P (opts->x_target_flags) diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 4f8380c4..78df3d9 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -100,6 +100,7 @@ along with GCC; see the file COPYING3. If not see #include "i386-features.h" #include "function-abi.h" #include "rtl-error.h" +#include "gimple-pretty-print.h" /* This file should be included last. */ #include "target-def.h" @@ -458,6 +459,9 @@ int ix86_arch_specified; indirect thunk pushes the return address onto stack, destroying red-zone. + NB: Don't use red-zone for functions with no_caller_saved_registers + and 32 GPRs since 128-byte red-zone is too small for 31 GPRs. + TODO: If we can reserve the first 2 WORDs, for PUSH and, another for CALL, in red-zone, we can allow local indirect jumps with indirect thunk. */ @@ -467,6 +471,9 @@ ix86_using_red_zone (void) { return (TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI + && (!TARGET_APX_EGPR + || (cfun->machine->call_saved_registers + != TYPE_NO_CALLER_SAVED_REGISTERS)) && (!cfun->machine->has_local_indirect_jump || cfun->machine->indirect_branch_type == indirect_branch_keep)); } @@ -21810,6 +21817,25 @@ ix86_insn_cost (rtx_insn *insn, bool speed) return insn_cost + pattern_cost (PATTERN (insn), speed); } +/* Return cost of SSE/AVX FP->FP conversion (extensions and truncates). */ + +static int +vec_fp_conversion_cost (const struct processor_costs *cost, int size) +{ + if (size < 128) + return cost->cvtss2sd; + else if (size < 256) + { + if (TARGET_SSE_SPLIT_REGS) + return cost->cvtss2sd * size / 64; + return cost->cvtss2sd; + } + if (size < 512) + return cost->vcvtps2pd256; + else + return cost->vcvtps2pd512; +} + /* Compute a (partial) cost for rtx X. Return true if the complete cost has been computed, and false if subexpressions should be scanned. In either case, *TOTAL contains the cost result. */ @@ -22473,17 +22499,18 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return false; case FLOAT_EXTEND: + /* x87 represents all values extended to 80bit. */ if (!SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode)) *total = 0; else - *total = ix86_vec_cost (mode, cost->addss); + *total = vec_fp_conversion_cost (cost, GET_MODE_BITSIZE (mode)); return false; case FLOAT_TRUNCATE: if (!SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode)) *total = cost->fadd; else - *total = ix86_vec_cost (mode, cost->addss); + *total = vec_fp_conversion_cost (cost, GET_MODE_BITSIZE (mode)); return false; case ABS: @@ -23158,6 +23185,12 @@ x86_print_call_or_nop (FILE *file, const char *target) if (flag_nop_mcount || !strcmp (target, "nop")) /* 5 byte nop: nopl 0(%[re]ax,%[re]ax,1) */ fprintf (file, "1:" ASM_BYTE "0x0f, 0x1f, 0x44, 0x00, 0x00\n"); + else if (!TARGET_PECOFF && flag_pic) + { + gcc_assert (flag_plt); + + fprintf (file, "1:\tcall\t%s@PLT\n", target); + } else fprintf (file, "1:\tcall\t%s\n", target); } @@ -23321,7 +23354,7 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED) break; case CM_SMALL_PIC: case CM_MEDIUM_PIC: - if (!ix86_direct_extern_access) + if (!flag_plt) { if (ASSEMBLER_DIALECT == ASM_INTEL) fprintf (file, "1:\tcall\t[QWORD PTR %s@GOTPCREL[rip]]\n", @@ -23352,7 +23385,9 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED) "\tleal\t%sP%d@GOTOFF(%%ebx), %%" PROFILE_COUNT_REGISTER "\n", LPREFIX, labelno); #endif - if (ASSEMBLER_DIALECT == ASM_INTEL) + if (flag_plt) + x86_print_call_or_nop (file, mcount_name); + else if (ASSEMBLER_DIALECT == ASM_INTEL) fprintf (file, "1:\tcall\t[DWORD PTR %s@GOT[ebx]]\n", mcount_name); else fprintf (file, "1:\tcall\t*%s@GOT(%%ebx)\n", mcount_name); @@ -24669,7 +24704,7 @@ ix86_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, switch (type_of_cost) { case scalar_stmt: - return fp ? ix86_cost->addss : COSTS_N_INSNS (1); + return fp ? ix86_cost->addss : COSTS_N_INSNS (1); case scalar_load: /* load/store costs are relative to register move which is 2. Recompute @@ -24740,7 +24775,11 @@ ix86_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return ix86_cost->cond_not_taken_branch_cost; case vec_perm: + return ix86_vec_cost (mode, ix86_cost->sse_op); + case vec_promote_demote: + if (fp) + return vec_fp_conversion_cost (ix86_tune_cost, mode); return ix86_vec_cost (mode, ix86_cost->sse_op); case vec_construct: @@ -25261,7 +25300,7 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, else if (X87_FLOAT_MODE_P (mode)) stmt_cost = ix86_cost->fadd; else - stmt_cost = ix86_cost->add; + stmt_cost = ix86_cost->add; } else stmt_cost = ix86_vec_cost (mode, fp ? ix86_cost->addss @@ -25316,7 +25355,7 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, (subcode == RSHIFT_EXPR && !TYPE_UNSIGNED (TREE_TYPE (op1))) ? ASHIFTRT : LSHIFTRT, mode, - TREE_CODE (op2) == INTEGER_CST, + TREE_CODE (op2) == INTEGER_CST, cst_and_fits_in_hwi (op2) ? int_cst_value (op2) : -1, false, false, NULL, NULL); @@ -25325,27 +25364,152 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, case NOP_EXPR: /* Only sign-conversions are free. */ if (tree_nop_conversion_p - (TREE_TYPE (gimple_assign_lhs (stmt_info->stmt)), + (TREE_TYPE (gimple_assign_lhs (stmt_info->stmt)), TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt)))) stmt_cost = 0; + else if (fp) + stmt_cost = vec_fp_conversion_cost + (ix86_tune_cost, GET_MODE_BITSIZE (mode)); + break; + + case COND_EXPR: + { + /* SSE2 conditinal move sequence is: + pcmpgtd %xmm5, %xmm0 (accounted separately) + pand %xmm0, %xmm2 + pandn %xmm1, %xmm0 + por %xmm2, %xmm0 + while SSE4 uses cmp + blend + and AVX512 masked moves. + + The condition is accounted separately since we usually have + p = a < b + c = p ? x : y + and we will account first statement as setcc. Exception is when + p is loaded from memory as bool and then we will not acocunt + the compare, but there is no way to check for this. */ + + int ninsns = TARGET_SSE4_1 ? 1 : 3; + + /* If one of parameters is 0 or -1 the sequence will be simplified: + (if_true & mask) | (if_false & ~mask) -> if_true & mask */ + if (ninsns > 1 + && (zerop (gimple_assign_rhs2 (stmt_info->stmt)) + || zerop (gimple_assign_rhs3 (stmt_info->stmt)) + || integer_minus_onep + (gimple_assign_rhs2 (stmt_info->stmt)) + || integer_minus_onep + (gimple_assign_rhs3 (stmt_info->stmt)))) + ninsns = 1; + + if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode)) + stmt_cost = ninsns * ix86_cost->sse_op; + else if (X87_FLOAT_MODE_P (mode)) + /* x87 requires conditional branch. We don't have cost for + that. */ + ; + else if (VECTOR_MODE_P (mode)) + stmt_cost = ix86_vec_cost (mode, ninsns * ix86_cost->sse_op); + else + /* compare (accounted separately) + cmov. */ + stmt_cost = ix86_cost->add; + } break; - case BIT_IOR_EXPR: - case ABS_EXPR: - case ABSU_EXPR: case MIN_EXPR: case MAX_EXPR: + if (fp) + { + if (X87_FLOAT_MODE_P (mode)) + /* x87 requires conditional branch. We don't have cost for + that. */ + ; + else + /* minss */ + stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op); + } + else + { + if (VECTOR_MODE_P (mode)) + { + stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op); + /* vpmin was introduced in SSE3. + SSE2 needs pcmpgtd + pand + pandn + pxor. + If one of parameters is 0 or -1 the sequence is simplified + to pcmpgtd + pand. */ + if (!TARGET_SSSE3) + { + if (zerop (gimple_assign_rhs2 (stmt_info->stmt)) + || integer_minus_onep + (gimple_assign_rhs2 (stmt_info->stmt))) + stmt_cost *= 2; + else + stmt_cost *= 4; + } + } + else + /* cmp + cmov. */ + stmt_cost = ix86_cost->add * 2; + } + break; + + case ABS_EXPR: + case ABSU_EXPR: + if (fp) + { + if (X87_FLOAT_MODE_P (mode)) + /* fabs. */ + stmt_cost = ix86_cost->fabs; + else + /* andss of sign bit. */ + stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op); + } + else + { + if (VECTOR_MODE_P (mode)) + { + stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op); + /* vabs was introduced in SSE3. + SSE3 uses psrat + pxor + psub. */ + if (!TARGET_SSSE3) + stmt_cost *= 3; + } + else + /* neg + cmov. */ + stmt_cost = ix86_cost->add * 2; + } + break; + + case BIT_IOR_EXPR: case BIT_XOR_EXPR: case BIT_AND_EXPR: case BIT_NOT_EXPR: - if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode)) - stmt_cost = ix86_cost->sse_op; - else if (VECTOR_MODE_P (mode)) + gcc_assert (!SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode) + && !X87_FLOAT_MODE_P (mode)); + if (VECTOR_MODE_P (mode)) stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op); else stmt_cost = ix86_cost->add; break; + default: + if (truth_value_p (subcode)) + { + if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode)) + /* CMPccS? insructions are cheap, so use sse_op. While they + produce a mask which may need to be turned to 0/1 by and, + expect that this will be optimized away in a common case. */ + stmt_cost = ix86_cost->sse_op; + else if (X87_FLOAT_MODE_P (mode)) + /* fcmp + setcc. */ + stmt_cost = ix86_cost->fadd + ix86_cost->add; + else if (VECTOR_MODE_P (mode)) + stmt_cost = ix86_vec_cost (mode, ix86_cost->sse_op); + else + /* setcc. */ + stmt_cost = ix86_cost->add; + break; + } break; } } @@ -25369,6 +25533,29 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, break; } + if (kind == vec_promote_demote + && fp && FLOAT_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt)))) + { + int outer_size + = tree_to_uhwi + (TYPE_SIZE + (TREE_TYPE (gimple_assign_lhs (stmt_info->stmt)))); + int inner_size + = tree_to_uhwi + (TYPE_SIZE + (TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt)))); + int stmt_cost = vec_fp_conversion_cost + (ix86_tune_cost, GET_MODE_BITSIZE (mode)); + /* VEC_PACK_TRUNC_EXPR: If inner size is greater than outer size we will end + up doing two conversions and packing them. */ + if (inner_size > outer_size) + { + int n = inner_size / outer_size; + stmt_cost = stmt_cost * n + + (n - 1) * ix86_vec_cost (mode, ix86_cost->sse_op); + } + } + /* If we do elementwise loads into a vector then we are bound by latency and execution resources for the many scalar loads (AGU and load ports). Try to account for this by scaling the diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 8507243..18aa42d 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -207,6 +207,12 @@ struct processor_costs { const int divsd; /* cost of DIVSD instructions. */ const int sqrtss; /* cost of SQRTSS instructions. */ const int sqrtsd; /* cost of SQRTSD instructions. */ + const int cvtss2sd; /* cost SSE FP conversions, + such as CVTSS2SD. */ + const int vcvtps2pd256; /* cost 256bit packed FP conversions, + such as VCVTPD2PS with larger reg in ymm. */ + const int vcvtps2pd512; /* cost 512bit packed FP conversions, + such as VCVTPD2PS with larger reg in zmm. */ const int reassoc_int, reassoc_fp, reassoc_vec_int, reassoc_vec_fp; /* Specify reassociation width for integer, fp, vector integer and vector fp diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index d6b2f29..e170da3 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -26592,8 +26592,8 @@ [(set (match_operand:X87MODEF 0 "register_operand") (if_then_else:X87MODEF (match_operand 1 "comparison_operator") - (match_operand:X87MODEF 2 "register_operand") - (match_operand:X87MODEF 3 "register_operand")))] + (match_operand:X87MODEF 2 "nonimm_or_0_or_1s_operand") + (match_operand:X87MODEF 3 "nonimm_or_0_operand")))] "(TARGET_80387 && TARGET_CMOVE) || (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)" "if (ix86_expand_fp_movcc (operands)) DONE; else FAIL;") diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 3d3848c..4b23e18 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -1267,6 +1267,14 @@ (match_operand 0 "vector_memory_operand") (match_code "const_vector"))) +; Return true when OP is register_operand, vector_memory_operand, +; const_vector zero or const_vector all ones. +(define_predicate "vector_or_0_or_1s_operand" + (ior (match_operand 0 "register_operand") + (match_operand 0 "vector_memory_operand") + (match_operand 0 "const0_operand") + (match_operand 0 "int_float_vector_all_ones_operand"))) + (define_predicate "bcst_mem_operand" (and (match_code "vec_duplicate") (and (match_test "TARGET_AVX512F") @@ -1333,6 +1341,12 @@ (ior (match_operand 0 "nonimmediate_operand") (match_operand 0 "const0_operand"))) +; Return true when OP is a nonimmediate or zero or all ones. +(define_predicate "nonimm_or_0_or_1s_operand" + (ior (match_operand 0 "nonimmediate_operand") + (match_operand 0 "const0_operand") + (match_operand 0 "int_float_vector_all_ones_operand"))) + ;; Return true for RTX codes that force SImode address. (define_predicate "SImode_address_operand" (match_code "subreg,zero_extend,and")) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index b280676..2ed348c 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -527,6 +527,16 @@ (V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL") (V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")]) +(define_mode_iterator V48_AVX512VL_4 + [(V4SF "TARGET_AVX512VL") (V4DF "TARGET_AVX512VL") + (V4SI "TARGET_AVX512VL") (V4DI "TARGET_AVX512VL")]) + +(define_mode_iterator VI48_AVX512VL_4 + [(V4SI "TARGET_AVX512VL") (V4DI "TARGET_AVX512VL")]) + +(define_mode_iterator V8_AVX512VL_2 + [(V2DF "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")]) + (define_mode_iterator VFH_AVX10_2 [(V32HF "TARGET_AVX10_2") V16HF V8HF (V16SF "TARGET_AVX10_2") V8SF V4SF @@ -4410,7 +4420,7 @@ (unspec:<V48H_AVX512VL:avx512fmaskmode> [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand" "v") (match_operand:V48H_AVX512VL 2 "nonimmediate_operand" "vm") - (match_operand:SI 3 "const_0_to_7_operand" "n")] + (match_operand:SI 3 "<cmp_imm_predicate>" "n")] UNSPEC_PCMP)))] "TARGET_AVX512F && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW) @@ -4428,7 +4438,7 @@ (unspec:<V48H_AVX512VL:avx512fmaskmode> [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand") (match_operand:V48H_AVX512VL 2 "nonimmediate_operand") - (match_operand:SI 3 "const_0_to_7_operand")] + (match_operand:SI 3 "<cmp_imm_predicate>")] UNSPEC_PCMP))) (set (match_operand:<V48H_AVX512VL:avx512fmaskmode> 4 "register_operand") (unspec:<V48H_AVX512VL:avx512fmaskmode> @@ -4469,7 +4479,8 @@ (match_operand:V48H_AVX512VL 2 "nonimmediate_operand") (match_operand:SI 3 "<cmp_imm_predicate>" "n")] UNSPEC_PCMP)))] - "TARGET_AVX512F && ix86_pre_reload_split ()" + "TARGET_AVX512F && GET_MODE_NUNITS (<MODE>mode) >= 8 + && ix86_pre_reload_split ()" "#" "&& 1" [(set (match_dup 0) @@ -4480,6 +4491,70 @@ UNSPEC_PCMP))] "operands[4] = GEN_INT (INTVAL (operands[3]) ^ 4);") +(define_insn "*<avx512>_cmp<mode>3_and15" + [(set (match_operand:QI 0 "register_operand" "=k") + (and:QI + (unspec:QI + [(match_operand:V48_AVX512VL_4 1 "nonimmediate_operand" "v") + (match_operand:V48_AVX512VL_4 2 "nonimmediate_operand" "vm") + (match_operand:SI 3 "<cmp_imm_predicate>" "n")] + UNSPEC_PCMP) + (const_int 15)))] + "TARGET_AVX512F" + "v<ssecmpintprefix>cmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}" + [(set_attr "type" "ssecmp") + (set_attr "length_immediate" "1") + (set_attr "prefix" "evex") + (set_attr "mode" "<sseinsnmode>")]) + +(define_insn "*<avx512>_ucmp<mode>3_and15" + [(set (match_operand:QI 0 "register_operand" "=k") + (and:QI + (unspec:QI + [(match_operand:VI48_AVX512VL_4 1 "nonimmediate_operand" "v") + (match_operand:VI48_AVX512VL_4 2 "nonimmediate_operand" "vm") + (match_operand:SI 3 "const_0_to_7_operand" "n")] + UNSPEC_UNSIGNED_PCMP) + (const_int 15)))] + "TARGET_AVX512F" + "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}" + [(set_attr "type" "ssecmp") + (set_attr "length_immediate" "1") + (set_attr "prefix" "evex") + (set_attr "mode" "<sseinsnmode>")]) + +(define_insn "*<avx512>_cmp<mode>3_and3" + [(set (match_operand:QI 0 "register_operand" "=k") + (and:QI + (unspec:QI + [(match_operand:V8_AVX512VL_2 1 "nonimmediate_operand" "v") + (match_operand:V8_AVX512VL_2 2 "nonimmediate_operand" "vm") + (match_operand:SI 3 "<cmp_imm_predicate>" "n")] + UNSPEC_PCMP) + (const_int 3)))] + "TARGET_AVX512F" + "v<ssecmpintprefix>cmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}" + [(set_attr "type" "ssecmp") + (set_attr "length_immediate" "1") + (set_attr "prefix" "evex") + (set_attr "mode" "<sseinsnmode>")]) + +(define_insn "*avx512vl_ucmpv2di3_and3" + [(set (match_operand:QI 0 "register_operand" "=k") + (and:QI + (unspec:QI + [(match_operand:V2DI 1 "nonimmediate_operand" "v") + (match_operand:V2DI 2 "nonimmediate_operand" "vm") + (match_operand:SI 3 "const_0_to_7_operand" "n")] + UNSPEC_UNSIGNED_PCMP) + (const_int 3)))] + "TARGET_AVX512F" + "vpcmpuq\t{%3, %2, %1, %0|%0, %1, %2, %3}" + [(set_attr "type" "ssecmp") + (set_attr "length_immediate" "1") + (set_attr "prefix" "evex") + (set_attr "mode" "TI")]) + (define_insn "<avx512>_cmp<mode>3<mask_scalar_merge_name>" [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k") (unspec:<avx512fmaskmode> @@ -4762,7 +4837,8 @@ (match_operand:VI48_AVX512VL 2 "nonimmediate_operand") (match_operand:SI 3 "const_0_to_7_operand")] UNSPEC_UNSIGNED_PCMP)))] - "TARGET_AVX512F && ix86_pre_reload_split ()" + "TARGET_AVX512F && ix86_pre_reload_split () + && GET_MODE_NUNITS (<MODE>mode) >= 8" "#" "&& 1" [(set (match_dup 0) @@ -5142,7 +5218,7 @@ (define_expand "vcond_mask_<mode><sseintvecmodelower>" [(set (match_operand:VI_256_AVX2 0 "register_operand") (vec_merge:VI_256_AVX2 - (match_operand:VI_256_AVX2 1 "nonimmediate_operand") + (match_operand:VI_256_AVX2 1 "nonimm_or_0_or_1s_operand") (match_operand:VI_256_AVX2 2 "nonimm_or_0_operand") (match_operand:<sseintvecmode> 3 "register_operand")))] "TARGET_AVX" @@ -5155,7 +5231,7 @@ (define_expand "vcond_mask_<mode><sseintvecmodelower>" [(set (match_operand:VI_128 0 "register_operand") (vec_merge:VI_128 - (match_operand:VI_128 1 "vector_operand") + (match_operand:VI_128 1 "vector_or_0_or_1s_operand") (match_operand:VI_128 2 "nonimm_or_0_operand") (match_operand:<sseintvecmode> 3 "register_operand")))] "TARGET_SSE2" @@ -5168,7 +5244,7 @@ (define_expand "vcond_mask_v1tiv1ti" [(set (match_operand:V1TI 0 "register_operand") (vec_merge:V1TI - (match_operand:V1TI 1 "vector_operand") + (match_operand:V1TI 1 "vector_or_0_or_1s_operand") (match_operand:V1TI 2 "nonimm_or_0_operand") (match_operand:V1TI 3 "register_operand")))] "TARGET_SSE2" @@ -5181,7 +5257,7 @@ (define_expand "vcond_mask_<mode><sseintvecmodelower>" [(set (match_operand:VF_256 0 "register_operand") (vec_merge:VF_256 - (match_operand:VF_256 1 "nonimmediate_operand") + (match_operand:VF_256 1 "nonimm_or_0_or_1s_operand") (match_operand:VF_256 2 "nonimm_or_0_operand") (match_operand:<sseintvecmode> 3 "register_operand")))] "TARGET_AVX" @@ -5194,7 +5270,7 @@ (define_expand "vcond_mask_<mode><sseintvecmodelower>" [(set (match_operand:VF_128 0 "register_operand") (vec_merge:VF_128 - (match_operand:VF_128 1 "vector_operand") + (match_operand:VF_128 1 "vector_or_0_or_1s_operand") (match_operand:VF_128 2 "nonimm_or_0_operand") (match_operand:<sseintvecmode> 3 "register_operand")))] "TARGET_SSE" diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h index 7c8cb73..cddcf61 100644 --- a/gcc/config/i386/x86-tune-costs.h +++ b/gcc/config/i386/x86-tune-costs.h @@ -121,16 +121,19 @@ struct processor_costs ix86_size_cost = {/* costs for tuning for size */ COSTS_N_BYTES (2), /* cost of FCHS instruction. */ COSTS_N_BYTES (2), /* cost of FSQRT instruction. */ - COSTS_N_BYTES (2), /* cost of cheap SSE instruction. */ - COSTS_N_BYTES (2), /* cost of ADDSS/SD SUBSS/SD insns. */ - COSTS_N_BYTES (2), /* cost of MULSS instruction. */ - COSTS_N_BYTES (2), /* cost of MULSD instruction. */ - COSTS_N_BYTES (2), /* cost of FMA SS instruction. */ - COSTS_N_BYTES (2), /* cost of FMA SD instruction. */ - COSTS_N_BYTES (2), /* cost of DIVSS instruction. */ - COSTS_N_BYTES (2), /* cost of DIVSD instruction. */ - COSTS_N_BYTES (2), /* cost of SQRTSS instruction. */ - COSTS_N_BYTES (2), /* cost of SQRTSD instruction. */ + COSTS_N_BYTES (4), /* cost of cheap SSE instruction. */ + COSTS_N_BYTES (4), /* cost of ADDSS/SD SUBSS/SD insns. */ + COSTS_N_BYTES (4), /* cost of MULSS instruction. */ + COSTS_N_BYTES (4), /* cost of MULSD instruction. */ + COSTS_N_BYTES (4), /* cost of FMA SS instruction. */ + COSTS_N_BYTES (4), /* cost of FMA SD instruction. */ + COSTS_N_BYTES (4), /* cost of DIVSS instruction. */ + COSTS_N_BYTES (4), /* cost of DIVSD instruction. */ + COSTS_N_BYTES (4), /* cost of SQRTSS instruction. */ + COSTS_N_BYTES (4), /* cost of SQRTSD instruction. */ + COSTS_N_BYTES (4), /* cost of CVTSS2SD etc. */ + COSTS_N_BYTES (4), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_BYTES (6), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ ix86_size_memcpy, ix86_size_memset, @@ -243,6 +246,9 @@ struct processor_costs i386_cost = { /* 386 specific costs */ COSTS_N_INSNS (88), /* cost of DIVSD instruction. */ COSTS_N_INSNS (122), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (122), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (27), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (54), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (108), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ i386_memcpy, i386_memset, @@ -356,6 +362,9 @@ struct processor_costs i486_cost = { /* 486 specific costs */ COSTS_N_INSNS (74), /* cost of DIVSD instruction. */ COSTS_N_INSNS (83), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (83), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (8), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (16), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (32), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ i486_memcpy, i486_memset, @@ -467,6 +476,9 @@ struct processor_costs pentium_cost = { COSTS_N_INSNS (39), /* cost of DIVSD instruction. */ COSTS_N_INSNS (70), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (70), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ pentium_memcpy, pentium_memset, @@ -571,6 +583,9 @@ struct processor_costs lakemont_cost = { COSTS_N_INSNS (60), /* cost of DIVSD instruction. */ COSTS_N_INSNS (31), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (63), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (5), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (10), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (20), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ pentium_memcpy, pentium_memset, @@ -690,6 +705,9 @@ struct processor_costs pentiumpro_cost = { COSTS_N_INSNS (18), /* cost of DIVSD instruction. */ COSTS_N_INSNS (31), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (31), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ pentiumpro_memcpy, pentiumpro_memset, @@ -800,6 +818,9 @@ struct processor_costs geode_cost = { COSTS_N_INSNS (47), /* cost of DIVSD instruction. */ COSTS_N_INSNS (54), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (54), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (6), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (12), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (24), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ geode_memcpy, geode_memset, @@ -913,6 +934,9 @@ struct processor_costs k6_cost = { COSTS_N_INSNS (56), /* cost of DIVSD instruction. */ COSTS_N_INSNS (56), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (56), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (2), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (4), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (8), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ k6_memcpy, k6_memset, @@ -1027,6 +1051,9 @@ struct processor_costs athlon_cost = { COSTS_N_INSNS (24), /* cost of DIVSD instruction. */ COSTS_N_INSNS (19), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (19), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (4), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (8), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (16), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ athlon_memcpy, athlon_memset, @@ -1150,6 +1177,9 @@ struct processor_costs k8_cost = { COSTS_N_INSNS (20), /* cost of DIVSD instruction. */ COSTS_N_INSNS (19), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (27), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (4), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (8), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (16), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ k8_memcpy, k8_memset, @@ -1281,6 +1311,9 @@ struct processor_costs amdfam10_cost = { COSTS_N_INSNS (20), /* cost of DIVSD instruction. */ COSTS_N_INSNS (19), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (27), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (4), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (8), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (16), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ amdfam10_memcpy, amdfam10_memset, @@ -1405,6 +1438,9 @@ const struct processor_costs bdver_cost = { COSTS_N_INSNS (27), /* cost of DIVSD instruction. */ COSTS_N_INSNS (15), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (26), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (4), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (7), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (14), /* cost of 512bit VCVTPS2PD etc. */ 1, 2, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ bdver_memcpy, bdver_memset, @@ -1553,6 +1589,10 @@ struct processor_costs znver1_cost = { COSTS_N_INSNS (13), /* cost of DIVSD instruction. */ COSTS_N_INSNS (10), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (15), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + /* Real latency is 4, but for split regs multiply cost of half op by 2. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ /* Zen can execute 4 integer operations per cycle. FP operations take 3 cycles and it can execute 2 integer additions and 2 multiplications thus reassociation may make sense up to with of 6. SPEC2k6 bencharks suggests @@ -1712,6 +1752,9 @@ struct processor_costs znver2_cost = { COSTS_N_INSNS (13), /* cost of DIVSD instruction. */ COSTS_N_INSNS (10), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (15), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (5), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (10), /* cost of 512bit VCVTPS2PD etc. */ /* Zen can execute 4 integer operations per cycle. FP operations take 3 cycles and it can execute 2 integer additions and 2 multiplications thus reassociation may make sense up to with of 6. @@ -1847,6 +1890,9 @@ struct processor_costs znver3_cost = { COSTS_N_INSNS (13), /* cost of DIVSD instruction. */ COSTS_N_INSNS (10), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (15), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (5), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (10), /* cost of 512bit VCVTPS2PD etc. */ /* Zen can execute 4 integer operations per cycle. FP operations take 3 cycles and it can execute 2 integer additions and 2 multiplications thus reassociation may make sense up to with of 6. @@ -1984,6 +2030,10 @@ struct processor_costs znver4_cost = { COSTS_N_INSNS (13), /* cost of DIVSD instruction. */ COSTS_N_INSNS (15), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (21), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (5), /* cost of 256bit VCVTPS2PD etc. */ + /* Real latency is 6, but for split regs multiply cost of half op by 2. */ + COSTS_N_INSNS (10), /* cost of 512bit VCVTPS2PD etc. */ /* Zen can execute 4 integer operations per cycle. FP operations take 3 cycles and it can execute 2 integer additions and 2 multiplications thus reassociation may make sense up to with of 6. @@ -2120,7 +2170,7 @@ struct processor_costs znver5_cost = { COSTS_N_INSNS (1), /* cost of cheap SSE instruction. */ /* ADDSS has throughput 2 and latency 2 (in some cases when source is another addition). */ - COSTS_N_INSNS (2), /* cost of ADDSS/SD SUBSS/SD insns. */ + COSTS_N_INSNS (3), /* cost of ADDSS/SD SUBSS/SD insns. */ /* MULSS has throughput 2 and latency 3. */ COSTS_N_INSNS (3), /* cost of MULSS instruction. */ COSTS_N_INSNS (3), /* cost of MULSD instruction. */ @@ -2135,6 +2185,9 @@ struct processor_costs znver5_cost = { COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ /* DIVSD has throughtput 0.13 and latency 20. */ COSTS_N_INSNS (20), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (5), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (5), /* cost of 512bit VCVTPS2PD etc. */ /* Zen5 can execute: - integer ops: 6 per cycle, at most 3 multiplications. latency 1 for additions, 3 for multiplications (pipelined) @@ -2274,6 +2327,9 @@ struct processor_costs skylake_cost = { COSTS_N_INSNS (14), /* cost of DIVSD instruction. */ COSTS_N_INSNS (12), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (2), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (2), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (4), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 2, 2, /* reassoc int, fp, vec_int, vec_fp. */ skylake_memcpy, skylake_memset, @@ -2403,6 +2459,9 @@ struct processor_costs icelake_cost = { COSTS_N_INSNS (14), /* cost of DIVSD instruction. */ COSTS_N_INSNS (12), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (2), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (2), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (2), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 2, 2, /* reassoc int, fp, vec_int, vec_fp. */ icelake_memcpy, icelake_memset, @@ -2526,6 +2585,9 @@ struct processor_costs alderlake_cost = { COSTS_N_INSNS (17), /* cost of DIVSD instruction. */ COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (2), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (2), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (2), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 3, 3, /* reassoc int, fp, vec_int, vec_fp. */ alderlake_memcpy, alderlake_memset, @@ -2642,6 +2704,9 @@ const struct processor_costs btver1_cost = { COSTS_N_INSNS (17), /* cost of DIVSD instruction. */ COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (48), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (4), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (7), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (14), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ btver1_memcpy, btver1_memset, @@ -2755,6 +2820,9 @@ const struct processor_costs btver2_cost = { COSTS_N_INSNS (19), /* cost of DIVSD instruction. */ COSTS_N_INSNS (16), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (21), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (4), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (7), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (14), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ btver2_memcpy, btver2_memset, @@ -2867,6 +2935,9 @@ struct processor_costs pentium4_cost = { COSTS_N_INSNS (38), /* cost of DIVSD instruction. */ COSTS_N_INSNS (23), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (38), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (10), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (20), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (40), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ pentium4_memcpy, pentium4_memset, @@ -2982,6 +3053,9 @@ struct processor_costs nocona_cost = { COSTS_N_INSNS (40), /* cost of DIVSD instruction. */ COSTS_N_INSNS (32), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (41), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (10), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (20), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (40), /* cost of 512bit VCVTPS2PD etc. */ 1, 1, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ nocona_memcpy, nocona_memset, @@ -3095,6 +3169,9 @@ struct processor_costs atom_cost = { COSTS_N_INSNS (60), /* cost of DIVSD instruction. */ COSTS_N_INSNS (31), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (63), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (6), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (12), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (24), /* cost of 512bit VCVTPS2PD etc. */ 2, 2, 2, 2, /* reassoc int, fp, vec_int, vec_fp. */ atom_memcpy, atom_memset, @@ -3208,6 +3285,9 @@ struct processor_costs slm_cost = { COSTS_N_INSNS (69), /* cost of DIVSD instruction. */ COSTS_N_INSNS (20), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (35), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 1, 2, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ slm_memcpy, slm_memset, @@ -3335,6 +3415,9 @@ struct processor_costs tremont_cost = { COSTS_N_INSNS (17), /* cost of DIVSD instruction. */ COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 3, 3, /* reassoc int, fp, vec_int, vec_fp. */ tremont_memcpy, tremont_memset, @@ -3448,6 +3531,9 @@ struct processor_costs intel_cost = { COSTS_N_INSNS (20), /* cost of DIVSD instruction. */ COSTS_N_INSNS (40), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (40), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (8), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (16), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (32), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 1, 1, /* reassoc int, fp, vec_int, vec_fp. */ intel_memcpy, intel_memset, @@ -3566,6 +3652,9 @@ struct processor_costs lujiazui_cost = { COSTS_N_INSNS (17), /* cost of DIVSD instruction. */ COSTS_N_INSNS (32), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (60), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 3, 3, /* reassoc int, fp, vec_int, vec_fp. */ lujiazui_memcpy, lujiazui_memset, @@ -3682,6 +3771,9 @@ struct processor_costs yongfeng_cost = { COSTS_N_INSNS (14), /* cost of DIVSD instruction. */ COSTS_N_INSNS (20), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (35), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 4, 4, 4, 4, /* reassoc int, fp, vec_int, vec_fp. */ yongfeng_memcpy, yongfeng_memset, @@ -3798,6 +3890,9 @@ struct processor_costs shijidadao_cost = { COSTS_N_INSNS (14), /* cost of DIVSD instruction. */ COSTS_N_INSNS (11), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (6), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (12), /* cost of 512bit VCVTPS2PD etc. */ 4, 4, 4, 4, /* reassoc int, fp, vec_int, vec_fp. */ shijidadao_memcpy, shijidadao_memset, @@ -3922,6 +4017,9 @@ struct processor_costs generic_cost = { COSTS_N_INSNS (17), /* cost of DIVSD instruction. */ COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (18), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (3), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (4), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (5), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 3, 3, /* reassoc int, fp, vec_int, vec_fp. */ generic_memcpy, generic_memset, @@ -4051,6 +4149,9 @@ struct processor_costs core_cost = { COSTS_N_INSNS (32), /* cost of DIVSD instruction. */ COSTS_N_INSNS (30), /* cost of SQRTSS instruction. */ COSTS_N_INSNS (58), /* cost of SQRTSD instruction. */ + COSTS_N_INSNS (2), /* cost of CVTSS2SD etc. */ + COSTS_N_INSNS (2), /* cost of 256bit VCVTPS2PD etc. */ + COSTS_N_INSNS (2), /* cost of 512bit VCVTPS2PD etc. */ 1, 4, 2, 2, /* reassoc int, fp, vec_int, vec_fp. */ core_memcpy, core_memset, diff --git a/gcc/config/i386/x86-tune-sched.cc b/gcc/config/i386/x86-tune-sched.cc index 685a83c..15d3d91 100644 --- a/gcc/config/i386/x86-tune-sched.cc +++ b/gcc/config/i386/x86-tune-sched.cc @@ -81,6 +81,14 @@ ix86_issue_rate (void) case PROCESSOR_YONGFENG: case PROCESSOR_SHIJIDADAO: case PROCESSOR_GENERIC: + /* For znver5 decoder can handle 4 or 8 instructions per cycle, + op cache 12 instruction/cycle, dispatch 8 instructions + integer rename 8 instructions and Fp 6 instructions. + + The scheduler, without understanding out of order nature of the CPU + is not going to be able to use more than 4 instructions since that + is limits of the decoders. */ + case PROCESSOR_ZNVER5: return 4; case PROCESSOR_ICELAKE_CLIENT: @@ -91,13 +99,6 @@ ix86_issue_rate (void) return 5; case PROCESSOR_SAPPHIRERAPIDS: - /* For znver5 decoder can handle 4 or 8 instructions per cycle, - op cache 12 instruction/cycle, dispatch 8 instructions - integer rename 8 instructions and Fp 6 instructions. - - The scheduler, without understanding out of order nature of the CPU - is unlikely going to be able to fill all of these. */ - case PROCESSOR_ZNVER5: return 6; default: diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 24a28dc..0d3d026 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -20678,6 +20678,9 @@ mips_option_override (void) "-mcompact-branches=never"); } + if (is_micromips && TARGET_MSA) + error ("unsupported combination: %s", "-mmicromips -mmsa"); + /* Require explicit relocs for MIPS R6 onwards. This enables simplification of the compact branch and jump support through the backend. */ if (!TARGET_EXPLICIT_RELOCS && mips_isa_rev >= 6) diff --git a/gcc/config/nvptx/mkoffload.cc b/gcc/config/nvptx/mkoffload.cc index bdfe7f5..e7ec0ef 100644 --- a/gcc/config/nvptx/mkoffload.cc +++ b/gcc/config/nvptx/mkoffload.cc @@ -778,6 +778,9 @@ main (int argc, char **argv) } if (fopenmp) obstack_ptr_grow (&argv_obstack, "-mgomp"); + /* The host code may contain exception handling constructs. + Handle these as good as we can. */ + obstack_ptr_grow (&argv_obstack, "-mfake-exceptions"); for (int ix = 1; ix != argc; ix++) { diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index 87364bf..f893971 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -2359,7 +2359,25 @@ nvptx_assemble_integer (rtx x, unsigned int size, int ARG_UNUSED (aligned_p)) { gcc_checking_assert (!init_frag.active); /* Just use the default machinery; it's not getting used, anyway. */ - return default_assemble_integer (x, size, aligned_p); + bool ok = default_assemble_integer (x, size, aligned_p); + /* ..., but a few cases need special handling. */ + switch (GET_CODE (x)) + { + case SYMBOL_REF: + /* The default machinery won't work: we don't define the necessary + operations; don't use them outside of this. */ + gcc_checking_assert (!ok); + { + /* Just emit something; it's not getting used, anyway. */ + const char *op = "\t.symbol_ref\t"; + ok = (assemble_integer_with_op (op, x), true); + } + break; + + default: + break; + } + return ok; } gcc_checking_assert (init_frag.active); @@ -7771,6 +7789,18 @@ nvptx_asm_output_def_from_decls (FILE *stream, tree name, #endif cgraph_node *cnode = cgraph_node::get (name); +#ifdef ACCEL_COMPILER + /* For nvptx offloading, make sure to emit C++ constructor, destructor aliases [PR97106] + + For some reason (yet to be analyzed), they're not 'cnode->referred_to_p ()'. + (..., or that's not the right approach at all; + <https://inbox.sourceware.org/87v7rx8lbx.fsf@euler.schwinge.ddns.net> + "Re: [committed][nvptx] Use .alias directive for mptx >= 6.3"). */ + if (DECL_CXX_CONSTRUCTOR_P (name) + || DECL_CXX_DESTRUCTOR_P (name)) + ; + else +#endif if (!cnode->referred_to_p ()) /* Prevent "Internal error: reference to deleted section". */ return; @@ -7875,8 +7905,6 @@ nvptx_asm_output_def_from_decls (FILE *stream, tree name, #define TARGET_ASM_DECLARE_CONSTANT_NAME nvptx_asm_declare_constant_name #undef TARGET_USE_BLOCKS_FOR_CONSTANT_P #define TARGET_USE_BLOCKS_FOR_CONSTANT_P hook_bool_mode_const_rtx_true -#undef TARGET_ASM_NEED_VAR_DECL_BEFORE_USE -#define TARGET_ASM_NEED_VAR_DECL_BEFORE_USE true #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG nvptx_reorg diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md index 3201247..7c3bd69 100644 --- a/gcc/config/nvptx/nvptx.md +++ b/gcc/config/nvptx/nvptx.md @@ -1644,7 +1644,9 @@ [(const_int 0)] "" { - sorry ("exception handling not supported"); + if (!fake_exceptions) + sorry ("exception handling not supported"); + DONE; }) (define_expand "nonlocal_goto" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index 9be81ae..ce9fbc7 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -168,6 +168,14 @@ Target Var(nvptx_alias) Init(0) Undocumented mexperimental Target Var(nvptx_experimental) Init(0) Undocumented +mfake-exceptions +Target Var(fake_exceptions) Init(0) Undocumented +; With '-mfake-exceptions' enabled, the user-visible behavior in presence of +; exception handling constructs changes such that the compile-time +; 'sorry, unimplemented: exception handling not supported' is skipped, code +; generation proceeds, and instead, exception handling constructs 'abort' at +; run time. (..., or don't, if they're in dead code.) + mfake-ptx-alloca Target Var(nvptx_fake_ptx_alloca) Init(0) Undocumented ; With '-mfake-ptx-alloca' enabled, the user-visible behavior changes only diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md index 5ed5e18..d0919ec 100644 --- a/gcc/config/riscv/bitmanip.md +++ b/gcc/config/riscv/bitmanip.md @@ -908,6 +908,24 @@ "bext\t%0,%1,%2" [(set_attr "type" "bitmanip")]) +;; We do not define SHIFT_COUNT_TRUNCATED, so we have to have variants +;; that mask/extend the count if we want to eliminate those ops +;; +;; We could (in theory) use GPR for the various modes, but I haven't +;; seen those cases appear in practice. Without a testcase I've +;; elected to keep the modes X which is easy to reason about. +(define_insn "*bext<mode>_mask_pos" + [(set (match_operand:X 0 "register_operand" "=r") + (zero_extract:X (match_operand:X 1 "register_operand" "r") + (const_int 1) + (and:X + (match_operand:X 2 "register_operand" "r") + (match_operand 3 "const_int_operand"))))] + "(TARGET_ZBS + && INTVAL (operands[3]) + 1 == GET_MODE_BITSIZE (<MODE>mode))" + "bext\t%0,%1,%2" + [(set_attr "type" "bitmanip")]) + ;; This is a bext followed by a seqz. Normally this would be a 3->2 split ;; But the and-not pattern with a constant operand is a define_insn_and_split, ;; so this looks like a 2->2 split, which combine rejects. So implement it @@ -1245,3 +1263,41 @@ expand_crc_using_clmul (<SUBX:MODE>mode, <SUBX1:MODE>mode, operands); DONE; }) + +;; If we have an XOR/IOR with a constant operand (C) and the we can +;; synthesize ~C more efficiently than C, then synthesize ~C and use +;; xnor/orn instead. +;; +;; The same can be done for AND, but mvconst_internal's issues get in +;; the way. That's future work. +(define_split + [(set (match_operand:X 0 "register_operand") + (any_or:X (match_operand:X 1 "register_operand") + (match_operand:X 2 "const_int_operand"))) + (clobber (match_operand:X 3 "register_operand"))] + "TARGET_ZBB + && (riscv_const_insns (operands[2], true) + > riscv_const_insns (GEN_INT (~INTVAL (operands[2])), true))" + [(const_int 0)] +{ + /* Get the inverted constant into the temporary register. */ + riscv_emit_move (operands[3], GEN_INT (~INTVAL (operands[2]))); + + /* For xnor, the NOT operation is in a different position. So + we have to customize the split code we generate a bit. + + It is expected that AND will be handled like IOR in the future. */ + if (<CODE> == XOR) + { + rtx x = gen_rtx_XOR (<X:MODE>mode, operands[1], operands[3]); + x = gen_rtx_NOT (<X:MODE>mode, x); + emit_insn (gen_rtx_SET (operands[0], x)); + } + else + { + rtx x = gen_rtx_NOT (<X:MODE>mode, operands[3]); + x = gen_rtx_IOR (<X:MODE>mode, x, operands[1]); + emit_insn (gen_rtx_SET (operands[0], x)); + } + DONE; +}) diff --git a/gcc/config/riscv/gnu.h b/gcc/config/riscv/gnu.h new file mode 100644 index 0000000..047399b --- /dev/null +++ b/gcc/config/riscv/gnu.h @@ -0,0 +1,59 @@ +/* Definitions for RISC-V GNU/Hurd systems with ELF format. + Copyright (C) 1998-2025 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC 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 for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#define TARGET_OS_CPP_BUILTINS() \ + do { \ + GNU_USER_TARGET_OS_CPP_BUILTINS(); \ + } while (0) + +#define GNU_USER_DYNAMIC_LINKER "/lib/ld-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1" + +#define ICACHE_FLUSH_FUNC "__riscv_flush_icache" + +#define CPP_SPEC "%{pthread:-D_REENTRANT}" + +#define LD_EMUL_SUFFIX \ + "%{mabi=lp64d:}" \ + "%{mabi=lp64f:_lp64f}" \ + "%{mabi=lp64:_lp64}" \ + "%{mabi=ilp32d:}" \ + "%{mabi=ilp32f:_ilp32f}" \ + "%{mabi=ilp32:_ilp32}" + +#define LINK_SPEC "\ +-melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv" LD_EMUL_SUFFIX " \ +%{mno-relax:--no-relax} \ +-X \ +%{mbig-endian:-EB} \ +%{mlittle-endian:-EL} \ +%{shared} \ + %{!shared: \ + %{!static: \ + %{!static-pie: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ + %{static:-static} %{static-pie:-static -pie --no-dynamic-linker -z text}}" + +#define STARTFILE_PREFIX_SPEC \ + "/lib" XLEN_SPEC "/" ABI_SPEC "/ " \ + "/usr/lib" XLEN_SPEC "/" ABI_SPEC "/ " \ + "/lib/ " \ + "/usr/lib/ " + +#define RISCV_USE_CUSTOMISED_MULTI_LIB select_by_abi diff --git a/gcc/config/riscv/riscv-cores.def b/gcc/config/riscv/riscv-cores.def index 2918496..e31afc3 100644 --- a/gcc/config/riscv/riscv-cores.def +++ b/gcc/config/riscv/riscv-cores.def @@ -41,6 +41,12 @@ RISCV_TUNE("sifive-p400-series", sifive_p400, sifive_p400_tune_info) RISCV_TUNE("sifive-p600-series", sifive_p600, sifive_p600_tune_info) RISCV_TUNE("tt-ascalon-d8", generic_ooo, tt_ascalon_d8_tune_info) RISCV_TUNE("thead-c906", generic, thead_c906_tune_info) +RISCV_TUNE("xt-c908", generic, generic_ooo_tune_info) +RISCV_TUNE("xt-c908v", generic, generic_ooo_tune_info) +RISCV_TUNE("xt-c910", generic, generic_ooo_tune_info) +RISCV_TUNE("xt-c910v2", generic, generic_ooo_tune_info) +RISCV_TUNE("xt-c920", generic, generic_ooo_tune_info) +RISCV_TUNE("xt-c920v2", generic, generic_ooo_tune_info) RISCV_TUNE("xiangshan-nanhu", xiangshan, xiangshan_nanhu_tune_info) RISCV_TUNE("generic-ooo", generic_ooo, generic_ooo_tune_info) RISCV_TUNE("size", generic, optimize_size_tune_info) @@ -93,6 +99,48 @@ RISCV_CORE("thead-c906", "rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_" "xtheadmemidx_xtheadmempair_xtheadsync", "thead-c906") +RISCV_CORE("xt-c908", "rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicsr_" + "zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_" + "sstc_svinval_svnapot_svpbmt_xtheadba_xtheadbb_" + "xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_" + "xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync", + "xt-c908") +RISCV_CORE("xt-c908v", "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicsr_" + "zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_" + "zvfh_sstc_svinval_svnapot_svpbmt__xtheadba_" + "xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_" + "xtheadfmemidx_xtheadmac_xtheadmemidx_" + "xtheadmempair_xtheadsync_xtheadvdot", + "xt-c908") +RISCV_CORE("xt-c910", "rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_" + "xtheadba_xtheadbb_xtheadbs_xtheadcmo_" + "xtheadcondmov_xtheadfmemidx_xtheadmac_" + "xtheadmemidx_xtheadmempair_xtheadsync", + "xt-c910") +RISCV_CORE("xt-c910v2", "rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicond_" + "zicsr_zifencei _zihintntl_zihintpause_zihpm_" + "zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_" + "zbs_sscofpmf_sstc_svinval_svnapot_svpbmt_" + "xtheadba_xtheadbb_xtheadbs_xtheadcmo_" + "xtheadcondmov_xtheadfmemidx_xtheadmac_" + "xtheadmemidx_xtheadmempair_xtheadsync", + "xt-c910v2") +RISCV_CORE("xt-c920", "rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_" + "xtheadba_xtheadbb_xtheadbs_xtheadcmo_" + "xtheadcondmov_xtheadfmemidx_xtheadmac_" + "xtheadmemidx_xtheadmempair_xtheadsync_" + "xtheadvector", + "xt-c910") +RISCV_CORE("xt-c920v2", "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_" + "zicsr_zifencei _zihintntl_zihintpause_zihpm_" + "zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_" + "zbs_zvfbfmin_zvfbfwma_zvfh_sscofpmf_sstc_" + "svinval_svnapot_svpbmt_xtheadba_xtheadbb_" + "xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_" + "xtheadmac_xtheadmemidx_xtheadmempair_" + "xtheadsync_xtheadvdot", + "xt-c920v2") + RISCV_CORE("tt-ascalon-d8", "rv64imafdcv_zic64b_zicbom_zicbop_zicboz_" "ziccamoa_ziccif_zicclsm_ziccrse_zicond_zicsr_" "zifencei_zihintntl_zihintpause_zimop_za64rs_" diff --git a/gcc/config/riscv/riscv-target-attr.cc b/gcc/config/riscv/riscv-target-attr.cc index 1d96865..8ad3025 100644 --- a/gcc/config/riscv/riscv-target-attr.cc +++ b/gcc/config/riscv/riscv-target-attr.cc @@ -257,11 +257,7 @@ riscv_target_attr_parser::update_settings (struct gcc_options *opts) const { std::string local_arch = m_subset_list->to_string (true); const char* local_arch_str = local_arch.c_str (); - struct cl_target_option *default_opts - = TREE_TARGET_OPTION (target_option_default_node); - if (opts->x_riscv_arch_string != default_opts->x_riscv_arch_string) - free (CONST_CAST (void *, (const void *) opts->x_riscv_arch_string)); - opts->x_riscv_arch_string = xstrdup (local_arch_str); + opts->x_riscv_arch_string = ggc_strdup (local_arch_str); riscv_set_arch_by_subset_list (m_subset_list, opts); } diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index 0ac2538..a8c9256 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -685,7 +685,7 @@ invalid_opt_bb_p (basic_block cfg_bb) /* We only do LCM optimizations on blocks that are post dominated by EXIT block, that is, we don't do LCM optimizations on infinite loop. */ FOR_EACH_EDGE (e, ei, cfg_bb->succs) - if (e->flags & EDGE_FAKE) + if ((e->flags & EDGE_FAKE) || (e->flags & EDGE_ABNORMAL)) return true; return false; @@ -2698,6 +2698,7 @@ pre_vsetvl::compute_lcm_local_properties () m_avout = sbitmap_vector_alloc (last_basic_block_for_fn (cfun), num_exprs); bitmap_vector_clear (m_avloc, last_basic_block_for_fn (cfun)); + bitmap_vector_clear (m_kill, last_basic_block_for_fn (cfun)); bitmap_vector_clear (m_antloc, last_basic_block_for_fn (cfun)); bitmap_vector_ones (m_transp, last_basic_block_for_fn (cfun)); @@ -2749,6 +2750,10 @@ pre_vsetvl::compute_lcm_local_properties () if (invalid_opt_bb_p (bb->cfg_bb ())) { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "\n --- skipping bb %u due to weird edge", + bb->index ()); + bitmap_clear (m_antloc[bb_index]); bitmap_clear (m_transp[bb_index]); } @@ -3022,6 +3027,18 @@ pre_vsetvl::earliest_fuse_vsetvl_info (int iter) continue; } + /* We cannot lift a vsetvl into the source block if the block is + not transparent WRT to it. + This is too restrictive for blocks where a register's use only + feeds into vsetvls and no regular insns. One example is the + test rvv/vsetvl/avl_single-68.c which is currently XFAILed for + that reason. + In order to support this case we'd need to check the vsetvl's + AVL operand's uses in the source block and make sure they are + only used in other vsetvls. */ + if (!bitmap_bit_p (m_transp[eg->src->index], expr_index)) + continue; + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 38f3ae7..bad59e2 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -10382,7 +10382,7 @@ riscv_file_end () fprintf (asm_out_file, "1:\n"); /* pr_type. */ - fprintf (asm_out_file, "\t.p2align\t3\n"); + fprintf (asm_out_file, "\t.p2align\t%u\n", p2align); fprintf (asm_out_file, "2:\n"); fprintf (asm_out_file, "\t.long\t0xc0000000\n"); /* pr_datasz. */ @@ -13136,9 +13136,6 @@ parse_features_for_version (tree decl, DECL_SOURCE_LOCATION (decl)); gcc_assert (parse_res); - if (arch_string != default_opts->x_riscv_arch_string) - free (CONST_CAST (void *, (const void *) arch_string)); - cl_target_option_restore (&global_options, &global_options_set, &cur_target); } diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 2bcabd0..2759a4c 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -888,7 +888,7 @@ extern enum riscv_cc get_riscv_cc (const rtx use); #define ASM_OUTPUT_OPCODE(STREAM, PTR) \ (PTR) = riscv_asm_output_opcode(STREAM, PTR) -#define JUMP_TABLES_IN_TEXT_SECTION 0 +#define JUMP_TABLES_IN_TEXT_SECTION (riscv_cmodel == CM_LARGE) #define CASE_VECTOR_MODE SImode #define CASE_VECTOR_PC_RELATIVE (riscv_cmodel != CM_MEDLOW) diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 26a247c..eec9687 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -789,7 +789,7 @@ rtx t5 = gen_reg_rtx (DImode); rtx t6 = gen_reg_rtx (DImode); - riscv_emit_binary (PLUS, operands[0], operands[1], operands[2]); + emit_insn (gen_addsi3_extended (t6, operands[1], operands[2])); if (GET_CODE (operands[1]) != CONST_INT) emit_insn (gen_extend_insn (t4, operands[1], DImode, SImode, 0)); else @@ -799,7 +799,10 @@ else t5 = operands[2]; emit_insn (gen_adddi3 (t3, t4, t5)); - emit_insn (gen_extend_insn (t6, operands[0], DImode, SImode, 0)); + rtx t7 = gen_lowpart (SImode, t6); + SUBREG_PROMOTED_VAR_P (t7) = 1; + SUBREG_PROMOTED_SET (t7, SRP_SIGNED); + emit_move_insn (operands[0], t7); riscv_expand_conditional_branch (operands[3], NE, t6, t3); } @@ -835,8 +838,11 @@ emit_insn (gen_extend_insn (t3, operands[1], DImode, SImode, 0)); else t3 = operands[1]; - riscv_emit_binary (PLUS, operands[0], operands[1], operands[2]); - emit_insn (gen_extend_insn (t4, operands[0], DImode, SImode, 0)); + emit_insn (gen_addsi3_extended (t4, operands[1], operands[2])); + rtx t5 = gen_lowpart (SImode, t4); + SUBREG_PROMOTED_VAR_P (t5) = 1; + SUBREG_PROMOTED_SET (t5, SRP_SIGNED); + emit_move_insn (operands[0], t5); riscv_expand_conditional_branch (operands[3], LTU, t4, t3); } @@ -966,7 +972,7 @@ rtx t5 = gen_reg_rtx (DImode); rtx t6 = gen_reg_rtx (DImode); - riscv_emit_binary (MINUS, operands[0], operands[1], operands[2]); + emit_insn (gen_subsi3_extended (t6, operands[1], operands[2])); if (GET_CODE (operands[1]) != CONST_INT) emit_insn (gen_extend_insn (t4, operands[1], DImode, SImode, 0)); else @@ -976,7 +982,10 @@ else t5 = operands[2]; emit_insn (gen_subdi3 (t3, t4, t5)); - emit_insn (gen_extend_insn (t6, operands[0], DImode, SImode, 0)); + rtx t7 = gen_lowpart (SImode, t6); + SUBREG_PROMOTED_VAR_P (t7) = 1; + SUBREG_PROMOTED_SET (t7, SRP_SIGNED); + emit_move_insn (operands[0], t7); riscv_expand_conditional_branch (operands[3], NE, t6, t3); } @@ -1015,8 +1024,11 @@ emit_insn (gen_extend_insn (t3, operands[1], DImode, SImode, 0)); else t3 = operands[1]; - riscv_emit_binary (MINUS, operands[0], operands[1], operands[2]); - emit_insn (gen_extend_insn (t4, operands[0], DImode, SImode, 0)); + emit_insn (gen_subsi3_extended (t4, operands[1], operands[2])); + rtx t5 = gen_lowpart (SImode, t4); + SUBREG_PROMOTED_VAR_P (t5) = 1; + SUBREG_PROMOTED_SET (t5, SRP_SIGNED); + emit_move_insn (operands[0], t5); riscv_expand_conditional_branch (operands[3], LTU, t3, t4); } diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md index 51eb64f..3ab4d76 100644 --- a/gcc/config/riscv/vector.md +++ b/gcc/config/riscv/vector.md @@ -2136,18 +2136,34 @@ (match_operand 7 "const_int_operand") (reg:SI VL_REGNUM) (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (vec_duplicate:V_VLS - (match_operand:<VEL> 3 "direct_broadcast_operand")) + ;; (vec_duplicate:V_VLS ;; wrapper activated by wrap_vec_dup below. + (match_operand:<VEL> 3 "direct_broadcast_operand") ;; ) (match_operand:V_VLS 2 "vector_merge_operand")))] "TARGET_VECTOR" { /* Transform vmv.v.x/vfmv.v.f (avl = 1) into vmv.s.x since vmv.s.x/vfmv.s.f has better chances to do vsetvl fusion in vsetvl pass. */ + bool wrap_vec_dup = true; + rtx vec_cst = NULL_RTX; if (riscv_vector::splat_to_scalar_move_p (operands)) { operands[1] = riscv_vector::gen_scalar_move_mask (<VM>mode); operands[3] = force_reg (<VEL>mode, operands[3]); } + else if (immediate_operand (operands[3], <VEL>mode) + && (vec_cst = gen_const_vec_duplicate (<MODE>mode, operands[3])) + && (/* -> pred_broadcast<mode>_zero */ + (vector_least_significant_set_mask_operand (operands[1], + <VM>mode) + && vector_const_0_operand (vec_cst, <MODE>mode)) + || (/* pred_broadcast<mode>_imm */ + vector_all_trues_mask_operand (operands[1], <VM>mode) + && vector_const_int_or_double_0_operand (vec_cst, + <MODE>mode)))) + { + operands[3] = vec_cst; + wrap_vec_dup = false; + } /* Handle vmv.s.x instruction (Wb1 mask) which has memory scalar. */ else if (satisfies_constraint_Wdm (operands[3])) { @@ -2191,6 +2207,8 @@ ; else operands[3] = force_reg (<VEL>mode, operands[3]); + if (wrap_vec_dup) + operands[3] = gen_rtx_VEC_DUPLICATE (<MODE>mode, operands[3]); }) (define_insn_and_split "*pred_broadcast<mode>" diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 737c3d6..12dbde2 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -25765,10 +25765,13 @@ rs6000_can_inline_p (tree caller, tree callee) } } - /* Ignore -mpower8-fusion and -mpower10-fusion options for inlining - purposes. */ - callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION); - explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION); + /* Ignore -mpower8-fusion, -mpower10-fusion and -msave-toc-indirect options + for inlining purposes. */ + HOST_WIDE_INT ignored_isas = (OPTION_MASK_P8_FUSION + | OPTION_MASK_P10_FUSION + | OPTION_MASK_SAVE_TOC_INDIRECT); + callee_isa &= ~ignored_isas; + explicit_isa &= ~ignored_isas; /* The callee's options must be a subset of the caller's options, i.e. a vsx function may inline an altivec function, but a no-vsx function diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md index edb2c96..a3d966e 100644 --- a/gcc/config/rx/rx.md +++ b/gcc/config/rx/rx.md @@ -2541,10 +2541,17 @@ (unspec_volatile:SI [(match_operand:BLK 1 "memory_operand") ;; String1 (match_operand:BLK 2 "memory_operand")] ;; String2 UNSPEC_CMPSTRN)) - (use (match_operand:SI 3 "register_operand")) ;; Max Length + (use (match_operand:SI 3 "nonmemory_operand")) ;; Max Length (match_operand:SI 4 "immediate_operand")] ;; Known Align "rx_allow_string_insns" { + bool const_len = CONST_INT_P (operands[3]); + if (const_len && operands[3] == CONST0_RTX (SImode)) + { + emit_move_insn (operands[0], CONST0_RTX (SImode)); + DONE; + } + rtx str1 = gen_rtx_REG (SImode, 1); rtx str2 = gen_rtx_REG (SImode, 2); rtx len = gen_rtx_REG (SImode, 3); @@ -2553,6 +2560,13 @@ emit_move_insn (str2, force_operand (XEXP (operands[2], 0), NULL_RTX)); emit_move_insn (len, operands[3]); + /* Set flags in case len is zero */ + if (!const_len) + { + emit_insn (gen_setpsw (GEN_INT ('C'))); + emit_insn (gen_setpsw (GEN_INT ('Z'))); + } + emit_insn (gen_rx_cmpstrn (operands[0], operands[1], operands[2])); DONE; } @@ -2590,9 +2604,7 @@ (clobber (reg:SI 3)) (clobber (reg:CC CC_REG))] "rx_allow_string_insns" - "setpsw z ; Set flags in case len is zero - setpsw c - scmpu ; Perform the string comparison + "scmpu ; Perform the string comparison mov #-1, %0 ; Set up -1 result (which cannot be created ; by the SC insn) bnc ?+ ; If Carry is not set skip over diff --git a/gcc/config/s390/9175.md b/gcc/config/s390/9175.md new file mode 100644 index 0000000..d0ac0e1 --- /dev/null +++ b/gcc/config/s390/9175.md @@ -0,0 +1,316 @@ +;; Scheduling description for z17. +;; Copyright (C) 2025 Free Software Foundation, Inc. + +;; This file is part of GCC. + +;; GCC is free software; you can redistribute it and/or modify it under +;; the terms of the GNU General Public License as published by the Free +;; Software Foundation; either version 3, or (at your option) any later +;; version. + +;; GCC 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 +;; for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GCC; see the file COPYING3. If not see +;; <http://www.gnu.org/licenses/>. + +(define_attr "z17_unit_fpd" "" + (cond [(eq_attr "mnemonic" "ddb,ddbr,deb,debr,dxbr,sqdb,sqdbr,sqeb,sqebr,\ +sqxbr,vdf,vdg,vdlf,vdlg,vdlq,vdq,vfddb,vfdsb,vfsqdb,vfsqsb,vrf,vrg,vrlf,vrlg,\ +vrlq,vrq,wfddb,wfdsb,wfdxb,wfsqdb,wfsqxb") + (const_int 1)] (const_int 0))) + +(define_attr "z17_unit_fxa" "" + (cond [(eq_attr "mnemonic" "a,afi,ag,agf,agfi,agfr,agh,aghi,aghik,agr,agrk,ah,\ +ahi,ahik,ahy,al,alc,alcg,alcgr,alcr,alfi,alg,algf,algfi,algfr,alghsik,algr,\ +algrk,alhsik,alr,alrk,aly,ar,ark,ay,bdepg,bextg,clzg,ctzg,etnd,flogr,ic,icm,\ +icmh,icmy,icy,iihf,iilf,ipm,la,larl,lay,lb,lbr,lcgfr,lcgr,lcr,lgb,lgbr,lgf,\ +lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgcr,llgfr,\ +llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,llxab,llxaf,llxag,llxah,\ +llxaq,lngfr,lngr,lnr,loc,locg,locghi,locgr,lochi,locr,lpgfr,lpgr,lpr,lr,lrv,\ +lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lxab,lxaf,lxag,lxah,lxaq,m,mfy,\ +mg,mgh,mghi,mgrk,mh,mhi,mhy,ml,mlg,mlgr,mlr,mr,ms,msc,msfi,msg,msgc,msgf,msgfi,\ +msgfr,msgr,msgrkc,msr,msrkc,msy,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,\ +nilh,nill,nngrk,nnrk,nogrk,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,\ +oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,\ +rnsbg,rosbg,rxsbg,s,selgr,selr,sg,sgf,sgfr,sgh,sgr,sgrk,sh,shy,sl,slb,slbg,\ +slbgr,slbr,sldl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,\ +sly,sr,sra,srag,srak,srda,srdl,srk,srl,srlg,srlk,sy,x,xg,xgr,xgrk,xihf,xilf,xr,\ +xrk,xy") + (const_int 1)] (const_int 0))) + +(define_attr "z17_unit_fxb" "" + (cond [(eq_attr "mnemonic" "agsi,algsi,alsi,asi,b,bc,bcr,bi,br,c,cfi,cg,cgf,\ +cgfi,cgfr,cgfrl,cgh,cghi,cghrl,cghsi,cgit,cgr,cgrl,cgrt,ch,chi,chrl,chsi,chy,\ +cit,cl,clfhsi,clfi,clfit,clg,clgf,clgfi,clgfr,clgfrl,clghrl,clghsi,clgit,clgr,\ +clgrl,clgrt,clgt,clhhsi,clhrl,cli,cliy,clm,clmy,clr,clrl,clrt,clt,cly,cr,crl,\ +crt,cy,laa,laag,lan,lang,lao,laog,lat,lax,laxg,lcdfr,ldgr,ldr,lgat,lgdr,lndfr,\ +lpdfr,lxr,lzdr,lzer,lzxr,mvghi,mvhhi,mvhi,mvi,mviy,ni,niy,nop,nopr,ntstg,oi,\ +oiy,ppa,st,stc,stcy,std,stdy,ste,stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,\ +strv,strvg,strvh,sty,tend,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlgvb,vlgvf,vlgvg,\ +vlgvh,vlr,vlvgb,vlvgf,vlvgg,vlvgh,vlvgp,vscef,vsceg,vst,vstbrf,vstbrg,vstbrh,\ +vstbrq,vstebrf,vstebrg,vstef,vsteg,vsterf,vsterg,vsterh,vstl,vstrl,vstrlr,xi,\ +xiy") + (const_int 1)] (const_int 0))) + +(define_attr "z17_unit_fxd" "" + (cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr") + (const_int 1)] (const_int 0))) + +(define_attr "z17_unit_lsu" "" + (cond [(eq_attr "mnemonic" "clc,ear,l,lam,lcbb,ld,lde,ldy,lg,lgrl,llc,llgc,\ +llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,lmg,lmy,lpq,lrl,ly,mvcrl,sar,sfpc,\ +tabort,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,vlbrrepf,vlbrrepg,vlbrreph,vlerf,vlerg,\ +vlerh,vll,vllebrzf,vllebrzg,vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,\ +vlrepb,vlrepf,vlrepg,vlreph,vlrl,vlrlr") + (const_int 1)] (const_int 0))) + +(define_attr "z17_unit_vfu" "" + (cond [(eq_attr "mnemonic" "adb,adbr,adtr,aeb,aebr,axbr,axtr,brcl,cdb,cdbr,\ +cdtr,ceb,cebr,cpsdr,cxbr,cxtr,ddtr,dxtr,fidbr,fidbra,fidtr,fiebr,fiebra,fixbr,\ +fixbra,fixtr,j,jg,kdb,kdbr,kdtr,keb,kebr,kxbr,kxtr,lcdbr,lcebr,lcxbr,ldeb,\ +ldebr,ldetr,le,ledbr,ledtr,ler,ley,lndbr,lnebr,lnxbr,lpdbr,lpebr,lpxbr,ltdbr,\ +ltdtr,ltebr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,madbr,maeb,maebr,mdb,\ +mdbr,mdtr,meeb,meebr,msdb,msdbr,mseb,msebr,mxbr,mxtr,sdb,sdbr,sdtr,seb,sebr,\ +sxbr,sxtr,tcdb,tceb,tcxb,tdcdt,tdcet,tdcxt,vab,vaccb,vacccq,vaccf,vaccg,vacch,\ +vaccq,vacq,vaf,vag,vah,vaq,vavgb,vavgf,vavgg,vavgh,vavglb,vavglf,vavglg,vavglh,\ +vavglq,vavgq,vblendb,vblendf,vblendg,vblendh,vblendq,vbperm,vcdgb,vcdlgb,vcefb,\ +vcelfb,vceqb,vceqbs,vceqf,vceqfs,vceqg,vceqgs,vceqh,vceqhs,vceqq,vceqqs,vcfeb,\ +vcfn,vcgdb,vchb,vchbs,vchf,vchfs,vchg,vchgs,vchh,vchhs,vchlb,vchlbs,vchlf,\ +vchlfs,vchlg,vchlgs,vchlh,vchlhs,vchlq,vchlqs,vchq,vchqs,vcksm,vclfeb,vclfnh,\ +vclfnl,vclgdb,vclzb,vclzf,vclzg,vclzh,vclzq,vcnf,vcrnf,vctzb,vctzf,vctzg,vctzh,\ +vctzq,verimb,verimf,verimg,verimh,verllb,verllf,verllg,verllh,verllvb,verllvf,\ +verllvg,verllvh,veslb,veslf,veslg,veslh,veslvb,veslvf,veslvg,veslvh,vesrab,\ +vesraf,vesrag,vesrah,vesravb,vesravf,vesravg,vesravh,vesrlb,vesrlf,vesrlg,\ +vesrlh,vesrlvb,vesrlvf,vesrlvg,vesrlvh,veval,vfadb,vfasb,vfcedb,vfcedbs,vfcesb,\ +vfcesbs,vfchdb,vfchdbs,vfchedb,vfchedbs,vfchesb,vfchesbs,vfchsb,vfchsbs,vfeeb,\ +vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,vfenezb,vfenezf,\ +vfenezh,vfidb,vfisb,vfkedb,vfkesb,vfkhdb,vfkhedb,vfkhesb,vfkhsb,vflcdb,vflcsb,\ +vflndb,vflnsb,vflpdb,vflpsb,vfmadb,vfmasb,vfmaxdb,vfmaxsb,vfmdb,vfmindb,\ +vfminsb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,vfnmssb,vfsdb,vfssb,\ +vftcidb,vftcisb,vgbm,vgemb,vgemf,vgemg,vgemh,vgemq,vgfmab,vgfmaf,vgfmag,vgfmah,\ +vgfmb,vgfmf,vgfmg,vgfmh,vgm,vistrb,vistrbs,vistrf,vistrfs,vistrh,vistrhs,vlcb,\ +vlcf,vlcg,vlch,vldeb,vleb,vlebrf,vlebrg,vlebrh,vledb,vlef,vleg,vleh,vleib,\ +vleif,vleig,vleih,vlpb,vlpf,vlpg,vlph,vlpq,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,\ +vmahg,vmahh,vmahq,vmalb,vmaleb,vmalef,vmaleg,vmaleh,vmalf,vmalg,vmalhb,vmalhf,\ +vmalhg,vmalhh,vmalhq,vmalhw,vmalob,vmalof,vmalog,vmaloh,vmalq,vmaob,vmaof,\ +vmaog,vmaoh,vmeb,vmef,vmeg,vmeh,vmhb,vmhf,vmhg,vmhh,vmhq,vmlb,vmleb,vmlef,\ +vmleg,vmleh,vmlf,vmlg,vmlhb,vmlhf,vmlhg,vmlhh,vmlhq,vmlhw,vmlob,vmlof,vmlog,\ +vmloh,vmlq,vmnb,vmnf,vmng,vmnh,vmnlb,vmnlf,vmnlg,vmnlh,vmnlq,vmnq,vmob,vmof,\ +vmog,vmoh,vmrhb,vmrhf,vmrhg,vmrhh,vmrlb,vmrlf,vmrlg,vmrlh,vmslg,vmxb,vmxf,vmxg,\ +vmxh,vmxlb,vmxlf,vmxlg,vmxlh,vmxlq,vmxq,vn,vnc,vnn,vno,vnot,vnx,vo,voc,vone,\ +vpdi,vperm,vpkf,vpkg,vpkh,vpklsf,vpklsfs,vpklsg,vpklsgs,vpklsh,vpklshs,vpksf,\ +vpksfs,vpksg,vpksgs,vpksh,vpkshs,vpopct,vpopctb,vpopctf,vpopctg,vpopcth,vrepb,\ +vrepf,vrepg,vreph,vrepi,vrepib,vrepif,vrepig,vrepih,vsb,vsbcbiq,vsbiq,vscbib,\ +vscbif,vscbig,vscbih,vscbiq,vsegb,vsegf,vsegh,vsel,vsf,vsg,vsh,vsl,vslb,vsld,\ +vsldb,vsq,vsra,vsrab,vsrd,vsrl,vsrlb,vsumb,vsumgf,vsumgh,vsumh,vsumqf,vsumqg,\ +vtm,vuphb,vuphf,vuphg,vuphh,vuplb,vuplf,vuplg,vuplhb,vuplhf,vuplhg,vuplhh,\ +vuplhw,vupllb,vupllf,vupllg,vupllh,vx,vzero,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,\ +wcgdb,wclfeb,wclgdb,wfadb,wfasb,wfaxb,wfcdb,wfcedb,wfcesb,wfcexb,wfcexbs,\ +wfchdb,wfchedb,wfchesb,wfchexb,wfchexbs,wfchsb,wfchxb,wfchxbs,wfcsb,wfcxb,\ +wfidb,wfisb,wfixb,wfkdb,wfkedb,wfkesb,wfkexb,wfkhdb,wfkhedb,wfkhesb,wfkhexb,\ +wfkhsb,wfkhxb,wfksb,wfkxb,wflcdb,wflcsb,wflcxb,wflld,wflndb,wflnsb,wflnxb,\ +wflpdb,wflpsb,wflpxb,wflrx,wfmadb,wfmasb,wfmaxb,wfmaxxb,wfmdb,wfminxb,wfmsb,\ +wfmsdb,wfmssb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,wfsdb,wfssb,wfsxb,wftcixb,wldeb,\ +wledb") + (const_int 1)] (const_int 0))) + +(define_attr "z17_cracked" "" + (cond [(eq_attr "mnemonic" "bas,basr,bras,brasl,cdfbr,cdftr,cdgbr,cdgtr,\ +cdlfbr,cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,\ +cgdtr,cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfdtr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,\ +clgebr,clgxbr,clgxtr,cs,csg,csy,efpc,ex,exrl,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,\ +mvc,nc,oc,rnsbg,rosbg,rxsbg,stpq,vgef,vgeg,vscef,vsceg,vsteb,vstebrh,vsteh,xc") + (const_int 1)] (const_int 0))) + +(define_attr "z17_expanded" "" + (cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,cxlfbr,\ +cxlftr,cxlgbr,cxlgtr,d,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,stam,stm,\ +stmg,stmy,tbegin,tbeginc") + (const_int 1)] (const_int 0))) + +(define_attr "z17_groupalone" "" + (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,cxfbr,\ +cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cxtr,d,dl,dlg,dlgr,dlr,dr,dsg,\ +dsgf,dsgfr,dsgr,dxbr,dxtr,ex,exrl,fixbr,fixbra,fixtr,flogr,kxbr,kxtr,lcxbr,\ +lnxbr,lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,mg,\ +mgrk,ml,mlg,mlgr,mlr,mr,msdb,mseb,msebr,mvc,mvcrl,mxbr,mxtr,nc,oc,ppa,sfpc,slb,\ +slbg,slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tbegin,tbeginc,tcxb,tdcxt,tend,xc") + (const_int 1)] (const_int 0))) + +(define_attr "z17_endgroup" "" + (cond [(eq_attr "mnemonic" "bas,basr,bcr,br,bras,brasl,cdsg,clfebr,cs,csg,csy,\ +efpc,ex,exrl,ipm,lam,lpq,lxr,nopr,sldl,srda,srdl,stam,stm,stmg,stmy,tbegin,\ +tbeginc") + (const_int 1)] (const_int 0))) + +(define_attr "z17_groupoftwo" "" + (cond [(eq_attr "mnemonic" "cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,cdlftr,cdlgbr,\ +cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,cgebr,cgxbr,\ +cgxtr,chhsi,clfdbr,clfdtr,clfxbr,clfxtr,clgdbr,clgdtr,clgebr,clgxbr,clgxtr,\ +lcgfr,lngfr,lpgfr,lzxr,vacccq,vacq,vblendb,vblendf,vblendg,vblendh,vblendq,\ +veval,vfmadb,vfmasb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,vfnmssb,vgef,vgeg,\ +vgfmab,vgfmaf,vgfmag,vgfmah,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,vmahg,vmahh,\ +vmahq,vmalb,vmaleb,vmalef,vmaleg,vmaleh,vmalf,vmalg,vmalhb,vmalhf,vmalhg,\ +vmalhh,vmalhq,vmalhw,vmalob,vmalof,vmalog,vmaloh,vmalq,vmaob,vmaof,vmaog,vmaoh,\ +vmslg,vperm,vsbcbiq,vsbiq,vscef,vsceg,vsel,vsteb,vstebrh,vsteh,wfmadb,wfmasb,\ +wfmaxb,wfmsdb,wfmssb,wfmsxb,wfnmaxb,wfnmsxb") + (const_int 1)] (const_int 0))) + +(define_insn_reservation "z17_0" 0 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "a,afi,ag,agfi,aghi,aghik,agr,agrk,ahi,ahik,al,alfi,alg,\ +algf,algfi,algfr,alghsik,algr,algrk,alhsik,alr,alrk,aly,ar,ark,ay,b,bc,bcr,bi,\ +br,brcl,c,cfi,cg,cgfi,cghi,cghsi,cgit,cgr,cgrl,cgrt,chi,chsi,cit,cl,clfhsi,\ +clfi,clfit,clg,clgf,clgfi,clgfr,clgfrl,clghrl,clghsi,clgit,clgr,clgrl,clgrt,\ +clgt,clhhsi,clhrl,cli,cliy,clr,clrl,clrt,clt,cly,cr,crl,crt,cy,etnd,ic,icm,\ +icmh,icmy,icy,iihf,iilf,j,jg,la,larl,lat,lay,lb,lbr,lcdfr,lcgr,lcr,ldgr,ldr,\ +lgat,lgb,lgbr,lgf,lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,\ +llcr,llgcr,llgfr,llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,lndfr,\ +lngr,lnr,lpdfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\ +lzdr,lzer,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nngrk,nnrk,\ +nogrk,nop,nopr,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,oihf,oihh,\ +oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,sldl,\ +slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,\ +srak,srda,srdl,srk,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,\ +vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing") + +(define_insn_reservation "z17_1" 1 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "agf,agfr,agh,agsi,ah,ahy,algsi,alsi,asi,cgf,cgfr,cgfrl,\ +cgh,cghrl,ch,chrl,chy,clm,clmy,cpsdr,laa,laag,lan,lang,lao,laog,lax,laxg,le,\ +ler,ley,llxab,llxaf,llxag,llxah,llxaq,loc,locg,locghi,locgr,lochi,locr,lxab,\ +lxaf,lxag,lxah,lxaq,mvghi,mvhhi,mvhi,mvi,mviy,ni,niy,ntstg,oi,oiy,selgr,selr,\ +sgf,sgfr,sgh,sh,shy,st,stc,stcy,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,strv,\ +strvg,strvh,sty,vab,vaccb,vacccq,vaccf,vaccg,vacch,vaccq,vacq,vaf,vag,vah,vaq,\ +vavgb,vavgf,vavgg,vavgh,vavglb,vavglf,vavglg,vavglh,vavglq,vavgq,vblendb,\ +vblendf,vblendg,vblendh,vblendq,vbperm,vceqb,vceqbs,vceqf,vceqfs,vceqg,vceqgs,\ +vceqh,vceqhs,vceqq,vceqqs,vcfn,vchb,vchbs,vchf,vchfs,vchg,vchgs,vchh,vchhs,\ +vchlb,vchlbs,vchlf,vchlfs,vchlg,vchlgs,vchlh,vchlhs,vchlq,vchlqs,vchq,vchqs,\ +vclfnh,vclfnl,vclzb,vclzf,vclzg,vclzh,vclzq,vcnf,vcrnf,vctzb,vctzf,vctzg,vctzh,\ +vctzq,verimb,verimf,verimg,verimh,verllb,verllf,verllg,verllh,verllvb,verllvf,\ +verllvg,verllvh,veslb,veslf,veslg,veslh,veslvb,veslvf,veslvg,veslvh,vesrab,\ +vesraf,vesrag,vesrah,vesravb,vesravf,vesravg,vesravh,vesrlb,vesrlf,vesrlg,\ +vesrlh,vesrlvb,vesrlvf,vesrlvg,vesrlvh,veval,vfcedb,vfcedbs,vfcesb,vfcesbs,\ +vfchdb,vfchdbs,vfchedb,vfchedbs,vfchesb,vfchesbs,vfchsb,vfchsbs,vfkedb,vfkesb,\ +vfkhdb,vfkhedb,vfkhesb,vfkhsb,vflcdb,vflcsb,vflndb,vflnsb,vflpdb,vflpsb,\ +vfmaxdb,vfmaxsb,vfmindb,vfminsb,vgbm,vgemb,vgemf,vgemg,vgemh,vgemq,vgm,vlcb,\ +vlcf,vlcg,vlch,vleb,vlebrf,vlebrg,vlebrh,vlef,vleg,vleh,vleib,vleif,vleig,\ +vleih,vlpb,vlpf,vlpg,vlph,vlpq,vmnb,vmnf,vmng,vmnh,vmnlb,vmnlf,vmnlg,vmnlh,\ +vmnlq,vmnq,vmrhb,vmrhf,vmrhg,vmrhh,vmrlb,vmrlf,vmrlg,vmrlh,vmxb,vmxf,vmxg,vmxh,\ +vmxlb,vmxlf,vmxlg,vmxlh,vmxlq,vmxq,vn,vnc,vnn,vno,vnot,vnx,vo,voc,vone,vpdi,\ +vperm,vpkf,vpkg,vpkh,vpklsf,vpklsfs,vpklsg,vpklsgs,vpklsh,vpklshs,vpksf,vpksfs,\ +vpksg,vpksgs,vpksh,vpkshs,vpopct,vpopctb,vpopctf,vpopctg,vpopcth,vrepb,vrepf,\ +vrepg,vreph,vrepi,vrepib,vrepif,vrepig,vrepih,vsb,vsbcbiq,vsbiq,vscbib,vscbif,\ +vscbig,vscbih,vscbiq,vsegb,vsegf,vsegh,vsel,vsf,vsg,vsh,vsl,vslb,vsld,vsldb,\ +vsq,vsra,vsrab,vsrd,vsrl,vsrlb,vuphb,vuphf,vuphg,vuphh,vuplb,vuplf,vuplg,\ +vuplhb,vuplhf,vuplhg,vuplhh,vuplhw,vupllb,vupllf,vupllg,vupllh,vx,vzero,wfcedb,\ +wfcesb,wfcexb,wfcexbs,wfchdb,wfchedb,wfchesb,wfchexb,wfchexbs,wfchsb,wfchxb,\ +wfchxbs,wfkedb,wfkesb,wfkexb,wfkhdb,wfkhedb,wfkhesb,wfkhexb,wfkhsb,wfkhxb,\ +wflcdb,wflcsb,wflcxb,wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wfmaxxb,wfminxb,\ +xi,xiy")) "nothing") + +(define_insn_reservation "z17_2" 2 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,clzg,ctzg,ear,ipm,kdb,kdbr,keb,kebr,l,\ +lcbb,lcdbr,lcebr,ld,lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,\ +llh,llhrl,lm,lmg,lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,\ +tcdb,tceb,vfeeb,vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,\ +vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrbs,vistrf,vistrfs,vistrh,\ +vistrhs,vlbrrepf,vlbrrepg,vlbrreph,vlgvb,vlgvf,vlgvg,vlgvh,vllebrzf,vllebrzg,\ +vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,vlrepb,vlrepf,vlrepg,vlreph,vlrl,\ +vlvgp,wfcdb,wfcsb,wfcxb,wfkdb,wfksb,wfkxb,wftcixb")) "nothing") + +(define_insn_reservation "z17_3" 3 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "bdepg,bextg,cds,cdsy,mgh,mghi,mh,mhi,mhy,ms,msc,msfi,msg,\ +msgc,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,std,stdy,ste,stey,vcksm,vgfmab,\ +vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,\ +vlerf,vlerg,vlerh,vll,vlrlr,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,vmahg,vmahh,\ +vmahq,vmalb,vmaleb,vmalef,vmaleg,vmaleh,vmalf,vmalg,vmalhb,vmalhf,vmalhg,\ +vmalhh,vmalhq,vmalhw,vmalob,vmalof,vmalog,vmaloh,vmalq,vmaob,vmaof,vmaog,vmaoh,\ +vmeb,vmef,vmeg,vmeh,vmhb,vmhf,vmhg,vmhh,vmhq,vmlb,vmleb,vmlef,vmleg,vmleh,vmlf,\ +vmlg,vmlhb,vmlhf,vmlhg,vmlhh,vmlhq,vmlhw,vmlob,vmlof,vmlog,vmloh,vmlq,vmob,\ +vmof,vmog,vmoh,vsumb,vsumgf,vsumgh,vsumh,vsumqf,vsumqg,vtm")) "nothing") + +(define_insn_reservation "z17_4" 4 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "bas,basr,bras,brasl,chhsi,clc,ex,exrl,lam,lcgfr,lngfr,\ +lpgfr,lxr,lzxr,mvcrl,ppa,rnsbg,rosbg,rxsbg,tabort,tend,vst,vstbrf,vstbrg,\ +vstbrh,vstbrq,vstebrf,vstebrg,vstef,vsteg,vsterf,vsterg,vsterh,vstl,vstrl,\ +vstrlr")) "nothing") + +(define_insn_reservation "z17_5" 5 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,csy,fidbr,\ +fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,msdbr,sdb,sdbr,\ +seb,sebr,slb,slbg,slbgr,slbr,stm,stmg,stmy,vcdgb,vcdlgb,vcefb,vcelfb,vcfeb,\ +vcgdb,vclfeb,vclgdb,vldeb,vledb,vmslg,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,wcgdb,\ +wclfeb,wclgdb,wflld,wflrx,wldeb,wledb")) "nothing") + +(define_insn_reservation "z17_6" 6 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "sfpc")) "nothing") + +(define_insn_reservation "z17_7" 7 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "adtr,cdtr,fidtr,kdtr,ldetr,ltdtr,sdtr,tdcdt,tdcet,vfadb,\ +vfasb,vfidb,vfisb,vfsdb,vfssb,vgef,vgeg,wfadb,wfasb,wfaxb,wfidb,wfisb,wfixb,\ +wfsdb,wfssb,wfsxb")) "nothing") + +(define_insn_reservation "z17_8" 8 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cdgtr,cdlgtr,cdsg,cxgtr,cxlgtr,flogr,lpq,m,mfy,mg,mgrk,\ +ml,mlg,mlgr,mlr,mr,stpq,vsteb,vstebrh,vsteh")) "nothing") + +(define_insn_reservation "z17_9" 9 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,celgbr,madb,\ +maeb,maebr,msdb,mseb,msebr,stam")) "nothing") + +(define_insn_reservation "z17_10" 10 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,clgxtr,d,dl,dlg,dsg,\ +dsgf,efpc,lxdb,lxdbr,lxeb,lxebr,vscef,vsceg")) "nothing") + +(define_insn_reservation "z17_11" 11 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cfdbr,cfebr,cgdbr,cgebr,clfdbr,clfebr,clgdbr,clgebr")) "nothing") + +(define_insn_reservation "z17_12" 12 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cxbr,cxtr,kxbr,kxtr,tbegin,tbeginc,tcxb,tdcxt")) "nothing") + +(define_insn_reservation "z17_13" 13 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "axbr,axtr,cxfbr,cxgbr,cxlfbr,cxlgbr,fixbr,fixbra,fixtr,\ +lcxbr,lnxbr,lpxbr,ltxbr,ltxtr,lxdtr,sxbr,sxtr")) "nothing") + +(define_insn_reservation "z17_14" 14 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cfxbr,cgxbr,clfxbr,clgxbr,ledtr")) "nothing") + +(define_insn_reservation "z17_15" 15 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "nc,oc")) "nothing") + +(define_insn_reservation "z17_16" 16 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "cdftr,cdlftr,cxftr,cxlftr")) "nothing") + +(define_insn_reservation "z17_18" 18 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "xc")) "nothing") + +(define_insn_reservation "z17_20" 20 + (and (eq_attr "cpu" "z17") + (eq_attr "mnemonic" "ddb,ddbr,ddtr,deb,debr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,\ +mdtr,mvc,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vdf,vdg,vdlf,vdlg,vdlq,vdq,\ +vfddb,vfdsb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,\ +vfnmssb,vfsqdb,vfsqsb,vrf,vrg,vrlf,vrlg,vrlq,vrq,wfddb,wfdsb,wfdxb,wfmadb,\ +wfmasb,wfmaxb,wfmdb,wfmsb,wfmsdb,wfmssb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,wfsqdb,\ +wfsqxb")) "nothing") + diff --git a/gcc/config/s390/driver-native.cc b/gcc/config/s390/driver-native.cc index 49e8fa0..7a7ceea 100644 --- a/gcc/config/s390/driver-native.cc +++ b/gcc/config/s390/driver-native.cc @@ -127,6 +127,10 @@ s390_host_detect_local_cpu (int argc, const char **argv) case 0x3932: cpu = "arch14"; break; + case 0x9175: + case 0x9176: + cpu = "arch15"; + break; default: cpu = "arch15"; break; diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def index d9af9b1..cee2326 100644 --- a/gcc/config/s390/s390-builtins.def +++ b/gcc/config/s390/s390-builtins.def @@ -300,8 +300,8 @@ #define B_VXE2 (1 << 4) /* Builtins requiring the z15 vector extensions. */ #define B_DEP (1 << 5) /* Builtin has been deprecated and a warning should be issued. */ #define B_NNPA (1 << 6) /* Builtins requiring the NNPA Facility. */ -#define B_VXE3 (1 << 7) /* Builtins requiring the arch15 vector extensions. */ -#define B_ARCH15 (1 << 8) /* Builtins requiring arch15. */ +#define B_VXE3 (1 << 7) /* Builtins requiring the z17 vector extensions. */ +#define B_Z17 (1 << 8) /* Builtins requiring z17. */ /* B_DEF defines a standard (not overloaded) builtin B_DEF (<builtin name>, <RTL expander name>, <function attributes>, <builtin flags>, <operand flags, see above>, <fntype>) @@ -3318,8 +3318,8 @@ B_DEF (s390_vcnf, vcnf_v8hi, 0, /* arch 15 builtins */ -B_DEF (s390_bdepg, bdepg, 0, B_ARCH15, 0, BT_FN_ULONG_ULONG_ULONG) -B_DEF (s390_bextg, bextg, 0, B_ARCH15, 0, BT_FN_ULONG_ULONG_ULONG) +B_DEF (s390_bdepg, bdepg, 0, B_Z17, 0, BT_FN_ULONG_ULONG_ULONG) +B_DEF (s390_bextg, bextg, 0, B_Z17, 0, BT_FN_ULONG_ULONG_ULONG) OB_DEF (s390_vec_blend, s390_vec_blend_s8, s390_vec_blend_dbl, B_VXE3, BT_FN_OV4SI_OV4SI_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_blend_s8, s390_vblendb, 0, 0, BT_OV_V16QI_V16QI_V16QI_V16QI) diff --git a/gcc/config/s390/s390-c.cc b/gcc/config/s390/s390-c.cc index 311d74a..a01c44c 100644 --- a/gcc/config/s390/s390-c.cc +++ b/gcc/config/s390/s390-c.cc @@ -962,7 +962,7 @@ s390_resolve_overloaded_builtin (location_t loc, tree ob_fndecl, if (!TARGET_VXE3 && (ob_flags & B_VXE3)) { - error_at (loc, "%qF requires arch15 or higher", ob_fndecl); + error_at (loc, "%qF requires z17 or higher", ob_fndecl); return error_mark_node; } @@ -1056,7 +1056,7 @@ s390_resolve_overloaded_builtin (location_t loc, tree ob_fndecl, if (!TARGET_VXE3 && bflags_overloaded_builtin_var[last_match_index] & B_VXE3) { - error_at (loc, "%qs matching variant requires arch15 or higher", + error_at (loc, "%qs matching variant requires z17 or higher", IDENTIFIER_POINTER (DECL_NAME (ob_fndecl))); return error_mark_node; } diff --git a/gcc/config/s390/s390-opts.h b/gcc/config/s390/s390-opts.h index 437d3b9..9cacb2c 100644 --- a/gcc/config/s390/s390-opts.h +++ b/gcc/config/s390/s390-opts.h @@ -39,7 +39,7 @@ enum processor_type PROCESSOR_3906_Z14, PROCESSOR_8561_Z15, PROCESSOR_3931_Z16, - PROCESSOR_ARCH15, + PROCESSOR_9175_Z17, PROCESSOR_NATIVE, PROCESSOR_max }; diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 0ff3fd5..d82b16e 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -342,7 +342,7 @@ const struct s390_processor processor_table[] = { "z14", "arch12", PROCESSOR_3906_Z14, &zEC12_cost, 12 }, { "z15", "arch13", PROCESSOR_8561_Z15, &zEC12_cost, 13 }, { "z16", "arch14", PROCESSOR_3931_Z16, &zEC12_cost, 14 }, - { "arch15", "arch15", PROCESSOR_ARCH15, &zEC12_cost, 15 }, + { "z17", "arch15", PROCESSOR_9175_Z17, &zEC12_cost, 15 }, { "native", "", PROCESSOR_NATIVE, NULL, 0 } }; @@ -916,7 +916,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, if ((bflags & B_VXE3) && !TARGET_VXE3) { - error ("Builtin %qF requires arch15 or higher", fndecl); + error ("Builtin %qF requires z17 or higher", fndecl); return const0_rtx; } } @@ -9204,7 +9204,7 @@ s390_issue_rate (void) case PROCESSOR_3906_Z14: case PROCESSOR_8561_Z15: case PROCESSOR_3931_Z16: - case PROCESSOR_ARCH15: + case PROCESSOR_9175_Z17: default: return 1; } @@ -15632,7 +15632,6 @@ s390_get_sched_attrmask (rtx_insn *insn) mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO; break; case PROCESSOR_3931_Z16: - case PROCESSOR_ARCH15: if (get_attr_z16_cracked (insn)) mask |= S390_SCHED_ATTR_MASK_CRACKED; if (get_attr_z16_expanded (insn)) @@ -15644,6 +15643,18 @@ s390_get_sched_attrmask (rtx_insn *insn) if (get_attr_z16_groupoftwo (insn)) mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO; break; + case PROCESSOR_9175_Z17: + if (get_attr_z17_cracked (insn)) + mask |= S390_SCHED_ATTR_MASK_CRACKED; + if (get_attr_z17_expanded (insn)) + mask |= S390_SCHED_ATTR_MASK_EXPANDED; + if (get_attr_z17_endgroup (insn)) + mask |= S390_SCHED_ATTR_MASK_ENDGROUP; + if (get_attr_z17_groupalone (insn)) + mask |= S390_SCHED_ATTR_MASK_GROUPALONE; + if (get_attr_z17_groupoftwo (insn)) + mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO; + break; default: gcc_unreachable (); } @@ -15691,7 +15702,6 @@ s390_get_unit_mask (rtx_insn *insn, int *units) mask |= 1 << 3; break; case PROCESSOR_3931_Z16: - case PROCESSOR_ARCH15: *units = 4; if (get_attr_z16_unit_lsu (insn)) mask |= 1 << 0; @@ -15702,6 +15712,17 @@ s390_get_unit_mask (rtx_insn *insn, int *units) if (get_attr_z16_unit_vfu (insn)) mask |= 1 << 3; break; + case PROCESSOR_9175_Z17: + *units = 4; + if (get_attr_z17_unit_lsu (insn)) + mask |= 1 << 0; + if (get_attr_z17_unit_fxa (insn)) + mask |= 1 << 1; + if (get_attr_z17_unit_fxb (insn)) + mask |= 1 << 2; + if (get_attr_z17_unit_vfu (insn)) + mask |= 1 << 3; + break; default: gcc_unreachable (); } @@ -15715,7 +15736,8 @@ s390_is_fpd (rtx_insn *insn) return false; return get_attr_z13_unit_fpd (insn) || get_attr_z14_unit_fpd (insn) - || get_attr_z15_unit_fpd (insn) || get_attr_z16_unit_fpd (insn); + || get_attr_z15_unit_fpd (insn) || get_attr_z16_unit_fpd (insn) + || get_attr_z17_unit_fpd (insn); } static bool @@ -15725,7 +15747,8 @@ s390_is_fxd (rtx_insn *insn) return false; return get_attr_z13_unit_fxd (insn) || get_attr_z14_unit_fxd (insn) - || get_attr_z15_unit_fxd (insn) || get_attr_z16_unit_fxd (insn); + || get_attr_z15_unit_fxd (insn) || get_attr_z16_unit_fxd (insn) + || get_attr_z17_unit_fxd (insn); } /* Returns TRUE if INSN is a long-running instruction. */ diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index 6f7195d..8b04bc9 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -45,12 +45,12 @@ enum processor_flags PF_NNPA = 32768, PF_Z16 = 65536, PF_VXE3 = 131072, - PF_ARCH15 = 262144 + PF_Z17 = 262144 }; /* This is necessary to avoid a warning about comparing different enum types. */ -#define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_3931_Z16 ? PROCESSOR_3931_Z16 : s390_tune )) +#define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_9175_Z17 ? PROCESSOR_9175_Z17 : s390_tune )) /* These flags indicate that the generated code should run on a cpu providing the respective hardware facility regardless of the @@ -124,10 +124,10 @@ enum processor_flags (s390_arch_flags & PF_VXE3) #define TARGET_CPU_VXE3_P(opts) \ (opts->x_s390_arch_flags & PF_VXE3) -#define TARGET_CPU_ARCH15 \ - (s390_arch_flags & PF_ARCH15) -#define TARGET_CPU_ARCH15_P(opts) \ - (opts->x_s390_arch_flags & PF_ARCH15) +#define TARGET_CPU_Z17 \ + (s390_arch_flags & PF_Z17) +#define TARGET_CPU_Z17_P(opts) \ + (opts->x_s390_arch_flags & PF_Z17) #define TARGET_HARD_FLOAT_P(opts) (!TARGET_SOFT_FLOAT_P(opts)) @@ -198,9 +198,9 @@ enum processor_flags (TARGET_VX && TARGET_CPU_VXE3) #define TARGET_VXE3_P(opts) \ (TARGET_VX_P (opts) && TARGET_CPU_VXE3_P (opts)) -#define TARGET_ARCH15 (TARGET_ZARCH && TARGET_CPU_ARCH15) -#define TARGET_ARCH15_P(opts) \ - (TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_ARCH15_P (opts)) +#define TARGET_Z17 (TARGET_ZARCH && TARGET_CPU_Z17) +#define TARGET_Z17_P(opts) \ + (TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z17_P (opts)) #if defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13) #define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z13 diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 9d49580..05b9da6 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -599,11 +599,11 @@ ;; Processor type. This attribute must exactly match the processor_type ;; enumeration in s390.h. -(define_attr "cpu" "z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15,z16" +(define_attr "cpu" "z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15,z16,z17" (const (symbol_ref "s390_tune_attr"))) (define_attr "cpu_facility" - "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,z15,vxe2,z16,nnpa,vxe3,arch15" + "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,z15,vxe2,z16,nnpa,vxe3,z17" (const_string "standard")) (define_attr "enabled" "" @@ -681,8 +681,8 @@ (match_test "TARGET_VXE3")) (const_int 1) - (and (eq_attr "cpu_facility" "arch15") - (match_test "TARGET_ARCH15")) + (and (eq_attr "cpu_facility" "z17") + (match_test "TARGET_Z17")) (const_int 1) ] (const_int 0))) @@ -725,6 +725,9 @@ ;; Pipeline description for z16 (include "3931.md") +;; Pipeline description for z17 +(include "9175.md") + ;; Predicates (include "predicates.md") @@ -2056,7 +2059,7 @@ [(set (match_operand:DI 0 "register_operand" "=d") (ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "a")) (const_int LXAMODEITER)))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "lxa<lxamode>\t%0,0(%1,0)" [(set_attr "op_type" "RXY")]) @@ -2066,7 +2069,7 @@ (ashift:DI (sign_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a") (match_operand:SI 2 "const_int_operand"))) (const_int LXAMODEITER)))] - "TARGET_ARCH15 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" + "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" "lxa<lxamode>\t%0,%2(%1,0)" [(set_attr "op_type" "RXY")]) @@ -2076,7 +2079,7 @@ (plus:DI (ashift:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "a")) (const_int LXAMODEITER)) (match_operand:DI 2 "register_operand" "a")))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "lxa<lxamode>\t%0,0(%1,%2)" [(set_attr "op_type" "RXY")]) @@ -2087,7 +2090,7 @@ (match_operand:SI 2 "const_int_operand"))) (const_int LXAMODEITER)) (match_operand:DI 3 "register_operand" "a")))] - "TARGET_ARCH15 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" + "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" "lxa<lxamode>\t%0,%2(%1,%3)" [(set_attr "op_type" "RXY")]) @@ -2096,7 +2099,7 @@ (plus:DI (sign_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a") (match_operand:SI 2 "const_int_operand"))) (match_operand:DI 3 "register_operand" "a")))] - "TARGET_ARCH15 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" + "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" "lxab\t%0,%2(%1,%3)" [(set_attr "op_type" "RXY")]) @@ -2113,7 +2116,7 @@ 0) (const_int LXAMODEITER)) (const_int <LLXAMASK>)))] - "TARGET_ARCH15 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" + "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" "llxa<lxamode>\t%0,%2(%1,0)" [(set_attr "op_type" "RXY")]) @@ -2124,7 +2127,7 @@ (const_int LXAMODEITER)) (const_int <LLXAMASK>)) (match_operand:DI 2 "register_operand" "a")))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "llxa<lxamode>\t%0,0(%1,%2)" [(set_attr "op_type" "RXY")]) @@ -2137,7 +2140,7 @@ (const_int LXAMODEITER)) (const_int <LLXAMASK>)) (match_operand:DI 3 "register_operand" "a")))] - "TARGET_ARCH15 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" + "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" "llxa<lxamode>\t%0,%2(%1,%3)" [(set_attr "op_type" "RXY")]) @@ -2146,7 +2149,7 @@ (plus:DI (zero_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "a") (match_operand:SI 2 "const_int_operand"))) (match_operand:DI 3 "register_operand" "a")))] - "TARGET_ARCH15 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" + "TARGET_Z17 && TARGET_64BIT && INTVAL (operands[2]) >= -0x80000 && INTVAL (operands[2]) <= 0x7FFFF" "llxab\t%0,%2(%1,%3)" [(set_attr "op_type" "RXY")]) @@ -3594,7 +3597,7 @@ (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "const_int_operand" "")) (use (match_operand 3 "immediate_operand" "")) - (clobber (scratch))] + (clobber (match_scratch 4))] "reload_completed" [(parallel [(set (match_dup 0) (match_dup 1)) @@ -3606,7 +3609,7 @@ (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "register_operand" "")) (use (match_operand 3 "memory_operand" "")) - (clobber (scratch))] + (clobber (match_scratch 4))] "reload_completed" [(parallel [(unspec [(match_dup 2) (match_dup 3) @@ -3620,14 +3623,14 @@ (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) - (clobber (scratch))] + (clobber (match_scratch 3))] "TARGET_Z10 && reload_completed" [(parallel [(unspec [(match_dup 2) (const_int 0) - (label_ref (match_dup 3))] UNSPEC_EXECUTE) + (label_ref (match_dup 4))] UNSPEC_EXECUTE) (set (match_dup 0) (match_dup 1)) (use (const_int 1))])] - "operands[3] = gen_label_rtx ();") + "operands[4] = gen_label_rtx ();") (define_split [(set (match_operand:BLK 0 "memory_operand" "") @@ -3849,7 +3852,7 @@ (const_int 0)) (use (match_operand 1 "const_int_operand" "")) (use (match_operand 2 "immediate_operand" "")) - (clobber (scratch)) + (clobber (match_scratch 3)) (clobber (reg:CC CC_REGNUM))] "reload_completed" [(parallel @@ -3863,7 +3866,7 @@ (const_int 0)) (use (match_operand 1 "register_operand" "")) (use (match_operand 2 "memory_operand" "")) - (clobber (scratch)) + (clobber (match_scratch 3)) (clobber (reg:CC CC_REGNUM))] "reload_completed" [(parallel @@ -3879,7 +3882,7 @@ (const_int 0)) (use (match_operand 1 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) - (clobber (scratch)) + (clobber (match_scratch 2)) (clobber (reg:CC CC_REGNUM))] "TARGET_Z10 && reload_completed" [(parallel @@ -4044,7 +4047,7 @@ (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "const_int_operand" "")) (use (match_operand 3 "immediate_operand" "")) - (clobber (scratch))] + (clobber (match_scratch 4))] "reload_completed" [(parallel [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1))) @@ -4057,7 +4060,7 @@ (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "register_operand" "")) (use (match_operand 3 "memory_operand" "")) - (clobber (scratch))] + (clobber (match_scratch 4))] "reload_completed" [(parallel [(unspec [(match_dup 2) (match_dup 3) @@ -4072,7 +4075,7 @@ (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) - (clobber (scratch))] + (clobber (match_scratch 3))] "TARGET_Z10 && reload_completed" [(parallel [(unspec [(match_dup 2) (const_int 0) @@ -4940,7 +4943,7 @@ (unspec:DI [(match_operand:DI 1 "register_operand" "d") (match_operand:DI 2 "register_operand" "d")] UNSPEC_BDEPG))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "bdepg\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -4953,7 +4956,7 @@ (unspec:DI [(match_operand:DI 1 "register_operand" "d") (match_operand:DI 2 "register_operand" "d")] UNSPEC_BEXTG))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "bextg\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -9580,7 +9583,7 @@ (clz:DI (match_operand:DI 1 "register_operand" "d")))] "TARGET_EXTIMM && TARGET_ZARCH" { - if (!(TARGET_ARCH15 && TARGET_64BIT)) + if (!(TARGET_Z17 && TARGET_64BIT)) { rtx_insn *insn; rtx clz_equal; @@ -9601,7 +9604,7 @@ (define_insn "*clzg" [(set (match_operand:DI 0 "register_operand" "=d") (clz:DI (match_operand:DI 1 "register_operand" "d")))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "clzg\t%0,%1" [(set_attr "op_type" "RRE")]) @@ -9630,7 +9633,7 @@ (define_insn "ctzdi2" [(set (match_operand:DI 0 "register_operand" "=d") (ctz:DI (match_operand:DI 1 "register_operand" "d")))] - "TARGET_ARCH15 && TARGET_64BIT" + "TARGET_Z17 && TARGET_64BIT" "ctzg\t%0,%1" [(set_attr "op_type" "RRE")]) diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt index f064597..6753a93 100644 --- a/gcc/config/s390/s390.opt +++ b/gcc/config/s390/s390.opt @@ -122,7 +122,10 @@ EnumValue Enum(processor_type) String(z16) Value(PROCESSOR_3931_Z16) EnumValue -Enum(processor_type) String(arch15) Value(PROCESSOR_ARCH15) +Enum(processor_type) String(arch15) Value(PROCESSOR_9175_Z17) + +EnumValue +Enum(processor_type) String(z17) Value(PROCESSOR_9175_Z17) EnumValue Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly diff --git a/gcc/config/sh/sh-modes.def b/gcc/config/sh/sh-modes.def index 80650b4..e31ae69 100644 --- a/gcc/config/sh/sh-modes.def +++ b/gcc/config/sh/sh-modes.def @@ -17,6 +17,12 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ +/* SH has the same reversed quiet bit as MIPS. */ +RESET_FLOAT_FORMAT (SF, mips_single_format); +RESET_FLOAT_FORMAT (DF, mips_double_format); +/* TFmode: IEEE quad floating point (software). */ +FLOAT_MODE (TF, 16, mips_quad_format); + /* Vector modes. */ VECTOR_MODE (INT, QI, 2); /* V2QI */ VECTOR_MODES (INT, 4); /* V4QI V2HI */ diff --git a/gcc/configure b/gcc/configure index ab6bec1..1696595 100755 --- a/gcc/configure +++ b/gcc/configure @@ -3948,7 +3948,7 @@ if test x"${DEFAULT_LINKER+set}" = x"set"; then as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes - elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then + elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then ld64_flag=yes fi @@ -12694,6 +12694,42 @@ $as_echo "#define HOST_HAS_O_NONBLOCK 1" >>confdefs.h fi +# Check if personality and ADDR_NO_RANDOMIZE are declared +# in sys/personality.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for personality ADDR_NO_RANDOMIZE" >&5 +$as_echo_n "checking for personality ADDR_NO_RANDOMIZE... " >&6; } +if ${ac_cv_personality_addr_no_randomize+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/personality.h> +int +main () +{ + +personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_personality_addr_no_randomize=yes +else + ac_cv_personality_addr_no_randomize=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_personality_addr_no_randomize" >&5 +$as_echo "$ac_cv_personality_addr_no_randomize" >&6; } +if test $ac_cv_personality_addr_no_randomize = yes; then + +$as_echo "#define HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE 1" >>confdefs.h + +fi + # C++ Modules would like some networking features to provide the mapping # server. You can still use modules without them though. @@ -21484,7 +21520,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21487 "configure" +#line 21523 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21590,7 +21626,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21593 "configure" +#line 21629 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -32694,8 +32730,9 @@ $as_echo "$gcc_cv_ld64_major" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5 $as_echo_n "checking linker version... " >&6; } if test x"${gcc_cv_ld64_version}" = x; then - gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \ - | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'` + gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \ + | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \ + | awk '{print $1}'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5 $as_echo "$gcc_cv_ld64_version" >&6; } diff --git a/gcc/configure.ac b/gcc/configure.ac index fca0579..9f67e62 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -358,7 +358,7 @@ if test x"${DEFAULT_LINKER+set}" = x"set"; then AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER]) elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes - elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then + elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then ld64_flag=yes fi AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER", @@ -1781,6 +1781,21 @@ if test $ac_cv_have_decl_O_NONBLOCK = yes; then [Define if O_NONBLOCK supported by fcntl.]) fi +# Check if personality and ADDR_NO_RANDOMIZE are declared +# in sys/personality.h +AC_CACHE_CHECK(for personality ADDR_NO_RANDOMIZE, + ac_cv_personality_addr_no_randomize, [ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include <sys/personality.h>]], [[ +personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);]])], +[ac_cv_personality_addr_no_randomize=yes], +[ac_cv_personality_addr_no_randomize=no])]) +if test $ac_cv_personality_addr_no_randomize = yes; then + AC_DEFINE(HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE, 1, + [Define if personality and ADDR_NO_RANDOMIZE are declared in +sys/personality.h.]) +fi + # C++ Modules would like some networking features to provide the mapping # server. You can still use modules without them though. @@ -6403,8 +6418,9 @@ if test x"$ld64_flag" = x"yes"; then # If the version was not specified, try to find it. AC_MSG_CHECKING(linker version) if test x"${gcc_cv_ld64_version}" = x; then - gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \ - | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'` + gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \ + | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \ + | awk '{print $1}'` fi AC_MSG_RESULT($gcc_cv_ld64_version) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 31bf123..d9f0298 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,204 @@ +2025-04-22 Nathaniel Shead <nathanieloshead@gmail.com> + + * name-lookup.cc (lookup_imported_hidden_friend): Remove + unnecessary lazy_load_pendings. + +2025-04-22 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/119863 + * name-lookup.cc (get_mergeable_namespace_binding): Remove + no-longer-used function. + (lookup_imported_hidden_friend): Also look for hidden imported + decls in an attached decl's module. + +2025-04-21 Jason Merrill <jason@redhat.com> + + * constexpr.cc (cxx_eval_outermost_constant_expr): Move + verify_constant later. + +2025-04-21 Jason Merrill <jason@redhat.com> + + PR c++/118775 + * constexpr.cc (cxx_eval_call_expression): Add assert. + (fold_to_constant): Handle processing_template_decl. + * init.cc (build_new_1): Use fold_to_constant. + +2025-04-21 Jason Merrill <jason@redhat.com> + + PR c++/99456 + * constexpr.cc (cxx_eval_constant_expression): Check strict + instead of manifestly_const_eval. + (maybe_constant_init_1): Be strict for static constexpr vars. + +2025-04-19 Jason Merrill <jason@redhat.com> + + * coroutines.cc (coro_build_expr_stmt) + (coro_build_cvt_void_expr_stmt): Remove. + (build_actor_fn): Use finish_expr_stmt. + * semantics.cc (finish_expr_stmt): Avoid wrapping statement in + EXPR_STMT. + (finish_stmt_expr_expr): Add comment. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * constexpr.cc (is_valid_constexpr_fn): Improve diagnostic. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * constexpr.cc (cxx_eval_outermost_constant_expr): Give both + expression and allocation location in allocated storage diagnostics. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * name-lookup.cc (name_lookup::preserve_state): Fix reserve call. + * rtti.cc (get_tinfo_desc): Use vec_safe_grow_cleared. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * semantics.cc (finish_type_pack_element): Add more info + to diagnostics. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * decl.cc (cp_make_fname_decl): Prevent silent failure. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * lex.cc (unqualified_name_lookup_error): Handle 'requires' better. + +2025-04-17 Jason Merrill <jason@redhat.com> + + PR c++/113360 + * cp-tree.h (struct language_function): Add erroneous bit. + * constexpr.cc (explain_invalid_constexpr_fn): Return if set. + (cxx_eval_call_expression): Quiet if set. + * parser.cc (cp_parser_function_definition_after_declarator) + * pt.cc (instantiate_body): Set it. + +2025-04-16 Jason Merrill <jason@redhat.com> + + PR c++/114772 + PR c++/101180 + * pt.cc (apply_late_template_attributes): Also override + target_option_current_node. + +2025-04-16 Jason Merrill <jason@redhat.com> + + PR c++/116954 + * contracts.cc (remove_contract_attributes): Preserve flags + on the attribute list. + +2025-04-15 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/119755 + * lambda.cc (prune_lambda_captures): Remove pruned capture from + function's BLOCK_VARS and BIND_EXPR_VARS. + +2025-04-15 Jason Merrill <jason@redhat.com> + + PR c++/111075 + * constexpr.cc (cxx_eval_call_expression): Allow trivial + call from a thunk. + +2025-04-15 Patrick Palka <ppalka@redhat.com> + + PR c++/119807 + PR c++/112288 + * pt.cc (tsubst_friend_function): Skip remapping an + existing specialization if it doesn't match the shape of + the new friend definition. + +2025-04-15 Jason Merrill <jason@redhat.com> + + PR c++/113835 + * constexpr.cc (cxx_eval_outermost_constant_expr): Bail out early + for std::vector(N). + +2025-04-14 Patrick Palka <ppalka@redhat.com> + + PR c++/99214 + * constraint.cc (satisfy_declaration_constraints): Pass the + original ARGS to push_tinst_level. + +2025-04-13 Patrick Palka <ppalka@redhat.com> + + PR c++/115639 + * constexpr.cc (struct constexpr_call): Add NSDMIs to each + field. Replace 'result' data member with 3-element 'results' + array and a 'result' accessor function. Remove + 'manifestly_const_eval' data member. + (constexpr_call_hasher::equal): Adjust after constexpr_call + layout change. + (cxx_eval_call_expression): Likewise. Define some local + variables closer to their first use. Use unknown_type_node + instead of NULL_TREE as the "in progress" result. After + successully evaluating a call with mce_unknown, also cache the + result in the corresponding mce_true and mce_false slots. + +2025-04-13 Nathaniel Shead <nathanieloshead@gmail.com> + + * module.cc (trees_in::is_matching_decl): Don't check for + mismatches when importing a DECL_MAYBE_DELETED function over one + that's already finished. + +2025-04-13 Nathaniel Shead <nathanieloshead@gmail.com> + + * module.cc (trees_in::is_matching_decl): Add custom errors for + different kinds of mismatches. + +2025-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/116416 + * constexpr.cc (maybe_constant_init_1): Generalize type of + of manifestly_const_eval parameter from bool to mce_value. + (maybe_constant_init): Define 3-parameter version taking a + manifestly_const_eval instead of bool parameter. + (cxx_constant_init): Adjust. + * cp-gimplify.cc (cp_fold_r) <case TARGET_EXPR>: Pass mce_false + to maybe_constant_init during prvalue folding if ff_mce_false is + set. + * cp-tree.h (maybe_constant_init): Declare new overload. + +2025-04-11 Jason Merrill <jason@redhat.com> + + PR c++/114970 + * cp-gimplify.cc (cp_build_init_expr_for_ctor): Suppress warnings on + return_this COMPOUND_EXPR. + +2025-04-10 Jason Merrill <jason@redhat.com> + + PR c++/119345 + * pt.cc (add_extra_args): Also register a specialization + of the captured variable. + +2025-04-10 Patrick Palka <ppalka@redhat.com> + + PR c++/119687 + * pt.cc (alias_ctad_tweaks): Use lkp_range / lkp_iterator + instead of ovl_iterator. + +2025-04-10 Jakub Jelinek <jakub@redhat.com> + + PR translation/119684 + * error.cc (cp_print_error_function): Use G_ instead of _ for + pp_printf arguments. + (function_category): Use G_ instead of _. + (print_instantiation_full_context): Use G_ instead of _ in pp_verbatim + arguments. + (print_location): Likewise. + (print_instantiation_partial_context): Likewise. + (maybe_print_constexpr_context): Likewise. + (print_constrained_decl_info): Use G_() around pp_verbatim argument. + (print_concept_check_info): Likewise. + (print_constraint_context_head): Likewise. + (print_requires_expression_info): Likewise. Merge separate pp_verbatim + "in requirements " and "with " into one with conditional messages. + +2025-04-10 Jason Merrill <jason@redhat.com> + + PR c++/119175 + * mangle.cc (decl_mangling_context): Look through lambda type. + 2025-04-09 Patrick Palka <ppalka@redhat.com> PR c++/119574 diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 497f64f..8a11e62 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -307,7 +307,14 @@ is_valid_constexpr_fn (tree fun, bool complain) { ret = false; if (complain) - error ("%q#T has virtual base classes", DECL_CONTEXT (fun)); + { + if (DECL_CONSTRUCTOR_P (fun)) + error ("%<constexpr%> constructor in %q#T that has " + "virtual base classes", DECL_CONTEXT (fun)); + else + error ("%<constexpr%> destructor in %q#T that has " + "virtual base classes", DECL_CONTEXT (fun)); + } } return ret; @@ -1048,6 +1055,12 @@ explain_invalid_constexpr_fn (tree fun) { static hash_set<tree> *diagnosed; tree body; + + /* Don't try to explain a function we already complained about. */ + if (function *f = DECL_STRUCT_FUNCTION (fun)) + if (f->language->erroneous) + return; + /* In C++23, a function marked 'constexpr' may not actually be a constant expression. We haven't diagnosed the problem yet: -Winvalid-constexpr wasn't enabled. The function was called, so diagnose why it cannot be @@ -1119,20 +1132,22 @@ explain_invalid_constexpr_fn (tree fun) struct GTY((for_user)) constexpr_call { /* Description of the constexpr function definition. */ - constexpr_fundef *fundef; + constexpr_fundef *fundef = nullptr; /* Parameter bindings environment. A TREE_VEC of arguments. */ - tree bindings; - /* Result of the call. - NULL means the call is being evaluated. + tree bindings = NULL_TREE; + /* Result of the call, indexed by the value of + constexpr_ctx::manifestly_const_eval. + unknown_type_node means the call is being evaluated. error_mark_node means that the evaluation was erroneous or otherwise uncacheable (e.g. because it depends on the caller). Otherwise, the actual value of the call. */ - tree result; + tree results[3] = { NULL_TREE, NULL_TREE, NULL_TREE }; /* The hash of this call; we remember it here to avoid having to recalculate it when expanding the hash table. */ - hashval_t hash; - /* The value of constexpr_ctx::manifestly_const_eval. */ - enum mce_value manifestly_const_eval; + hashval_t hash = 0; + + /* The result slot corresponding to the given mce_value. */ + tree& result (mce_value mce) { return results[1 + int(mce)]; } }; struct constexpr_call_hasher : ggc_ptr_hash<constexpr_call> @@ -1427,8 +1442,6 @@ constexpr_call_hasher::equal (constexpr_call *lhs, constexpr_call *rhs) return true; if (lhs->hash != rhs->hash) return false; - if (lhs->manifestly_const_eval != rhs->manifestly_const_eval) - return false; if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef)) return false; return cp_tree_equal (lhs->bindings, rhs->bindings); @@ -2855,9 +2868,6 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, { location_t loc = cp_expr_loc_or_input_loc (t); tree fun = get_function_named_in_call (t); - constexpr_call new_call - = { NULL, NULL, NULL, 0, ctx->manifestly_const_eval }; - int depth_ok; if (fun == NULL_TREE) return cxx_eval_internal_function (ctx, t, lval, @@ -2946,12 +2956,11 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, gcc_assert (arg0); if (new_op_p) { - /* FIXME: We should not get here; the VERIFY_CONSTANT above - should have already caught it. But currently a conversion - from pointer type to arithmetic type is only considered - non-constant for CONVERT_EXPRs, not NOP_EXPRs. */ if (!tree_fits_uhwi_p (arg0)) { + /* We should not get here; the VERIFY_CONSTANT above + should have already caught it. */ + gcc_checking_assert (false); if (!ctx->quiet) error_at (loc, "cannot allocate array: size not constant"); *non_constant_p = true; @@ -3082,6 +3091,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, } constexpr_ctx new_ctx = *ctx; + ctx = &new_ctx; if (DECL_CONSTRUCTOR_P (fun) && !ctx->object && TREE_CODE (t) == AGGR_INIT_EXPR) { @@ -3091,27 +3101,26 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL); CONSTRUCTOR_NO_CLEARING (ctor) = true; ctx->global->put_value (new_ctx.object, ctor); - ctx = &new_ctx; } /* An immediate invocation is manifestly constant evaluated including the arguments of the call, so use mce_true even for the argument evaluation. */ if (DECL_IMMEDIATE_FUNCTION_P (fun)) - { - new_ctx.manifestly_const_eval = mce_true; - new_call.manifestly_const_eval = mce_true; - ctx = &new_ctx; - } + new_ctx.manifestly_const_eval = mce_true; /* We used to shortcut trivial constructor/op= here, but nowadays we can only get a trivial function here with -fno-elide-constructors. */ gcc_checking_assert (!trivial_fn_p (fun) || !flag_elide_constructors + /* Or it's a call from maybe_thunk_body (111075). */ + || (TREE_CODE (t) == CALL_EXPR ? CALL_FROM_THUNK_P (t) + : AGGR_INIT_FROM_THUNK_P (t)) /* We don't elide constructors when processing a noexcept-expression. */ || cp_noexcept_operand); bool non_constant_args = false; + constexpr_call new_call; new_call.bindings = cxx_bind_parameters_in_call (ctx, t, fun, non_constant_p, overflow_p, &non_constant_args); @@ -3185,7 +3194,12 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, } } - depth_ok = push_cx_call_context (t); + /* Don't complain about problems evaluating an ill-formed function. */ + if (function *f = DECL_STRUCT_FUNCTION (fun)) + if (f->language->erroneous) + new_ctx.quiet = true; + + int depth_ok = push_cx_call_context (t); /* Remember the object we are constructing or destructing. */ tree new_obj = NULL_TREE; @@ -3227,8 +3241,6 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, new_call.hash = constexpr_fundef_hasher::hash (new_call.fundef); new_call.hash = iterative_hash_template_arg (new_call.bindings, new_call.hash); - new_call.hash - = iterative_hash_object (ctx->manifestly_const_eval, new_call.hash); /* If we have seen this call before, we are done. */ maybe_initialize_constexpr_call_table (); @@ -3246,22 +3258,23 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, the slot can move during evaluation of the body. */ *slot = entry = ggc_alloc<constexpr_call> (); *entry = new_call; + entry->result (ctx->manifestly_const_eval) = unknown_type_node; fb.preserve (); } } - /* Calls that are in progress have their result set to NULL, so that we - can detect circular dependencies. Now that we only cache up to - constexpr_cache_depth this won't catch circular dependencies that + /* Calls that are in progress have their result set to unknown_type_node, + so that we can detect circular dependencies. Now that we only cache + up to constexpr_cache_depth this won't catch circular dependencies that start deeper, but they'll hit the recursion or ops limit. */ - else if (entry->result == NULL) + else if (entry->result (ctx->manifestly_const_eval) == unknown_type_node) { if (!ctx->quiet) error ("call has circular dependency"); *non_constant_p = true; - entry->result = result = error_mark_node; + entry->result (ctx->manifestly_const_eval) = result = error_mark_node; } else - result = entry->result; + result = entry->result (ctx->manifestly_const_eval); } if (!depth_ok) @@ -3482,7 +3495,22 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, else if (!result) result = void_node; if (entry) - entry->result = cacheable ? result : error_mark_node; + { + entry->result (ctx->manifestly_const_eval) + = cacheable ? result : error_mark_node; + + if (result != error_mark_node + && ctx->manifestly_const_eval == mce_unknown) + { + /* Evaluation succeeded and was independent of whether we're in a + manifestly constant-evaluated context, so we can also reuse + this result when evaluating this call with a fixed context. */ + if (!entry->result (mce_true)) + entry->result (mce_true) = entry->result (mce_unknown); + if (!entry->result (mce_false)) + entry->result (mce_false) = entry->result (mce_unknown); + } + } } /* The result of a constexpr function must be completely initialized. @@ -8450,7 +8478,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, if (TREE_CODE (t) == CONVERT_EXPR && ARITHMETIC_TYPE_P (type) && INDIRECT_TYPE_P (TREE_TYPE (op)) - && ctx->manifestly_const_eval == mce_true) + && ctx->strict) { if (!ctx->quiet) error_at (loc, @@ -9116,6 +9144,15 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, tree fndecl = cp_get_callee_fndecl_nofold (x); if (fndecl && DECL_IMMEDIATE_FUNCTION_P (fndecl)) is_consteval = true; + /* Don't try to evaluate a std::vector constructor taking an integer, it + will fail in the 'if (heap_var)' block below after doing all the work + (c++/113835). This will need adjustment if P3554 is accepted. Note + that evaluation of e.g. the vector default constructor can succeed, so + we don't shortcut all vector constructors. */ + if (fndecl && DECL_CONSTRUCTOR_P (fndecl) && allow_non_constant + && is_std_class (type, "vector") && call_expr_nargs (x) > 1 + && TREE_CODE (TREE_TYPE (get_nth_callarg (x, 1))) == INTEGER_TYPE) + return t; } if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type)) { @@ -9190,11 +9227,6 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, if (r == void_node && !constexpr_dtor && ctx.ctor) r = ctx.ctor; - if (!constexpr_dtor) - verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p); - else - DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (object) = true; - unsigned int i; tree cleanup; /* Evaluate the cleanups. */ @@ -9213,15 +9245,6 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, non_constant_p = true; } - if (TREE_CODE (r) == CONSTRUCTOR && CONSTRUCTOR_NO_CLEARING (r)) - { - if (!allow_non_constant) - error ("%qE is not a constant expression because it refers to " - "an incompletely initialized variable", t); - TREE_CONSTANT (r) = false; - non_constant_p = true; - } - if (!non_constant_p && cxx_dialect >= cxx20 && !global_ctx.heap_vars.is_empty ()) { @@ -9231,9 +9254,11 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, if (heap_var) { if (!allow_non_constant && !non_constant_p) - error_at (DECL_SOURCE_LOCATION (heap_var), - "%qE is not a constant expression because it refers to " - "a result of %<operator new%>", t); + { + error ("%qE is not a constant expression because it refers to " + "a result of %<operator new%>", t); + inform (DECL_SOURCE_LOCATION (heap_var), "allocated here"); + } r = t; non_constant_p = true; } @@ -9242,9 +9267,11 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, if (DECL_NAME (heap_var) != heap_deleted_identifier) { if (!allow_non_constant && !non_constant_p) - error_at (DECL_SOURCE_LOCATION (heap_var), - "%qE is not a constant expression because allocated " - "storage has not been deallocated", t); + { + error ("%qE is not a constant expression because allocated " + "storage has not been deallocated", t); + inform (DECL_SOURCE_LOCATION (heap_var), "allocated here"); + } r = t; non_constant_p = true; } @@ -9274,6 +9301,21 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, non_constant_p = true; } + if (!non_constant_p && !constexpr_dtor) + verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p); + + /* After verify_constant because reduced_constant_expression_p can unset + CONSTRUCTOR_NO_CLEARING. */ + if (!non_constant_p + && TREE_CODE (r) == CONSTRUCTOR && CONSTRUCTOR_NO_CLEARING (r)) + { + if (!allow_non_constant) + error ("%qE is not a constant expression because it refers to " + "an incompletely initialized variable", t); + TREE_CONSTANT (r) = false; + non_constant_p = true; + } + if (non_constant_p) /* If we saw something bad, go back to our argument. The wrapping below is only for the cases of TREE_CONSTANT argument or overflow. */ @@ -9290,13 +9332,17 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, if (non_constant_p && !allow_non_constant) return error_mark_node; - else if (constexpr_dtor) - return r; else if (non_constant_p && TREE_CONSTANT (r)) r = mark_non_constant (r); else if (non_constant_p) return t; + if (constexpr_dtor) + { + DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (object) = true; + return r; + } + /* Check we are not trying to return the wrong type. */ if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (r))) { @@ -9448,6 +9494,9 @@ fold_simple (tree t) tree fold_to_constant (tree t) { + if (processing_template_decl) + return t; + tree r = fold (t); if (CONSTANT_CLASS_P (r) && !TREE_OVERFLOW (r)) return r; @@ -9679,7 +9728,7 @@ fold_non_dependent_init (tree t, static tree maybe_constant_init_1 (tree t, tree decl, bool allow_non_constant, - bool manifestly_const_eval) + mce_value manifestly_const_eval) { if (!t) return t; @@ -9705,17 +9754,27 @@ maybe_constant_init_1 (tree t, tree decl, bool allow_non_constant, { /* [basic.start.static] allows constant-initialization of variables with static or thread storage duration even if it isn't required, but we - shouldn't bend the rules the same way for automatic variables. */ + shouldn't bend the rules the same way for automatic variables. + + But still enforce the requirements of constexpr/constinit. + [dcl.constinit] "If a variable declared with the constinit specifier + has dynamic initialization, the program is ill-formed, even if the + implementation would perform that initialization as a static + initialization." */ bool is_static = (decl && DECL_P (decl) && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))); + bool strict = (!is_static + || (decl && DECL_P (decl) + && (DECL_DECLARED_CONSTEXPR_P (decl) + || DECL_DECLARED_CONSTINIT_P (decl)))); if (is_static) - manifestly_const_eval = true; + manifestly_const_eval = mce_true; - if (cp_unevaluated_operand && !manifestly_const_eval) + if (cp_unevaluated_operand && manifestly_const_eval != mce_true) return fold_to_constant (t); - t = cxx_eval_outermost_constant_expr (t, allow_non_constant, !is_static, - mce_value (manifestly_const_eval), + t = cxx_eval_outermost_constant_expr (t, allow_non_constant, strict, + manifestly_const_eval, false, decl); } if (TREE_CODE (t) == TARGET_EXPR) @@ -9732,6 +9791,12 @@ maybe_constant_init_1 (tree t, tree decl, bool allow_non_constant, tree maybe_constant_init (tree t, tree decl, bool manifestly_const_eval) { + return maybe_constant_init_1 (t, decl, true, mce_value (manifestly_const_eval)); +} + +tree +maybe_constant_init (tree t, tree decl, mce_value manifestly_const_eval) +{ return maybe_constant_init_1 (t, decl, true, manifestly_const_eval); } @@ -9740,7 +9805,7 @@ maybe_constant_init (tree t, tree decl, bool manifestly_const_eval) tree cxx_constant_init (tree t, tree decl) { - return maybe_constant_init_1 (t, decl, false, true); + return maybe_constant_init_1 (t, decl, false, mce_true); } #if 0 diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 2f1678c..44fb086 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -2704,6 +2704,8 @@ satisfy_declaration_constraints (tree t, sat_info info) static tree satisfy_declaration_constraints (tree t, tree args, sat_info info) { + tree orig_args = args; + /* Update the declaration for diagnostics. */ info.in_decl = t; @@ -2732,7 +2734,7 @@ satisfy_declaration_constraints (tree t, tree args, sat_info info) tree result = boolean_true_node; if (tree norm = get_normalized_constraints_from_decl (t, info.noisy ())) { - if (!push_tinst_level (t, args)) + if (!push_tinst_level (t, orig_args)) return result; tree pattern = DECL_TEMPLATE_RESULT (t); push_to_top_level (); diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc index f2b126c..d0cfd2e 100644 --- a/gcc/cp/contracts.cc +++ b/gcc/cp/contracts.cc @@ -860,10 +860,17 @@ cp_contract_assertion_p (const_tree attr) void remove_contract_attributes (tree fndecl) { + if (!flag_contracts) + return; + tree list = NULL_TREE; for (tree p = DECL_ATTRIBUTES (fndecl); p; p = TREE_CHAIN (p)) if (!cxx_contract_attribute_p (p)) - list = tree_cons (TREE_PURPOSE (p), TREE_VALUE (p), list); + { + tree nl = copy_node (p); + TREE_CHAIN (nl) = list; + list = nl; + } DECL_ATTRIBUTES (fndecl) = nreverse (list); } diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index b92d09f..743da06 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -1852,21 +1852,6 @@ coro_build_frame_access_expr (tree coro_ref, tree member_id, bool preserve_ref, return expr; } -/* Helpers to build EXPR_STMT and void-cast EXPR_STMT, common ops. */ - -static tree -coro_build_expr_stmt (tree expr, location_t loc) -{ - return maybe_cleanup_point_expr_void (build_stmt (loc, EXPR_STMT, expr)); -} - -static tree -coro_build_cvt_void_expr_stmt (tree expr, location_t loc) -{ - tree t = build1 (CONVERT_EXPR, void_type_node, expr); - return coro_build_expr_stmt (t, loc); -} - /* Helpers to build an artificial var, with location LOC, NAME and TYPE, in CTX, and with initializer INIT. */ @@ -2582,8 +2567,7 @@ build_actor_fn (location_t loc, tree coro_frame_type, tree actor, tree fnbody, tree hfa = build_new_method_call (ash, hfa_m, &args, NULL_TREE, LOOKUP_NORMAL, NULL, tf_warning_or_error); r = cp_build_init_expr (ash, hfa); - r = coro_build_cvt_void_expr_stmt (r, loc); - add_stmt (r); + finish_expr_stmt (r); release_tree_vector (args); /* Now we know the real promise, and enough about the frame layout to @@ -2678,8 +2662,7 @@ build_actor_fn (location_t loc, tree coro_frame_type, tree actor, tree fnbody, we must tail call them. However, some targets do not support indirect tail calls to arbitrary callees. See PR94359. */ CALL_EXPR_TAILCALL (resume) = true; - resume = coro_build_cvt_void_expr_stmt (resume, loc); - add_stmt (resume); + finish_expr_stmt (resume); r = build_stmt (loc, RETURN_EXPR, NULL); gcc_checking_assert (maybe_cleanup_point_expr_void (r) == r); diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index 550cea29..d2423fd 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -1199,8 +1199,11 @@ cp_build_init_expr_for_ctor (tree call, tree init) tree s = build_fold_indirect_ref_loc (loc, a); init = cp_build_init_expr (s, init); if (return_this) - init = build2_loc (loc, COMPOUND_EXPR, TREE_TYPE (call), init, - fold_convert_loc (loc, TREE_TYPE (call), a)); + { + init = build2_loc (loc, COMPOUND_EXPR, TREE_TYPE (call), init, + fold_convert_loc (loc, TREE_TYPE (call), a)); + suppress_warning (init); + } return init; } @@ -1480,7 +1483,9 @@ cp_fold_r (tree *stmt_p, int *walk_subtrees, void *data_) *walk_subtrees = 0; if (!flag_no_inline) { - tree folded = maybe_constant_init (init, TARGET_EXPR_SLOT (stmt)); + tree folded = maybe_constant_init (init, TARGET_EXPR_SLOT (stmt), + (data->flags & ff_mce_false + ? mce_false : mce_unknown)); if (folded != init && TREE_CONSTANT (folded)) init = folded; } diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 927f51b..7798efb 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -2206,6 +2206,8 @@ struct GTY(()) language_function { BOOL_BITFIELD invalid_constexpr : 1; BOOL_BITFIELD throwing_cleanup : 1; + /* True if we gave any errors in this function. */ + BOOL_BITFIELD erroneous : 1; hash_table<named_label_hash> *x_named_labels; @@ -8837,6 +8839,7 @@ extern void cxx_constant_dtor (tree, tree); extern tree cxx_constant_init (tree, tree = NULL_TREE); extern tree maybe_constant_value (tree, tree = NULL_TREE, mce_value = mce_unknown); extern tree maybe_constant_init (tree, tree = NULL_TREE, bool = false); +extern tree maybe_constant_init (tree, tree, mce_value); extern tree fold_non_dependent_expr (tree, tsubst_flags_t = tf_warning_or_error, bool = false, tree = NULL_TREE); diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 4e97093..84398e5 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -5339,6 +5339,8 @@ cp_make_fname_decl (location_t loc, tree id, int type_dep) decl = pushdecl_outermost_localscope (decl); if (decl != error_mark_node) add_decl_expr (decl); + else + gcc_assert (seen_error ()); } else { diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc index ec7527e..499eb1b 100644 --- a/gcc/cp/error.cc +++ b/gcc/cp/error.cc @@ -3788,18 +3788,18 @@ cp_print_error_function (diagnostic_text_output_format &text_output, { if (text_output.show_column_p () && s.column != 0) pp_printf (pp, - _(" inlined from %qD at %r%s:%d:%d%R"), + G_(" inlined from %qD at %r%s:%d:%d%R"), fndecl, "locus", s.file, s.line, s.column); else pp_printf (pp, - _(" inlined from %qD at %r%s:%d%R"), + G_(" inlined from %qD at %r%s:%d%R"), fndecl, "locus", s.file, s.line); } else - pp_printf (pp, _(" inlined from %qD"), + pp_printf (pp, G_(" inlined from %qD"), fndecl); } } @@ -3825,22 +3825,22 @@ function_category (tree fn) && DECL_FUNCTION_MEMBER_P (fn)) { if (DECL_STATIC_FUNCTION_P (fn)) - return _("In static member function %qD"); + return G_("In static member function %qD"); else if (DECL_COPY_CONSTRUCTOR_P (fn)) - return _("In copy constructor %qD"); + return G_("In copy constructor %qD"); else if (DECL_CONSTRUCTOR_P (fn)) - return _("In constructor %qD"); + return G_("In constructor %qD"); else if (DECL_DESTRUCTOR_P (fn)) - return _("In destructor %qD"); + return G_("In destructor %qD"); else if (LAMBDA_FUNCTION_P (fn)) - return _("In lambda function"); + return G_("In lambda function"); else if (DECL_XOBJ_MEMBER_FUNCTION_P (fn)) - return _("In explicit object member function %qD"); + return G_("In explicit object member function %qD"); else - return _("In member function %qD"); + return G_("In member function %qD"); } else - return _("In function %qD"); + return G_("In function %qD"); } /* Disable warnings about missing quoting in GCC diagnostics for @@ -3867,8 +3867,8 @@ print_instantiation_full_context (diagnostic_text_output_format &text_output) char *indent = text_output.build_indent_prefix (true); pp_verbatim (text_output.get_printer (), p->list_p () - ? _("%s%s%sIn substitution of %qS:\n") - : _("%s%s%sIn instantiation of %q#D:\n"), + ? G_("%s%s%sIn substitution of %qS:\n") + : G_("%s%s%sIn instantiation of %q#D:\n"), indent, show_file ? LOCATION_FILE (location) : "", show_file ? ": " : "", @@ -3888,10 +3888,10 @@ print_location (diagnostic_text_output_format &text_output, expanded_location xloc = expand_location (loc); pretty_printer *const pp = text_output.get_printer (); if (text_output.show_column_p ()) - pp_verbatim (pp, _("%r%s:%d:%d:%R "), + pp_verbatim (pp, G_("%r%s:%d:%d:%R "), "locus", xloc.file, xloc.line, xloc.column); else - pp_verbatim (pp, _("%r%s:%d:%R "), + pp_verbatim (pp, G_("%r%s:%d:%R "), "locus", xloc.file, xloc.line); } @@ -3984,22 +3984,22 @@ print_instantiation_partial_context_line (diagnostic_text_output_format &text_ou if (t->list_p ()) pp_verbatim (pp, recursive_p - ? _("recursively required by substitution of %qS\n") - : _("required by substitution of %qS\n"), + ? G_("recursively required by substitution of %qS\n") + : G_("required by substitution of %qS\n"), t->get_node ()); else pp_verbatim (pp, recursive_p - ? _("recursively required from %q#D\n") - : _("required from %q#D\n"), + ? G_("recursively required from %q#D\n") + : G_("required from %q#D\n"), t->get_node ()); } else { pp_verbatim (pp, recursive_p - ? _("recursively required from here\n") - : _("required from here\n")); + ? G_("recursively required from here\n") + : G_("required from here\n")); } } @@ -4049,8 +4049,8 @@ print_instantiation_partial_context (diagnostic_text_output_format &text_output, { auto_context_line sentinel (text_output, loc); pp_verbatim (text_output.get_printer (), - _("[ skipping %d instantiation contexts," - " use -ftemplate-backtrace-limit=0 to disable ]\n"), + G_("[ skipping %d instantiation contexts," + " use -ftemplate-backtrace-limit=0 to disable ]\n"), skip); do { loc = t->locus; @@ -4101,7 +4101,7 @@ maybe_print_constexpr_context (diagnostic_text_output_format &text_output) pretty_printer *const pp = text_output.get_printer (); auto_context_line sentinel (text_output, EXPR_LOCATION (t)); pp_verbatim (pp, - _("in %<constexpr%> expansion of %qs"), + G_("in %<constexpr%> expansion of %qs"), s); pp_newline (pp); } @@ -4114,7 +4114,7 @@ print_constrained_decl_info (diagnostic_text_output_format &text_output, { auto_context_line sentinel (text_output, DECL_SOURCE_LOCATION (decl)); pretty_printer *const pp = text_output.get_printer (); - pp_verbatim (pp, "required by the constraints of %q#D\n", decl); + pp_verbatim (pp, G_("required by the constraints of %q#D\n"), decl); } static void @@ -4129,7 +4129,7 @@ print_concept_check_info (diagnostic_text_output_format &text_output, cxx_pretty_printer *const pp = (cxx_pretty_printer *)text_output.get_printer (); - pp_verbatim (pp, "required for the satisfaction of %qE", expr); + pp_verbatim (pp, G_("required for the satisfaction of %qE"), expr); if (map && map != error_mark_node) { tree subst_map = tsubst_parameter_mapping (map, args, tf_none, NULL_TREE); @@ -4151,7 +4151,7 @@ print_constraint_context_head (diagnostic_text_output_format &text_output, { auto_context_line sentinel (text_output, input_location); pretty_printer *const pp = text_output.get_printer (); - pp_verbatim (pp, "required for constraint satisfaction\n"); + pp_verbatim (pp, G_("required for constraint satisfaction\n")); return NULL_TREE; } if (DECL_P (src)) @@ -4180,11 +4180,10 @@ print_requires_expression_info (diagnostic_text_output_format &text_output, auto_context_line sentinel (text_output, cp_expr_loc_or_input_loc (expr)); cxx_pretty_printer *const pp = static_cast <cxx_pretty_printer *> (text_output.get_printer ()); - pp_verbatim (pp, "in requirements "); tree parms = TREE_OPERAND (expr, 0); - if (parms) - pp_verbatim (pp, "with "); + pp_verbatim (pp, parms ? G_("in requirements with ") + : G_("in requirements ")); while (parms) { pp_verbatim (pp, "%q#D", parms); diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index e589e45..062a493 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -3405,7 +3405,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, errval = throw_bad_array_new_length (); if (outer_nelts_check != NULL_TREE) size = build3 (COND_EXPR, sizetype, outer_nelts_check, size, errval); - size = cp_fully_fold (size); + size = fold_to_constant (size); /* Create the argument list. */ vec_safe_insert (*placement, 0, size); /* Do name-lookup to find the appropriate operator. */ @@ -3462,7 +3462,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, outer_nelts_check = NULL_TREE; } - size = cp_fully_fold (size); + size = fold_to_constant (size); /* If size is zero e.g. due to type having zero size, try to preserve outer_nelts for constant expression evaluation purposes. */ diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index f0a54b6..b2e0ecd 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -1858,6 +1858,13 @@ prune_lambda_captures (tree body) cp_walk_tree_without_duplicates (&body, mark_const_cap_r, &const_vars); + tree bind_expr = expr_single (DECL_SAVED_TREE (lambda_function (lam))); + if (bind_expr && TREE_CODE (bind_expr) == MUST_NOT_THROW_EXPR) + bind_expr = expr_single (TREE_OPERAND (bind_expr, 0)); + /* FIXME: We don't currently handle noexcept lambda captures correctly, + so bind_expr may not be set; see PR c++/119764. */ + gcc_assert (!bind_expr || TREE_CODE (bind_expr) == BIND_EXPR); + tree *fieldp = &TYPE_FIELDS (LAMBDA_EXPR_CLOSURE (lam)); for (tree *capp = &LAMBDA_EXPR_CAPTURE_LIST (lam); *capp; ) { @@ -1879,6 +1886,23 @@ prune_lambda_captures (tree body) fieldp = &DECL_CHAIN (*fieldp); *fieldp = DECL_CHAIN (*fieldp); + /* And out of the bindings for the function. */ + tree *blockp = &BLOCK_VARS (current_binding_level->blocks); + while (*blockp != DECL_EXPR_DECL (**use)) + blockp = &DECL_CHAIN (*blockp); + *blockp = DECL_CHAIN (*blockp); + + /* And maybe out of the vars declared in the containing + BIND_EXPR, if it's listed there. */ + if (bind_expr) + { + tree *bindp = &BIND_EXPR_VARS (bind_expr); + while (*bindp && *bindp != DECL_EXPR_DECL (**use)) + bindp = &DECL_CHAIN (*bindp); + if (*bindp) + *bindp = DECL_CHAIN (*bindp); + } + /* And remove the capture proxy declaration. */ **use = void_node; continue; diff --git a/gcc/cp/lex.cc b/gcc/cp/lex.cc index c12b084..12af81e 100644 --- a/gcc/cp/lex.cc +++ b/gcc/cp/lex.cc @@ -749,6 +749,9 @@ unqualified_name_lookup_error (tree name, location_t loc) if (IDENTIFIER_ANY_OP_P (name)) error_at (loc, "%qD not defined", name); + else if (!flag_concepts && name == ridpointers[(int)RID_REQUIRES]) + error_at (loc, "%<requires%> only available with %<-std=c++20%> or " + "%<-fconcepts%>"); else { if (!objc_diagnose_private_ivar (name)) diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 37fab5b..5ff5c46 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -12090,6 +12090,8 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) gcc_checking_assert (TREE_CODE (e_inner) == TREE_CODE (d_inner)); } + // FIXME: do more precise errors at point of mismatch + const char *mismatch_msg = nullptr; if (TREE_CODE (d_inner) == FUNCTION_DECL) { tree e_ret = fndecl_declared_return_type (existing); @@ -12099,13 +12101,20 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) && LAMBDA_TYPE_P (DECL_CONTEXT (d_inner))) /* This has a recursive type that will compare different. */; else if (!same_type_p (d_ret, e_ret)) - goto mismatch; + { + mismatch_msg = G_("conflicting type for imported declaration %#qD"); + goto mismatch; + } tree e_type = TREE_TYPE (e_inner); tree d_type = TREE_TYPE (d_inner); if (DECL_EXTERN_C_P (d_inner) != DECL_EXTERN_C_P (e_inner)) - goto mismatch; + { + mismatch_msg = G_("conflicting language linkage for imported " + "declaration %#qD"); + goto mismatch; + } for (tree e_args = TYPE_ARG_TYPES (e_type), d_args = TYPE_ARG_TYPES (d_type); @@ -12113,10 +12122,18 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) e_args = TREE_CHAIN (e_args), d_args = TREE_CHAIN (d_args)) { if (!(e_args && d_args)) - goto mismatch; + { + mismatch_msg = G_("conflicting argument list for imported " + "declaration %#qD"); + goto mismatch; + } if (!same_type_p (TREE_VALUE (d_args), TREE_VALUE (e_args))) - goto mismatch; + { + mismatch_msg = G_("conflicting argument types for imported " + "declaration %#qD"); + goto mismatch; + } } /* If EXISTING has an undeduced or uninstantiated exception @@ -12147,9 +12164,14 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) } } } - else if (!DEFERRED_NOEXCEPT_SPEC_P (d_spec) + else if (!DECL_MAYBE_DELETED (d_inner) + && !DEFERRED_NOEXCEPT_SPEC_P (d_spec) && !comp_except_specs (d_spec, e_spec, ce_type)) - goto mismatch; + { + mismatch_msg = G_("conflicting %<noexcept%> specifier for " + "imported declaration %#qD"); + goto mismatch; + } /* Similarly if EXISTING has an undeduced return type, but DECL's is already deduced. */ @@ -12163,16 +12185,26 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) } else if (type_uses_auto (d_ret) && !same_type_p (TREE_TYPE (d_type), TREE_TYPE (e_type))) - goto mismatch; + { + mismatch_msg = G_("conflicting deduced return type for " + "imported declaration %#qD"); + goto mismatch; + } /* Similarly if EXISTING has undeduced constexpr, but DECL's is already deduced. */ if (DECL_MAYBE_DELETED (e_inner) && !DECL_MAYBE_DELETED (d_inner) && DECL_DECLARED_CONSTEXPR_P (d_inner)) DECL_DECLARED_CONSTEXPR_P (e_inner) = true; + else if (!DECL_MAYBE_DELETED (e_inner) && DECL_MAYBE_DELETED (d_inner)) + /* Nothing to do. */; else if (DECL_DECLARED_CONSTEXPR_P (e_inner) != DECL_DECLARED_CONSTEXPR_P (d_inner)) - goto mismatch; + { + mismatch_msg = G_("conflicting %<constexpr%> for imported " + "declaration %#qD"); + goto mismatch; + } /* Don't synthesize a defaulted function if we're importing one we've already determined. */ @@ -12184,13 +12216,17 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) if (!DECL_ORIGINAL_TYPE (e_inner) || !same_type_p (DECL_ORIGINAL_TYPE (d_inner), DECL_ORIGINAL_TYPE (e_inner))) - goto mismatch; + { + mismatch_msg = G_("conflicting imported declaration %q#D"); + goto mismatch; + } } /* Using cp_tree_equal because we can meet TYPE_ARGUMENT_PACKs here. I suspect the entities that directly do that are things that shouldn't go to duplicate_decls (FIELD_DECLs etc). */ else if (!cp_tree_equal (TREE_TYPE (decl), TREE_TYPE (existing))) { + mismatch_msg = G_("conflicting type for imported declaration %#qD"); mismatch: if (DECL_IS_UNDECLARED_BUILTIN (existing)) /* Just like duplicate_decls, presum the user knows what @@ -12203,11 +12239,9 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) equality isn't feasible in general for local entities. */; else { - // FIXME:QOI Might be template specialization from a module, - // not necessarily global module + gcc_checking_assert (mismatch_msg); auto_diagnostic_group d; - error_at (DECL_SOURCE_LOCATION (decl), - "conflicting global module declaration %#qD", decl); + error_at (DECL_SOURCE_LOCATION (decl), mismatch_msg, decl); inform (DECL_SOURCE_LOCATION (existing), "existing declaration %#qD", existing); return false; diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 1cd982e..aa2dc0e 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -583,7 +583,7 @@ name_lookup::preserve_state () if (previous) { unsigned length = vec_safe_length (previous->scopes); - vec_safe_reserve (previous->scopes, length * 2); + vec_safe_reserve (previous->scopes, length); for (unsigned ix = length; ix--;) { tree decl = (*previous->scopes)[ix]; @@ -4178,22 +4178,6 @@ mergeable_namespace_slots (tree ns, tree name, bool is_attached, tree *vec) return vslot; } -/* Retrieve the bindings for an existing mergeable entity in namespace - NS slot NAME. Returns NULL if no such bindings exists. */ - -static tree -get_mergeable_namespace_binding (tree ns, tree name, bool is_attached) -{ - tree *mslot = find_namespace_slot (ns, name, false); - if (!mslot || !*mslot || TREE_CODE (*mslot) != BINDING_VECTOR) - return NULL_TREE; - - tree *vslot = get_fixed_binding_slot - (mslot, name, is_attached ? BINDING_SLOT_PARTITION : BINDING_SLOT_GLOBAL, - false); - return vslot ? *vslot : NULL_TREE; -} - /* DECL is a new mergeable namespace-scope decl. Add it to the mergeable entities on GSLOT. */ @@ -4572,11 +4556,9 @@ lookup_imported_hidden_friend (tree friend_tmpl) || !DECL_MODULE_ENTITY_P (inner)) return NULL_TREE; - lazy_load_pendings (friend_tmpl); - - tree bind = get_mergeable_namespace_binding - (current_namespace, DECL_NAME (inner), DECL_MODULE_ATTACH_P (inner)); - if (!bind) + tree name = DECL_NAME (inner); + tree *slot = find_namespace_slot (current_namespace, name, false); + if (!slot || !*slot || TREE_CODE (*slot) != BINDING_VECTOR) return NULL_TREE; /* We're only interested in declarations attached to the same module @@ -4584,9 +4566,28 @@ lookup_imported_hidden_friend (tree friend_tmpl) int m = get_originating_module (friend_tmpl, /*global=-1*/true); gcc_assert (m != 0); + /* First check whether there's a reachable declaration attached to the module + we're looking for. */ + if (m > 0) + if (binding_slot *mslot = search_imported_binding_slot (slot, m)) + { + if (mslot->is_lazy ()) + lazy_load_binding (m, current_namespace, name, mslot); + for (ovl_iterator iter (*mslot); iter; ++iter) + if (DECL_CLASS_TEMPLATE_P (*iter)) + return *iter; + } + + /* Otherwise, look in the mergeable slots for this name, in case an importer + has already instantiated this declaration. */ + tree *vslot = get_fixed_binding_slot + (slot, name, m > 0 ? BINDING_SLOT_PARTITION : BINDING_SLOT_GLOBAL, false); + if (!vslot || !*vslot) + return NULL_TREE; + /* There should be at most one class template from the module we're looking for, return it. */ - for (ovl_iterator iter (bind); iter; ++iter) + for (ovl_iterator iter (*vslot); iter; ++iter) if (DECL_CLASS_TEMPLATE_P (*iter) && get_originating_module (*iter, true) == m) return *iter; diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 812a7c5..3628cfe 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -33634,6 +33634,8 @@ cp_parser_function_definition_after_declarator (cp_parser* parser, = parser->num_template_parameter_lists; parser->num_template_parameter_lists = 0; + int errs = errorcount + sorrycount; + /* If the next token is `try', `__transaction_atomic', or `__transaction_relaxed`, then we are looking at either function-try-block or function-transaction-block. Note that all of these include the @@ -33653,6 +33655,9 @@ cp_parser_function_definition_after_declarator (cp_parser* parser, fn = finish_function (inline_p); check_module_decl_linkage (fn); + if ((errorcount + sorrycount) > errs) + DECL_STRUCT_FUNCTION (fn)->language->erroneous = true; + if (modules_p () && !inline_p && TYPE_P (DECL_CONTEXT (fn)) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 63c2ec0..a71705f 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -11772,6 +11772,10 @@ tsubst_friend_function (tree decl, tree args) elt.args = DECL_TI_ARGS (spec); elt.spec = NULL_TREE; + if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (DECL_TI_ARGS (spec)) + && !is_specialization_of_friend (spec, new_template)) + continue; + decl_specializations->remove_elt (&elt); tree& spec_args = DECL_TI_ARGS (spec); @@ -12425,6 +12429,8 @@ apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags, auto o4 = make_temp_override (scope_chain->omp_declare_target_attribute, NULL); auto o5 = make_temp_override (scope_chain->omp_begin_assumes, NULL); + auto o6 = make_temp_override (target_option_current_node, + target_option_default_node); cplus_decl_attributes (decl_p, late_attrs, attr_flags); @@ -13748,6 +13754,8 @@ add_extra_args (tree extra, tree args, tsubst_flags_t complain, tree in_decl) inst = local; /* else inst is already a full instantiation of the pack. */ register_local_specialization (inst, gen); + if (is_normal_capture_proxy (gen)) + register_local_specialization (inst, DECL_CAPTURED_VARIABLE (gen)); } gcc_assert (!TREE_PURPOSE (extra)); extra = TREE_VALUE (extra); @@ -27750,6 +27758,11 @@ instantiate_body (tree pattern, tree args, tree d, bool nested_p) if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)) cp_check_omp_declare_reduction (d); + + if (int errs = errorcount + sorrycount) + if (errs > current_tinst_level->errors) + if (function *f = DECL_STRUCT_FUNCTION (d)) + f->language->erroneous = true; } /* We're not deferring instantiation any more. */ @@ -30936,9 +30949,8 @@ alias_ctad_tweaks (tree tmpl, tree uguides) tree aguides = NULL_TREE; tree atparms = INNERMOST_TEMPLATE_PARMS (fullatparms); unsigned natparms = TREE_VEC_LENGTH (atparms); - for (ovl_iterator iter (uguides); iter; ++iter) + for (tree f : lkp_range (uguides)) { - tree f = *iter; tree in_decl = f; location_t loc = DECL_SOURCE_LOCATION (f); tree ret = TREE_TYPE (TREE_TYPE (f)); diff --git a/gcc/cp/rtti.cc b/gcc/cp/rtti.cc index 3539962..18bc479 100644 --- a/gcc/cp/rtti.cc +++ b/gcc/cp/rtti.cc @@ -1318,18 +1318,9 @@ get_pseudo_ti_index (tree type) static tinfo_s * get_tinfo_desc (unsigned ix) { - unsigned len = tinfo_descs->length (); - - if (len <= ix) - { - /* too short, extend. */ - len = ix + 1 - len; - vec_safe_reserve (tinfo_descs, len); - tinfo_s elt; - elt.type = elt.vtable = elt.name = NULL_TREE; - while (len--) - tinfo_descs->quick_push (elt); - } + if (tinfo_descs->length () <= ix) + /* too short, extend. */ + vec_safe_grow_cleared (tinfo_descs, ix + 1); tinfo_s *res = &(*tinfo_descs)[ix]; diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index a10ef34..1aa35d3 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -1180,10 +1180,13 @@ finish_expr_stmt (tree expr) expr = error_mark_node; /* Simplification of inner statement expressions, compound exprs, - etc can result in us already having an EXPR_STMT. */ + etc can result in us already having an EXPR_STMT or other statement + tree. Don't wrap them in EXPR_STMT. */ if (TREE_CODE (expr) != CLEANUP_POINT_EXPR) { - if (TREE_CODE (expr) != EXPR_STMT) + if (TREE_CODE (expr) != EXPR_STMT + && !STATEMENT_CLASS_P (expr) + && TREE_CODE (expr) != STATEMENT_LIST) expr = build_stmt (loc, EXPR_STMT, expr); expr = maybe_cleanup_point_expr_void (expr); } @@ -3082,6 +3085,7 @@ finish_stmt_expr_expr (tree expr, tree stmt_expr) } else if (processing_template_decl) { + /* Not finish_expr_stmt because we don't want convert_to_void. */ expr = build_stmt (input_location, EXPR_STMT, expr); expr = add_stmt (expr); /* Mark the last statement so that we can recognize it as such at @@ -5088,22 +5092,32 @@ static tree finish_type_pack_element (tree idx, tree types, tsubst_flags_t complain) { idx = maybe_constant_value (idx, NULL_TREE, mce_true); - if (TREE_CODE (idx) != INTEGER_CST || !INTEGRAL_TYPE_P (TREE_TYPE (idx))) + if (!INTEGRAL_TYPE_P (TREE_TYPE (idx))) { if (complain & tf_error) - error ("pack index is not an integral constant"); + error ("pack index has non-integral type %qT", TREE_TYPE (idx)); + return error_mark_node; + } + if (TREE_CODE (idx) != INTEGER_CST) + { + if (complain & tf_error) + { + error ("pack index is not an integral constant"); + cxx_constant_value (idx); + } return error_mark_node; } if (tree_int_cst_sgn (idx) < 0) { if (complain & tf_error) - error ("pack index is negative"); + error ("pack index %qE is negative", idx); return error_mark_node; } if (wi::to_widest (idx) >= TREE_VEC_LENGTH (types)) { if (complain & tf_error) - error ("pack index is out of range"); + error ("pack index %qE is out of range for pack of length %qd", + idx, TREE_VEC_LENGTH (types)); return error_mark_node; } return TREE_VEC_ELT (types, tree_to_shwi (idx)); diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog index 210baa7..f816c70 100644 --- a/gcc/d/ChangeLog +++ b/gcc/d/ChangeLog @@ -1,3 +1,48 @@ +2025-04-17 Iain Buclaw <ibuclaw@gdcproject.org> + + * dmd/MERGE: Merge upstream dmd 956e73d64e. + +2025-04-15 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119826 + * types.cc (TypeVisitor::visit (TypeEnum *)): Propagate flags of main + enum types to all forward-referenced variants. + +2025-04-15 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119799 + * decl.cc (DeclVisitor::visit (VarDeclaration *)): Check front-end + type size before building the VAR_DECL. Allow C symbols to have a + size of `0'. + +2025-04-15 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119817 + * imports.cc (ImportVisitor::visit (OverloadSet *)): Don't push + NULL_TREE to vector of import symbols. + +2025-04-12 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/109023 + * d-compiler.cc: Include dmd/errors.h. + (Compiler::onImport): Implement. + * d-lang.cc (d_handle_option): Handle -finclude-imports. + (d_parse_file): Run semantic on included imports. + * gdc.texi: Document -finclude-imports. + * lang.opt: Add finclude-imports. + * lang.opt.urls: Regenerate. + +2025-04-12 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119758 + * d-lang.cc (d_parse_file): Use endswith in test for -fonly= argument. + * d-spec.cc (lang_specific_driver): Rework -fonly= and pass all input + files to the front-end compiler when the option is seen. + +2025-04-11 Iain Buclaw <ibuclaw@gdcproject.org> + + * dmd/MERGE: Merge upstream dmd 1b34fea478. + 2025-04-09 Iain Buclaw <ibuclaw@gdcproject.org> PR d/118309 diff --git a/gcc/d/d-compiler.cc b/gcc/d/d-compiler.cc index 160539d..e18f5d3 100644 --- a/gcc/d/d-compiler.cc +++ b/gcc/d/d-compiler.cc @@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "dmd/compiler.h" +#include "dmd/errors.h" #include "dmd/expression.h" #include "dmd/identifier.h" #include "dmd/module.h" @@ -164,7 +165,39 @@ Compiler::onParseModule (Module *m) driver intends on compiling the import. */ bool -Compiler::onImport (Module *) +Compiler::onImport (Module *m) { - return false; + if (!includeImports) + return false; + + if (m->filetype != FileType::d && m->filetype != FileType::c) + return false; + + /* All imports modules are included except those in the runtime library. */ + ModuleDeclaration *md = m->md; + if (md && md->id) + { + if (md->packages.length >= 1) + { + if (!strcmp (md->packages.ptr[0]->toChars (), "core") + || !strcmp (md->packages.ptr[0]->toChars (), "std") + || !strcmp (md->packages.ptr[0]->toChars (), "gcc") + || !strcmp (md->packages.ptr[0]->toChars (), "etc")) + return false; + } + else if (!strcmp (md->id->toChars (), "object")) + return false; + } + else if (m->ident) + { + if (!strcmp (m->ident->toChars (), "object")) + return false; + } + + /* This import will be compiled. */ + if (global.params.v.verbose) + message ("compileimport (%s)", m->srcfile.toChars ()); + + compiledImports.push (m); + return true; } diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc index b3786be..ec2ea59 100644 --- a/gcc/d/d-lang.cc +++ b/gcc/d/d-lang.cc @@ -523,6 +523,10 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, global.params.ignoreUnsupportedPragmas = value; break; + case OPT_finclude_imports: + includeImports = true; + break; + case OPT_finvariants: global.params.useInvariants = value ? CHECKENABLEon : CHECKENABLEoff; break; @@ -1085,9 +1089,9 @@ d_parse_file (void) /* Buffer for contents of .ddoc files. */ OutBuffer ddocbuf; - /* In this mode, the first file name is supposed to be a duplicate - of one of the input files. */ - if (d_option.fonly && strcmp (d_option.fonly, main_input_filename) != 0) + /* In this mode, the main input file is supposed to be the same as the one + given by -fonly=. */ + if (d_option.fonly && !endswith (main_input_filename, d_option.fonly)) error ("%<-fonly=%> argument is different from first input file name"); for (size_t i = 0; i < num_in_fnames; i++) @@ -1309,6 +1313,21 @@ d_parse_file (void) dmd::semantic3 (m, NULL); } + if (includeImports) + { + for (size_t i = 0; i < compiledImports.length; i++) + { + Module *m = compiledImports[i]; + gcc_assert (m->isRoot ()); + + if (global.params.v.verbose) + message ("semantic3 %s", m->toChars ()); + + dmd::semantic3 (m, NULL); + modules.push (m); + } + } + Module::runDeferredSemantic3 (); /* Check again, incase semantic3 pass loaded any more modules. */ diff --git a/gcc/d/d-spec.cc b/gcc/d/d-spec.cc index 7f4a779..c788048 100644 --- a/gcc/d/d-spec.cc +++ b/gcc/d/d-spec.cc @@ -104,8 +104,8 @@ lang_specific_driver (cl_decoded_option **in_decoded_options, /* The total number of arguments with the new stuff. */ unsigned int num_args = 1; - /* "-fonly" if it appears on the command line. */ - const char *only_source_option = 0; + /* "-fonly=" if it appears on the command line. */ + const char *only_source_arg = 0; /* Whether the -o option was used. */ bool saw_opt_o = false; @@ -280,13 +280,13 @@ lang_specific_driver (cl_decoded_option **in_decoded_options, case OPT_fonly_: args[i] |= SKIPOPT; - only_source_option = decoded_options[i].orig_option_with_args_text; + only_source_arg = arg; if (arg != NULL) { - const char *suffix = strrchr (only_source_option, '.'); + const char *suffix = strrchr (only_source_arg, '.'); if (suffix == NULL || strcmp (suffix, ".d") != 0) - only_source_option = concat (only_source_option, ".d", NULL); + only_source_arg = concat (only_source_arg, ".d", NULL); } break; @@ -335,48 +335,52 @@ lang_specific_driver (cl_decoded_option **in_decoded_options, + (phobos_library != PHOBOS_NOLINK) * 4 + 2; new_decoded_options = XNEWVEC (cl_decoded_option, num_args); - i = 0; j = 0; /* Copy the 0th argument, i.e., the name of the program itself. */ - new_decoded_options[j++] = decoded_options[i++]; + new_decoded_options[j++] = decoded_options[0]; /* NOTE: We start at 1 now, not 0. */ - while (i < argc) + for (i = 1; i < argc; i++) { if (args[i] & SKIPOPT) - { - ++i; - continue; - } - - new_decoded_options[j] = decoded_options[i]; + continue; if (!saw_libcxx && (args[i] & WITHLIBCXX)) { - --j; saw_libcxx = &decoded_options[i]; + continue; } - if (args[i] & DSOURCE) + if (only_source_arg && (args[i] & DSOURCE)) { - if (only_source_option) - --j; + if (!endswith (decoded_options[i].arg, only_source_arg)) + continue; } - i++; + new_decoded_options[j] = decoded_options[i]; j++; } - if (only_source_option) + if (only_source_arg) { - const char *only_source_arg = only_source_option + 7; + /* Generate -fonly= option, then copy D input sources that were initially + skipped in first pass over all decoded_options. */ generate_option (OPT_fonly_, only_source_arg, 1, CL_DRIVER, &new_decoded_options[j]); j++; - generate_option_input_file (only_source_arg, - &new_decoded_options[j++]); + for (i = 1; i < argc; i++) + { + if (!(args[i] & DSOURCE)) + continue; + + if (endswith (decoded_options[i].arg, only_source_arg)) + continue; + + new_decoded_options[j] = decoded_options[i]; + j++; + } } /* If no reason to link against libphobos library, then don't add it. */ diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc index 136f78b..9ddf7cf 100644 --- a/gcc/d/decl.cc +++ b/gcc/d/decl.cc @@ -791,6 +791,12 @@ public: } else if (d->isDataseg ()) { + /* When the front-end type size is invalid, an error has already been + given for the declaration or type. */ + dinteger_t size = dmd::size (d->type, d->loc); + if (size == SIZE_INVALID) + return; + tree decl = get_symbol_decl (d); /* Only need to build the VAR_DECL for extern declarations. */ @@ -804,9 +810,7 @@ public: return; /* How big a symbol can be should depend on back-end. */ - tree size = build_integer_cst (dmd::size (d->type, d->loc), - build_ctype (Type::tsize_t)); - if (!valid_constant_size_p (size)) + if (!valid_constant_size_p (build_integer_cst (size, size_type_node))) { error_at (make_location_t (d->loc), "size is too large"); return; @@ -835,8 +839,9 @@ public: } /* Frontend should have already caught this. */ - gcc_assert (!integer_zerop (size) - || d->type->toBasetype ()->isTypeSArray ()); + gcc_assert ((size != 0 && size != SIZE_INVALID) + || d->type->toBasetype ()->isTypeSArray () + || d->isCsymbol ()); d_finish_decl (decl); diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index a05a50e..58d19b4 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -51816cd01deee5cc1d7d2c6e1e24788ec655b73e +956e73d64e532a68213970316c2590c572ec03f3 The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/expressionsem.d b/gcc/d/dmd/expressionsem.d index 19111e3..b02f6ea 100644 --- a/gcc/d/dmd/expressionsem.d +++ b/gcc/d/dmd/expressionsem.d @@ -6978,10 +6978,10 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor while (1) { AttribDeclaration ad = s.isAttribDeclaration(); - if (!ad) - break; - if (ad.decl && ad.decl.length == 1) + if (ad && ad.decl && ad.decl.length == 1) s = (*ad.decl)[0]; + else + break; } //printf("inserting '%s' %p into sc = %p\n", s.toChars(), s, sc); diff --git a/gcc/d/dmd/globals.h b/gcc/d/dmd/globals.h index 59952a2..62a575e 100644 --- a/gcc/d/dmd/globals.h +++ b/gcc/d/dmd/globals.h @@ -421,6 +421,7 @@ struct SourceLoc uint32_t line; uint32_t column; uint32_t fileOffset; + DString fileContent; }; struct Loc diff --git a/gcc/d/dmd/lexer.d b/gcc/d/dmd/lexer.d index 63313ac..ed9f7f1 100644 --- a/gcc/d/dmd/lexer.d +++ b/gcc/d/dmd/lexer.d @@ -132,7 +132,7 @@ class Lexer // debug printf("Lexer::Lexer(%p)\n", base); // debug printf("lexer.filename = %s\n", filename); token = Token.init; - this.baseLoc = newBaseLoc(filename, endoffset); + this.baseLoc = newBaseLoc(filename, base[0 .. endoffset]); this.linnum = 1; this.base = base; this.end = base + endoffset; @@ -224,7 +224,7 @@ class Lexer inTokenStringConstant = 0; lastDocLine = 0; - baseLoc = newBaseLoc("#defines", slice.length); + baseLoc = newBaseLoc("#defines", slice); scanloc = baseLoc.getLoc(0); } diff --git a/gcc/d/dmd/location.d b/gcc/d/dmd/location.d index 54b3fb6..393ffb8 100644 --- a/gcc/d/dmd/location.d +++ b/gcc/d/dmd/location.d @@ -64,7 +64,7 @@ nothrow: extern (C++) static Loc singleFilename(const char* filename) { Loc result; - locFileTable ~= new BaseLoc(filename.toDString, locIndex, 0, [0]); + locFileTable ~= new BaseLoc(filename.toDString, null, locIndex, 0, [0]); result.index = locIndex++; return result; } @@ -235,16 +235,20 @@ struct SourceLoc uint column; /// column number (starts at 1) uint fileOffset; /// byte index into file + /// Index `fileOffset` into this to to obtain source code context of this location + const(char)[] fileContent; + // aliases for backwards compatibility alias linnum = line; alias charnum = column; - this(const(char)[] filename, uint line, uint column, uint fileOffset = 0) nothrow @nogc pure @safe + this(const(char)[] filename, uint line, uint column, uint fileOffset = 0, const(char)[] fileContent = null) nothrow @nogc pure @safe { this.filename = filename; this.line = line; this.column = column; this.fileOffset = fileOffset; + this.fileContent = fileContent; } this(Loc loc) nothrow @nogc @trusted @@ -300,15 +304,15 @@ private size_t fileTableIndex(uint index) nothrow @nogc * Create a new source location map for a file * Params: * filename = source file name - * size = space to reserve for locations, equal to the file size in bytes + * fileContent = content of source file * Returns: new BaseLoc */ -BaseLoc* newBaseLoc(const(char)* filename, size_t size) nothrow +BaseLoc* newBaseLoc(const(char)* filename, const(char)[] fileContent) nothrow { - locFileTable ~= new BaseLoc(filename.toDString, locIndex, 1, [0]); + locFileTable ~= new BaseLoc(filename.toDString, fileContent, locIndex, 1, [0]); // Careful: the endloc of a FuncDeclaration can // point to 1 past the very last byte in the file, so account for that - locIndex += size + 1; + locIndex += fileContent.length + 1; return locFileTable[$ - 1]; } @@ -354,6 +358,7 @@ struct BaseLoc @safe nothrow: const(char)[] filename; /// Source file name + const(char)[] fileContents; /// Source file contents uint startIndex; /// Subtract this from Loc.index to get file offset int startLine = 1; /// Line number at index 0 uint[] lines; /// For each line, the file offset at which it starts. At index 0 there's always a 0 entry. @@ -384,11 +389,11 @@ struct BaseLoc { auto fname = filename.toDString; if (substitutions.length == 0) - substitutions ~= BaseLoc(this.filename, 0, 0); + substitutions ~= BaseLoc(this.filename, null, 0, 0); if (fname.length == 0) fname = substitutions[$ - 1].filename; - substitutions ~= BaseLoc(fname, offset, cast(int) (line - lines.length + startLine - 2)); + substitutions ~= BaseLoc(fname, null, offset, cast(int) (line - lines.length + startLine - 2)); } /// Returns: `loc` modified by substitutions from #file / #line directives @@ -408,7 +413,7 @@ struct BaseLoc private SourceLoc getSourceLoc(uint offset) @nogc { const i = getLineIndex(offset); - const sl = SourceLoc(filename, cast(int) (i + startLine), cast(int) (1 + offset - lines[i]), offset); + const sl = SourceLoc(filename, cast(int) (i + startLine), cast(int) (1 + offset - lines[i]), offset, fileContents); return substitute(sl); } diff --git a/gcc/d/dmd/typesem.d b/gcc/d/dmd/typesem.d index 3bc0489..d4c7a58 100644 --- a/gcc/d/dmd/typesem.d +++ b/gcc/d/dmd/typesem.d @@ -3266,9 +3266,19 @@ Type merge(Type type) case Tsarray: // prevents generating the mangle if the array dim is not yet known - if (!type.isTypeSArray().dim.isIntegerExp()) - return type; - goto default; + if (auto ie = type.isTypeSArray().dim.isIntegerExp()) + { + // After TypeSemantic, the length is always converted to size_t, but the parser + // usually generates regular integer types (e.g. in cast(const ubyte[2])) which + // it may try to merge, which then leads to failing implicit conversions as 2LU != 2 + // according to Expression.equals. Only merge array types with size_t lengths for now. + // https://github.com/dlang/dmd/issues/21179 + if (ie.type != Type.tsize_t) + return type; + + goto default; + } + return type; case Tenum: break; diff --git a/gcc/d/gdc.texi b/gcc/d/gdc.texi index 2cb0c4a62..3a8bea0 100644 --- a/gcc/d/gdc.texi +++ b/gcc/d/gdc.texi @@ -277,6 +277,12 @@ Sets @code{__traits(getTargetInfo, "cppStd")} to @code{202002}. Sets @code{__traits(getTargetInfo, "cppStd")} to @code{202302}. @end table +@opindex finclude-imports +@item -finclude-imports +Include imported modules in the compilation, as if they were given on the +command line. When this option is enabled, all imported modules are compiled +except those that are part of libphobos. + @opindex finvariants @opindex fno-invariants @item -fno-invariants diff --git a/gcc/d/imports.cc b/gcc/d/imports.cc index 776caaf..16e4df6 100644 --- a/gcc/d/imports.cc +++ b/gcc/d/imports.cc @@ -182,7 +182,11 @@ public: vec_alloc (tset, d->a.length); for (size_t i = 0; i < d->a.length; i++) - vec_safe_push (tset, build_import_decl (d->a[i])); + { + tree overload = build_import_decl (d->a[i]); + if (overload != NULL_TREE) + vec_safe_push (tset, overload); + } this->result_ = build_tree_list_vec (tset); tset->truncate (0); diff --git a/gcc/d/lang.opt b/gcc/d/lang.opt index 50c6f2f..298ff58 100644 --- a/gcc/d/lang.opt +++ b/gcc/d/lang.opt @@ -327,6 +327,10 @@ fignore-unknown-pragmas D Ignore unsupported pragmas. +finclude-imports +D RejectNegative +Include imported modules in the compilation. + finvariants D Var(flag_invariants) Generate code for class invariant contracts. diff --git a/gcc/d/lang.opt.urls b/gcc/d/lang.opt.urls index fa311d4..b4886bf 100644 --- a/gcc/d/lang.opt.urls +++ b/gcc/d/lang.opt.urls @@ -155,6 +155,9 @@ LangUrlSuffix_D(gdc/Runtime-Options.html#index-fextern-std) fignore-unknown-pragmas LangUrlSuffix_D(gdc/Warnings.html#index-fignore-unknown-pragmas) +finclude-imports +LangUrlSuffix_D(gdc/Runtime-Options.html#index-finclude-imports) + finvariants LangUrlSuffix_D(gdc/Runtime-Options.html#index-finvariants) diff --git a/gcc/d/types.cc b/gcc/d/types.cc index e43fa88..1c74840 100644 --- a/gcc/d/types.cc +++ b/gcc/d/types.cc @@ -1179,6 +1179,26 @@ public: layout_type (t->ctype); + /* Fix up all forward-referenced variants of this enum type. */ + for (tree v = TYPE_MAIN_VARIANT (t->ctype); v; + v = TYPE_NEXT_VARIANT (v)) + { + if (v == t->ctype) + continue; + + TYPE_VALUES (v) = TYPE_VALUES (t->ctype); + TYPE_LANG_SPECIFIC (v) = TYPE_LANG_SPECIFIC (t->ctype); + TYPE_MIN_VALUE (v) = TYPE_MIN_VALUE (t->ctype); + TYPE_MAX_VALUE (v) = TYPE_MAX_VALUE (t->ctype); + TYPE_UNSIGNED (v) = TYPE_UNSIGNED (t->ctype); + TYPE_SIZE (v) = TYPE_SIZE (t->ctype); + TYPE_SIZE_UNIT (v) = TYPE_SIZE_UNIT (t->ctype); + SET_TYPE_MODE (v, TYPE_MODE (t->ctype)); + TYPE_PRECISION (v) = TYPE_PRECISION (t->ctype); + SET_TYPE_ALIGN (v, TYPE_ALIGN (t->ctype)); + TYPE_USER_ALIGN (v) = TYPE_USER_ALIGN (t->ctype); + } + /* Complete forward-referenced fields of this enum type. */ finish_incomplete_fields (t->ctype); } diff --git a/gcc/doc/cfg.texi b/gcc/doc/cfg.texi index b8c6427..bbd6694 100644 --- a/gcc/doc/cfg.texi +++ b/gcc/doc/cfg.texi @@ -297,10 +297,12 @@ edge. The opposite conversion is difficult, but should not happen anyway. The edges can be eliminated via @code{purge_dead_edges} call. @findex REG_EH_REGION, EDGE_ABNORMAL_CALL -In the RTL representation, the destination of an exception edge is -specified by @code{REG_EH_REGION} note attached to the insn. -In case of a trapping call the @code{EDGE_ABNORMAL_CALL} flag is set -too. In the @code{GIMPLE} representation, this extra flag is not set. +In the RTL representation, a @code{REG_EH_REGION} note is attached to +an instruction that can throw an exception. The destination of the +exception edge originating at such an instruction is specified by the +value of the @code{REG_EH_REGION} note. In case of a trapping call +the @code{EDGE_ABNORMAL_CALL} flag is set too. In the @code{GIMPLE} +representation, this extra flag is not set. @findex may_trap_p, tree_could_trap_p In the RTL representation, the predicate @code{may_trap_p} may be used diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index ae3357f..0978c4c 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1933,6 +1933,13 @@ Note that if such a function is called indirectly the compiler may or may not inline it depending on optimization level and a failure to inline an indirect call may or may not be diagnosed. +If you need to use the inlined function in multiple translation units, +you should put the @code{always_inline} attribute on a function +definition in a header file that is included in all translation units +where the function is used. Link-time optimization can inline +functions across translation units, but only if an optimization level +that normally enables inlining is additionally specified. + @cindex @code{artificial} function attribute @item artificial This attribute is useful for small inline wrappers that if possible @@ -12299,15 +12306,6 @@ for the @samp{att} and @samp{intel} dialects of assembler: @item @code{%3} @tab @code{$.L3} @tab @code{OFFSET FLAT:.L3} -@item @code{%4} -@tab @code{$8} -@tab @code{8} -@item @code{%5} -@tab @code{%xmm0} -@tab @code{xmm0} -@item @code{%7} -@tab @code{$0} -@tab @code{0} @end multitable The table below shows the list of supported modifiers and their effects. @@ -12324,32 +12322,17 @@ The table below shows the list of supported modifiers and their effects. @tab @code{%b0} @tab @code{%al} @tab @code{al} -@item @code{B} -@tab print the opcode suffix of b. -@tab @code{%B0} -@tab @code{b} -@tab @item @code{c} @tab Require a constant operand and print the constant expression with no punctuation. @tab @code{%c1} @tab @code{2} @tab @code{2} -@item @code{d} -@tab print duplicated register operand for AVX instruction. -@tab @code{%d5} -@tab @code{%xmm0, %xmm0} -@tab @code{xmm0, xmm0} @item @code{E} @tab Print the address in Double Integer (DImode) mode (8 bytes) when the target is 64-bit. Otherwise mode is unspecified (VOIDmode). @tab @code{%E1} @tab @code{%(rax)} @tab @code{[rax]} -@item @code{g} -@tab Print the V16SFmode name of the register. -@tab @code{%g0} -@tab @code{%zmm0} -@tab @code{zmm0} @item @code{h} @tab Print the QImode name for a ``high'' register. @tab @code{%h0} @@ -12371,16 +12354,6 @@ high 8 bytes of SSE values. For a memref in (%rax), it generates @tab @code{%l3} @tab @code{.L3} @tab @code{.L3} -@item @code{L} -@tab print the opcode suffix of l. -@tab @code{%L0} -@tab @code{l} -@tab -@item @code{N} -@tab print maskz. -@tab @code{%N7} -@tab @code{@{z@}} -@tab @code{@{z@}} @item @code{p} @tab Print raw symbol name (without syntax-specific prefixes). @tab @code{%p2} @@ -12396,76 +12369,20 @@ issue the bare constant. See @code{p} above. @tab @code{%q0} @tab @code{%rax} @tab @code{rax} -@item @code{Q} -@tab print the opcode suffix of q. -@tab @code{%Q0} -@tab @code{q} -@tab -@item @code{R} -@tab print embedded rounding and sae. -@tab @code{%R4} -@tab @code{@{rn-sae@}, } -@tab @code{, @{rn-sae@}} -@item @code{r} -@tab print only sae. -@tab @code{%r4} -@tab @code{@{sae@}, } -@tab @code{, @{sae@}} -@item @code{s} -@tab print a shift double count, followed by the assemblers argument -delimiterprint the opcode suffix of s. -@tab @code{%s1} -@tab @code{$2, } -@tab @code{2, } -@item @code{S} -@tab print the opcode suffix of s. -@tab @code{%S0} -@tab @code{s} -@tab -@item @code{t} -@tab print the V8SFmode name of the register. -@tab @code{%t5} -@tab @code{%ymm0} -@tab @code{ymm0} -@item @code{T} -@tab print the opcode suffix of t. -@tab @code{%T0} -@tab @code{t} -@tab -@item @code{V} -@tab print naked full integer register name without %. -@tab @code{%V0} -@tab @code{eax} -@tab @code{eax} @item @code{w} @tab Print the HImode name of the register. @tab @code{%w0} @tab @code{%ax} @tab @code{ax} -@item @code{W} -@tab print the opcode suffix of w. -@tab @code{%W0} -@tab @code{w} -@tab -@item @code{x} -@tab print the V4SFmode name of the register. -@tab @code{%x5} -@tab @code{%xmm0} -@tab @code{xmm0} -@item @code{y} -@tab print "st(0)" instead of "st" as a register. -@tab @code{%y6} -@tab @code{%st(0)} -@tab @code{st(0)} @item @code{z} @tab Print the opcode suffix for the size of the current integer operand (one of @code{b}/@code{w}/@code{l}/@code{q}). @tab @code{%z0} @tab @code{l} @tab -@item @code{Z} -@tab Like @code{z}, with special suffixes for x87 instructions. @end multitable +@code{V} is a special modifier which prints the name of the full integer +register without @code{%}. @anchor{x86floatingpointasmoperands} @subsubsection x86 Floating-Point @code{asm} Operands @@ -13061,6 +12978,7 @@ C and/or C++ standards, while others remain specific to GNU C. * Binary constants:: Binary constants using the @samp{0b} prefix. * Dollar Signs:: Dollar sign is allowed in identifiers. * Character Escapes:: @samp{\e} stands for the character @key{ESC}. +* Raw String Literals:: C++ raw string literals are supported in C. * Alternate Keywords:: @code{__const__}, @code{__asm__}, etc., for header files. * Function Names:: Printable strings which are the name of the current function. @@ -14082,6 +14000,25 @@ machines, typically because the target assembler does not allow them. You can use the sequence @samp{\e} in a string or character constant to stand for the ASCII character @key{ESC}. +@node Raw String Literals +@subsection Raw String Literals +@cindex raw string literals +@cindex string literals, raw + +The C++11 standard added syntax for raw string literals prefixed +with @samp{R}. This syntax allows you to use an arbitrary delimiter +sequence instead of escaping special characters within the string. +For example, these string constants are all equivalent: + +@smallexample +const char *s1 = "\\"; +const char *s2 = R"(\)"; +const char *s3 = R"foo(\)foo"; +@end smallexample + +As an extension, GCC also accepts raw string literals in C with +@option{-std=gnu99} or later. + @node Alternate Keywords @subsection Alternate Keywords @cindex alternate keywords diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi index 8baee24..cb52e8c 100644 --- a/gcc/doc/gm2.texi +++ b/gcc/doc/gm2.texi @@ -2699,10 +2699,10 @@ PROCEDURE Example (foo, bar: CARDINAL) : CARDINAL ; VAR myout: CARDINAL ; BEGIN - ASM VOLATILE ("movq %1,%%rax; addq %2,%%rax; movq %%rax,%0" + ASM VOLATILE ("movl %1,%%eax; addl %2,%%eax; movl %%eax,%0" : "=rm" (myout) (* outputs *) : "rm" (foo), "rm" (bar) (* inputs *) - : "rax") ; (* we trash *) + : "eax") ; (* we trash *) RETURN( myout ) END Example ; @end example @@ -2720,10 +2720,10 @@ VAR myout: CARDINAL ; BEGIN ASM VOLATILE ( - "movq %[left],%%rax; addq %[right],%%rax; movq %%rax,%[output]" + "movl %[left],%%eax; addl %[right],%%eax; movl %%eax,%[output]" : [output] "=rm" (myout) (* outputs *) : [left] "rm" (foo), [right] "rm" (bar) (* inputs *) - : "rax") ; (* we trash *) + : "eax") ; (* we trash *) RETURN( myout ) END Example ; @end example diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index b5509ff..1af0082 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -350,6 +350,12 @@ documentation including the target @code{SYSTEM} definition module. If Python3 is unavailable Modula-2 documentation will include a target independent version of the SYSTEM modules. +@item @anchor{gccrs-prerequisite}gccrs + +The official Rust compiler and Rust build system (cargo) are required for +building various parts of the gccrs frontend, until gccrs can compile them +by itself. The minimum supported Rust version is 1.49. + @item A ``working'' POSIX compatible shell, or GNU bash Necessary when running @command{configure} because some diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a040d65..a0f60e7 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -211,8 +211,7 @@ in the following sections. @item C++ Language Options @xref{C++ Dialect Options,,Options Controlling C++ Dialect}. @gccoptlist{-fabi-version=@var{n} -fno-access-control --faligned-new=@var{n} -fargs-in-order=@var{n} --fno-assume-sane-operators-new-delete +-faligned-new=@var{n} -fno-assume-sane-operators-new-delete -fchar8_t -fcheck-new -fconcepts -fconstexpr-depth=@var{n} -fconstexpr-cache-depth=@var{n} -fconstexpr-loop-limit=@var{n} -fconstexpr-ops-limit=@var{n} @@ -235,6 +234,7 @@ in the following sections. -fno-optional-diags -fno-pretty-templates -frange-for-ext-temps -fno-rtti -fsized-deallocation +-fstrong-eval-order@r{[}=@var{kind}@r{]} -ftemplate-backtrace-limit=@var{n} -ftemplate-depth=@var{n} -fno-threadsafe-statics -fuse-cxa-atexit @@ -593,7 +593,7 @@ Objective-C and Objective-C++ Dialects}. -finline-functions -finline-functions-called-once -finline-limit=@var{n} -finline-small-functions -fipa-modref -fipa-cp -fipa-cp-clone -fipa-bit-cp -fipa-vrp -fipa-pta -fipa-profile -fipa-pure-const --fipa-reference -fipa-reference-addressable +-fipa-reference -fipa-reference-addressable -fipa-reorder-for-locality -fipa-stack-alignment -fipa-icf -fira-algorithm=@var{algorithm} -flate-combine-instructions -flifetime-dse -flive-patching=@var{level} -fira-region=@var{region} -fira-hoist-pressure @@ -642,8 +642,8 @@ Objective-C and Objective-C++ Dialects}. -fsplit-wide-types -fsplit-wide-types-early -fssa-backprop -fssa-phiopt -fstdarg-opt -fstore-merging -fstrict-aliasing -fipa-strict-aliasing -fthread-jumps -ftracer -ftree-bit-ccp --ftree-builtin-call-dce -ftree-ccp -ftree-ch --ftree-coalesce-vars -ftree-copy-prop -ftree-dce -ftree-dominator-opts +-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-coalesce-vars +-ftree-copy-prop -ftree-cselim -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -fcode-hoisting -ftree-loop-if-convert -ftree-loop-im -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @@ -2199,6 +2199,7 @@ those that have already been displayed. If @option{--help} is also specified anywhere on the command line then this takes precedence over any @option{--help=} option. +@opindex Q If the @option{-Q} option appears on the command line before the @option{--help=} option, then the descriptive text displayed by @option{--help=} is changed. Instead of describing the displayed @@ -3581,12 +3582,19 @@ type. @opindex fstrong-eval-order @item -fstrong-eval-order +@itemx -fstrong-eval-order=@var{kind} Evaluate member access, array subscripting, and shift expressions in left-to-right order, and evaluate assignment in right-to-left order, -as adopted for C++17. Enabled by default with @option{-std=c++17}. +as adopted for C++17. @option{-fstrong-eval-order} is equivalent to +@option{-fstrong-eval-order=all}, +and is enabled by default with @option{-std=c++17} or later. + @option{-fstrong-eval-order=some} enables just the ordering of member -access and shift expressions, and is the default without -@option{-std=c++17}. +access and shift expressions, and is the default for C++ dialects prior to +C++17. + +@option{-fstrong-eval-order=none} is equivalent to +@option{-fno-strong-eval-order}. @opindex ftemplate-backtrace-limit @item -ftemplate-backtrace-limit=@var{n} @@ -12739,6 +12747,7 @@ complexity than at @option{-O}. -fipa-pure-const -fipa-reference -fipa-reference-addressable +-fivopts -fmerge-constants -fmove-loop-invariants -fmove-loop-stores @@ -12847,6 +12856,13 @@ by @option{-O2} and also turns on the following optimization flags: Reduce compilation time and make debugging produce the expected results. This is the default. +At @option{-O0}, GCC completely disables most optimization passes; +they are not run even if you explicitly enable them on the command +line, or are listed by @option{-Q --help=optimizers} as being enabled by +default. Many optimizations performed by GCC depend on code analysis +or canonicalization passes that are enabled by @option{-O}, and it would +not be useful to run individual optimization passes in isolation. + @opindex Os @item -Os Optimize for size. @option{-Os} enables all @option{-O2} optimizations @@ -13864,6 +13880,21 @@ Enabled by default at @option{-O1} and higher. Discover read-only, write-only and non-addressable static variables. Enabled by default at @option{-O1} and higher. +@opindex fipa-reorder-for-locality +@item -fipa-reorder-for-locality +Group call chains close together in the binary layout to improve code +locality and minimize jump distances between frequently called functions. +Unlike @option{-freorder-functions} this pass considers the call +chains between functions and groups them together, rather than grouping all +hot/normal/cold/never-executed functions into separate sections. +Unlike @option{-fprofile-reorder-functions} it aims to improve code locality +throughout the runtime of the program rather than focusing on program startup. +This option is incompatible with an explicit +@option{-flto-partition=} option since it enforces a custom partitioning +scheme. +If using this option it is recommended to also use profile feedback, but this +option is not enabled by default otherwise. + @opindex fipa-stack-alignment @item -fipa-stack-alignment Reduce stack alignment on call sites if possible. @@ -14072,6 +14103,12 @@ in this pass can be limited using @option{max-tail-merge-comparisons} parameter and @option{max-tail-merge-iterations} parameter. +@opindex ftree-cselim +@item -ftree-cselim +Perform conditional store elimination on trees. This flag is enabled by +default at @option{-O1} and higher on targets that have conditional +move instructions. + @opindex ftree-dce @item -ftree-dce Perform dead code elimination (DCE) on trees. This flag is enabled by @@ -14278,6 +14315,7 @@ Enabled by default at @option{-O1} and higher. @item -fivopts Perform induction variable optimizations (strength reduction, induction variable merging and induction variable elimination) on trees. +Enabled by default at @option{-O1} and higher. @opindex ftree-parallelize-loops @item -ftree-parallelize-loops=n @@ -14593,11 +14631,13 @@ Enabled for x86 at levels @option{-O2}, @option{-O3}, @option{-Os}. @opindex freorder-functions @item -freorder-functions Reorder functions in the object file in order to -improve code locality. This is implemented by using special -subsections @code{.text.hot} for most frequently executed functions and -@code{.text.unlikely} for unlikely executed functions. Reordering is done by -the linker so object file format must support named sections and linker must -place them in a reasonable way. +improve code locality. Unlike @option{-fipa-reorder-for-locality} this option +prioritises grouping all functions within a category +(hot/normal/cold/never-executed) together. +This is implemented by using special subsections @code{.text.hot} for most +frequently executed functions and @code{.text.unlikely} for unlikely executed +functions. Reordering is done by the linker so object file format must support +named sections and linker must place them in a reasonable way. This option isn't effective unless you either provide profile feedback (see @option{-fprofile-arcs} for details) or manually annotate functions with @@ -14609,12 +14649,14 @@ Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. @item -fstrict-aliasing Allow the compiler to assume the strictest aliasing rules applicable to the language being compiled. For C (and C++), this activates -optimizations based on the type of expressions. In particular, an -object of one type is assumed never to reside at the same address as an -object of a different type, unless the types are almost the same. For -example, an @code{unsigned int} can alias an @code{int}, but not a -@code{void*} or a @code{double}. A character type may alias any other -type. +optimizations based on the type of expressions. In particular, accessing +an object of one type via an expression of a different type is not allowed, +unless the types are @dfn{compatible types}, differ only in signedness or +qualifiers, or the expression has a character type. Accessing scalar +objects via a corresponding vector type is also allowed. + +For example, an @code{unsigned int} can alias an @code{int}, but not a +@code{void*} or a @code{double}. A character type may alias any other type. @anchor{Type-punning}Pay special attention to code like this: @smallexample @@ -15318,32 +15360,24 @@ arithmetic. These options trade off between speed and correctness. All must be specifically enabled. @table @gcctabopt -@opindex ffloat-store -@item -ffloat-store -Do not store floating-point variables in registers, and inhibit other -options that might change whether a floating-point value is taken from a -register or memory. - -@cindex floating-point precision -This option prevents undesirable excess precision on machines such as -the 68000 where the floating registers (of the 68881) keep more -precision than a @code{double} is supposed to have. Similarly for the -x86 architecture. For most programs, the excess precision does only -good, but a few programs rely on the precise definition of IEEE floating -point. Use @option{-ffloat-store} for such programs, after modifying -them to store all pertinent intermediate computations into variables. - @opindex fexcess-precision @item -fexcess-precision=@var{style} -This option allows further control over excess precision on machines +This option allows control over excess precision on machines where floating-point operations occur in a format with more precision or -range than the IEEE standard and interchange floating-point types. By -default, @option{-fexcess-precision=fast} is in effect; this means that +range than the IEEE standard and interchange floating-point types. +An example of such a target is x87 floating point on x86 processors, +which uses an 80-bit representation internally instead of the 64-bit +IEEE format. For most programs, the excess precision is harmless, +but some programs may rely on the +requirements of the C or C++ language standards for handling IEEE values. + +By default, @option{-fexcess-precision=fast} is in effect; this means that operations may be carried out in a wider precision than the types specified in the source if that would result in faster code, and it is unpredictable when rounding to the types specified in the source code takes place. When compiling C or C++, if @option{-fexcess-precision=standard} is specified -then excess precision follows the rules specified in ISO C99 or C++; in particular, +then excess precision follows the rules specified in ISO C99 or C++; +in particular, both casts and assignments cause values to be rounded to their semantic types (whereas @option{-ffloat-store} only affects assignments). This option is enabled by default for C or C++ if a strict @@ -15361,6 +15395,18 @@ or @option{-mfpmath=sse+387} is specified; in the former case, IEEE semantics apply without excess precision, and in the latter, rounding is unpredictable. +@opindex ffloat-store +@item -ffloat-store +Do not store floating-point variables in registers, and inhibit other +options that might change whether a floating-point value is taken from a +register or memory. This option has generally been subsumed by +@option{-fexcess-precision=standard}, which is more general. If you do use +@option{-ffloat-store}, you may need to modify your program to explicitly +store intermediate computations in temporary variables since +@option{-ffloat-store} handles rounding to IEEE format +only on assignments and not casts as @option{-fexcess-precision=standard} +does. + @opindex ffast-math @item -ffast-math Sets the options @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @@ -15495,9 +15541,8 @@ default state for @code{FENV_ACCESS}. @opindex frounding-math @item -frounding-math Disable transformations and optimizations that assume default floating-point -rounding behavior. This is round-to-zero for all floating point -to integer conversions, and round-to-nearest for all other arithmetic -truncations. This option should be specified for programs that change +rounding behavior (round-to-nearest). +This option should be specified for programs that change the FP rounding mode dynamically, or that may be executed with a non-default rounding mode. This option disables constant folding of floating-point expressions at compile time (which may be affected by @@ -15619,7 +15664,8 @@ Enabled by @option{-fprofile-generate}, @option{-fprofile-use}, and @item -fprofile-reorder-functions Function reordering based on profile instrumentation collects first time of execution of a function and orders these functions -in ascending order. +in ascending order, aiming to optimize program startup through more +efficient loading of text segments. Enabled with @option{-fprofile-use}. @@ -16851,11 +16897,6 @@ Maximum depth of recursive cloning for self-recursive function. Recursive cloning only when the probability of call being executed exceeds the parameter. -@item ipa-cp-profile-count-base -When using @option{-fprofile-use} option, IPA-CP will consider the measured -execution count of a call graph edge at this percentage position in their -histogram as the basis for its heuristics calculation. - @item ipa-cp-recursive-freq-factor The number of times interprocedural copy propagation expects recursive functions to call themselves. @@ -16917,6 +16958,19 @@ Size of max partition for WHOPR (in estimated instructions). to provide an upper bound for individual size of partition. Meant to be used only with balanced partitioning. +@item lto-partition-locality-frequency-cutoff +The denominator n of fraction 1/n of the execution frequency of callee to be +cloned for a particular caller. Special value of 0 dictates to always clone +without a cut-off. + +@item lto-partition-locality-size-cutoff +Size cut-off for callee including inlined calls to be cloned for a particular +caller. + +@item lto-max-locality-partition +Maximal size of a locality partition for LTO (in estimated instructions). +Value of 0 results in default value being used. + @item lto-max-streaming-parallelism Maximal number of parallel processes used for LTO streaming. @@ -21268,8 +21322,13 @@ Toggle @option{-fvar-tracking-assignments}, in the same way that @opindex Q @item -Q -Makes the compiler print out each function name as it is compiled, and -print some statistics about each pass when it finishes. +When used on the command line prior to @option{--help=}, @option{-Q} +acts as a modifier to the help output. @xref{Overall Options}, +for details about @option{--help=}. + +Otherwise, this option makes the compiler print out each function name +as it is compiled, and print some statistics about each pass when it +finishes. @opindex ftime-report @item -ftime-report @@ -31453,8 +31512,9 @@ Permissible values for this option are: @samp{sifive-e20}, @samp{sifive-e21}, @samp{sifive-e24}, @samp{sifive-e31}, @samp{sifive-e34}, @samp{sifive-e76}, @samp{sifive-s21}, @samp{sifive-s51}, @samp{sifive-s54}, @samp{sifive-s76}, @samp{sifive-u54}, @samp{sifive-u74}, @samp{sifive-x280}, @samp{sifive-xp450}, -@samp{sifive-x670}, @samp{thead-c906}, @samp{tt-ascalon-d8}, -@samp{xiangshan-nanhu}. +@samp{sifive-x670}, @samp{thead-c906}, @samp{tt-ascalon-d8}, @samp{xiangshan-nanhu}, +@samp{xt-c908}, @samp{xt-c908v}, @samp{xt-c910}, @samp{xt-c910v2}, +@samp{xt-c920}, @samp{xt-c920v2}. Note that @option{-mcpu} does not override @option{-march} or @option{-mtune}. @@ -33328,7 +33388,7 @@ system representing a certain processor type. Possible values for @samp{z9-109}, @samp{z9-ec}/@samp{arch7}, @samp{z10}/@samp{arch8}, @samp{z196}/@samp{arch9}, @samp{zEC12}, @samp{z13}/@samp{arch11}, @samp{z14}/@samp{arch12}, @samp{z15}/@samp{arch13}, -@samp{z16}/@samp{arch14}, and @samp{native}. +@samp{z16}/@samp{arch14}, @samp{z17}/@samp{arch15}, and @samp{native}. The default is @option{-march=z900}. @@ -34822,7 +34882,8 @@ produces code optimized for the local machine under the constraints of the selected instruction set. @item x86-64 -A generic CPU with 64-bit extensions. +A generic CPU with 64-bit extensions, MMX, SSE, SSE2, and FXSR instruction set +support. @item x86-64-v2 @itemx x86-64-v3 @@ -34855,7 +34916,7 @@ Intel Lakemont MCU, based on Intel Pentium CPU. Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support. @item pentiumpro -Intel Pentium Pro CPU@. +Intel Pentium Pro CPU with no MMX support. @item i686 When used with @option{-march}, the Pentium Pro diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index 69e9d77..34ffeed 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -1536,7 +1536,7 @@ loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b) /* ??? This is only ever set for DW_OP_constNu, for N equal to the address size, but since we always allocate cleared storage it should be zero for other types of locations. */ - if (a->dtprel != b->dtprel) + if (a->dw_loc_dtprel != b->dw_loc_dtprel) return false; return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1) @@ -2115,7 +2115,7 @@ output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip) dw2_asm_output_data (2, val1->v.val_int, NULL); break; case DW_OP_const4u: - if (loc->dtprel) + if (loc->dw_loc_dtprel) { gcc_assert (targetm.asm_out.output_dwarf_dtprel); targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4, @@ -2128,7 +2128,7 @@ output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip) dw2_asm_output_data (4, val1->v.val_int, NULL); break; case DW_OP_const8u: - if (loc->dtprel) + if (loc->dw_loc_dtprel) { gcc_assert (targetm.asm_out.output_dwarf_dtprel); targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8, @@ -2323,7 +2323,7 @@ output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip) break; case DW_OP_addr: - if (loc->dtprel) + if (loc->dw_loc_dtprel) { if (targetm.asm_out.output_dwarf_dtprel) { @@ -4028,7 +4028,7 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel) ref->dw_loc_oprnd1.val_class = dw_val_class_addr; ref->dw_loc_oprnd1.v.val_addr = addr; - ref->dtprel = dtprel; + ref->dw_loc_dtprel = dtprel; if (dwarf_split_debug_info) ref->dw_loc_oprnd1.val_entry = add_addr_table_entry (addr, @@ -7036,7 +7036,7 @@ loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx) inchash::hash hstate; hashval_t hash; - tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc); + tem = (loc->dw_loc_dtprel << 8) | ((unsigned int) loc->dw_loc_opc); CHECKSUM (tem); hash_loc_operands (loc, hstate); hash = hstate.end(); @@ -7259,7 +7259,7 @@ loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx) inchash::hash hstate; hashval_t hash; - CHECKSUM_ULEB128 (loc->dtprel); + CHECKSUM_ULEB128 (loc->dw_loc_dtprel); CHECKSUM_ULEB128 (loc->dw_loc_opc); hash_loc_operands (loc, hstate); hash = hstate.end (); @@ -18310,7 +18310,7 @@ resolve_args_picking_1 (dw_loc_descr_ref loc, unsigned initial_frame_offset, /* If needed, relocate the picking offset with respect to the frame offset. */ - if (l->frame_offset_rel) + if (l->dw_loc_frame_offset_rel) { unsigned HOST_WIDE_INT off; switch (l->dw_loc_opc) @@ -18826,7 +18826,7 @@ loc_list_from_tree_1 (tree loc, int want_address, && want_address == 0) { ret = new_loc_descr (DW_OP_pick, 0, 0); - ret->frame_offset_rel = 1; + ret->dw_loc_frame_offset_rel = 1; context->placeholder_seen = true; break; } @@ -18993,7 +18993,7 @@ loc_list_from_tree_1 (tree loc, int want_address, gcc_assert (cursor != NULL_TREE); ret = new_loc_descr (DW_OP_pick, i, 0); - ret->frame_offset_rel = 1; + ret->dw_loc_frame_offset_rel = 1; break; } /* FALLTHRU */ @@ -31061,7 +31061,7 @@ resolve_addr_in_expr (dw_attr_node *a, dw_loc_descr_ref loc) || loc->dw_loc_opc == DW_OP_addrx) || ((loc->dw_loc_opc == DW_OP_GNU_const_index || loc->dw_loc_opc == DW_OP_constx) - && loc->dtprel)) + && loc->dw_loc_dtprel)) { rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl; if (!resolve_one_addr (&rtl)) @@ -31073,7 +31073,7 @@ resolve_addr_in_expr (dw_attr_node *a, dw_loc_descr_ref loc) break; case DW_OP_const4u: case DW_OP_const8u: - if (loc->dtprel + if (loc->dw_loc_dtprel && !resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr)) return false; break; @@ -31359,8 +31359,12 @@ copy_deref_exprloc (dw_loc_descr_ref expr) while (expr != l) { *p = new_loc_descr (expr->dw_loc_opc, 0, 0); - (*p)->dw_loc_oprnd1 = expr->dw_loc_oprnd1; - (*p)->dw_loc_oprnd2 = expr->dw_loc_oprnd2; + (*p)->dw_loc_oprnd1.val_class = expr->dw_loc_oprnd1.val_class; + (*p)->dw_loc_oprnd1.val_entry = expr->dw_loc_oprnd1.val_entry; + (*p)->dw_loc_oprnd1.v = expr->dw_loc_oprnd1.v; + (*p)->dw_loc_oprnd2.val_class = expr->dw_loc_oprnd2.val_class; + (*p)->dw_loc_oprnd2.val_entry = expr->dw_loc_oprnd2.val_entry; + (*p)->dw_loc_oprnd2.v = expr->dw_loc_oprnd2.v; p = &(*p)->dw_loc_next; expr = expr->dw_loc_next; } @@ -31451,7 +31455,9 @@ optimize_string_length (dw_attr_node *a) copy over the DW_AT_location attribute from die to a. */ if (l->dw_loc_next != NULL) { - a->dw_attr_val = av->dw_attr_val; + a->dw_attr_val.val_class = av->dw_attr_val.val_class; + a->dw_attr_val.val_entry = av->dw_attr_val.val_entry; + a->dw_attr_val.v = av->dw_attr_val.v; return 1; } @@ -31737,7 +31743,7 @@ hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate) { case DW_OP_const4u: case DW_OP_const8u: - if (loc->dtprel) + if (loc->dw_loc_dtprel) goto hash_addr; /* FALLTHRU */ case DW_OP_const1u: @@ -31839,7 +31845,7 @@ hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate) break; case DW_OP_addr: hash_addr: - if (loc->dtprel) + if (loc->dw_loc_dtprel) { unsigned char dtprel = 0xd1; hstate.add_object (dtprel); @@ -31851,7 +31857,7 @@ hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate) case DW_OP_GNU_const_index: case DW_OP_constx: { - if (loc->dtprel) + if (loc->dw_loc_dtprel) { unsigned char dtprel = 0xd1; hstate.add_object (dtprel); @@ -31998,7 +32004,7 @@ compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y) { case DW_OP_const4u: case DW_OP_const8u: - if (x->dtprel) + if (x->dw_loc_dtprel) goto hash_addr; /* FALLTHRU */ case DW_OP_const1u: @@ -32162,7 +32168,7 @@ compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y) { for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next) if (x->dw_loc_opc != y->dw_loc_opc - || x->dtprel != y->dtprel + || x->dw_loc_dtprel != y->dw_loc_dtprel || !compare_loc_operands (x, y)) break; return x == NULL && y == NULL; diff --git a/gcc/dwarf2out.h b/gcc/dwarf2out.h index fe50956..a0b0fa4 100644 --- a/gcc/dwarf2out.h +++ b/gcc/dwarf2out.h @@ -276,6 +276,25 @@ typedef struct GTY(()) dw_loc_list_struct { struct GTY(()) dw_val_node { enum dw_val_class val_class; + /* On 64-bit host, there are 4 bytes of padding between val_class + and val_entry. Reuse the padding for other content of + dw_loc_descr_node and dw_attr_struct. */ + union dw_val_node_parent + { + struct dw_val_loc_descr_node + { + ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc_v : 8; + /* Used to distinguish DW_OP_addr with a direct symbol relocation + from DW_OP_addr with a dtp-relative symbol relocation. */ + unsigned int dw_loc_dtprel_v : 1; + /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff. + it targets a DWARF prodecure argument. In this case, it needs to be + relocated according to the current frame offset. */ + unsigned int dw_loc_frame_offset_rel_v : 1; + } u1; + int u2; + enum dwarf_attribute u3; + } GTY((skip)) u; struct addr_table_entry * GTY(()) val_entry; union dw_val_struct_union { @@ -321,15 +340,15 @@ struct GTY(()) dw_val_node { struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node { dw_loc_descr_ref dw_loc_next; - ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8; +#define dw_loc_opc dw_loc_oprnd1.u.u1.dw_loc_opc_v /* Used to distinguish DW_OP_addr with a direct symbol relocation from DW_OP_addr with a dtp-relative symbol relocation. */ - unsigned int dtprel : 1; +#define dw_loc_dtprel dw_loc_oprnd1.u.u1.dw_loc_dtprel_v /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff. it targets a DWARF prodecure argument. In this case, it needs to be relocated according to the current frame offset. */ - unsigned int frame_offset_rel : 1; - int dw_loc_addr; +#define dw_loc_frame_offset_rel dw_loc_oprnd1.u.u1.dw_loc_frame_offset_rel_v +#define dw_loc_addr dw_loc_oprnd2.u.u2 dw_val_node dw_loc_oprnd1; dw_val_node dw_loc_oprnd2; }; @@ -493,7 +512,7 @@ void dwarf2out_cc_finalize (void); Attributes are typically linked below the DIE they modify. */ typedef struct GTY(()) dw_attr_struct { - enum dwarf_attribute dw_attr; +#define dw_attr dw_attr_val.u.u3 dw_val_node dw_attr_val; } dw_attr_node; diff --git a/gcc/except.cc b/gcc/except.cc index d5eb927..0fe1e09 100644 --- a/gcc/except.cc +++ b/gcc/except.cc @@ -970,12 +970,26 @@ expand_dw2_landing_pad_for_region (eh_region region) { /* Nothing */ } if (region->exc_ptr_reg) - emit_move_insn (region->exc_ptr_reg, - gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0))); + { + rtx exc_ptr_reg; + if (EH_RETURN_DATA_REGNO (0) != INVALID_REGNUM) + exc_ptr_reg = gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0)); + else + /* The target must be doing something special. Submit a dummy. */ + exc_ptr_reg = constm1_rtx; + emit_move_insn (region->exc_ptr_reg, exc_ptr_reg); + } if (region->filter_reg) - emit_move_insn (region->filter_reg, - gen_rtx_REG (targetm.eh_return_filter_mode (), - EH_RETURN_DATA_REGNO (1))); + { + rtx filter_reg; + if (EH_RETURN_DATA_REGNO (1) != INVALID_REGNUM) + filter_reg = gen_rtx_REG (targetm.eh_return_filter_mode (), + EH_RETURN_DATA_REGNO (1)); + else + /* The target must be doing something special. Submit a dummy. */ + filter_reg = constm1_rtx; + emit_move_insn (region->filter_reg, filter_reg); + } } /* Expand the extra code needed at landing pads for dwarf2 unwinding. */ @@ -2935,7 +2949,14 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname)) { section *s; - if (exception_section) + if (exception_section + /* Don't use the cached section for comdat if it will be different. */ +#ifdef HAVE_LD_EH_GC_SECTIONS + && !(targetm_common.have_named_sections + && DECL_COMDAT_GROUP (current_function_decl) + && HAVE_COMDAT_GROUP) +#endif + ) s = exception_section; else { diff --git a/gcc/expmed.cc b/gcc/expmed.cc index df09cbc..8cf10d9 100644 --- a/gcc/expmed.cc +++ b/gcc/expmed.cc @@ -285,7 +285,7 @@ init_expmed (void) for (speed = 0; speed < 2; speed++) { crtl->maybe_hot_insn_p = speed; - set_zero_cost (speed, set_src_cost (const0_rtx, mode, speed)); + set_zero_cost (speed, set_src_cost (const0_rtx, QImode, speed)); for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode = (machine_mode)(mode + 1)) diff --git a/gcc/flag-types.h b/gcc/flag-types.h index 0127698..9a3cc4a 100644 --- a/gcc/flag-types.h +++ b/gcc/flag-types.h @@ -407,6 +407,13 @@ enum lto_partition_model { LTO_PARTITION_CACHE = 5 }; +/* flag_lto_locality_cloning initialization values. */ +enum lto_locality_cloning_model { + LTO_LOCALITY_NO_CLONING = 0, + LTO_LOCALITY_NON_INTERPOSABLE_CLONING = 1, + LTO_LOCALITY_MAXIMAL_CLONING = 2, +}; + /* flag_lto_linker_output initialization values. */ enum lto_linker_output { LTO_LINKER_OUTPUT_UNKNOWN, diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 1275ef7..c9471ea 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -7246,6 +7246,12 @@ tree_swap_operands_p (const_tree arg0, const_tree arg1) if (TREE_CONSTANT (arg0)) return true; + /* Put invariant address in arg1. */ + if (is_gimple_invariant_address (arg1)) + return false; + if (is_gimple_invariant_address (arg0)) + return true; + /* It is preferable to swap two SSA_NAME to ensure a canonical form for commutative and comparison operators. Ensuring a canonical form allows the optimizers to find additional redundancies without diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 19a26ba..bda22d1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,266 @@ +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + * match.cc (match_exit_cycle): Allow to exit team block. + (gfc_match_end_team): Create end_team node also without + parameter list. + * trans-intrinsic.cc (conv_stat_and_team): Team and team_number + only need to be a single pointer. + * trans-stmt.cc (trans_associate_var): Create a mapping coarray + token for coarray associations or it is not addressed correctly. + * trans.h (enum gfc_coarray_regtype): Add mapping mode to + coarray register. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + * check.cc (gfc_check_image_index): Check for team or + team_number correctnes. + (gfc_check_num_images): Same. + * gfortran.texi: Update documentation on num_images' API + function. + * intrinsic.cc (add_functions): Update signature of image_index + and num_images. Both can take either a team handle or number. + * intrinsic.h (gfc_check_num_images): Update signature to take + either team or team_number. + (gfc_check_image_index): Can take coarray, subscripts and team + or team number now. + (gfc_simplify_image_index): Same. + (gfc_simplify_num_images): Same. + (gfc_resolve_image_index): Same. + * intrinsic.texi: Update documentation of num_images() Fortran + function. + * iresolve.cc (gfc_resolve_image_index): Update signature. + * simplify.cc (gfc_simplify_num_images): Update signature and + remove undocumented failed argument. + (gfc_simplify_image_index): Add team or team number argument. + * trans-intrinsic.cc (conv_stat_and_team): Because being + optional teams need to be a pointer to the opaque pointer. + (conv_caf_sendget): Correct call; was two arguments short. + (trans_image_index): Support team or team_number. + (trans_num_images): Same. + (conv_intrinsic_cobound): Adapt to changed signature of + num_images in call. + * trans-stmt.cc (gfc_trans_sync): Same. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87326 + * check.cc (gfc_check_this_image): Check the three different + parameter lists possible for this_image and sort them correctly. + * gfortran.texi: Update documentation on this_image's API. + * intrinsic.cc (add_functions): Update this_image's signature. + (check_specific): Add specific check for this_image. + * intrinsic.h (gfc_check_this_image): Change to flexible + argument list. + * intrinsic.texi: Update documentation on this_image(). + * iresolve.cc (gfc_resolve_this_image): Resolve the different + arguments. + * simplify.cc (gfc_simplify_this_image): Simplify the simplify + routine. + * trans-decl.cc (gfc_build_builtin_function_decls): Update + signature of this_image. + * trans-expr.cc (gfc_caf_get_image_index): Use correct signature + of this_image. + * trans-intrinsic.cc (trans_this_image): Adapt to correct + signature. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/88154 + PR fortran/88960 + PR fortran/97210 + PR fortran/103001 + * check.cc (team_type_check): Check a type for being team_type + from the iso_fortran_env module. + (gfc_check_image_status): Use team_type check. + (gfc_check_get_team): Check for level argument. + (gfc_check_team_number): Use team_type check. + * expr.cc (gfc_check_assign): Add treatment for returning + team_type in caf-single mode. + * gfortran.texi: Add/Update documentation for get_team and + team_number API functions. + * intrinsic.cc (add_functions): Update get_team signature. + * intrinsic.h (gfc_resolve_get_team): Add prototype. + * intrinsic.texi: Add/Update documentation for get_team and + team_number Fortran functions. + * iresolve.cc (gfc_resolve_get_team): Resolve return type to be + of type team_type. + * iso-fortran-env.def: Update STAT_LOCK constants. They have + nothing to do with files. Add level constants for get_team. + * libgfortran.h: Add level and unlock_stat constants. + * simplify.cc (gfc_simplify_get_team): Simply to correct return + type team_type. + * trans-decl.cc (gfc_build_builtin_function_decls): Update + get_team and image_status API prototypes to correct signatures. + * trans-intrinsic.cc (conv_intrinsic_image_status): Translate + second parameter correctly. + (conv_intrinsic_team_number): Translate optional single team + argument correctly. + (gfc_conv_intrinsic_function): Add translation of get_team. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87326 + PR fortran/87556 + PR fortran/88254 + PR fortran/103796 + * coarray.cc (split_expr_at_caf_ref): Treat polymorphic types + correctly. Ensure resolve of expression after coindex. + (create_allocated_callback): Fix parameter of allocated function + for coarrays. + (coindexed_expr_callback): Improve detection of coarrays in + allocated function. + * decl.cc (gfc_match_end): Add team block matching. + * dump-parse-tree.cc (show_code_node): Dump change team block as + such. + * frontend-passes.cc (gfc_code_walker): Recognice team block. + * gfortran.texi: Add documentation for team api functions. + * intrinsic.texi: Add documentation about team_type in + iso_fortran_env module. + * iso-fortran-env.def (team_type): Use helper to get pointer + kind. + * match.cc (gfc_match_associate): Factor out matching of + association list, because it is used in change team as well. + (check_coarray_assoc): Ensure, that the association is to a + coarray. + (match_association_list): Match a list of association either in + associate or in change team. + (gfc_match_form_team): Match form team correctly include + new_index. + (gfc_match_change_team): Match change team with association + list. + (gfc_match_end_team): Match end team including stat and errmsg. + (gfc_match_return): Prevent return from team block. + * parse.cc (decode_statement): Sort team block. + (next_statement): Same. + (check_statement_label): Same. + (accept_statement): Same. + (verify_st_order): Same. + (parse_associate): Renamed to move_associates_to_block... + (move_associates_to_block): ... to enable reuse for change team. + (parse_change_team): Parse it as block. + (parse_executable): Same. + * parse.h (enum gfc_compile_state): Add team block as compiler + state. + * resolve.cc (resolve_scalar_argument): New function to resolve + an argument to a statement as a scalar. + (resolve_form_team): Resolve its members. + (resolve_change_team): Same. + (resolve_branch): Prevent branch from jumping out of team block. + (check_team): Removed. + * trans-decl.cc (gfc_build_builtin_function_decls): Add stat and + errmsg to team API functions and update their arguments. + * trans-expr.cc (gfc_trans_subcomponent_assign): Also null the + token when moving memory or an allocated() will not detect a + free. + * trans-intrinsic.cc (gfc_conv_intrinsic_caf_is_present_remote): + Adapt to signature change no longer a pointer-pointer. + * trans-stmt.cc (gfc_trans_form_team): Translate a form team + including new_index. + (gfc_trans_change_team): Translate a change team as a block. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87939 + * check.cc (gfc_check_move_alloc): Add stat and errmsg to + move_alloc. + * dump-parse-tree.cc (show_sync_stat): New helper function. + (show_code_node): Use show_sync_stat to print stat and errmsg. + * gfortran.h (struct sync_stat): New struct to unify stat and + errmsg handling. + * intrinsic.cc (add_subroutines): Correct signature of + move_alloc. + * intrinsic.h (gfc_check_move_alloc): Correct signature of + check_move_alloc. + * match.cc (match_named_arg): Match an optional argument to a + statement. + (match_stat_errmsg): Match a stat= or errmsg= named argument. + (gfc_match_critical): Use match_stat_errmsg to match the named + arguments. + (gfc_match_sync_team): Same. + * resolve.cc (resolve_team_argument): Resolve an expr to have + type TEAM_TYPE from iso_fortran_env. + (resolve_scalar_variable_as_arg): Resolve an argument as a + scalar type. + (resolve_sync_stat): Resolve stat and errmsg expressions. + (resolve_sync_team): Resolve a sync team statement using + sync_stat helper. + (resolve_end_team): Same. + (resolve_critical): Same. + * trans-decl.cc (gfc_build_builtin_function_decls): Correct + sync_team signature. + * trans-intrinsic.cc (conv_intrinsic_move_alloc): Store stat + an errmsg optional arguments in helper struct and use helper + to translate. + * trans-stmt.cc (trans_exit): Implement DRY pattern for + generating an _exit(). + (gfc_trans_sync_stat): Translate stat and errmsg contents. + (gfc_trans_end_team): Use helper to translate stat and errmsg. + (gfc_trans_sync_team): Same. + (gfc_trans_critical): Same. + * trans-stmt.h (gfc_trans_sync_stat): New function. + * trans.cc (gfc_deallocate_with_status): Parameterize check at + runtime to allow unallocated (co-)array when freeing a + structure. + (gfc_deallocate_scalar_with_status): Same and also add errmsg. + * trans.h (gfc_deallocate_with_status): Signature changes. + (gfc_deallocate_scalar_with_status): Same. + +2025-04-19 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/119836 + * resolve.cc (check_pure_function): Fix checking for + an impure subprogram within a DO CONCURRENT construct. + (pure_subroutine): Ditto. + +2025-04-16 Harald Anlauf <anlauf@gmx.de> + + PR fortran/106948 + * resolve.cc (gfc_pure_function): If a function has been resolved, + but esym is not yet set, look at its attributes to see whether it + is pure or elemental. + +2025-04-15 Tobias Burnus <tburnus@baylibre.com> + + * f95-lang.cc (LANG_HOOKS_OMP_DEEP_MAPPING, + LANG_HOOKS_OMP_DEEP_MAPPING_P, LANG_HOOKS_OMP_DEEP_MAPPING_CNT): + Define. + * openmp.cc (gfc_match_omp_clause_reduction): Fix location setting. + (resolve_omp_clauses): Permit allocatable components, reject + them and polymorphic variables in PRIVATE/FIRSTPRIVATE. + * trans-decl.cc (add_clause): Set clause location. + * trans-openmp.cc (gfc_has_alloc_comps): Add ptr_ok and + shallow_alloc_only Boolean arguments. + (gfc_omp_replace_alloc_by_to_mapping): New. + (gfc_omp_private_outer_ref, gfc_walk_alloc_comps, + gfc_omp_clause_default_ctor, gfc_omp_clause_copy_ctor, + gfc_omp_clause_assign_op, gfc_omp_clause_dtor): Update call to it. + (gfc_omp_finish_clause): Minor cleanups, improve location data, + handle allocatable components. + (gfc_omp_deep_mapping_map, gfc_omp_deep_mapping_item, + gfc_omp_deep_mapping_comps, gfc_omp_gen_simple_loop, + gfc_omp_get_array_size, gfc_omp_elmental_loop, + gfc_omp_deep_map_kind_p, gfc_omp_deep_mapping_int_p, + gfc_omp_deep_mapping_p, gfc_omp_deep_mapping_do, + gfc_omp_deep_mapping_cnt, gfc_omp_deep_mapping): New. + (gfc_trans_omp_array_section): Save array descriptor in case + deep-mapping lang hook will need it. + (gfc_trans_omp_clauses): Likewise; use better clause location data. + * trans.h (gfc_omp_deep_mapping_p, gfc_omp_deep_mapping_cnt, + gfc_omp_deep_mapping): Add function prototypes. + +2025-04-13 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/119669 + * interface.cc (compare_parameter): Error when mismatch between + formal argument as subroutine and function. If the dummy + argument is a known function, set its typespec. + +2025-04-12 Thomas Schwinge <tschwinge@baylibre.com> + + PR fortran/101602 + * trans-stmt.cc (gfc_trans_concurrent_locality_spec): Fix + 'static_assert'. + 2025-04-09 Harald Anlauf <anlauf@gmx.de> PR fortran/119656 diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index 9c66c25..299c216 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -1809,6 +1809,23 @@ gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom, gfc_expr *stat) return gfc_check_atomic (atom, 1, value, 0, stat, 2); } +bool +team_type_check (gfc_expr *e, int n) +{ + if (e->ts.type != BT_DERIVED || !e->ts.u.derived + || e->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV + || e->ts.u.derived->intmod_sym_id != ISOFORTRAN_TEAM_TYPE) + { + gfc_error ("%qs argument of %qs intrinsic at %L shall be of type " + "%<team_type%> from the intrinsic module " + "%<ISO_FORTRAN_ENV%>", + gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, + &e->where); + return false; + } + + return true; +} bool gfc_check_image_status (gfc_expr *image, gfc_expr *team) @@ -1818,14 +1835,7 @@ gfc_check_image_status (gfc_expr *image, gfc_expr *team) || !positive_check (0, image)) return false; - if (team) - { - gfc_error ("%qs argument of %qs intrinsic at %L not yet supported", - gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic, - &team->where); - return false; - } - return true; + return !team || (scalar_check (team, 0) && team_type_check (team, 0)); } @@ -1905,10 +1915,25 @@ gfc_check_get_team (gfc_expr *level) { if (level) { - gfc_error ("%qs argument of %qs intrinsic at %L not yet supported", - gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic, - &level->where); - return false; + int l; + + if (!type_check (level, 0, BT_INTEGER) || !scalar_check (level, 0)) + return false; + + /* When level is a constant, try to extract it. If not, the runtime has + to check. */ + if (gfc_extract_int (level, &l, 0)) + return true; + + if (l < GFC_CAF_INITIAL_TEAM || l > GFC_CAF_CURRENT_TEAM) + { + gfc_error ("%qs argument of %qs intrinsic at %L shall specify one of " + "the INITIAL_TEAM, PARENT_TEAM or CURRENT_TEAM constants " + "from the intrinsic module ISO_FORTRAN_ENV", + gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic, + &level->where); + return false; + } } return true; } @@ -3810,7 +3835,8 @@ gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -4683,8 +4709,18 @@ gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask) bool -gfc_check_move_alloc (gfc_expr *from, gfc_expr *to) +gfc_check_move_alloc (gfc_expr *from, gfc_expr *to, gfc_expr *stat, + gfc_expr *errmsg) { + struct sync_stat sync_stat = {stat, errmsg}; + + if ((stat || errmsg) + && !gfc_notify_std (GFC_STD_F2008, "STAT= or ERRMSG= at %L not supported", + &to->where)) + return false; + + gfc_resolve_sync_stat (&sync_stat); + if (!variable_check (from, 0, false)) return false; if (!allocatable_check (from, 0)) @@ -6530,13 +6566,15 @@ gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status) bool -gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub) +gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub, + gfc_expr *team_or_team_number) { mpz_t nelems; if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } @@ -6550,12 +6588,8 @@ gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub) return false; } - if (sub->ts.type != BT_INTEGER) - { - gfc_error ("Type of %s argument of IMAGE_INDEX at %L shall be INTEGER", - gfc_current_intrinsic_arg[1]->name, &sub->where); - return false; - } + if (!type_check (sub, 1, BT_INTEGER)) + return false; if (gfc_array_size (sub, &nelems)) { @@ -6570,47 +6604,46 @@ gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub) mpz_clear (nelems); } + if (team_or_team_number) + { + if (!type_check2 (team_or_team_number, 2, BT_DERIVED, BT_INTEGER) + || !scalar_check (team_or_team_number, 2)) + return false; + + /* Check team is of team_type. */ + if (team_or_team_number->ts.type == BT_DERIVED + && !team_type_check (team_or_team_number, 2)) + return false; + } + return true; } - bool -gfc_check_num_images (gfc_expr *distance, gfc_expr *failed) +gfc_check_num_images (gfc_expr *team_or_team_number) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } - if (distance) - { - if (!type_check (distance, 0, BT_INTEGER)) - return false; - - if (!nonnegative_check ("DISTANCE", distance)) - return false; - - if (!scalar_check (distance, 0)) - return false; - - if (!gfc_notify_std (GFC_STD_F2018, "DISTANCE= argument to " - "NUM_IMAGES at %L", &distance->where)) - return false; - } + if (!team_or_team_number) + return true; - if (failed) - { - if (!type_check (failed, 1, BT_LOGICAL)) - return false; + if (!gfc_notify_std (GFC_STD_F2008, + "%<team%> or %<team_number%> argument to %qs at %L", + gfc_current_intrinsic, &team_or_team_number->where)) + return false; - if (!scalar_check (failed, 1)) - return false; + if (!type_check2 (team_or_team_number, 0, BT_DERIVED, BT_INTEGER) + || !scalar_check (team_or_team_number, 0)) + return false; - if (!gfc_notify_std (GFC_STD_F2018, "FAILED= argument to " - "NUM_IMAGES at %L", &failed->where)) - return false; - } + if (team_or_team_number->ts.type == BT_DERIVED + && !team_type_check (team_or_team_number, 0)) + return false; return true; } @@ -6621,98 +6654,126 @@ gfc_check_team_number (gfc_expr *team) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } - if (team) - { - if (team->ts.type != BT_DERIVED - || team->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV - || team->ts.u.derived->intmod_sym_id != ISOFORTRAN_TEAM_TYPE) - { - gfc_error ("TEAM argument at %L to the intrinsic TEAM_NUMBER " - "shall be of type TEAM_TYPE", &team->where); - return false; - } - } - else - return true; - - return true; + return !team || (scalar_check (team, 0) && team_type_check (team, 0)); } bool -gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim, gfc_expr *distance) +gfc_check_this_image (gfc_actual_arglist *args) { + gfc_expr *coarray, *dim, *team, *cur; + + coarray = dim = team = NULL; + if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } - if (coarray == NULL && dim == NULL && distance == NULL) + /* Shortcut when no arguments are given. */ + if (!args->expr && !args->next->expr && !args->next->next->expr) return true; - if (dim != NULL && coarray == NULL) - { - gfc_error ("DIM argument without COARRAY argument not allowed for " - "THIS_IMAGE intrinsic at %L", &dim->where); - return false; - } + cur = args->expr; - if (distance && (coarray || dim)) + if (cur) { - gfc_error ("The DISTANCE argument may not be specified together with the " - "COARRAY or DIM argument in intrinsic at %L", - &distance->where); - return false; + gfc_push_suppress_errors (); + if (coarray_check (cur, 0)) + coarray = cur; + else if (scalar_check (cur, 2) && team_type_check (cur, 2)) + team = cur; + else + { + gfc_pop_suppress_errors (); + gfc_error ("First argument of %<this_image%> intrinsic at %L must be " + "a coarray " + "variable or an object of type %<team_type%> from the " + "intrinsic module " + "%<ISO_FORTRAN_ENV%>", + &cur->where); + return false; + } + gfc_pop_suppress_errors (); } - /* Assume that we have "this_image (distance)". */ - if (coarray && !gfc_is_coarray (coarray) && coarray->ts.type == BT_INTEGER) + cur = args->next->expr; + if (cur) { - if (dim) + gfc_push_suppress_errors (); + if (dim_check (cur, 1, true) && cur->corank == 0) + dim = cur; + else if (scalar_check (cur, 2) && team_type_check (cur, 2)) { - gfc_error ("Unexpected DIM argument with noncoarray argument at %L", - &coarray->where); + if (team) + { + gfc_pop_suppress_errors (); + goto team_type_error; + } + team = cur; + } + else + { + gfc_pop_suppress_errors (); + gfc_error ("Second argument of %<this_image%> intrinsic at %L must " + "be an %<INTEGER%> " + "typed scalar or an object of type %<team_type%> from the " + "intrinsic " + "module %<ISO_FORTRAN_ENV%>", + &cur->where); return false; } - distance = coarray; + gfc_pop_suppress_errors (); } - if (distance) + cur = args->next->next->expr; + if (cur) { - if (!type_check (distance, 2, BT_INTEGER)) - return false; - - if (!nonnegative_check ("DISTANCE", distance)) - return false; - - if (!scalar_check (distance, 2)) - return false; - - if (!gfc_notify_std (GFC_STD_F2018, "DISTANCE= argument to " - "THIS_IMAGE at %L", &distance->where)) + if (team_type_check (cur, 2) && scalar_check (cur, 2)) + { + if (team) + goto team_type_error; + team = cur; + } + else return false; + } - return true; + if (dim != NULL && coarray == NULL) + { + gfc_error ("%<dim%> argument without %<coarray%> argument not allowed " + "for %<this_image%> intrinsic at %L", + &dim->where); + return false; } - if (!coarray_check (coarray, 0)) + if (dim && !dim_corank_check (dim, coarray)) return false; - if (dim != NULL) - { - if (!dim_check (dim, 1, false)) - return false; - - if (!dim_corank_check (dim, coarray)) - return false; - } + if (team + && !gfc_notify_std (GFC_STD_F2018, + "%<team%> argument to %<this_image%> at %L", + &team->where)) + return false; + args->expr = coarray; + args->next->expr = dim; + args->next->next->expr = team; return true; + +team_type_error: + gfc_error ( + "At most one argument of type %<team_type%> from the intrinsic module " + "%<ISO_FORTRAN_ENV%> to %<this_image%> at %L allowed", + &cur->where); + return false; } /* Calculate the sizes for transfer, used by gfc_check_transfer and also @@ -6911,7 +6972,8 @@ gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind) { if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable"); + gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable", + gfc_current_intrinsic_where); return false; } diff --git a/gcc/fortran/coarray.cc b/gcc/fortran/coarray.cc index 7058325..2f067f8 100644 --- a/gcc/fortran/coarray.cc +++ b/gcc/fortran/coarray.cc @@ -357,7 +357,9 @@ split_expr_at_caf_ref (gfc_expr *expr, gfc_namespace *ns, gcc_assert (expr->expr_type == EXPR_VARIABLE); caf_ts = &expr->symtree->n.sym->ts; - if (!expr->symtree->n.sym->attr.codimension) + if (!(expr->symtree->n.sym->ts.type == BT_CLASS + ? CLASS_DATA (expr->symtree->n.sym)->attr.codimension + : expr->symtree->n.sym->attr.codimension)) { /* The coarray is in some component. Find it. */ caf_ref = expr->ref; @@ -432,6 +434,9 @@ split_expr_at_caf_ref (gfc_expr *expr, gfc_namespace *ns, else if (base->ts.type == BT_CLASS) convert_coarray_class_to_derived_type (base, ns); + memset (&(*post_caf_ref_expr)->ts, 0, sizeof (gfc_typespec)); + gfc_resolve_expr (*post_caf_ref_expr); + (*post_caf_ref_expr)->corank = 0; gfc_expression_rank (*post_caf_ref_expr); if (for_send) gfc_expression_rank (expr); @@ -1130,8 +1135,8 @@ create_allocated_callback (gfc_expr *expr) // ADD_ARG (expr->symtree->name, base, BT_VOID, INTENT_IN); base = post_caf_ref_expr->symtree->n.sym; + base->attr.pointer = !base->attr.dimension; gfc_set_sym_referenced (base); - gfc_commit_symbol (base); *argptr = gfc_get_formal_arglist (); (*argptr)->sym = base; argptr = &(*argptr)->next; @@ -1420,7 +1425,8 @@ coindexed_expr_callback (gfc_expr **e, int *walk_subtrees, { case GFC_ISYM_ALLOCATED: if ((*e)->value.function.actual->expr - && gfc_is_coindexed ((*e)->value.function.actual->expr)) + && (gfc_is_coarray ((*e)->value.function.actual->expr) + || gfc_is_coindexed ((*e)->value.function.actual->expr))) { rewrite_caf_allocated (e); *walk_subtrees = 0; diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index feb454e..69acd2d 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -8459,6 +8459,7 @@ gfc_match_end (gfc_statement *st) { case COMP_ASSOCIATE: case COMP_BLOCK: + case COMP_CHANGE_TEAM: if (startswith (block_name, "block@")) block_name = NULL; break; @@ -8515,7 +8516,7 @@ gfc_match_end (gfc_statement *st) case COMP_SUBROUTINE: *st = ST_END_SUBROUTINE; if (!abbreviated_modproc_decl) - target = " subroutine"; + target = " subroutine"; else target = " procedure"; eos_ok = !contained_procedure (); @@ -8524,7 +8525,7 @@ gfc_match_end (gfc_statement *st) case COMP_FUNCTION: *st = ST_END_FUNCTION; if (!abbreviated_modproc_decl) - target = " function"; + target = " function"; else target = " procedure"; eos_ok = !contained_procedure (); @@ -8646,6 +8647,12 @@ gfc_match_end (gfc_statement *st) eos_ok = 0; break; + case COMP_CHANGE_TEAM: + *st = ST_END_TEAM; + target = " team"; + eos_ok = 0; + break; + default: gfc_error ("Unexpected END statement at %C"); goto cleanup; @@ -8683,14 +8690,19 @@ gfc_match_end (gfc_statement *st) else got_matching_end = true; + if (*st == ST_END_TEAM && gfc_match_end_team () == MATCH_ERROR) + /* Emit errors of stat and errmsg parsing now to finish the block and + continue analysis of compilation unit. */ + gfc_error_check (); + old_loc = gfc_current_locus; /* If we're at the end, make sure a block name wasn't required. */ if (gfc_match_eos () == MATCH_YES) { - if (*st != ST_ENDDO && *st != ST_ENDIF && *st != ST_END_SELECT && *st != ST_END_FORALL && *st != ST_END_WHERE && *st != ST_END_BLOCK - && *st != ST_END_ASSOCIATE && *st != ST_END_CRITICAL) + && *st != ST_END_ASSOCIATE && *st != ST_END_CRITICAL + && *st != ST_END_TEAM) return MATCH_YES; if (!block_name) diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc index 9501bcc..dd920f3 100644 --- a/gcc/fortran/dump-parse-tree.cc +++ b/gcc/fortran/dump-parse-tree.cc @@ -2607,6 +2607,20 @@ show_omp_node (int level, gfc_code *c) fprintf (dumpfile, " (%s)", c->ext.omp_clauses->critical_name); } +static void +show_sync_stat (struct sync_stat *sync_stat) +{ + if (sync_stat->stat) + { + fputs (" stat=", dumpfile); + show_expr (sync_stat->stat); + } + if (sync_stat->errmsg) + { + fputs (" errmsg=", dumpfile); + show_expr (sync_stat->errmsg); + } +} /* Show a single code node and everything underneath it if necessary. */ @@ -2755,20 +2769,27 @@ show_code_node (int level, gfc_code *c) fputs ("FAIL IMAGE ", dumpfile); break; - case EXEC_CHANGE_TEAM: - fputs ("CHANGE TEAM", dumpfile); - break; - case EXEC_END_TEAM: fputs ("END TEAM", dumpfile); + show_sync_stat (&c->ext.sync_stat); break; case EXEC_FORM_TEAM: - fputs ("FORM TEAM", dumpfile); + fputs ("FORM TEAM ", dumpfile); + show_expr (c->expr1); + show_expr (c->expr2); + if (c->expr3) + { + fputs (" NEW_INDEX", dumpfile); + show_expr (c->expr3); + } + show_sync_stat (&c->ext.sync_stat); break; case EXEC_SYNC_TEAM: - fputs ("SYNC TEAM", dumpfile); + fputs ("SYNC TEAM ", dumpfile); + show_expr (c->expr1); + show_sync_stat (&c->ext.sync_stat); break; case EXEC_SYNC_ALL: @@ -2913,6 +2934,7 @@ show_code_node (int level, gfc_code *c) fputs ("ENDIF", dumpfile); break; + case EXEC_CHANGE_TEAM: case EXEC_BLOCK: { const char *blocktype, *sname = NULL; @@ -2928,17 +2950,23 @@ show_code_node (int level, gfc_code *c) if (fcn && fcn->expr_type == EXPR_FUNCTION) sname = fcn->value.function.actual->expr->symtree->n.sym->name; } + else if (c->op == EXEC_CHANGE_TEAM) + blocktype = "CHANGE TEAM"; else if (c->ext.block.assoc) blocktype = "ASSOCIATE"; else blocktype = "BLOCK"; show_indent (); fprintf (dumpfile, "%s ", blocktype); + if (c->op == EXEC_CHANGE_TEAM) + show_expr (c->expr1); for (alist = c->ext.block.assoc; alist; alist = alist->next) { fprintf (dumpfile, " %s = ", sname ? sname : alist->name); show_expr (alist->target); } + if (c->op == EXEC_CHANGE_TEAM) + show_sync_stat (&c->ext.block.sync_stat); ++show_level; ns = c->ext.block.ns; @@ -2948,8 +2976,13 @@ show_code_node (int level, gfc_code *c) gfc_current_ns = saved_ns; show_code (show_level, ns->code); --show_level; - show_indent (); - fprintf (dumpfile, "END %s ", blocktype); + if (c->op != EXEC_CHANGE_TEAM) + { + /* A CHANGE_TEAM is terminated by a END_TEAM, which have its own + stat and errmsg. Therefore, let it print itself. */ + show_indent (); + fprintf (dumpfile, "END %s ", blocktype); + } break; } @@ -3048,7 +3081,9 @@ show_code_node (int level, gfc_code *c) break; case EXEC_CRITICAL: - fputs ("CRITICAL\n", dumpfile); + fputs ("CRITICAL", dumpfile); + show_sync_stat (&c->ext.sync_stat); + fputc ('\n', dumpfile); show_code (level + 1, c->block->next); code_indent (level, 0); fputs ("END CRITICAL", dumpfile); diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index 0753667..07e9bac 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -3836,7 +3836,13 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform, if (has_pointer && (ref == NULL || ref->next == NULL) && lvalue->symtree->n.sym->attr.data) return true; - else + /* Prevent the following error message for caf-single mode, because there + are no teams in single mode and the simplify returns a null then. */ + else if (!(flag_coarray == GFC_FCOARRAY_SINGLE + && rvalue->ts.type == BT_DERIVED + && rvalue->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV + && rvalue->ts.u.derived->intmod_sym_id + == ISOFORTRAN_TEAM_TYPE)) { gfc_error ("NULL appears on right-hand side in assignment at %L", &rvalue->where); diff --git a/gcc/fortran/f95-lang.cc b/gcc/fortran/f95-lang.cc index 124d62f..1f09553 100644 --- a/gcc/fortran/f95-lang.cc +++ b/gcc/fortran/f95-lang.cc @@ -148,6 +148,9 @@ gfc_get_sarif_source_language (const char *) #undef LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR #undef LANG_HOOKS_OMP_CLAUSE_DTOR #undef LANG_HOOKS_OMP_FINISH_CLAUSE +#undef LANG_HOOKS_OMP_DEEP_MAPPING +#undef LANG_HOOKS_OMP_DEEP_MAPPING_P +#undef LANG_HOOKS_OMP_DEEP_MAPPING_CNT #undef LANG_HOOKS_OMP_ALLOCATABLE_P #undef LANG_HOOKS_OMP_SCALAR_TARGET_P #undef LANG_HOOKS_OMP_SCALAR_P @@ -188,6 +191,9 @@ gfc_get_sarif_source_language (const char *) #define LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR gfc_omp_clause_linear_ctor #define LANG_HOOKS_OMP_CLAUSE_DTOR gfc_omp_clause_dtor #define LANG_HOOKS_OMP_FINISH_CLAUSE gfc_omp_finish_clause +#define LANG_HOOKS_OMP_DEEP_MAPPING gfc_omp_deep_mapping +#define LANG_HOOKS_OMP_DEEP_MAPPING_P gfc_omp_deep_mapping_p +#define LANG_HOOKS_OMP_DEEP_MAPPING_CNT gfc_omp_deep_mapping_cnt #define LANG_HOOKS_OMP_ALLOCATABLE_P gfc_omp_allocatable_p #define LANG_HOOKS_OMP_SCALAR_P gfc_omp_scalar_p #define LANG_HOOKS_OMP_SCALAR_TARGET_P gfc_omp_scalar_target_p diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc index ef9c801..02a0a23 100644 --- a/gcc/fortran/frontend-passes.cc +++ b/gcc/fortran/frontend-passes.cc @@ -5340,6 +5340,7 @@ gfc_code_walker (gfc_code **c, walk_code_fn_t codefn, walk_expr_fn_t exprfn, { case EXEC_BLOCK: + case EXEC_CHANGE_TEAM: WALK_SUBCODE (co->ext.block.ns->code); if (co->ext.block.assoc) { diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 5ef7037..46310a0 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -3162,6 +3162,11 @@ enum locality_type LOCALITY_NUM }; +struct sync_stat +{ + gfc_expr *stat, *errmsg; +}; + typedef struct gfc_code { gfc_exec_op op; @@ -3197,6 +3202,7 @@ typedef struct gfc_code gfc_omp_variant *omp_variants; bool omp_bool; int stop_code; + struct sync_stat sync_stat; struct { @@ -3207,6 +3213,7 @@ typedef struct gfc_code unsigned arr_spec_from_expr3:1; /* expr3 is not explicit */ unsigned expr3_not_explicit:1; + struct sync_stat sync_stat; } alloc; @@ -3215,6 +3222,7 @@ typedef struct gfc_code gfc_namespace *ns; gfc_association_list *assoc; gfc_case *case_list; + struct sync_stat sync_stat; } block; @@ -3985,6 +3993,7 @@ bool gfc_resolve_index (gfc_expr *, int); bool gfc_resolve_dim_arg (gfc_expr *); bool gfc_resolve_substring (gfc_ref *, bool *); void gfc_resolve_substring_charlen (gfc_expr *); +void gfc_resolve_sync_stat (struct sync_stat *); gfc_expr *gfc_expr_to_initialize (gfc_expr *); bool gfc_type_is_extensible (gfc_symbol *); bool gfc_resolve_intrinsic (gfc_symbol *, locus *); diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index 9632161..841f613 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -4230,6 +4230,12 @@ future implementation of teams. It is about to change without further notice. * _gfortran_caf_co_min:: Collective minimum reduction * _gfortran_caf_co_sum:: Collective summing reduction * _gfortran_caf_co_reduce:: Generic collective reduction +* _gfortran_caf_form_team:: Team creation function +* _gfortran_caf_change_team:: Team activation function +* _gfortran_caf_end_team:: Team termination function +* _gfortran_caf_sync_team:: Synchronize all images of a given team +* _gfortran_caf_get_team:: Get the opaque handle of the specified team +* _gfortran_caf_team_number:: Get the unique id of the given team @end menu @@ -4294,21 +4300,23 @@ using the STOP and ERROR STOP statements; those use different library calls. @table @asis @item @emph{Synopsis}: -@code{int _gfortran_caf_this_image (int distance)} +@code{int _gfortran_caf_this_image (caf_team_t team)} @item @emph{Description}: -This function returns the current image number, which is a positive number. +Return the current image number in the @var{team}, or in the current team, if +no @var{team} is given. @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{distance} @tab As specified for the @code{this_image} intrinsic -in TS18508. Shall be a nonnegative number. +@item @var{team} @tab intent(in), optional; The team this image's number is +requested for. If null, the image number in the current team is returned. @end multitable @item @emph{Notes}: -If the Fortran intrinsic @code{this_image} is invoked without an argument, which -is the only permitted form in Fortran 2008, GCC passes @code{0} as -first argument. +Available since Fortran 2008 without argument; Since Fortran 2018 with optional +team argument. Fortran 2008 uses 0 as argument for team, which is permissible, +because a team handle is always an opaque pointer, which as a special case can +be null here. @end table @@ -4318,25 +4326,29 @@ first argument. @table @asis @item @emph{Synopsis}: -@code{int _gfortran_caf_num_images(int distance, int failed)} +@code{int _gfortran_caf_num_images (caf_team_t team, int32_t *team_number)} @item @emph{Description}: -This function returns the number of images in the current team, if -@var{distance} is 0 or the number of images in the parent team at the specified -distance. If @var{failed} is -1, the function returns the number of all images at -the specified distance; if it is 0, the function returns the number of -nonfailed images, and if it is 1, it returns the number of failed images. +This function returns the number of images in the team given by @var{team} or +@var{team_number}, if either one is present. If both are null, then the number +of images in the current team is returned. @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{distance} @tab the distance from this image to the ancestor. -Shall be positive. -@item @var{failed} @tab shall be -1, 0, or 1 +@item @var{team} @tab intent(in), optional; The team the number of images is +requested for. If null, the number of images in the current team is returned. +@item @var{team_number} @tab intent(in), optional; The team id for which the +number of teams is requested; if unset, then number of images in the current +team is returned. @end multitable @item @emph{Notes}: -This function follows TS18508. If the num_image intrinsic has no arguments, -then the compiler passes @code{distance=0} and @code{failed=-1} to the function. +When both argument are given, then it is caf-library dependent which argument +is examined first. Current implementations prioritize the @var{team} argument, +because it is easier to retrive the number of images from it. + +Fortran 2008 or later, with no arguments; Fortran 2018 or later with two +arguments. @end table @@ -4705,9 +4717,9 @@ structure. operation, i.e., zero on success and non-zero on error. When @code{NULL} and an error occurs, then an error message is printed and the program is terminated. @item @var{team} @tab intent(in) The opaque team handle as returned by -@code{FORM TEAM}. Unused at the moment. +@code{FORM TEAM}. @item @var{team_number} @tab intent(in) The number of the team this access is -to be part of. Unused at the moment. +to be part of. @end multitable @item @emph{Notes}: @@ -4806,9 +4818,9 @@ structure. operation, i.e., zero on success and non-zero on error. When @code{NULL} and an error occurs, then an error message is printed and the program is terminated. @item @var{team} @tab intent(in) The opaque team handle as returned by -@code{FORM TEAM}. Unused at the moment. +@code{FORM TEAM}. @item @var{team_number} @tab intent(in) The number of the team this access is -to be part of. Unused at the moment. +to be part of. @end multitable @item @emph{Notes}: @@ -4906,13 +4918,13 @@ the operation on the sending side, i.e., zero on success and non-zero on error. When @code{NULL} and an error occurs, then an error message is printed and the program is terminated. @item @var{dst_team} @tab intent(in) The opaque team handle as returned by -@code{FORM TEAM}. Unused at the moment. +@code{FORM TEAM}. @item @var{dst_team_number} @tab intent(in) The number of the team this access -is to be part of. Unused at the moment. +is to be part of. @item @var{src_team} @tab intent(in) The opaque team handle as returned by -@code{FORM TEAM}. Unused at the moment. +@code{FORM TEAM}. @item @var{src_team_number} @tab intent(in) The number of the team this access -is to be part of. Unused at the moment. +is to be part of. @end multitable @item @emph{Notes}: @@ -5656,6 +5668,180 @@ or an array descriptor. @end table + +@node _gfortran_caf_form_team +@subsection @code{_gfortran_caf_form_team} --- Team creation function +@cindex Coarray, _gfortran_caf_form_team + +@table @asis +@item @emph{Synopsis}: +@code{void _gfortran_caf_form_team (int team_id, caf_team_t *team, +int *new_index, int *stat, char *errmsg, size_t errmsg_len)} + +@item @emph{Description}: +Create a team. All images giving the same @var{team_id} in a call to +@code{FORM TEAM} will form a new team addressable by the opaque handle +@var{team} which is of type @code{team_type} from the intrinsic module +@ref{ISO_FORTRAN_ENV}. In the team the image gets the image index given by +@var{new_index} if present. If @var{new_index} is absent, then an +implementation specific index is assigned. + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{team_id} @tab intent(in) A unique id for each team to form. Images +giving the same @var{team_id} in a call to @code{FORM TEAM} belong to the same +team. +@item @var{team} @tab intent(out) The opaque pointer to the newly formed team +@item @var{new_index} @tab intent(in) If non-null gives the unique index of +this image in the newly formed team. When no @var{new_index} is given, the +caf-library is free to choose a unique index. +@item @var{stat} @tab intent(out) Stores the status STAT= and may be NULL. +@item @var{errmsg} @tab intent(out) When an error occurs, this is set to +an error message; may be NULL. +@item @var{errmsg_len} @tab intent(in) the buffer size of errmsg +@end multitable + +@item @emph{Notes}: +The id given in @var{team_id} has to be unique in all subsequent calls to +@code{FORM TEAM} on the same image. That id is the same used in +@code{TEAM_NUMBER=} of coarray indexes, which motivates the uniqueness. + +The index given in @var{new_index} needs to be unique among all members of +team to create. Failing uniqueness may lead to misbehaviour, which depends +on the caf-library's implementation. The library is free to implement +checks for this, which imposes overhead and therefore may be avoided. +@end table + + + +@node _gfortran_caf_change_team +@subsection @code{_gfortran_caf_change_team} --- Team activation function +@cindex Coarray, _gfortran_caf_change_team + +@table @asis +@item @emph{Synopsis}: +@code{void _gfortran_caf_change_team (caf_team_t team, int *stat, char *errmsg, +size_t errmsg_len)} + +@item @emph{Description}: +Actives the team given by @var{team}, which must be formed but not active +yet. This routine starts a new epoch on the coarray memory pool. All +coarrays registered from now on, will be freeed once the team is terminated. + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{team} @tab intent(inout) The opaque pointer to an already formed +team +@item @var{stat} @tab intent(out) Stores the status STAT= and may be NULL. +@item @var{errmsg} @tab intent(out) When an error occurs, this is set to +an error message; may be NULL. +@item @var{errmsg_len} @tab intent(in) the buffer size of errmsg +@end multitable + +@item @emph{Notes}: +When an error occurs and @var{stat} is non-null, it will be set. Nevertheless +will the Fortran program continue with the first statement in the change team +block. +@end table + + + +@node _gfortran_caf_end_team +@subsection @code{_gfortran_caf_end_team} --- Team termination function +@cindex Coarray, _gfortran_caf_end_team + +@table @asis +@item @emph{Synopsis}: +@code{void _gfortran_caf_end_team (int *stat, char *errmsg, size_t errmsg_len)} + +@item @emph{Description}: +Terminates the last team changed to. The coarray memory epoch is +terminated and all coarrays allocated since the execution of @code{CHANGE TEAM} +are freeed. + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{stat} @tab intent(out) Stores the status STAT= and may be NULL. +@item @var{errmsg} @tab intent(out) When an error occurs, this is set to +an error message; may be NULL. +@item @var{errmsg_len} @tab intent(in) the buffer size of errmsg +@end multitable +@end table + + + +@node _gfortran_caf_sync_team +@subsection @code{_gfortran_caf_sync_team} --- Synchronize all images of a given team +@cindex Coarray, _gfortran_caf_sync_team + +@table @asis +@item @emph{Synopsis}: +@code{void _gfortran_caf_sync_team (caf_team_t team, int *stat, char *errmsg, +size_t errmsg_len)} + +@item @emph{Description}: +Blocks execution of the image calling @code{SYNC TEAM} until all images of the +team given by @var{team} have joined the synchronisation call. + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{team} @tab intent(in) The opaque pointer to an active team +@item @var{stat} @tab intent(out) Stores the status STAT= and may be NULL. +@item @var{errmsg} @tab intent(out) When an error occurs, this is set to +an error message; may be NULL. +@item @var{errmsg_len} @tab intent(in) the buffer size of errmsg +@end multitable +@end table + + + +@node _gfortran_caf_get_team +@subsection @code{_gfortran_caf_get_team} --- Get the opaque handle of the specified team +@cindex Coarray, _gfortran_caf_get_team + +@table @asis +@item @emph{Synopsis}: +@code{caf_team_t _gfortran_caf_get_team (int32_t *level)} + +@item @emph{Description}: +Get the current team, when @var{level} is null, or the team specified by +@var{level} set to @code{INITIAL_TEAM}, @code{PARENT_TEAM} or +@code{CURRENT_TEAM} from the @code{ISO_FORTRAN_ENV} intrinsic module. When +being on the @code{INITIAL_TEAM} and requesting its @code{PARENT_TEAM}, then +the initial team is returned. + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{level} @tab intent(in) If set to one of the levels specified in +the @code{ISO_FORTRAN_ENV} module, the function returns the handle of the given +team. Values different from the allowed ones lead to a runtime error. +@end multitable +@end table + + + +@node _gfortran_caf_team_number +@subsection @code{_gfortran_caf_team_number} --- Get the unique id of the given team +@cindex Coarray, _gfortran_caf_team_number + +@table @asis +@item @emph{Synopsis}: +@code{int _gfortran_caf_team_number (caf_team_t team)} + +@item @emph{Description}: +The team id given when forming the team @ref{_gfortran_caf_form_team} of the +team specified by @var{team}, if given, or of the current team, if @var{team} +is absent. It is a runtime error to specify a non-existing team. +The team has to be formed, i.e., it is not necessary that it is changed +into to get the team number. The initial team has the team number @code{-1}. + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{team} @tab intent(in) The team for which the team id is desired. +@end multitable +@end table + + @c Intrinsic Procedures @c --------------------------------------------------------------------- diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc index c702239..1e552a3 100644 --- a/gcc/fortran/interface.cc +++ b/gcc/fortran/interface.cc @@ -2534,16 +2534,33 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, gfc_find_symbol (actual_name, gsym->ns, 0, &global_asym); if (global_asym != NULL) { - gcc_assert (formal->attr.function); - if (!gfc_compare_types (&global_asym->ts, &formal->ts)) + if (formal->attr.subroutine) { - gfc_error ("Type mismatch at %L passing global " - "function %qs declared at %L (%s/%s)", - &actual->where, actual_name, &gsym->where, - gfc_typename (&global_asym->ts), - gfc_dummy_typename (&formal->ts)); + gfc_error ("Mismatch between subroutine and " + "function at %L", &actual->where); return false; } + else if (formal->attr.function) + { + if (!gfc_compare_types (&global_asym->ts, + &formal->ts)) + { + gfc_error ("Type mismatch at %L passing global " + "function %qs declared at %L (%s/%s)", + &actual->where, actual_name, + &gsym->where, + gfc_typename (&global_asym->ts), + gfc_dummy_typename (&formal->ts)); + return false; + } + } + else + { + /* The global symbol is a function. Set the formal + argument acordingly. */ + formal->attr.function = 1; + formal->ts = global_asym->ts; + } } } } diff --git a/gcc/fortran/intrinsic.cc b/gcc/fortran/intrinsic.cc index d2ce74f..2eba209 100644 --- a/gcc/fortran/intrinsic.cc +++ b/gcc/fortran/intrinsic.cc @@ -1395,26 +1395,24 @@ add_functions (void) { /* Argument names. These are used as argument keywords and so need to match the documentation. Please keep this list in sorted order. */ - const char - *a = "a", *a1 = "a1", *a2 = "a2", *ar = "array", *b = "b", - *bck = "back", *bd = "boundary", *c = "c", *c_ptr_1 = "c_ptr_1", - *c_ptr_2 = "c_ptr_2", *ca = "coarray", *com = "command", - *dist = "distance", *dm = "dim", *f = "field", *failed="failed", - *fs = "fsource", *han = "handler", *i = "i", - *idy = "identity", *image = "image", *j = "j", *kind = "kind", - *l = "l", *ln = "len", *level = "level", *m = "matrix", *ma = "matrix_a", - *mb = "matrix_b", *md = "mode", *mo = "mold", *msk = "mask", - *n = "n", *ncopies= "ncopies", *nm = "name", *num = "number", - *op = "operation", *ord = "order", *odd = "ordered", *p = "p", - *p1 = "path1", *p2 = "path2", *pad = "pad", *pid = "pid", *pos = "pos", - *pt = "pointer", *r = "r", *rd = "round", - *s = "s", *set = "set", *sh = "shift", *shp = "shape", - *sig = "sig", *src = "source", *ssg = "substring", - *sta = "string_a", *stb = "string_b", *stg = "string", - *sub = "sub", *sz = "size", *tg = "target", *team = "team", *tm = "time", - *ts = "tsource", *ut = "unit", *v = "vector", *va = "vector_a", - *vb = "vector_b", *vl = "values", *val = "value", *x = "x", *y = "y", - *z = "z"; + const char *a + = "a", + *a1 = "a1", *a2 = "a2", *ar = "array", *b = "b", *bck = "back", + *bd = "boundary", *c = "c", *c_ptr_1 = "c_ptr_1", *c_ptr_2 = "c_ptr_2", + *ca = "coarray", *com = "command", *dm = "dim", *f = "field", + *fs = "fsource", *han = "handler", *i = "i", *idy = "identity", + *image = "image", *j = "j", *kind = "kind", *l = "l", *ln = "len", + *level = "level", *m = "matrix", *ma = "matrix_a", *mb = "matrix_b", + *md = "mode", *mo = "mold", *msk = "mask", *n = "n", *ncopies = "ncopies", + *nm = "name", *num = "number", *op = "operation", *ord = "order", + *odd = "ordered", *p = "p", *p1 = "path1", *p2 = "path2", *pad = "pad", + *pid = "pid", *pos = "pos", *pt = "pointer", *r = "r", *rd = "round", + *s = "s", *set = "set", *sh = "shift", *shp = "shape", *sig = "sig", + *src = "source", *ssg = "substring", *sta = "string_a", *stb = "string_b", + *stg = "string", *sub = "sub", *sz = "size", *tg = "target", *team = "team", + *team_or_team_number = "team/team_number", *tm = "time", *ts = "tsource", + *ut = "unit", *v = "vector", *va = "vector_a", *vb = "vector_b", + *vl = "values", *val = "value", *x = "x", *y = "y", *z = "z"; int di, dr, dd, dl, dc, dz, ii; @@ -2112,10 +2110,10 @@ add_functions (void) make_generic ("getpid", GFC_ISYM_GETPID, GFC_STD_GNU); - add_sym_1 ("get_team", GFC_ISYM_GET_TEAM, CLASS_TRANSFORMATIONAL, - ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2018, - gfc_check_get_team, NULL, gfc_resolve_get_team, - level, BT_INTEGER, di, OPTIONAL); + add_sym_1 ("get_team", GFC_ISYM_GET_TEAM, CLASS_TRANSFORMATIONAL, ACTUAL_NO, + BT_DERIVED, di, GFC_STD_F2018, gfc_check_get_team, + gfc_simplify_get_team, gfc_resolve_get_team, level, BT_INTEGER, di, + OPTIONAL); add_sym_0 ("getuid", GFC_ISYM_GETUID, CLASS_IMPURE, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, NULL, NULL, gfc_resolve_getuid); @@ -2265,9 +2263,11 @@ add_functions (void) make_generic ("ierrno", GFC_ISYM_IERRNO, GFC_STD_GNU); - add_sym_2 ("image_index", GFC_ISYM_IMAGE_INDEX, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008, - gfc_check_image_index, gfc_simplify_image_index, gfc_resolve_image_index, - ca, BT_REAL, dr, REQUIRED, sub, BT_INTEGER, ii, REQUIRED); + add_sym_3 ("image_index", GFC_ISYM_IMAGE_INDEX, CLASS_TRANSFORMATIONAL, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008, gfc_check_image_index, + gfc_simplify_image_index, gfc_resolve_image_index, ca, BT_REAL, dr, + REQUIRED, sub, BT_INTEGER, ii, REQUIRED, team_or_team_number, + BT_VOID, di, OPTIONAL); add_sym_2 ("image_status", GFC_ISYM_IMAGE_STATUS, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2018, gfc_check_image_status, @@ -2848,11 +2848,10 @@ add_functions (void) make_generic ("null", GFC_ISYM_NULL, GFC_STD_F95); - add_sym_2 ("num_images", GFC_ISYM_NUM_IMAGES, CLASS_TRANSFORMATIONAL, - ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008, - gfc_check_num_images, gfc_simplify_num_images, NULL, - dist, BT_INTEGER, di, OPTIONAL, - failed, BT_LOGICAL, dl, OPTIONAL); + add_sym_1 ("num_images", GFC_ISYM_NUM_IMAGES, CLASS_TRANSFORMATIONAL, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008, gfc_check_num_images, + gfc_simplify_num_images, NULL, team_or_team_number, BT_VOID, di, + OPTIONAL); add_sym_3 ("out_of_range", GFC_ISYM_OUT_OF_RANGE, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F2018, @@ -3338,10 +3337,11 @@ add_functions (void) gfc_check_team_number, NULL, gfc_resolve_team_number, team, BT_DERIVED, di, OPTIONAL); - add_sym_3 ("this_image", GFC_ISYM_THIS_IMAGE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008, - gfc_check_this_image, gfc_simplify_this_image, gfc_resolve_this_image, - ca, BT_REAL, dr, OPTIONAL, dm, BT_INTEGER, ii, OPTIONAL, - dist, BT_INTEGER, di, OPTIONAL); + add_sym_3red ("this_image", GFC_ISYM_THIS_IMAGE, CLASS_INQUIRY, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F2008, gfc_check_this_image, + gfc_simplify_this_image, gfc_resolve_this_image, ca, BT_REAL, + dr, OPTIONAL, dm, BT_INTEGER, ii, OPTIONAL, team, BT_DERIVED, + di, OPTIONAL); add_sym_0 ("time", GFC_ISYM_TIME, CLASS_IMPURE, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, NULL, NULL, gfc_resolve_time); @@ -3835,11 +3835,11 @@ add_subroutines (void) st, BT_INTEGER, di, OPTIONAL, INTENT_OUT, trim_name, BT_LOGICAL, dl, OPTIONAL, INTENT_IN); - add_sym_2s ("move_alloc", GFC_ISYM_MOVE_ALLOC, CLASS_PURE, BT_UNKNOWN, 0, - GFC_STD_F2003, - gfc_check_move_alloc, NULL, NULL, - f, BT_UNKNOWN, 0, REQUIRED, INTENT_INOUT, - t, BT_UNKNOWN, 0, REQUIRED, INTENT_OUT); + add_sym_4s ("move_alloc", GFC_ISYM_MOVE_ALLOC, CLASS_PURE, BT_UNKNOWN, 0, + GFC_STD_F2003, gfc_check_move_alloc, NULL, NULL, f, BT_UNKNOWN, 0, + REQUIRED, INTENT_INOUT, t, BT_UNKNOWN, 0, REQUIRED, INTENT_OUT, + stat, BT_INTEGER, di, OPTIONAL, INTENT_OUT, errmsg, BT_CHARACTER, + dc, OPTIONAL, INTENT_INOUT); add_sym_5s ("mvbits", GFC_ISYM_MVBITS, CLASS_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95, gfc_check_mvbits, NULL, gfc_resolve_mvbits, @@ -4956,6 +4956,9 @@ check_specific (gfc_intrinsic_sym *specific, gfc_expr *expr, int error_flag) else if (specific->check.f3red == gfc_check_transf_bit_intrins) /* Same as for PRODUCT and SUM, but different checks. */ t = gfc_check_transf_bit_intrins (*ap); + else if (specific->check.f3red == gfc_check_this_image) + /* May need to reassign arguments. */ + t = gfc_check_this_image (*ap); else { if (specific->check.f1 == NULL) diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h index fec1c24..767792c 100644 --- a/gcc/fortran/intrinsic.h +++ b/gcc/fortran/intrinsic.h @@ -132,7 +132,7 @@ bool gfc_check_nearest (gfc_expr *, gfc_expr *); bool gfc_check_new_line (gfc_expr *); bool gfc_check_norm2 (gfc_expr *, gfc_expr *); bool gfc_check_null (gfc_expr *); -bool gfc_check_num_images (gfc_expr *, gfc_expr *); +bool gfc_check_num_images (gfc_expr *); bool gfc_check_out_of_range (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_pack (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_parity (gfc_expr *, gfc_expr *); @@ -208,7 +208,8 @@ bool gfc_check_fstat_sub (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_gerror (gfc_expr *); bool gfc_check_getarg (gfc_expr *, gfc_expr *); bool gfc_check_getlog (gfc_expr *); -bool gfc_check_move_alloc (gfc_expr *, gfc_expr *); +bool gfc_check_move_alloc (gfc_expr *, gfc_expr *, gfc_expr *stat, + gfc_expr *errmsg); bool gfc_check_mvbits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_random_init (gfc_expr *, gfc_expr *); @@ -221,7 +222,7 @@ bool gfc_check_fseek_sub (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_ftell_sub (gfc_expr *, gfc_expr *); bool gfc_check_getcwd_sub (gfc_expr *, gfc_expr *); bool gfc_check_hostnm_sub (gfc_expr *, gfc_expr *); -bool gfc_check_image_index (gfc_expr *, gfc_expr *); +bool gfc_check_image_index (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_itime_idate (gfc_expr *); bool gfc_check_kill_sub (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_ltime_gmtime (gfc_expr *, gfc_expr *); @@ -233,7 +234,7 @@ bool gfc_check_signal_sub (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_sleep_sub (gfc_expr *); bool gfc_check_stat_sub (gfc_expr *, gfc_expr *, gfc_expr *); bool gfc_check_system_sub (gfc_expr *, gfc_expr *); -bool gfc_check_this_image (gfc_expr *, gfc_expr *, gfc_expr *); +bool gfc_check_this_image (gfc_actual_arglist *); bool gfc_check_ttynam_sub (gfc_expr *, gfc_expr *); bool gfc_check_umask_sub (gfc_expr *, gfc_expr *); bool gfc_check_unlink_sub (gfc_expr *, gfc_expr *); @@ -327,7 +328,7 @@ gfc_expr *gfc_simplify_ibits (gfc_expr *, gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_ibset (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_ichar (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_ieor (gfc_expr *, gfc_expr *); -gfc_expr *gfc_simplify_image_index (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_image_index (gfc_expr *, gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_image_status (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_index (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_int (gfc_expr *, gfc_expr *); @@ -382,7 +383,7 @@ gfc_expr *gfc_simplify_new_line (gfc_expr *); gfc_expr *gfc_simplify_nint (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_norm2 (gfc_expr *, gfc_expr *); gfc_expr *gfc_simplify_null (gfc_expr *); -gfc_expr *gfc_simplify_num_images (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_num_images (gfc_expr *); gfc_expr *gfc_simplify_idnint (gfc_expr *); gfc_expr *gfc_simplify_not (gfc_expr *); gfc_expr *gfc_simplify_or (gfc_expr *, gfc_expr *); @@ -478,6 +479,7 @@ void gfc_resolve_bessel_n2 (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *a); void gfc_resolve_btest (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_c_loc (gfc_expr *, gfc_expr *); void gfc_resolve_c_funloc (gfc_expr *, gfc_expr *); +void gfc_resolve_get_team (gfc_expr *, gfc_expr *); void gfc_resolve_ceiling (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_char (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_chdir (gfc_expr *, gfc_expr *); @@ -522,7 +524,6 @@ void gfc_resolve_gamma (gfc_expr *, gfc_expr *); void gfc_resolve_getcwd (gfc_expr *, gfc_expr *); void gfc_resolve_getgid (gfc_expr *); void gfc_resolve_getpid (gfc_expr *); -void gfc_resolve_get_team (gfc_expr *, gfc_expr *); void gfc_resolve_getuid (gfc_expr *); void gfc_resolve_hostnm (gfc_expr *, gfc_expr *); void gfc_resolve_hypot (gfc_expr *, gfc_expr *, gfc_expr *); @@ -530,7 +531,7 @@ void gfc_resolve_iand (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ibclr (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ibits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ibset (gfc_expr *, gfc_expr *, gfc_expr *); -void gfc_resolve_image_index (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_image_index (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_image_status (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_index_func (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 8c160e5..3a105bc 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -170,6 +170,7 @@ Some basic guidelines for editing this document: * @code{GETGID}: GETGID, Group ID function * @code{GETLOG}: GETLOG, Get login name * @code{GETPID}: GETPID, Process ID function +* @code{GET_TEAM}: GET_TEAM, Get the handle of a team * @code{GETUID}: GETUID, User ID function * @code{GMTIME}: GMTIME, Convert time to GMT info * @code{HOSTNM}: HOSTNM, Get system host name @@ -311,6 +312,7 @@ Some basic guidelines for editing this document: * @code{TAN}: TAN, Tangent function * @code{TAND}: TAND, Tangent function, degrees * @code{TANH}: TANH, Hyperbolic tangent function +* @code{TEAM_NUMBER}: TEAM_NUMBER, Retrieve team id of given team * @code{THIS_IMAGE}: THIS_IMAGE, Cosubscript index of this image * @code{TIME}: TIME, Time function * @code{TIME8}: TIME8, Time function (64-bit) @@ -7336,6 +7338,59 @@ GNU extension +@node GET_TEAM +@section @code{GET_TEAM} --- Get the handle of a team +@fnindex GET_TEAM +@cindex coarray, @code{GET_TEAM} +@cindex images, get a handle to a team + +@table @asis +@item @emph{Synopsis}: +@code{RESULT = GET_TEAM([LEVEL])} + +@item @emph{Description}: +Returns the handle of the current team, if @var{LEVEL} is not given. Or the +team specified by @var{LEVEL}, where @var{LEVEL} is one of the constants +@code{INITIAL_TEAM}, @code{PARENT_TEAM} or @code{CURRENT_TEAM} from the +intrinsic module @code{ISO_FORTRAN_ENV}. Calling the function with +@code{PARENT_TEAM} while being on the initial team, returns a handle to the +initial team. This ensures that always a valid team is returned, given that +team handles can neither be checked for validity nor compared with each other +or null. + +@item @emph{Class}: +Transformational function + +@item @emph{Return value}: +An opaque handle of @code{TEAM_TYPE} from the intrinsic module +@code{ISO_FORTRAN_ENV}. + +@item @emph{Example}: +@smallexample +program info + use, intrinsic :: iso_fortran_env + type(team_type) :: init, curr, par, nt + + init = get_team() + curr = get_team(current_team) ! init equals curr here + form team(1, nt) + change team(nt) + curr = get_team() ! or get_team(current_team) + par = get_team(parent_team) ! par equals init here + end team +end program info +@end smallexample + +@item @emph{Standard}: +Fortran 2018 or later + +@item @emph{See also}: +@ref{THIS_IMAGE}, @* +@ref{ISO_FORTRAN_ENV} +@end table + + + @node GETUID @section @code{GETUID} --- User ID function @fnindex GETUID @@ -11372,47 +11427,48 @@ Fortran 95 and later @table @asis @item @emph{Synopsis}: -@code{RESULT = NUM_IMAGES(DISTANCE, FAILED)} +@multitable @columnfractions .80 +@item @code{RESULT = NUM_IMAGES([TEAM])} +@item @code{RESULT = NUM_IMAGES(TEAM_NUMBER)} +@end multitable @item @emph{Description}: -Returns the number of images. +Returns the number of images in the current team or the given team. @item @emph{Class}: Transformational function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer -@item @var{FAILED} @tab (optional, intent(in)) Scalar logical expression +@item @var{TEAM} @tab (optional, intent(in)) If present, return the number of +images in the given team; if absent, return the number of images in the +current team. +@item @var{TEAM_NUMBER} @tab (intent(in)) The number as given in the +@code{FORM TEAM} statement. @end multitable @item @emph{Return value}: -Scalar default-kind integer. If @var{DISTANCE} is not present or has value 0, -the number of images in the current team is returned. For values smaller or -equal distance to the initial team, it returns the number of images index -on the ancestor team that has a distance of @var{DISTANCE} from the invoking -team. If @var{DISTANCE} is larger than the distance to the initial team, the -number of images of the initial team is returned. If @var{FAILED} is not present -the total number of images is returned; if it has the value @code{.TRUE.}, -the number of failed images is returned, otherwise, the number of images that -do have not the failed status. +Scalar default-kind integer. Can be called without any arguments or a team +type argument or a team_number argument. @item @emph{Example}: @smallexample +use, intrinsic :: iso_fortran_env INTEGER :: value[*] INTEGER :: i -value = THIS_IMAGE() -SYNC ALL -IF (THIS_IMAGE() == 1) THEN - DO i = 1, NUM_IMAGES() - WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i] - END DO -END IF +type(team_type) :: t + +! When running with 4 images +print *, num_images() ! 4 + +form team (mod(this_image(), 2), t) +print *, num_images(t) ! 2 +print *, num_images(-1) ! 4 @end smallexample @item @emph{Standard}: -Fortran 2008 and later. With @var{DISTANCE} or @var{FAILED} argument, -Technical Specification (TS) 18508 or later +Fortran 2008 and later. With @var{TEAM} or @var{TEAM_NUMBER} argument, +Fortran 2018 and later. @item @emph{See also}: @ref{THIS_IMAGE}, @* @@ -14467,6 +14523,54 @@ Fortran 77 and later, for a complex argument Fortran 2008 or later +@node TEAM_NUMBER +@section @code{TEAM_NUMBER} --- Retrieve team id of given team +@fnindex TEAM_NUMBER +@cindex coarray, @code{TEAM_NUMBER} +@cindex teams, index of given team + +@table @asis +@item @emph{Synopsis}: +@item @code{RESULT = TEAM_NUMBER([TEAM])} + +@item @emph{Description}: +Returns the team id for the given @var{TEAM} as assigned by @code{FORM TEAM}. +If @var{TEAM} is absent, returns the team number of the current team. + +@item @emph{Class}: +Transformational function + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TEAM} @tab (optional, intent(in)) The handle of the team for which +the number, aka id, is desired. +@end multitable + +@item @emph{Return value}: +Default integer. The id as given in a call @code{FORM TEAM}. Applying +@code{TEAM_NUMBER} to the initial team will result in @code{-1} to be returned. +Returns the id of the current team, if @var{TEAM} is null. + +@item @emph{Example}: +@smallexample +use, intrinsic :: iso_fortran_env +type(team_type) :: t + +print *, team_number() ! -1 +form team (99, t) +print *, team_number(t) ! 99 +@end smallexample + +@item @emph{Standard}: +Fortran 2018 and later. + +@item @emph{See also}: +@ref{GET_TEAM}, @* +@ref{TEAM_NUMBER} +@end table + + + @node THIS_IMAGE @section @code{THIS_IMAGE} --- Function that returns the cosubscript index of this image @fnindex THIS_IMAGE @@ -14476,9 +14580,8 @@ Fortran 77 and later, for a complex argument Fortran 2008 or later @table @asis @item @emph{Synopsis}: @multitable @columnfractions .80 -@item @code{RESULT = THIS_IMAGE()} -@item @code{RESULT = THIS_IMAGE(DISTANCE)} -@item @code{RESULT = THIS_IMAGE(COARRAY [, DIM])} +@item @code{RESULT = THIS_IMAGE([TEAM])} +@item @code{RESULT = THIS_IMAGE(COARRAY [, DIM][, TEAM])} @end multitable @item @emph{Description}: @@ -14489,8 +14592,8 @@ Transformational function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer -(not permitted together with @var{COARRAY}). +@item @var{TEAM} @tab (optional, intent(in)) The team for which the index of +this image is desired. The current team is used, when no team is given. @item @var{COARRAY} @tab Coarray of any type (optional; if @var{DIM} present, required). @item @var{DIM} @tab default integer scalar (optional). If present, @@ -14499,16 +14602,16 @@ present, required). @item @emph{Return value}: Default integer. If @var{COARRAY} is not present, it is scalar; if -@var{DISTANCE} is not present or has value 0, its value is the image index on -the invoking image for the current team, for values smaller or equal -distance to the initial team, it returns the image index on the ancestor team -that has a distance of @var{DISTANCE} from the invoking team. If -@var{DISTANCE} is larger than the distance to the initial team, the image -index of the initial team is returned. Otherwise when the @var{COARRAY} is +@var{TEAM} is not present, its value is the image index on the invoking image +for the current team; if @var{TEAM} is present, returns the image index of +the invoking image as given to the @code{FORM TEAM (..., NEW_INDEX=..)} call, +or a implementation specific unique number, when @code{NEW_INDEX=} was absent +from @code{FORM TEAM}. Otherwise when the @var{COARRAY} is present, if @var{DIM} is not present, a rank-1 array with corank elements is returned, containing the cosubscripts for @var{COARRAY} specifying the invoking -image. If @var{DIM} is present, a scalar is returned, with the value of -the @var{DIM} element of @code{THIS_IMAGE(COARRAY)}. +image (in the team when @var{TEAM} is present). If @var{DIM} is present, a +scalar is returned, with the value of the @var{DIM} element of +@code{THIS_IMAGE(COARRAY)}. @item @emph{Example}: @smallexample @@ -14523,13 +14626,12 @@ IF (THIS_IMAGE() == 1) THEN END IF ! Check whether the current image is the initial image -IF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE()) +IF (THIS_IMAGE(GET_TEAM(INITIAL_TEAM)) /= THIS_IMAGE()) error stop "something is rotten here" @end smallexample @item @emph{Standard}: -Fortran 2008 and later. With @var{DISTANCE} argument, -Technical Specification (TS) 18508 or later +Fortran 2008 and later. With @var{TEAM} argument, Fortran 2018 or later @item @emph{See also}: @ref{NUM_IMAGES}, @* @@ -15354,12 +15456,18 @@ parameters of the @code{CHARACTER} type. (Fortran 2008 or later.) @item @code{CHARACTER_STORAGE_SIZE}: Size in bits of the character storage unit. +@item @code{CURRENT_TEAM}: +The argument to @ref{GET_TEAM} to retrieve a handle of the current team. + @item @code{ERROR_UNIT}: Identifies the preconnected unit used for error reporting. @item @code{FILE_STORAGE_SIZE}: Size in bits of the file-storage unit. +@item @code{INTIAL_TEAM}: +Argument to @ref{GET_TEAM} to retrieve a handle of the initial team. + @item @code{INPUT_UNIT}: Identifies the preconnected unit identified by the asterisk (@code{*}) in @code{READ} statement. @@ -15397,6 +15505,9 @@ parameters of the @code{LOGICAL} type. (Fortran 2008 or later.) Identifies the preconnected unit identified by the asterisk (@code{*}) in @code{WRITE} statement. +@item @code{PARENT_TEAM}: +Argument to @ref{GET_TEAM} to retrieve a handle to the parent team. + @item @code{REAL32}, @code{REAL64}, @code{REAL128}: Kind type parameters to specify a REAL type with a storage size of 32, 64, and 128 bits. It is negative if a target platform @@ -15445,6 +15556,10 @@ Derived type with private components to be use with the @code{LOCK} and @code{UNLOCK} statement. A variable of its type has to be always declared as coarray and may not appear in a variable-definition context. (Fortran 2008 or later.) +@item @code{TEAM_TYPE}: +An opaque type for handling teams. Note that a variable of type +@code{TEAM_TYPE} is not comparable with other variables of the same or other +types nor with null. @end table The module also provides the following intrinsic procedures: diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc index 858ffb1..6930e2c 100644 --- a/gcc/fortran/iresolve.cc +++ b/gcc/fortran/iresolve.cc @@ -3209,17 +3209,28 @@ gfc_resolve_get_team (gfc_expr *f, gfc_expr *level ATTRIBUTE_UNUSED) { static char get_team[] = "_gfortran_caf_get_team"; f->rank = 0; - f->ts.type = BT_INTEGER; - f->ts.kind = gfc_default_integer_kind; + f->ts.type = BT_DERIVED; + gfc_find_symbol ("team_type", gfc_current_ns, 1, &f->ts.u.derived); + if (!f->ts.u.derived + || f->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV) + { + gfc_error ( + "GET_TEAM at %L needs USE of the intrinsic module ISO_FORTRAN_ENV " + "to define its result type TEAM_TYPE", + &f->where); + f->ts.type = BT_UNKNOWN; + } f->value.function.name = get_team; -} + /* No requirements to resolve for level argument now. */ +} /* Resolve image_index (...). */ void gfc_resolve_image_index (gfc_expr *f, gfc_expr *array ATTRIBUTE_UNUSED, - gfc_expr *sub ATTRIBUTE_UNUSED) + gfc_expr *sub ATTRIBUTE_UNUSED, + gfc_expr *team_or_team_number ATTRIBUTE_UNUSED) { static char image_index[] = "__image_index"; f->ts.type = BT_INTEGER; @@ -3248,31 +3259,46 @@ gfc_resolve_stopped_images (gfc_expr *f, gfc_expr *team ATTRIBUTE_UNUSED, /* Resolve team_number (team). */ void -gfc_resolve_team_number (gfc_expr *f, gfc_expr *team ATTRIBUTE_UNUSED) +gfc_resolve_team_number (gfc_expr *f, gfc_expr *team) { static char team_number[] = "_gfortran_caf_team_number"; f->rank = 0; f->ts.type = BT_INTEGER; f->ts.kind = gfc_default_integer_kind; f->value.function.name = team_number; -} + if (team) + gfc_resolve_expr (team); +} void -gfc_resolve_this_image (gfc_expr *f, gfc_expr *array, gfc_expr *dim, - gfc_expr *distance ATTRIBUTE_UNUSED) +gfc_resolve_this_image (gfc_expr *f, gfc_expr *coarray, gfc_expr *dim, + gfc_expr *team) { static char this_image[] = "__this_image"; - if (array && gfc_is_coarray (array)) - resolve_bound (f, array, dim, NULL, "__this_image", true); + if (coarray && dim) + resolve_bound (f, coarray, dim, NULL, this_image, true); + else if (coarray) + { + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = this_image; + if (f->shape && f->rank != 1) + gfc_free_shape (&f->shape, f->rank); + f->rank = 1; + f->shape = gfc_get_shape (1); + mpz_init_set_ui (f->shape[0], coarray->corank); + } else { f->ts.type = BT_INTEGER; f->ts.kind = gfc_default_integer_kind; f->value.function.name = this_image; } -} + if (team) + gfc_resolve_expr (team); +} void gfc_resolve_time (gfc_expr *f) diff --git a/gcc/fortran/iso-fortran-env.def b/gcc/fortran/iso-fortran-env.def index b8926f4..250a730 100644 --- a/gcc/fortran/iso-fortran-env.def +++ b/gcc/fortran/iso-fortran-env.def @@ -83,17 +83,23 @@ NAMED_INTCST (ISOFORTRANENV_REAL64, "real64", \ gfc_get_real_kind_from_width_isofortranenv (64), GFC_STD_F2008) NAMED_INTCST (ISOFORTRANENV_REAL128, "real128", \ gfc_get_real_kind_from_width_isofortranenv (128), GFC_STD_F2008) -NAMED_INTCST (ISOFORTRANENV_FILE_STAT_LOCKED, "stat_locked", \ +NAMED_INTCST (ISOFORTRANENV_STAT_LOCKED, "stat_locked", \ GFC_STAT_LOCKED, GFC_STD_F2008) -NAMED_INTCST (ISOFORTRANENV_FILE_STAT_LOCKED_OTHER_IMAGE, \ +NAMED_INTCST (ISOFORTRANENV_STAT_LOCKED_OTHER_IMAGE, \ "stat_locked_other_image", \ GFC_STAT_LOCKED_OTHER_IMAGE, GFC_STD_F2008) -NAMED_INTCST (ISOFORTRANENV_FILE_STAT_STOPPED_IMAGE, "stat_stopped_image", \ - GFC_STAT_STOPPED_IMAGE, GFC_STD_F2008) -NAMED_INTCST (ISOFORTRANENV_FILE_STAT_FAILED_IMAGE, "stat_failed_image", \ - GFC_STAT_FAILED_IMAGE, GFC_STD_F2018) -NAMED_INTCST (ISOFORTRANENV_FILE_STAT_UNLOCKED, "stat_unlocked", \ - GFC_STAT_UNLOCKED, GFC_STD_F2008) +NAMED_INTCST (ISOFORTRANENV_STAT_STOPPED_IMAGE, "stat_stopped_image", \ + GFC_STAT_STOPPED_IMAGE, GFC_STD_F2008) +NAMED_INTCST (ISOFORTRANENV_STAT_FAILED_IMAGE, "stat_failed_image", \ + GFC_STAT_FAILED_IMAGE, GFC_STD_F2018) +NAMED_INTCST (ISOFORTRANENV_STAT_UNLOCKED, "stat_unlocked", \ + GFC_STAT_UNLOCKED, GFC_STD_F2008) +NAMED_INTCST (ISOFORTRANENV_INITIAL_TEAM, "initial_team", \ + GFC_CAF_INITIAL_TEAM, GFC_STD_F2018) +NAMED_INTCST (ISOFORTRANENV_PARENT_TEAM, "parent_team", \ + GFC_CAF_PARENT_TEAM, GFC_STD_F2018) +NAMED_INTCST (ISOFORTRANENV_CURRENT_TEAM, "current_team", \ + GFC_CAF_CURRENT_TEAM, GFC_STD_F2018) /* The arguments to NAMED_KINDARRAY are: @@ -134,9 +140,7 @@ NAMED_DERIVED_TYPE (ISOFORTRAN_EVENT_TYPE, "event_type", \ : gfc_default_integer_kind, GFC_STD_F2018) NAMED_DERIVED_TYPE (ISOFORTRAN_TEAM_TYPE, "team_type", \ - flag_coarray == GFC_FCOARRAY_LIB - ? get_int_kind_from_node (ptr_type_node) - : gfc_default_integer_kind, GFC_STD_F2018) + get_int_kind_from_node (ptr_type_node), GFC_STD_F2018) NAMED_INTCST (ISOFORTRANENV_LOGICAL8, "logical8", \ gfc_get_int_kind_from_width_isofortranenv (8), GFC_STD_F2023) diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h index 9565365..9de5afb 100644 --- a/gcc/fortran/libgfortran.h +++ b/gcc/fortran/libgfortran.h @@ -154,12 +154,20 @@ typedef enum GFC_STAT_LOCKED, GFC_STAT_LOCKED_OTHER_IMAGE, GFC_STAT_STOPPED_IMAGE = 6000, /* See LIBERROR_INQUIRE_INTERNAL_UNIT above. */ - GFC_STAT_FAILED_IMAGE = 6001 + GFC_STAT_FAILED_IMAGE = 6001, + GFC_STAT_UNLOCKED_FAILED_IMAGE = 6002 } libgfortran_stat_codes; typedef enum { + GFC_CAF_INITIAL_TEAM = 0, + GFC_CAF_PARENT_TEAM, + GFC_CAF_CURRENT_TEAM +} libgfortran_team_levels; + +typedef enum +{ GFC_CAF_ATOMIC_ADD = 1, GFC_CAF_ATOMIC_AND, GFC_CAF_ATOMIC_OR, diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc index ec9e587..474ba81 100644 --- a/gcc/fortran/match.cc +++ b/gcc/fortran/match.cc @@ -1814,12 +1814,53 @@ gfc_free_iterator (gfc_iterator *iter, int flag) free (iter); } +static match +match_named_arg (const char *pat, const char *name, gfc_expr **e, + gfc_statement st_code) +{ + match m; + gfc_expr *tmp; + + m = gfc_match (pat, &tmp); + if (m == MATCH_ERROR) + { + gfc_syntax_error (st_code); + return m; + } + if (m == MATCH_YES) + { + if (*e) + { + gfc_error ("Duplicate %s attribute in %C", name); + gfc_free_expr (tmp); + return MATCH_ERROR; + } + *e = tmp; + + return MATCH_YES; + } + return MATCH_NO; +} + +static match +match_stat_errmsg (struct sync_stat *sync_stat, gfc_statement st_code) +{ + match m; + + m = match_named_arg (" stat = %v", "STAT", &sync_stat->stat, st_code); + if (m != MATCH_NO) + return m; + + m = match_named_arg (" errmsg = %v", "ERRMSG", &sync_stat->errmsg, st_code); + return m; +} /* Match a CRITICAL statement. */ match gfc_match_critical (void) { gfc_st_label *label = NULL; + match m; if (gfc_match_label () == MATCH_ERROR) return MATCH_ERROR; @@ -1830,12 +1871,29 @@ gfc_match_critical (void) if (gfc_match_st_label (&label) == MATCH_ERROR) return MATCH_ERROR; - if (gfc_match_eos () != MATCH_YES) + if (gfc_match_eos () == MATCH_YES) + goto done; + + if (gfc_match_char ('(') != MATCH_YES) + goto syntax; + + for (;;) { - gfc_syntax_error (ST_CRITICAL); - return MATCH_ERROR; + m = match_stat_errmsg (&new_st.ext.sync_stat, ST_CRITICAL); + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (',') == MATCH_YES) + continue; + + break; } + if (gfc_match (" )%t") != MATCH_YES) + goto syntax; + +done: + if (gfc_pure (NULL)) { gfc_error ("Image control statement CRITICAL at %C in PURE procedure"); @@ -1856,9 +1914,9 @@ gfc_match_critical (void) if (flag_coarray == GFC_FCOARRAY_NONE) { - gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to " - "enable"); - return MATCH_ERROR; + gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to " + "enable"); + return MATCH_ERROR; } if (gfc_find_state (COMP_CRITICAL)) @@ -1869,13 +1927,21 @@ gfc_match_critical (void) new_st.op = EXEC_CRITICAL; - if (label != NULL - && !gfc_reference_st_label (label, ST_LABEL_TARGET)) - return MATCH_ERROR; + if (label != NULL && !gfc_reference_st_label (label, ST_LABEL_TARGET)) + goto cleanup; return MATCH_YES; -} +syntax: + gfc_syntax_error (ST_CRITICAL); + +cleanup: + gfc_free_expr (new_st.ext.sync_stat.stat); + gfc_free_expr (new_st.ext.sync_stat.errmsg); + new_st.ext.sync_stat = {NULL, NULL}; + + return MATCH_ERROR; +} /* Match a BLOCK statement. */ @@ -1900,29 +1966,29 @@ gfc_match_block (void) return MATCH_YES; } - -/* Match an ASSOCIATE statement. */ - -match -gfc_match_associate (void) +bool +check_coarray_assoc (const char *name, gfc_association_list *assoc) { - if (gfc_match_label () == MATCH_ERROR) - return MATCH_ERROR; - - if (gfc_match (" associate") != MATCH_YES) - return MATCH_NO; - - /* Match the association list. */ - if (gfc_match_char ('(') != MATCH_YES) + if (assoc->target->expr_type == EXPR_VARIABLE + && !strcmp (assoc->target->symtree->name, name)) { - gfc_error ("Expected association list at %C"); - return MATCH_ERROR; + gfc_error ("Codimension decl name %qs in association at %L " + "must not be the same as a selector", + name, &assoc->where); + return false; } + return true; +} + +match +match_association_list (bool for_change_team = false) +{ new_st.ext.block.assoc = NULL; while (true) { - gfc_association_list* newAssoc = gfc_get_association_list (); - gfc_association_list* a; + gfc_association_list *newAssoc = gfc_get_association_list (); + gfc_association_list *a; + locus pre_name = gfc_current_locus; /* Match the next association. */ if (gfc_match (" %n ", newAssoc->name) != MATCH_YES) @@ -1932,7 +1998,7 @@ gfc_match_associate (void) } /* Required for an assumed rank target. */ - if (gfc_peek_char () == '(') + if (!for_change_team && gfc_peek_char () == '(') { newAssoc->ar = gfc_get_array_ref (); if (gfc_match_array_ref (newAssoc->ar, NULL, 0, 0) != MATCH_YES) @@ -1946,26 +2012,53 @@ gfc_match_associate (void) gfc_error_now ("The bounds remapping list at %C is an experimental " "F202y feature. Use std=f202y to enable"); + if (for_change_team && gfc_peek_char () == '[') + { + if (!newAssoc->ar) + newAssoc->ar = gfc_get_array_ref (); + if (gfc_match_array_spec (&newAssoc->ar->as, false, true) + == MATCH_ERROR) + goto assocListError; + } + /* Match the next association. */ if (gfc_match (" =>", newAssoc->name) != MATCH_YES) { - gfc_error ("Expected association at %C"); - goto assocListError; + if (for_change_team) + gfc_current_locus = pre_name; + + free (newAssoc); + return MATCH_NO; } - if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) + if (!for_change_team) { - /* Have another go, allowing for procedure pointer selectors. */ - gfc_matching_procptr_assignment = 1; if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) { + /* Have another go, allowing for procedure pointer selectors. */ + gfc_matching_procptr_assignment = 1; + if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) + { + gfc_matching_procptr_assignment = 0; + gfc_error ("Invalid association target at %C"); + goto assocListError; + } gfc_matching_procptr_assignment = 0; - gfc_error ("Invalid association target at %C"); + } + newAssoc->where = gfc_current_locus; + } + else + { + newAssoc->where = gfc_current_locus; + /* F2018, C1116: A selector in a coarray-association shall be a named + coarray. */ + if (gfc_match (" %v", &newAssoc->target) != MATCH_YES) + { + gfc_error ("Selector in coarray association as %C shall be a " + "named coarray"); goto assocListError; } - gfc_matching_procptr_assignment = 0; } - newAssoc->where = gfc_current_locus; /* Check that the current name is not yet in the list. */ for (a = new_st.ext.block.assoc; a; a = a->next) @@ -1976,6 +2069,35 @@ gfc_match_associate (void) goto assocListError; } + if (for_change_team) + { + /* F2018, C1113: In a change-team-stmt, a coarray-name in a + codimension-decl shall not be the same as a selector, or another + coarray-name, in that statement. + The latter is already checked for above. So check only the + former. + */ + if (!check_coarray_assoc (newAssoc->name, newAssoc)) + goto assocListError; + + for (a = new_st.ext.block.assoc; a; a = a->next) + { + if (!check_coarray_assoc (newAssoc->name, a) + || !check_coarray_assoc (a->name, newAssoc)) + goto assocListError; + + /* F2018, C1115: No selector shall appear more than once in a + * given change-team-stmt. */ + if (!strcmp (newAssoc->target->symtree->name, + a->target->symtree->name)) + { + gfc_error ("Selector at %L duplicates selector at %L", + &newAssoc->target->where, &a->target->where); + goto assocListError; + } + } + } + /* The target expression must not be coindexed. */ if (gfc_is_coindexed (newAssoc->target)) { @@ -2042,8 +2164,40 @@ gfc_match_associate (void) assocListError: free (newAssoc); + return MATCH_ERROR; + } + + return MATCH_YES; +} + +/* Match an ASSOCIATE statement. */ + +match +gfc_match_associate (void) +{ + match m; + if (gfc_match_label () == MATCH_ERROR) + return MATCH_ERROR; + + if (gfc_match (" associate") != MATCH_YES) + return MATCH_NO; + + /* Match the association list. */ + if (gfc_match_char ('(') != MATCH_YES) + { + gfc_error ("Expected association list at %C"); + return MATCH_ERROR; + } + + m = match_association_list (); + if (m == MATCH_ERROR) + goto error; + else if (m == MATCH_NO) + { + gfc_error ("Expected association at %C"); goto error; } + if (gfc_match_char (')') != MATCH_YES) { /* This should never happen as we peek above. */ @@ -3171,6 +3325,7 @@ match_exit_cycle (gfc_statement st, gfc_exec_op op) case COMP_ASSOCIATE: case COMP_BLOCK: + case COMP_CHANGE_TEAM: case COMP_IF: case COMP_SELECT: case COMP_SELECT_TYPE: @@ -3848,7 +4003,9 @@ match gfc_match_form_team (void) { match m; - gfc_expr *teamid,*team; + gfc_expr *teamid, *team, *new_index; + + teamid = team = new_index = NULL; if (!gfc_notify_std (GFC_STD_F2018, "FORM TEAM statement at %C")) return MATCH_ERROR; @@ -3866,18 +4023,61 @@ gfc_match_form_team (void) if (gfc_match ("%e", &team) != MATCH_YES) goto syntax; - m = gfc_match_char (')'); + m = gfc_match_char (','); + if (m == MATCH_ERROR) + goto syntax; if (m == MATCH_NO) + { + m = gfc_match_char (')'); + if (m == MATCH_YES) + goto done; + goto syntax; + } + + for (;;) + { + m = match_stat_errmsg (&new_st.ext.sync_stat, ST_FORM_TEAM); + if (m == MATCH_ERROR) + goto cleanup; + + m = match_named_arg (" new_index = %e", "NEW_INDEX", &new_index, + ST_FORM_TEAM); + if (m == MATCH_ERROR) + goto cleanup; + + m = gfc_match_char (','); + if (m == MATCH_YES) + continue; + + break; + } + + if (m == MATCH_ERROR) + goto syntax; + + if (gfc_match (" )%t") != MATCH_YES) goto syntax; +done: + new_st.expr1 = teamid; new_st.expr2 = team; + new_st.expr3 = new_index; return MATCH_YES; syntax: gfc_syntax_error (ST_FORM_TEAM); +cleanup: + gfc_free_expr (new_index); + gfc_free_expr (new_st.ext.sync_stat.stat); + gfc_free_expr (new_st.ext.sync_stat.errmsg); + new_st.ext.sync_stat = {NULL, NULL}; + + gfc_free_expr (team); + gfc_free_expr (teamid); + return MATCH_ERROR; } @@ -3887,7 +4087,13 @@ match gfc_match_change_team (void) { match m; - gfc_expr *team; + gfc_expr *team = NULL; + + if (gfc_match_label () == MATCH_ERROR) + return MATCH_ERROR; + + if (gfc_match (" change% team") != MATCH_YES) + return MATCH_NO; if (!gfc_notify_std (GFC_STD_F2018, "CHANGE TEAM statement at %C")) return MATCH_ERROR; @@ -3895,15 +4101,41 @@ gfc_match_change_team (void) if (gfc_match_char ('(') == MATCH_NO) goto syntax; - new_st.op = EXEC_CHANGE_TEAM; - if (gfc_match ("%e", &team) != MATCH_YES) goto syntax; - m = gfc_match_char (')'); + m = gfc_match_char (','); + if (m == MATCH_ERROR) + goto syntax; if (m == MATCH_NO) + { + m = gfc_match_char (')'); + if (m == MATCH_YES) + goto done; + goto syntax; + } + + m = match_association_list (true); + if (m == MATCH_ERROR) + goto cleanup; + else if (m == MATCH_NO) + for (;;) + { + m = match_stat_errmsg (&new_st.ext.block.sync_stat, ST_CHANGE_TEAM); + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (',') == MATCH_YES) + continue; + + break; + } + + if (gfc_match (" )%t") != MATCH_YES) goto syntax; +done: + new_st.expr1 = team; return MATCH_YES; @@ -3911,20 +4143,49 @@ gfc_match_change_team (void) syntax: gfc_syntax_error (ST_CHANGE_TEAM); +cleanup: + gfc_free_expr (new_st.ext.block.sync_stat.stat); + gfc_free_expr (new_st.ext.block.sync_stat.errmsg); + new_st.ext.block.sync_stat = {NULL, NULL}; + gfc_free_association_list (new_st.ext.block.assoc); + new_st.ext.block.assoc = NULL; + gfc_free_expr (team); + return MATCH_ERROR; } -/* Match a END TEAM statement. */ +/* Match an END TEAM statement. */ match gfc_match_end_team (void) { - if (!gfc_notify_std (GFC_STD_F2018, "END TEAM statement at %C")) - return MATCH_ERROR; + if (gfc_match_eos () == MATCH_YES) + goto done; - if (gfc_match_char ('(') == MATCH_YES) + if (gfc_match_char ('(') != MATCH_YES) + { + /* There could be a team-construct-name following. Let caller decide + about error. */ + new_st.op = EXEC_END_TEAM; + return MATCH_NO; + } + + for (;;) + { + if (match_stat_errmsg (&new_st.ext.sync_stat, ST_END_TEAM) == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (',') == MATCH_YES) + continue; + + break; + } + + if (gfc_match_char (')') != MATCH_YES) goto syntax; +done: + new_st.op = EXEC_END_TEAM; return MATCH_YES; @@ -3932,6 +4193,14 @@ gfc_match_end_team (void) syntax: gfc_syntax_error (ST_END_TEAM); +cleanup: + gfc_free_expr (new_st.ext.sync_stat.stat); + gfc_free_expr (new_st.ext.sync_stat.errmsg); + new_st.ext.sync_stat = {NULL, NULL}; + + /* Try to match the closing bracket to allow error recovery. */ + gfc_match_char (')'); + return MATCH_ERROR; } @@ -3941,7 +4210,7 @@ match gfc_match_sync_team (void) { match m; - gfc_expr *team; + gfc_expr *team = NULL; if (!gfc_notify_std (GFC_STD_F2018, "SYNC TEAM statement at %C")) return MATCH_ERROR; @@ -3954,10 +4223,34 @@ gfc_match_sync_team (void) if (gfc_match ("%e", &team) != MATCH_YES) goto syntax; - m = gfc_match_char (')'); + m = gfc_match_char (','); + if (m == MATCH_ERROR) + goto syntax; if (m == MATCH_NO) + { + m = gfc_match_char (')'); + if (m == MATCH_YES) + goto done; + goto syntax; + } + + for (;;) + { + m = match_stat_errmsg (&new_st.ext.sync_stat, ST_SYNC_TEAM); + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (',') == MATCH_YES) + continue; + + break; + } + + if (gfc_match (" )%t") != MATCH_YES) goto syntax; +done: + new_st.expr1 = team; return MATCH_YES; @@ -3965,6 +4258,13 @@ gfc_match_sync_team (void) syntax: gfc_syntax_error (ST_SYNC_TEAM); +cleanup: + gfc_free_expr (new_st.ext.sync_stat.stat); + gfc_free_expr (new_st.ext.sync_stat.errmsg); + new_st.ext.sync_stat = {NULL, NULL}; + + gfc_free_expr (team); + return MATCH_ERROR; } @@ -5261,6 +5561,15 @@ gfc_match_return (void) return MATCH_ERROR; } + if (gfc_find_state (COMP_CHANGE_TEAM)) + { + /* F2018, C1111: A RETURN statement shall not appear within a CHANGE TEAM + construct. */ + gfc_error ( + "Image control statement RETURN at %C in CHANGE TEAM-END TEAM block"); + return MATCH_ERROR; + } + if (gfc_match_eos () == MATCH_YES) goto done; diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index ded80b7..df82940 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -1588,7 +1588,7 @@ gfc_match_omp_clause_reduction (char pc, gfc_omp_clauses *c, bool openacc, { gfc_omp_namelist *p = gfc_get_omp_namelist (), **tl; p->sym = n->sym; - p->where = p->where; + p->where = n->where; p->u.map.op = OMP_MAP_ALWAYS_TOFROM; tl = &c->lists[OMP_LIST_MAP]; @@ -9681,22 +9681,6 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, && n->sym->as->type == AS_ASSUMED_SIZE) gfc_error ("Assumed size array %qs in %s clause at %L", n->sym->name, name, &n->where); - if (!openacc - && list == OMP_LIST_MAP - && n->sym->ts.type == BT_DERIVED - && n->sym->ts.u.derived->attr.alloc_comp) - gfc_error ("List item %qs with allocatable components is not " - "permitted in map clause at %L", n->sym->name, - &n->where); - if (!openacc - && (list == OMP_LIST_MAP - || list == OMP_LIST_FROM - || list == OMP_LIST_TO) - && ((n->expr && n->expr->ts.type == BT_CLASS) - || (!n->expr && n->sym->ts.type == BT_CLASS))) - gfc_warning (OPT_Wopenmp, - "Mapping polymorphic list item at %L is " - "unspecified behavior", &n->where); if (list == OMP_LIST_MAP && !openacc) switch (code->op) { @@ -10008,9 +9992,11 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, n->sym->name, name, &n->where); if (!openacc - && list == OMP_LIST_FIRSTPRIVATE - && ((n->expr && n->expr->ts.type == BT_CLASS) - || (!n->expr && n->sym->ts.type == BT_CLASS))) + && (list == OMP_LIST_PRIVATE + || list == OMP_LIST_FIRSTPRIVATE) + && ((n->sym->ts.type == BT_DERIVED + && n->sym->ts.u.derived->attr.alloc_comp) + || n->sym->ts.type == BT_CLASS)) switch (code->op) { case EXEC_OMP_TARGET: @@ -10025,9 +10011,19 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD: case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD: case EXEC_OMP_TARGET_TEAMS_LOOP: - gfc_warning (OPT_Wopenmp, - "FIRSTPRIVATE with polymorphic list item at " - "%L is unspecified behavior", &n->where); + if (n->sym->ts.type == BT_DERIVED + && n->sym->ts.u.derived->attr.alloc_comp) + gfc_error ("Sorry, list item %qs at %L with allocatable" + " components is not yet supported in %s " + "clause", n->sym->name, &n->where, + list == OMP_LIST_PRIVATE ? "PRIVATE" + : "FIRSTPRIVATE"); + else + gfc_error ("Polymorphic list item %qs at %L in %s " + "clause has unspecified behavior and " + "unsupported", n->sym->name, &n->where, + list == OMP_LIST_PRIVATE ? "PRIVATE" + : "FIRSTPRIVATE"); break; default: break; diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc index a95bb62..538eb65 100644 --- a/gcc/fortran/parse.cc +++ b/gcc/fortran/parse.cc @@ -488,6 +488,7 @@ decode_statement (void) match (NULL, gfc_match_do, ST_DO); match (NULL, gfc_match_block, ST_BLOCK); match (NULL, gfc_match_associate, ST_ASSOCIATE); + match (NULL, gfc_match_change_team, ST_CHANGE_TEAM); match (NULL, gfc_match_critical, ST_CRITICAL); match (NULL, gfc_match_select, ST_SELECT_CASE); match (NULL, gfc_match_select_type, ST_SELECT_TYPE); @@ -517,7 +518,6 @@ decode_statement (void) case 'c': match ("call", gfc_match_call, ST_CALL); - match ("change% team", gfc_match_change_team, ST_CHANGE_TEAM); match ("close", gfc_match_close, ST_CLOSE); match ("continue", gfc_match_continue, ST_CONTINUE); match ("contiguous", gfc_match_contiguous, ST_ATTR_DECL); @@ -537,7 +537,6 @@ decode_statement (void) case 'e': match ("end file", gfc_match_endfile, ST_END_FILE); - match ("end team", gfc_match_end_team, ST_END_TEAM); match ("exit", gfc_match_exit, ST_EXIT); match ("else", gfc_match_else, ST_ELSE); match ("else where", gfc_match_elsewhere, ST_ELSEWHERE); @@ -1927,8 +1926,7 @@ next_statement (void) case ST_OMP_INTEROP: \ case ST_ERROR_STOP: case ST_OMP_SCAN: case ST_SYNC_ALL: \ case ST_SYNC_IMAGES: case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK: \ - case ST_FORM_TEAM: case ST_CHANGE_TEAM: \ - case ST_END_TEAM: case ST_SYNC_TEAM: \ + case ST_FORM_TEAM: case ST_SYNC_TEAM: \ case ST_EVENT_POST: case ST_EVENT_WAIT: case ST_FAIL_IMAGE: \ case ST_OACC_UPDATE: case ST_OACC_WAIT: case ST_OACC_CACHE: \ case ST_OACC_ENTER_DATA: case ST_OACC_EXIT_DATA @@ -2032,7 +2030,8 @@ next_statement (void) #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \ case ST_END_PROGRAM: case ST_END_SUBROUTINE: \ - case ST_END_BLOCK: case ST_END_ASSOCIATE + case ST_END_BLOCK: case ST_END_ASSOCIATE: \ + case ST_END_TEAM /* Push a new state onto the stack. */ @@ -2164,6 +2163,7 @@ check_statement_label (gfc_statement st) case ST_END_CRITICAL: case ST_END_BLOCK: case ST_END_ASSOCIATE: + case ST_END_TEAM: case_executable: case_exec_markers: if (st == ST_ENDDO || st == ST_CONTINUE) @@ -3199,6 +3199,8 @@ accept_statement (gfc_statement st) case ST_ENTRY: case ST_OMP_METADIRECTIVE: case ST_OMP_BEGIN_METADIRECTIVE: + case ST_CHANGE_TEAM: + case ST_END_TEAM: case_executable: case_exec_markers: add_statement (); @@ -3383,6 +3385,8 @@ verify_st_order (st_state *p, gfc_statement st, bool silent) goto order; break; + case ST_CHANGE_TEAM: + case ST_END_TEAM: case_executable: case_exec_markers: if (p->state < ORDER_EXEC) @@ -5238,30 +5242,12 @@ parse_block_construct (void) pop_state (); } - -/* Parse an ASSOCIATE construct. This is essentially a BLOCK construct - behind the scenes with compiler-generated variables. */ - static void -parse_associate (void) +move_associates_to_block () { - gfc_namespace* my_ns; - gfc_state_data s; - gfc_statement st; - gfc_association_list* a; + gfc_association_list *a; gfc_array_spec *as; - gfc_notify_std (GFC_STD_F2003, "ASSOCIATE construct at %C"); - - my_ns = gfc_build_block_ns (gfc_current_ns); - - new_st.op = EXEC_BLOCK; - new_st.ext.block.ns = my_ns; - gcc_assert (new_st.ext.block.assoc); - - /* Add all associate-names as BLOCK variables. Creating them is enough - for now, they'll get their values during trans-* phase. */ - gfc_current_ns = my_ns; for (a = new_st.ext.block.assoc; a; a = a->next) { gfc_symbol *sym, *tsym; @@ -5298,26 +5284,23 @@ parse_associate (void) /* Don’t share the character length information between associate variable and target if the length is not a compile-time constant, - as we don’t want to touch some other character length variable when - we try to initialize the associate variable’s character length - variable. - We do it here rather than later so that expressions referencing the - associate variable will automatically have the correctly setup length - information. If we did it at resolution stage the expressions would - use the original length information, and the variable a new different - one, but only the latter one would be correctly initialized at - translation stage, and the former one would need some additional setup - there. */ - if (sym->ts.type == BT_CHARACTER - && sym->ts.u.cl + as we don’t want to touch some other character length variable + when we try to initialize the associate variable’s character + length variable. We do it here rather than later so that expressions + referencing the associate variable will automatically have the + correctly setup length information. If we did it at resolution stage + the expressions would use the original length information, and the + variable a new different one, but only the latter one would be + correctly initialized at translation stage, and the former one would + need some additional setup there. */ + if (sym->ts.type == BT_CHARACTER && sym->ts.u.cl && !(sym->ts.u.cl->length && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)) sym->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL); /* If the function has been parsed, go straight to the result to obtain the expression rank. */ - if (target->expr_type == EXPR_FUNCTION - && target->symtree + if (target->expr_type == EXPR_FUNCTION && target->symtree && target->symtree->n.sym) { tsym = target->symtree->n.sym; @@ -5344,8 +5327,7 @@ parse_associate (void) by calling gfc_resolve_expr because the context is unavailable. However, the references can be resolved and the rank of the target expression set. */ - if (!sym->assoc->inferred_type - && target->ref && gfc_resolve_ref (target) + if (!sym->assoc->inferred_type && target->ref && gfc_resolve_ref (target) && target->expr_type != EXPR_ARRAY && target->expr_type != EXPR_COMPCALL) gfc_expression_rank (target); @@ -5353,13 +5335,12 @@ parse_associate (void) /* Determine whether or not function expressions with unknown type are structure constructors. If so, the function result can be converted to be a derived type. */ - if (target->expr_type == EXPR_FUNCTION - && target->ts.type == BT_UNKNOWN) + if (target->expr_type == EXPR_FUNCTION && target->ts.type == BT_UNKNOWN) { gfc_symbol *derived; /* The derived type has a leading uppercase character. */ gfc_find_symbol (gfc_dt_upper_string (target->symtree->name), - my_ns->parent, 1, &derived); + gfc_current_ns->parent, 1, &derived); if (derived && derived->attr.flavor == FL_DERIVED) { sym->ts.type = BT_DERIVED; @@ -5394,7 +5375,7 @@ parse_associate (void) attr.codimension = as->corank ? 1 : 0; sym->assoc->variable = true; } - else if (rank || corank) + else if (rank || corank) { as = gfc_get_array_spec (); as->type = AS_DEFERRED; @@ -5449,6 +5430,30 @@ parse_associate (void) } gfc_commit_symbols (); } +} + +/* Parse an ASSOCIATE construct. This is essentially a BLOCK construct + behind the scenes with compiler-generated variables. */ + +static void +parse_associate (void) +{ + gfc_namespace* my_ns; + gfc_state_data s; + gfc_statement st; + + gfc_notify_std (GFC_STD_F2003, "ASSOCIATE construct at %C"); + + my_ns = gfc_build_block_ns (gfc_current_ns); + + new_st.op = EXEC_BLOCK; + new_st.ext.block.ns = my_ns; + gcc_assert (new_st.ext.block.assoc); + + /* Add all associate-names as BLOCK variables. Creating them is enough + for now, they'll get their values during trans-* phase. */ + gfc_current_ns = my_ns; + move_associates_to_block (); accept_statement (ST_ASSOCIATE); push_state (&s, COMP_ASSOCIATE, my_ns->proc_name); @@ -5474,6 +5479,49 @@ loop: pop_state (); } +static void +parse_change_team (void) +{ + gfc_namespace *my_ns; + gfc_state_data s; + gfc_statement st; + + gfc_notify_std (GFC_STD_F2018, "CHANGE TEAM construct at %C"); + + my_ns = gfc_build_block_ns (gfc_current_ns); + + new_st.op = EXEC_CHANGE_TEAM; + new_st.ext.block.ns = my_ns; + + /* Add all associate-names as BLOCK variables. Creating them is enough + for now, they'll get their values during trans-* phase. */ + gfc_current_ns = my_ns; + if (new_st.ext.block.assoc) + move_associates_to_block (); + + accept_statement (ST_CHANGE_TEAM); + push_state (&s, COMP_CHANGE_TEAM, my_ns->proc_name); + +loop: + st = parse_executable (ST_NONE); + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case_end: + accept_statement (st); + my_ns->code = gfc_state_stack->head; + break; + + default: + unexpected_statement (st); + goto loop; + } + + gfc_current_ns = gfc_current_ns->parent; + pop_state (); +} /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are handled inside of parse_executable(), because they aren't really @@ -6576,6 +6624,7 @@ parse_executable (gfc_statement st) case ST_STOP: case ST_ERROR_STOP: case ST_END_SUBROUTINE: + case ST_END_TEAM: case ST_DO: case ST_FORALL: @@ -6615,6 +6664,10 @@ parse_executable (gfc_statement st) parse_associate (); break; + case ST_CHANGE_TEAM: + parse_change_team (); + break; + case ST_IF_BLOCK: parse_if_block (); break; diff --git a/gcc/fortran/parse.h b/gcc/fortran/parse.h index 722e94c..7bf0fa4 100644 --- a/gcc/fortran/parse.h +++ b/gcc/fortran/parse.h @@ -32,7 +32,7 @@ enum gfc_compile_state COMP_DO, COMP_SELECT, COMP_FORALL, COMP_WHERE, COMP_CONTAINS, COMP_ENUM, COMP_SELECT_TYPE, COMP_SELECT_RANK, COMP_OMP_STRUCTURED_BLOCK, COMP_CRITICAL, COMP_DO_CONCURRENT, COMP_OMP_STRICTLY_STRUCTURED_BLOCK, - COMP_OMP_METADIRECTIVE, COMP_OMP_BEGIN_METADIRECTIVE + COMP_OMP_METADIRECTIVE, COMP_OMP_BEGIN_METADIRECTIVE, COMP_CHANGE_TEAM }; /* Stack element for the current compilation state. These structures diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index cdf043b..e51f83b 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -3190,6 +3190,13 @@ gfc_pure_function (gfc_expr *e, const char **name) || e->value.function.isym->elemental; *name = e->value.function.isym->name; } + else if (e->symtree && e->symtree->n.sym && e->symtree->n.sym->attr.dummy) + { + /* The function has been resolved, but esym is not yet set. + This can happen with functions as dummy argument. */ + pure = e->symtree->n.sym->attr.pure; + *name = e->symtree->n.sym->name; + } else { /* Implicit functions are not pure. */ @@ -3253,14 +3260,30 @@ static bool check_pure_function (gfc_expr *e) gfc_do_concurrent_flag = 0 when the check for an impure function occurs. Check the stack to see if the source code has a nested BLOCK construct. */ + for (stack = cs_base; stack; stack = stack->prev) { - if (stack->current->op == EXEC_BLOCK) saw_block = true; + if (!saw_block && stack->current->op == EXEC_BLOCK) + { + saw_block = true; + continue; + } + if (saw_block && stack->current->op == EXEC_DO_CONCURRENT) { - gfc_error ("Reference to impure function at %L inside a " - "DO CONCURRENT", &e->where); - return false; + bool is_pure; + is_pure = (e->value.function.isym + && (e->value.function.isym->pure + || e->value.function.isym->elemental)) + || (e->value.function.esym + && (e->value.function.esym->attr.pure + || e->value.function.esym->attr.elemental)); + if (!is_pure) + { + gfc_error ("Reference to impure function at %L inside a " + "DO CONCURRENT", &e->where); + return false; + } } } @@ -3656,16 +3679,29 @@ pure_subroutine (gfc_symbol *sym, const char *name, locus *loc) /* A BLOCK construct within a DO CONCURRENT construct leads to gfc_do_concurrent_flag = 0 when the check for an impure subroutine - occurs. Check the stack to see if the source code has a nested - BLOCK construct. */ + occurs. Walk up the stack to see if the source code has a nested + construct. */ + for (stack = cs_base; stack; stack = stack->prev) { - if (stack->current->op == EXEC_BLOCK) saw_block = true; + if (stack->current->op == EXEC_BLOCK) + { + saw_block = true; + continue; + } + if (saw_block && stack->current->op == EXEC_DO_CONCURRENT) { - gfc_error ("Subroutine call at %L in a DO CONCURRENT block " - "is not PURE", loc); - return false; + + bool is_pure = true; + is_pure = sym->attr.pure || sym->attr.elemental; + + if (!is_pure) + { + gfc_error ("Subroutine call at %L in a DO CONCURRENT block " + "is not PURE", loc); + return false; + } } } @@ -11448,6 +11484,109 @@ resolve_lock_unlock_event (gfc_code *code) } } +static void +resolve_team_argument (gfc_expr *team) +{ + gfc_resolve_expr (team); + if (team->rank != 0 || team->ts.type != BT_DERIVED + || team->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV + || team->ts.u.derived->intmod_sym_id != ISOFORTRAN_TEAM_TYPE) + { + gfc_error ("TEAM argument at %L must be a scalar expression " + "of type TEAM_TYPE from the intrinsic module ISO_FORTRAN_ENV", + &team->where); + } +} + +static void +resolve_scalar_variable_as_arg (const char *name, bt exp_type, int exp_kind, + gfc_expr *e) +{ + gfc_resolve_expr (e); + if (e + && (e->ts.type != exp_type || e->ts.kind < exp_kind || e->rank != 0 + || e->expr_type != EXPR_VARIABLE)) + gfc_error ("%s argument at %L must be a scalar %s variable of at least " + "kind %d", name, &e->where, gfc_basic_typename (exp_type), + exp_kind); +} + +void +gfc_resolve_sync_stat (struct sync_stat *sync_stat) +{ + resolve_scalar_variable_as_arg ("STAT=", BT_INTEGER, 2, sync_stat->stat); + resolve_scalar_variable_as_arg ("ERRMSG=", BT_CHARACTER, + gfc_default_character_kind, + sync_stat->errmsg); +} + +static void +resolve_scalar_argument (const char *name, bt exp_type, int exp_kind, + gfc_expr *e) +{ + gfc_resolve_expr (e); + if (e + && (e->ts.type != exp_type || e->ts.kind < exp_kind || e->rank != 0)) + gfc_error ("%s argument at %L must be a scalar %s of at least kind %d", + name, &e->where, gfc_basic_typename (exp_type), exp_kind); +} + +static void +resolve_form_team (gfc_code *code) +{ + resolve_scalar_argument ("TEAM NUMBER", BT_INTEGER, gfc_default_integer_kind, + code->expr1); + resolve_team_argument (code->expr2); + resolve_scalar_argument ("NEW_INDEX=", BT_INTEGER, gfc_default_integer_kind, + code->expr3); + gfc_resolve_sync_stat (&code->ext.sync_stat); +} + +static void resolve_block_construct (gfc_code *); + +static void +resolve_change_team (gfc_code *code) +{ + resolve_team_argument (code->expr1); + gfc_resolve_sync_stat (&code->ext.block.sync_stat); + resolve_block_construct (code); + /* Map the coarray bounds as selected. */ + for (gfc_association_list *a = code->ext.block.assoc; a; a = a->next) + if (a->ar) + { + gfc_array_spec *src = a->ar->as, *dst; + if (a->st->n.sym->ts.type == BT_CLASS) + dst = CLASS_DATA (a->st->n.sym)->as; + else + dst = a->st->n.sym->as; + dst->corank = src->corank; + dst->cotype = src->cotype; + for (int i = 0; i < src->corank; ++i) + { + dst->lower[dst->rank + i] = src->lower[i]; + dst->upper[dst->rank + i] = src->upper[i]; + src->lower[i] = src->upper[i] = nullptr; + } + gfc_free_array_spec (src); + free (a->ar); + a->ar = nullptr; + dst->resolved = false; + gfc_resolve_array_spec (dst, 0); + } +} + +static void +resolve_sync_team (gfc_code *code) +{ + resolve_team_argument (code->expr1); + gfc_resolve_sync_stat (&code->ext.sync_stat); +} + +static void +resolve_end_team (gfc_code *code) +{ + gfc_resolve_sync_stat (&code->ext.sync_stat); +} static void resolve_critical (gfc_code *code) @@ -11457,6 +11596,8 @@ resolve_critical (gfc_code *code) char name[GFC_MAX_SYMBOL_LEN]; static int serial = 0; + gfc_resolve_sync_stat (&code->ext.sync_stat); + if (flag_coarray != GFC_FCOARRAY_LIB) return; @@ -11580,8 +11721,8 @@ resolve_branch (gfc_st_label *label, gfc_code *code) if (code->here == label) { - gfc_warning (0, - "Branch at %L may result in an infinite loop", &code->loc); + gfc_warning (0, "Branch at %L may result in an infinite loop", + &code->loc); return; } @@ -11604,6 +11745,10 @@ resolve_branch (gfc_st_label *label, gfc_code *code) && bitmap_bit_p (stack->reachable_labels, label->value)) gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct " "for label at %L", &code->loc, &label->where); + else if (stack->current->op == EXEC_CHANGE_TEAM + && bitmap_bit_p (stack->reachable_labels, label->value)) + gfc_error ("GOTO statement at %L leaves CHANGE TEAM construct " + "for label at %L", &code->loc, &label->where); } return; @@ -13240,23 +13385,6 @@ deferred_op_assign (gfc_code **code, gfc_namespace *ns) } -static bool -check_team (gfc_expr *team, const char *intrinsic) -{ - if (team->rank != 0 - || team->ts.type != BT_DERIVED - || team->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV - || team->ts.u.derived->intmod_sym_id != ISOFORTRAN_TEAM_TYPE) - { - gfc_error ("TEAM argument to %qs at %L must be a scalar expression " - "of type TEAM_TYPE", intrinsic, &team->where); - return false; - } - - return true; -} - - /* Given a block of code, recursively resolve everything pointed to by this code block. */ @@ -13445,22 +13573,19 @@ start: break; case EXEC_FORM_TEAM: - if (code->expr1 != NULL - && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank)) - gfc_error ("TEAM NUMBER argument to FORM TEAM at %L must be " - "a scalar INTEGER", &code->expr1->where); - check_team (code->expr2, "FORM TEAM"); + resolve_form_team (code); break; case EXEC_CHANGE_TEAM: - check_team (code->expr1, "CHANGE TEAM"); + resolve_change_team (code); break; case EXEC_END_TEAM: + resolve_end_team (code); break; case EXEC_SYNC_TEAM: - check_team (code->expr1, "SYNC TEAM"); + resolve_sync_team (code); break; case EXEC_ENTRY: diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index 92ab17b..208251b 100644 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -3133,8 +3133,10 @@ gfc_simplify_get_team (gfc_expr *level ATTRIBUTE_UNUSED) if (flag_coarray == GFC_FCOARRAY_SINGLE) { gfc_expr *result; - result = gfc_get_array_expr (BT_INTEGER, gfc_default_integer_kind, &gfc_current_locus); - result->rank = 0; + result = gfc_get_null_expr (&gfc_current_locus); + result->ts.type = BT_DERIVED; + gfc_find_symbol ("team_type", gfc_current_ns, 1, &result->ts.u.derived); + return result; } @@ -6727,7 +6729,7 @@ gfc_simplify_null (gfc_expr *mold) gfc_expr * -gfc_simplify_num_images (gfc_expr *distance ATTRIBUTE_UNUSED, gfc_expr *failed) +gfc_simplify_num_images (gfc_expr *team_or_team_number ATTRIBUTE_UNUSED) { gfc_expr *result; @@ -6740,16 +6742,9 @@ gfc_simplify_num_images (gfc_expr *distance ATTRIBUTE_UNUSED, gfc_expr *failed) if (flag_coarray != GFC_FCOARRAY_SINGLE) return NULL; - if (failed && failed->expr_type != EXPR_CONSTANT) - return NULL; - /* FIXME: gfc_current_locus is wrong. */ result = gfc_get_constant_expr (BT_INTEGER, gfc_default_integer_kind, &gfc_current_locus); - - if (failed && failed->value.logical != 0) - mpz_set_si (result->value.integer, 0); - else mpz_set_si (result->value.integer, 1); return result; @@ -8925,7 +8920,8 @@ gfc_simplify_trim (gfc_expr *e) gfc_expr * -gfc_simplify_image_index (gfc_expr *coarray, gfc_expr *sub) +gfc_simplify_image_index (gfc_expr *coarray, gfc_expr *sub, + gfc_expr *team_or_team_number ATTRIBUTE_UNUSED) { gfc_expr *result; gfc_ref *ref; @@ -9067,14 +9063,13 @@ gfc_simplify_image_status (gfc_expr *image, gfc_expr *team ATTRIBUTE_UNUSED) gfc_expr * gfc_simplify_this_image (gfc_expr *coarray, gfc_expr *dim, - gfc_expr *distance ATTRIBUTE_UNUSED) + gfc_expr *team ATTRIBUTE_UNUSED) { if (flag_coarray != GFC_FCOARRAY_SINGLE) return NULL; - /* If no coarray argument has been passed or when the first argument - is actually a distance argument. */ - if (coarray == NULL || !gfc_is_coarray (coarray)) + /* If no coarray argument has been passed. */ + if (coarray == NULL) { gfc_expr *result; /* FIXME: gfc_current_locus is wrong. */ diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index aea132d..ee48a82 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -4043,9 +4043,9 @@ gfc_build_builtin_function_decls (void) gfor_fndecl_caf_finalize = gfc_build_library_function_decl ( get_identifier (PREFIX("caf_finalize")), void_type_node, 0); - gfor_fndecl_caf_this_image = gfc_build_library_function_decl ( - get_identifier (PREFIX("caf_this_image")), integer_type_node, - 1, integer_type_node); + gfor_fndecl_caf_this_image = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_this_image")), ". r ", integer_type_node, + 1, pvoid_type_node); gfor_fndecl_caf_num_images = gfc_build_library_function_decl ( get_identifier (PREFIX("caf_num_images")), integer_type_node, @@ -4201,42 +4201,36 @@ gfc_build_builtin_function_decls (void) void_type_node, 3, pvoid_type_node, ppvoid_type_node, integer_type_node); - gfor_fndecl_caf_form_team - = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_form_team")), ". . W . ", - void_type_node, 3, integer_type_node, ppvoid_type_node, - integer_type_node); + gfor_fndecl_caf_form_team = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_form_team")), ". r w r w w w ", + void_type_node, 6, integer_type_node, ppvoid_type_node, pint_type, + pint_type, pchar_type_node, size_type_node); - gfor_fndecl_caf_change_team - = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_change_team")), ". w . ", - void_type_node, 2, ppvoid_type_node, - integer_type_node); + gfor_fndecl_caf_change_team = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_change_team")), ". r w w w ", + void_type_node, 4, pvoid_type_node, pint_type, pchar_type_node, + size_type_node); - gfor_fndecl_caf_end_team - = gfc_build_library_function_decl ( - get_identifier (PREFIX("caf_end_team")), void_type_node, 0); + gfor_fndecl_caf_end_team = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_end_team")), ". w w w ", void_type_node, 3, + pint_type, pchar_type_node, size_type_node); - gfor_fndecl_caf_get_team - = gfc_build_library_function_decl ( - get_identifier (PREFIX("caf_get_team")), - void_type_node, 1, integer_type_node); + gfor_fndecl_caf_get_team = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_get_team")), ". r ", pvoid_type_node, 1, + pint_type); - gfor_fndecl_caf_sync_team - = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_sync_team")), ". r . ", - void_type_node, 2, ppvoid_type_node, - integer_type_node); + gfor_fndecl_caf_sync_team = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_sync_team")), ". r w w w ", void_type_node, + 4, pvoid_type_node, pint_type, pchar_type_node, size_type_node); gfor_fndecl_caf_team_number = gfc_build_library_function_decl_with_spec ( get_identifier (PREFIX("caf_team_number")), ". r ", integer_type_node, 1, integer_type_node); - gfor_fndecl_caf_image_status - = gfc_build_library_function_decl_with_spec ( - get_identifier (PREFIX("caf_image_status")), ". . r ", - integer_type_node, 2, integer_type_node, ppvoid_type_node); + gfor_fndecl_caf_image_status = gfc_build_library_function_decl_with_spec ( + get_identifier (PREFIX ("caf_image_status")), ". r r ", + integer_type_node, 2, integer_type_node, ppvoid_type_node); gfor_fndecl_caf_stopped_images = gfc_build_library_function_decl_with_spec ( @@ -6920,6 +6914,7 @@ add_clause (gfc_symbol *sym, gfc_omp_map_op map_op) n = gfc_get_omp_namelist (); n->sym = sym; + n->where = sym->declared_at; n->u.map.op = map_op; if (!module_oacc_clauses) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 62dd38d..19e5669b 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -2579,10 +2579,8 @@ gfc_caf_get_image_index (stmtblock_t *block, gfc_expr *e, tree desc) gcc_assert (ref != NULL); if (ref->u.ar.dimen_type[ref->u.ar.dimen] == DIMEN_THIS_IMAGE) - { - return build_call_expr_loc (input_location, gfor_fndecl_caf_this_image, 1, - integer_zero_node); - } + return build_call_expr_loc (input_location, gfor_fndecl_caf_this_image, 1, + null_pointer_node); img_idx = build_zero_cst (gfc_array_index_type); extent = build_one_cst (gfc_array_index_type); @@ -9836,7 +9834,12 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, && !cm->attr.proc_pointer) { if (cm->attr.allocatable && expr->expr_type == EXPR_NULL) - gfc_conv_descriptor_data_set (&block, dest, null_pointer_node); + { + gfc_conv_descriptor_data_set (&block, dest, null_pointer_node); + if (cm->attr.codimension && flag_coarray == GFC_FCOARRAY_LIB) + gfc_add_modify (&block, gfc_conv_descriptor_token (dest), + null_pointer_node); + } else if (cm->attr.allocatable || cm->attr.pdt_array) { tmp = gfc_trans_alloc_subarray_assign (dest, cm, expr); diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index 6ffc3e0..440cbdd 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -1183,8 +1183,10 @@ conv_stat_and_team (stmtblock_t *block, gfc_expr *expr, tree *stat, tree *team, { gfc_se team_se; gfc_init_se (&team_se, NULL); - gfc_conv_expr_reference (&team_se, team_e); - *team = team_se.expr; + gfc_conv_expr (&team_se, team_e); + *team + = gfc_build_addr_expr (NULL_TREE, gfc_trans_force_lval (&team_se.pre, + team_se.expr)); gfc_add_block_to_block (block, &team_se.pre); gfc_add_block_to_block (block, &team_se.post); } @@ -1196,8 +1198,11 @@ conv_stat_and_team (stmtblock_t *block, gfc_expr *expr, tree *stat, tree *team, { gfc_se team_se; gfc_init_se (&team_se, NULL); - gfc_conv_expr_reference (&team_se, team_e); - *team_no = team_se.expr; + gfc_conv_expr (&team_se, team_e); + *team_no = gfc_build_addr_expr ( + NULL_TREE, + gfc_trans_force_lval (&team_se.pre, + fold_convert (integer_type_node, team_se.expr))); gfc_add_block_to_block (block, &team_se.pre); gfc_add_block_to_block (block, &team_se.post); } @@ -1379,9 +1384,9 @@ gfc_conv_intrinsic_caf_is_present_remote (gfc_se *se, gfc_expr *e) present_fn = e->value.function.actual->next->next->expr; add_data_sym = present_fn->symtree->n.sym->formal->sym; - fn_index = conv_caf_func_index (&se->pre, gfc_current_ns, + fn_index = conv_caf_func_index (&se->pre, e->symtree->n.sym->ns, "__caf_present_on_remote_fn_index_%d", hash); - add_data_tree = conv_caf_add_call_data (&se->pre, gfc_current_ns, + add_data_tree = conv_caf_add_call_data (&se->pre, e->symtree->n.sym->ns, "__caf_present_on_remote_add_data_%d", add_data_sym, &add_data_size); ++caf_call_cnt; @@ -1790,13 +1795,13 @@ conv_caf_sendget (gfc_code *code) ++caf_call_cnt; tmp = build_call_expr_loc ( - input_location, gfor_fndecl_caf_transfer_between_remotes, 20, lhs_token, + input_location, gfor_fndecl_caf_transfer_between_remotes, 22, lhs_token, opt_lhs_desc, opt_lhs_charlen, lhs_image_index, receiver_fn_index_tree, lhs_add_data_tree, lhs_add_data_size, rhs_token, opt_rhs_desc, opt_rhs_charlen, rhs_image_index, sender_fn_index_tree, rhs_add_data_tree, rhs_add_data_size, rhs_size, transfer_rank == 0 ? boolean_true_node : boolean_false_node, lhs_stat, - lhs_team, lhs_team_no, rhs_stat, rhs_team, rhs_team_no); + rhs_stat, lhs_team, lhs_team_no, rhs_team, rhs_team_no); gfc_add_expr_to_block (&block, tmp); gfc_add_block_to_block (&block, &lhs_se.post); @@ -1818,34 +1823,31 @@ static void trans_this_image (gfc_se * se, gfc_expr *expr) { stmtblock_t loop; - tree type, desc, dim_arg, cond, tmp, m, loop_var, exit_label, min_var, - lbound, ubound, extent, ml; + tree type, desc, dim_arg, cond, tmp, m, loop_var, exit_label, min_var, lbound, + ubound, extent, ml, team; gfc_se argse; int rank, corank; - gfc_expr *distance = expr->value.function.actual->next->next->expr; - - if (expr->value.function.actual->expr - && !gfc_is_coarray (expr->value.function.actual->expr)) - distance = expr->value.function.actual->expr; /* The case -fcoarray=single is handled elsewhere. */ gcc_assert (flag_coarray != GFC_FCOARRAY_SINGLE); + /* Translate team, if present. */ + if (expr->value.function.actual->next->next->expr) + { + gfc_init_se (&argse, NULL); + gfc_conv_expr_val (&argse, expr->value.function.actual->next->next->expr); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + team = fold_convert (pvoid_type_node, argse.expr); + } + else + team = null_pointer_node; + /* Argument-free version: THIS_IMAGE(). */ - if (distance || expr->value.function.actual->expr == NULL) + if (expr->value.function.actual->expr == NULL) { - if (distance) - { - gfc_init_se (&argse, NULL); - gfc_conv_expr_val (&argse, distance); - gfc_add_block_to_block (&se->pre, &argse.pre); - gfc_add_block_to_block (&se->post, &argse.post); - tmp = fold_convert (integer_type_node, argse.expr); - } - else - tmp = integer_zero_node; tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_this_image, 1, - tmp); + team); se->expr = fold_convert (gfc_get_int_type (gfc_default_integer_kind), tmp); return; @@ -1940,8 +1942,8 @@ trans_this_image (gfc_se * se, gfc_expr *expr) */ /* this_image () - 1. */ - tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_this_image, 1, - integer_zero_node); + tmp + = build_call_expr_loc (input_location, gfor_fndecl_caf_this_image, 1, team); tmp = fold_build2_loc (input_location, MINUS_EXPR, type, fold_convert (type, tmp), build_int_cst (type, 1)); if (corank == 1) @@ -2072,7 +2074,8 @@ conv_intrinsic_image_status (gfc_se *se, gfc_expr *expr) } else if (flag_coarray == GFC_FCOARRAY_LIB) tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_image_status, 2, - args[0], build_int_cst (integer_type_node, -1)); + args[0], + num_args < 2 ? null_pointer_node : args[1]); else gcc_unreachable (); @@ -2092,18 +2095,7 @@ conv_intrinsic_team_number (gfc_se *se, gfc_expr *expr) if (flag_coarray == GFC_FCOARRAY_SINGLE && expr->value.function.actual->expr) - { - tree arg; - - arg = gfc_evaluate_now (args[0], &se->pre); - tmp = fold_build2_loc (input_location, EQ_EXPR, logical_type_node, - fold_convert (integer_type_node, arg), - integer_one_node); - tmp = fold_build3_loc (input_location, COND_EXPR, integer_type_node, - tmp, integer_zero_node, - build_int_cst (integer_type_node, - GFC_STAT_STOPPED_IMAGE)); - } + tmp = gfc_evaluate_now (args[0], &se->pre); else if (flag_coarray == GFC_FCOARRAY_SINGLE) { // the value -1 represents that no team has been created yet @@ -2111,10 +2103,10 @@ conv_intrinsic_team_number (gfc_se *se, gfc_expr *expr) } else if (flag_coarray == GFC_FCOARRAY_LIB && expr->value.function.actual->expr) tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_team_number, 1, - args[0], build_int_cst (integer_type_node, -1)); + args[0]); else if (flag_coarray == GFC_FCOARRAY_LIB) tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_team_number, 1, - integer_zero_node, build_int_cst (integer_type_node, -1)); + null_pointer_node); else gcc_unreachable (); @@ -2125,8 +2117,8 @@ conv_intrinsic_team_number (gfc_se *se, gfc_expr *expr) static void trans_image_index (gfc_se * se, gfc_expr *expr) { - tree num_images, cond, coindex, type, lbound, ubound, desc, subdesc, - tmp, invalid_bound; + tree num_images, cond, coindex, type, lbound, ubound, desc, subdesc, tmp, + invalid_bound, team = null_pointer_node, team_number = null_pointer_node; gfc_se argse, subse; int rank, corank, codim; @@ -2150,6 +2142,22 @@ trans_image_index (gfc_se * se, gfc_expr *expr) subdesc = build_fold_indirect_ref_loc (input_location, gfc_conv_descriptor_data_get (subse.expr)); + if (expr->value.function.actual->next->next->expr) + { + gfc_init_se (&argse, NULL); + gfc_conv_expr_descriptor (&argse, + expr->value.function.actual->next->next->expr); + if (expr->value.function.actual->next->next->expr->ts.type == BT_DERIVED) + team = argse.expr; + else + team_number = gfc_build_addr_expr ( + NULL_TREE, + gfc_trans_force_lval (&argse.pre, + fold_convert (integer_type_node, argse.expr))); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + } + /* Fortran 2008 does not require that the values remain in the cobounds, thus we need explicitly check this - and return 0 if they are exceeded. */ @@ -2225,8 +2233,7 @@ trans_image_index (gfc_se * se, gfc_expr *expr) else { tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_num_images, 2, - integer_zero_node, - build_int_cst (integer_type_node, -1)); + team, team_number); num_images = fold_convert (type, tmp); } @@ -2245,32 +2252,26 @@ trans_image_index (gfc_se * se, gfc_expr *expr) static void trans_num_images (gfc_se * se, gfc_expr *expr) { - tree tmp, distance, failed; + tree tmp, team = null_pointer_node, team_number = null_pointer_node; gfc_se argse; if (expr->value.function.actual->expr) { gfc_init_se (&argse, NULL); gfc_conv_expr_val (&argse, expr->value.function.actual->expr); + if (expr->value.function.actual->expr->ts.type == BT_DERIVED) + team = argse.expr; + else + team_number = gfc_build_addr_expr ( + NULL_TREE, + gfc_trans_force_lval (&se->pre, + fold_convert (integer_type_node, argse.expr))); gfc_add_block_to_block (&se->pre, &argse.pre); gfc_add_block_to_block (&se->post, &argse.post); - distance = fold_convert (integer_type_node, argse.expr); } - else - distance = integer_zero_node; - if (expr->value.function.actual->next->expr) - { - gfc_init_se (&argse, NULL); - gfc_conv_expr_val (&argse, expr->value.function.actual->next->expr); - gfc_add_block_to_block (&se->pre, &argse.pre); - gfc_add_block_to_block (&se->post, &argse.post); - failed = fold_convert (integer_type_node, argse.expr); - } - else - failed = build_int_cst (integer_type_node, -1); tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_num_images, 2, - distance, failed); + team, team_number); se->expr = fold_convert (gfc_get_int_type (gfc_default_integer_kind), tmp); } @@ -2700,8 +2701,7 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr) cosize = gfc_conv_descriptor_cosize (desc, arg->expr->rank, corank); tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_num_images, - 2, integer_zero_node, - build_int_cst (integer_type_node, -1)); + 2, null_pointer_node, null_pointer_node); tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type, fold_convert (gfc_array_index_type, tmp), @@ -2716,8 +2716,7 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr) { /* ubound = lbound + num_images() - 1. */ tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_num_images, - 2, integer_zero_node, - build_int_cst (integer_type_node, -1)); + 2, null_pointer_node, null_pointer_node); tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type, fold_convert (gfc_array_index_type, tmp), @@ -11475,6 +11474,7 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) case GFC_ISYM_GETGID: case GFC_ISYM_GETPID: case GFC_ISYM_GETUID: + case GFC_ISYM_GET_TEAM: case GFC_ISYM_HOSTNM: case GFC_ISYM_IERRNO: case GFC_ISYM_IRAND: @@ -12970,6 +12970,9 @@ gfc_conv_intrinsic_mvbits (gfc_se *se, gfc_actual_arglist *actual_args, void_type_node, to, se->expr); } +/* Comes from trans-stmt.cc, but we don't want the whole header included. */ +extern void gfc_trans_sync_stat (struct sync_stat *sync_stat, gfc_se *se, + tree *stat, tree *errmsg, tree *errmsg_len); static tree conv_intrinsic_move_alloc (gfc_code *code) @@ -12977,17 +12980,37 @@ conv_intrinsic_move_alloc (gfc_code *code) stmtblock_t block; gfc_expr *from_expr, *to_expr; gfc_se from_se, to_se; - tree tmp, to_tree, from_tree; + tree tmp, to_tree, from_tree, stat, errmsg, errmsg_len, fin_label = NULL_TREE; bool coarray, from_is_class, from_is_scalar; + gfc_actual_arglist *arg = code->ext.actual; + sync_stat tmp_sync_stat = {nullptr, nullptr}; gfc_start_block (&block); - from_expr = code->ext.actual->expr; - to_expr = code->ext.actual->next->expr; + from_expr = arg->expr; + arg = arg->next; + to_expr = arg->expr; + arg = arg->next; + + while (arg) + { + if (arg->expr) + { + if (!strcmp ("stat", arg->name)) + tmp_sync_stat.stat = arg->expr; + else if (!strcmp ("errmsg", arg->name)) + tmp_sync_stat.errmsg = arg->expr; + } + arg = arg->next; + } gfc_init_se (&from_se, NULL); gfc_init_se (&to_se, NULL); + gfc_trans_sync_stat (&tmp_sync_stat, &from_se, &stat, &errmsg, &errmsg_len); + if (stat != null_pointer_node) + fin_label = gfc_build_label_decl (NULL_TREE); + gcc_assert (from_expr->ts.type != BT_CLASS || to_expr->ts.type == BT_CLASS); coarray = from_expr->corank != 0; @@ -13030,9 +13053,10 @@ conv_intrinsic_move_alloc (gfc_code *code) /* Deallocate "to". */ if (to_expr->rank == 0) { - tmp - = gfc_deallocate_scalar_with_status (to_tree, NULL_TREE, NULL_TREE, - true, to_expr, to_expr->ts); + tmp = gfc_deallocate_scalar_with_status (to_tree, stat, fin_label, + true, to_expr, to_expr->ts, + NULL_TREE, false, true, + errmsg, errmsg_len); gfc_add_expr_to_block (&block, tmp); } @@ -13105,9 +13129,12 @@ conv_intrinsic_move_alloc (gfc_code *code) { tree cond; - tmp = gfc_deallocate_with_status (to_se.expr, NULL_TREE, NULL_TREE, - NULL_TREE, NULL_TREE, true, to_expr, - GFC_CAF_COARRAY_DEALLOCATE_ONLY); + tmp = gfc_deallocate_with_status (to_se.expr, stat, errmsg, errmsg_len, + fin_label, true, to_expr, + GFC_CAF_COARRAY_DEALLOCATE_ONLY, + NULL_TREE, NULL_TREE, + gfc_conv_descriptor_token (to_se.expr), + true); gfc_add_expr_to_block (&block, tmp); tmp = gfc_conv_descriptor_data_get (to_se.expr); @@ -13133,9 +13160,10 @@ conv_intrinsic_move_alloc (gfc_code *code) gfc_add_expr_to_block (&block, tmp); } - tmp = gfc_deallocate_with_status (to_se.expr, NULL_TREE, NULL_TREE, - NULL_TREE, NULL_TREE, true, to_expr, - GFC_CAF_COARRAY_NOCOARRAY); + tmp = gfc_deallocate_with_status (to_se.expr, stat, errmsg, errmsg_len, + fin_label, true, to_expr, + GFC_CAF_COARRAY_NOCOARRAY, NULL_TREE, + NULL_TREE, NULL_TREE, true); gfc_add_expr_to_block (&block, tmp); } @@ -13147,6 +13175,13 @@ conv_intrinsic_move_alloc (gfc_code *code) gfc_add_modify_loc (input_location, &block, tmp, fold_convert (TREE_TYPE (tmp), null_pointer_node)); + if (coarray && flag_coarray == GFC_FCOARRAY_LIB) + { + /* Copy the array descriptor data has overwritten the to-token and cleared + from.data. Now also clear the from.token. */ + gfc_add_modify (&block, gfc_conv_descriptor_token (from_se.expr), + null_pointer_node); + } if (to_expr->ts.type == BT_CHARACTER && to_expr->ts.deferred) { @@ -13157,6 +13192,8 @@ conv_intrinsic_move_alloc (gfc_code *code) gfc_add_modify_loc (input_location, &block, from_se.string_length, build_int_cst (TREE_TYPE (from_se.string_length), 0)); } + if (fin_label) + gfc_add_expr_to_block (&block, build1_v (LABEL_EXPR, fin_label)); return gfc_finish_block (&block); } diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index 03d9432..0b8150f 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -25,6 +25,10 @@ along with GCC; see the file COPYING3. If not see #include "options.h" #include "tree.h" #include "gfortran.h" +#include "basic-block.h" +#include "tree-ssa.h" +#include "function.h" +#include "gimple.h" #include "gimple-expr.h" #include "trans.h" #include "stringpool.h" @@ -41,6 +45,8 @@ along with GCC; see the file COPYING3. If not see #include "omp-low.h" #include "memmodel.h" /* For MEMMODEL_ enums. */ #include "dependency.h" +#include "gimple-iterator.h" /* For gsi_iterator_update. */ +#include "gimplify-me.h" /* For force_gimple_operand. */ #undef GCC_DIAG_STYLE #define GCC_DIAG_STYLE __gcc_tdiag__ @@ -375,22 +381,28 @@ gfc_omp_report_decl (tree decl) return decl; } -/* Return true if TYPE has any allocatable components. */ +/* Return true if TYPE has any allocatable components; + if ptr_ok, the decl itself is permitted to have the POINTER attribute. + if shallow_alloc_only, returns only true if any of the fields is an + allocatable; called with true by gfc_omp_replace_alloc_by_to_mapping. */ static bool -gfc_has_alloc_comps (tree type, tree decl) +gfc_has_alloc_comps (tree type, tree decl, bool ptr_ok, + bool shallow_alloc_only=false) { tree field, ftype; if (POINTER_TYPE_P (type)) { - if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl)) + if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl) + || (ptr_ok && GFC_DECL_GET_SCALAR_POINTER (decl))) type = TREE_TYPE (type); else if (GFC_DECL_GET_SCALAR_POINTER (decl)) return false; } - if (GFC_DESCRIPTOR_TYPE_P (type) + if (!ptr_ok + && GFC_DESCRIPTOR_TYPE_P (type) && (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT)) return false; @@ -409,12 +421,51 @@ gfc_has_alloc_comps (tree type, tree decl) if (GFC_DESCRIPTOR_TYPE_P (ftype) && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE) return true; - if (gfc_has_alloc_comps (ftype, field)) + if (!shallow_alloc_only + && gfc_has_alloc_comps (ftype, field, false)) return true; } return false; } +/* gfc_omp_replace_alloc_by_to_mapping is used with gfc_omp_deep_mapping... to + handle the following: + + For map(alloc: dt), the array descriptors of allocatable components should + be mapped as 'to'; this could be done by (A) adding 'map(to: dt%alloc_comp)' + for each component (and avoiding to increment the reference count). + Or (B) by just mapping all of 'dt' as 'to'. + + If 'dt' contains several allocatable components and not much other data, + (A) is more efficient. If 'dt' contains a large const-size array, (A) will + copy it to the device instead of only 'alloc'ating it. + + IMPLEMENTATION CHOICE: We do (A). It avoids the ref-count issue and it is + expected that, for real-world code, derived types with allocatable + components only have few other components and either no const-size arrays. + This copying is done irrespectively whether the allocatables are allocated. + + If users wanted to save memory, they have to use 'map(alloc:dt%comp)' as + also with 'map(alloc:dt)' all components get copied. + + For the copy to the device, only allocatable arrays are relevant as their + the bounds are required; the pointer is set separately (GOMP_MAP_ATTACH) + and the only setting required for scalars. However, when later copying out + of the device, an unallocated allocatable must remain unallocated/NULL on + the host; to achieve this we also must have it set to NULL on the device + to avoid issues with uninitialized memory being copied back for the pointer + address. If we could set the pointer to NULL, gfc_has_alloc_comps's + shallow_alloc_only could be restricted to return true only for arrays. + + We only need to return true if there are allocatable-array components. */ + +static bool +gfc_omp_replace_alloc_by_to_mapping (tree type, tree decl, bool ptr_ok) +{ + return gfc_has_alloc_comps (type, decl, ptr_ok, true); +} + + /* Return true if TYPE is polymorphic but not with pointer attribute. */ static bool @@ -487,7 +538,7 @@ gfc_omp_private_outer_ref (tree decl) if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl)) return true; - if (gfc_has_alloc_comps (type, decl)) + if (gfc_has_alloc_comps (type, decl, false)) return true; return false; @@ -627,7 +678,7 @@ gfc_walk_alloc_comps (tree decl, tree dest, tree var, { tree ftype = TREE_TYPE (field); tree declf, destf = NULL_TREE; - bool has_alloc_comps = gfc_has_alloc_comps (ftype, field); + bool has_alloc_comps = gfc_has_alloc_comps (ftype, field, false); if ((!GFC_DESCRIPTOR_TYPE_P (ftype) || GFC_TYPE_ARRAY_AKIND (ftype) != GFC_ARRAY_ALLOCATABLE) && !GFC_DECL_GET_SCALAR_ALLOCATABLE (field) @@ -751,7 +802,7 @@ gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer) && (!GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)) || !POINTER_TYPE_P (type))) { - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { gcc_assert (outer); gfc_start_block (&block); @@ -804,7 +855,7 @@ gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer) else gfc_add_modify (&cond_block, unshare_expr (decl), fold_convert (TREE_TYPE (decl), ptr)); - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { tree tem = gfc_walk_alloc_comps (outer, decl, OMP_CLAUSE_DECL (clause), @@ -945,7 +996,7 @@ gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src) && (!GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)) || !POINTER_TYPE_P (type))) { - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { gfc_start_block (&block); gfc_add_modify (&block, dest, src); @@ -1004,7 +1055,7 @@ gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src) builtin_decl_explicit (BUILT_IN_MEMCPY), 3, ptr, srcptr, size); gfc_add_expr_to_block (&cond_block, fold_convert (void_type_node, call)); - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { tree tem = gfc_walk_alloc_comps (src, dest, OMP_CLAUSE_DECL (clause), @@ -1049,7 +1100,7 @@ gfc_omp_clause_assign_op (tree clause, tree dest, tree src) && (!GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)) || !POINTER_TYPE_P (type))) { - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { gfc_start_block (&block); /* First dealloc any allocatable components in DEST. */ @@ -1071,7 +1122,7 @@ gfc_omp_clause_assign_op (tree clause, tree dest, tree src) gfc_start_block (&block); - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { then_b = gfc_walk_alloc_comps (dest, NULL_TREE, OMP_CLAUSE_DECL (clause), WALK_ALLOC_COMPS_DTOR); @@ -1186,7 +1237,7 @@ gfc_omp_clause_assign_op (tree clause, tree dest, tree src) builtin_decl_explicit (BUILT_IN_MEMCPY), 3, ptr, srcptr, size); gfc_add_expr_to_block (&cond_block, fold_convert (void_type_node, call)); - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { tree tem = gfc_walk_alloc_comps (src, dest, OMP_CLAUSE_DECL (clause), @@ -1438,7 +1489,7 @@ gfc_omp_clause_dtor (tree clause, tree decl) && (!GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)) || !POINTER_TYPE_P (type))) { - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) return gfc_walk_alloc_comps (decl, NULL_TREE, OMP_CLAUSE_DECL (clause), WALK_ALLOC_COMPS_DTOR); @@ -1458,7 +1509,7 @@ gfc_omp_clause_dtor (tree clause, tree decl) tem = gfc_call_free (decl); tem = gfc_omp_unshare_expr (tem); - if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause))) + if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause), false)) { stmtblock_t block; tree then_b; @@ -1538,6 +1589,7 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) return; tree decl = OMP_CLAUSE_DECL (c); + location_t loc = OMP_CLAUSE_LOCATION (c); /* Assumed-size arrays can't be mapped implicitly, they have to be mapped explicitly using array sections. */ @@ -1553,13 +1605,9 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) return; } - if (!openacc && GFC_CLASS_TYPE_P (TREE_TYPE (decl))) - warning_at (OMP_CLAUSE_LOCATION (c), OPT_Wopenmp, - "Implicit mapping of polymorphic variable %qD is " - "unspecified behavior", decl); - tree c2 = NULL_TREE, c3 = NULL_TREE, c4 = NULL_TREE; tree present = gfc_omp_check_optional_argument (decl, true); + tree orig_decl = NULL_TREE; if (POINTER_TYPE_P (TREE_TYPE (decl))) { if (!gfc_omp_privatize_by_reference (decl) @@ -1568,7 +1616,7 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) && !GFC_DECL_CRAY_POINTEE (decl) && !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) return; - tree orig_decl = decl; + orig_decl = decl; c4 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (c4, GOMP_MAP_POINTER); @@ -1579,16 +1627,16 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) && (GFC_DECL_GET_SCALAR_POINTER (orig_decl) || GFC_DECL_GET_SCALAR_ALLOCATABLE (orig_decl))) { - c2 = build_omp_clause (input_location, OMP_CLAUSE_MAP); + c2 = build_omp_clause (loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (c2, GOMP_MAP_POINTER); - OMP_CLAUSE_DECL (c2) = decl; + OMP_CLAUSE_DECL (c2) = unshare_expr (decl); OMP_CLAUSE_SIZE (c2) = size_int (0); stmtblock_t block; gfc_start_block (&block); - tree ptr = decl; - ptr = gfc_build_cond_assign_expr (&block, present, decl, - null_pointer_node); + tree ptr = gfc_build_cond_assign_expr (&block, present, + unshare_expr (decl), + null_pointer_node); gimplify_and_add (gfc_finish_block (&block), pre_p); ptr = build_fold_indirect_ref (ptr); OMP_CLAUSE_DECL (c) = ptr; @@ -1605,10 +1653,10 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) { c3 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (c3, GOMP_MAP_POINTER); - OMP_CLAUSE_DECL (c3) = unshare_expr (decl); + OMP_CLAUSE_DECL (c3) = decl; OMP_CLAUSE_SIZE (c3) = size_int (0); decl = build_fold_indirect_ref (decl); - OMP_CLAUSE_DECL (c) = decl; + OMP_CLAUSE_DECL (c) = unshare_expr (decl); } } if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) @@ -1634,7 +1682,7 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) gcc_assert (POINTER_TYPE_P (TREE_TYPE (ptr))); ptr = build_fold_indirect_ref (ptr); OMP_CLAUSE_DECL (c) = ptr; - c2 = build_omp_clause (input_location, OMP_CLAUSE_MAP); + c2 = build_omp_clause (loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (c2, GOMP_MAP_TO_PSET); if (present) { @@ -1651,7 +1699,7 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) : GOMP_MAP_POINTER); if (present) { - ptr = gfc_conv_descriptor_data_get (decl); + ptr = gfc_conv_descriptor_data_get (unshare_expr (decl)); ptr = gfc_build_addr_expr (NULL, ptr); ptr = gfc_build_cond_assign_expr (&block, present, ptr, null_pointer_node); @@ -1664,6 +1712,17 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) tree size = create_tmp_var (gfc_array_index_type); tree elemsz = TYPE_SIZE_UNIT (gfc_get_element_type (type)); elemsz = fold_convert (gfc_array_index_type, elemsz); + + if (orig_decl == NULL_TREE) + orig_decl = decl; + if (!openacc + && gfc_has_alloc_comps (type, orig_decl, true)) + { + /* Save array descriptor for use in gfc_omp_deep_mapping{,_p,_cnt}; + force evaluate to ensure that it is not gimplified + is a decl. */ + gfc_allocate_lang_decl (size); + GFC_DECL_SAVED_DESCRIPTOR (size) = orig_decl; + } enum gfc_array_kind akind = GFC_TYPE_ARRAY_AKIND (type); if (akind == GFC_ARRAY_ALLOCATABLE || akind == GFC_ARRAY_POINTER @@ -1692,14 +1751,14 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) else_b = gfc_finish_block (&cond_block); tem = gfc_conv_descriptor_data_get (unshare_expr (decl)); tem = fold_convert (pvoid_type_node, tem); - cond = fold_build2_loc (input_location, NE_EXPR, + cond = fold_build2_loc (loc, NE_EXPR, boolean_type_node, tem, null_pointer_node); if (present) { - cond = fold_build2_loc (input_location, TRUTH_ANDIF_EXPR, + cond = fold_build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node, present, cond); } - gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR, + gfc_add_expr_to_block (&block, build3_loc (loc, COND_EXPR, void_type_node, cond, then_b, else_b)); } @@ -1739,11 +1798,30 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) tree stmt = gfc_finish_block (&block); gimplify_and_add (stmt, pre_p); } + else + { + if (OMP_CLAUSE_SIZE (c) == NULL_TREE) + OMP_CLAUSE_SIZE (c) + = DECL_P (decl) ? DECL_SIZE_UNIT (decl) + : TYPE_SIZE_UNIT (TREE_TYPE (decl)); + + tree type = TREE_TYPE (decl); + if (POINTER_TYPE_P (type) && POINTER_TYPE_P (TREE_TYPE (type))) + type = TREE_TYPE (type); + if (!openacc + && orig_decl != NULL_TREE + && gfc_has_alloc_comps (type, orig_decl, true)) + { + /* Save array descriptor for use in gfc_omp_deep_mapping{,_p,_cnt}; + force evaluate to ensure that it is not gimplified + is a decl. */ + tree size = create_tmp_var (TREE_TYPE (OMP_CLAUSE_SIZE (c))); + gfc_allocate_lang_decl (size); + GFC_DECL_SAVED_DESCRIPTOR (size) = orig_decl; + gimplify_assign (size, OMP_CLAUSE_SIZE (c), pre_p); + OMP_CLAUSE_SIZE (c) = size; + } + } tree last = c; - if (OMP_CLAUSE_SIZE (c) == NULL_TREE) - OMP_CLAUSE_SIZE (c) - = DECL_P (decl) ? DECL_SIZE_UNIT (decl) - : TYPE_SIZE_UNIT (TREE_TYPE (decl)); if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p, NULL, is_gimple_val, fb_rvalue) == GS_ERROR) OMP_CLAUSE_SIZE (c) = size_int (0); @@ -1767,6 +1845,715 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc) } +/* map(<flag>: data [len: <size>]) + map(attach: &data [bias: <bias>]) + offset += 2; offset_data += 2 */ +static void +gfc_omp_deep_mapping_map (tree data, tree size, unsigned HOST_WIDE_INT tkind, + location_t loc, tree data_array, tree sizes_array, + tree kinds_array, tree offset_data, tree offset, + gimple_seq *seq, const gimple *ctx) +{ + tree one = build_int_cst (size_type_node, 1); + + STRIP_NOPS (data); + if (!POINTER_TYPE_P (TREE_TYPE (data))) + { + gcc_assert (TREE_CODE (data) == INDIRECT_REF); + data = TREE_OPERAND (data, 0); + } + + /* data_array[offset_data] = data; */ + tree tmp = build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (data_array)), + unshare_expr (data_array), offset_data, + NULL_TREE, NULL_TREE); + gimplify_assign (tmp, data, seq); + + /* offset_data++ */ + tmp = build2_loc (loc, PLUS_EXPR, size_type_node, offset_data, one); + gimplify_assign (offset_data, tmp, seq); + + /* data_array[offset_data] = &data; */ + tmp = build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (data_array)), + unshare_expr (data_array), + offset_data, NULL_TREE, NULL_TREE); + gimplify_assign (tmp, build_fold_addr_expr (data), seq); + + /* offset_data++ */ + tmp = build2_loc (loc, PLUS_EXPR, size_type_node, offset_data, one); + gimplify_assign (offset_data, tmp, seq); + + /* sizes_array[offset] = size */ + tmp = build2_loc (loc, MULT_EXPR, size_type_node, + TYPE_SIZE_UNIT (size_type_node), offset); + tmp = build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (sizes_array), + sizes_array, tmp); + gimple_seq seq2 = NULL; + tmp = force_gimple_operand (tmp, &seq2, true, NULL_TREE); + gimple_seq_add_seq (seq, seq2); + tmp = build_fold_indirect_ref_loc (loc, tmp); + gimplify_assign (tmp, size, seq); + + /* FIXME: tkind |= talign << talign_shift; */ + /* kinds_array[offset] = tkind. */ + tmp = build2_loc (loc, MULT_EXPR, size_type_node, + TYPE_SIZE_UNIT (short_unsigned_type_node), offset); + tmp = build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (kinds_array), + kinds_array, tmp); + seq2 = NULL; + tmp = force_gimple_operand (tmp, &seq2, true, NULL_TREE); + gimple_seq_add_seq (seq, seq2); + tmp = build_fold_indirect_ref_loc (loc, tmp); + gimplify_assign (tmp, build_int_cst (short_unsigned_type_node, tkind), seq); + + /* offset++ */ + tmp = build2_loc (loc, PLUS_EXPR, size_type_node, offset, one); + gimplify_assign (offset, tmp, seq); + + /* sizes_array[offset] = bias (= 0). */ + tmp = build2_loc (loc, MULT_EXPR, size_type_node, + TYPE_SIZE_UNIT (size_type_node), offset); + tmp = build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (sizes_array), + sizes_array, tmp); + seq2 = NULL; + tmp = force_gimple_operand (tmp, &seq2, true, NULL_TREE); + gimple_seq_add_seq (seq, seq2); + tmp = build_fold_indirect_ref_loc (loc, tmp); + gimplify_assign (tmp, build_zero_cst (size_type_node), seq); + + gcc_assert (gimple_code (ctx) == GIMPLE_OMP_TARGET); + tkind = (gimple_omp_target_kind (ctx) == GF_OMP_TARGET_KIND_EXIT_DATA + ? GOMP_MAP_DETACH : GOMP_MAP_ATTACH); + + /* kinds_array[offset] = tkind. */ + tmp = build2_loc (loc, MULT_EXPR, size_type_node, + TYPE_SIZE_UNIT (short_unsigned_type_node), offset); + tmp = build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (kinds_array), + kinds_array, tmp); + seq2 = NULL; + tmp = force_gimple_operand (tmp, &seq2, true, NULL_TREE); + gimple_seq_add_seq (seq, seq2); + tmp = build_fold_indirect_ref_loc (loc, tmp); + gimplify_assign (tmp, build_int_cst (short_unsigned_type_node, tkind), seq); + + /* offset++ */ + tmp = build2_loc (loc, PLUS_EXPR, size_type_node, offset, one); + gimplify_assign (offset, tmp, seq); +} + +static void gfc_omp_deep_mapping_item (bool, bool, bool, location_t, tree, + tree *, unsigned HOST_WIDE_INT, tree, + tree, tree, tree, tree, tree, + gimple_seq *, const gimple *, bool *); + +/* Map allocatable components. */ +static void +gfc_omp_deep_mapping_comps (bool is_cnt, location_t loc, tree decl, + tree *token, unsigned HOST_WIDE_INT tkind, + tree data_array, tree sizes_array, tree kinds_array, + tree offset_data, tree offset, tree num, + gimple_seq *seq, const gimple *ctx, + bool *poly_warned) +{ + tree type = TREE_TYPE (decl); + if (TREE_CODE (type) != RECORD_TYPE) + return; + for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) + { + type = TREE_TYPE (field); + if (gfc_is_polymorphic_nonptr (type) + || GFC_DECL_GET_SCALAR_ALLOCATABLE (field) + || (GFC_DESCRIPTOR_TYPE_P (type) + && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)) + { + tree tmp = fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (field), + decl, field, NULL_TREE); + gfc_omp_deep_mapping_item (is_cnt, true, true, loc, tmp, token, + tkind, data_array, sizes_array, + kinds_array, offset_data, offset, num, + seq, ctx, poly_warned); + } + else if (GFC_DECL_GET_SCALAR_POINTER (field) + || GFC_DESCRIPTOR_TYPE_P (type)) + continue; + else if (gfc_has_alloc_comps (TREE_TYPE (field), field, false)) + { + tree tmp = fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (field), + decl, field, NULL_TREE); + if (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE) + gfc_omp_deep_mapping_item (is_cnt, false, false, loc, tmp, + token, tkind, data_array, sizes_array, + kinds_array, offset_data, offset, num, + seq, ctx, poly_warned); + else + gfc_omp_deep_mapping_comps (is_cnt, loc, tmp, token, tkind, + data_array, sizes_array, kinds_array, + offset_data, offset, num, seq, ctx, + poly_warned); + } + } +} + +static void +gfc_omp_gen_simple_loop (tree var, tree begin, tree end, enum tree_code cond, + tree step, location_t loc, gimple_seq *seq1, + gimple_seq *seq2) +{ + tree tmp; + + /* var = begin. */ + gimplify_assign (var, begin, seq1); + + /* Loop: for (var = begin; var <cond> end; var += step). */ + tree label_loop = create_artificial_label (loc); + tree label_cond = create_artificial_label (loc); + + gimplify_and_add (fold_build1_loc (loc, GOTO_EXPR, void_type_node, + label_cond), seq1); + gimple_seq_add_stmt (seq1, gimple_build_label (label_loop)); + + /* Everything above is seq1; place loop body here. */ + + /* End of loop body -> put into seq2. */ + tmp = fold_build2_loc (loc, PLUS_EXPR, TREE_TYPE (var), var, step); + gimplify_assign (var, tmp, seq2); + gimple_seq_add_stmt (seq2, gimple_build_label (label_cond)); + tmp = fold_build2_loc (loc, cond, boolean_type_node, var, end); + tmp = build3_v (COND_EXPR, tmp, build1_v (GOTO_EXPR, label_loop), + build_empty_stmt (loc)); + gimplify_and_add (tmp, seq2); +} + +/* Return size variable with the size of an array. */ +static tree +gfc_omp_get_array_size (location_t loc, tree desc, gimple_seq *seq) +{ + tree tmp; + gimple_seq seq1 = NULL, seq2 = NULL; + tree size = build_decl (loc, VAR_DECL, create_tmp_var_name ("size"), + size_type_node); + tree extent = build_decl (loc, VAR_DECL, create_tmp_var_name ("extent"), + gfc_array_index_type); + tree idx = build_decl (loc, VAR_DECL, create_tmp_var_name ("idx"), + signed_char_type_node); + + tree begin = build_zero_cst (signed_char_type_node); + tree end; + if (GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE_CONT + || GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE) + end = gfc_conv_descriptor_rank (desc); + else + end = build_int_cst (signed_char_type_node, + GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))); + tree step = build_int_cst (signed_char_type_node, 1); + + /* size = 0 + for (idx = 0; idx < rank; idx++) + extent = gfc->dim[i].ubound - gfc->dim[i].lbound + 1 + if (extent < 0) extent = 0 + size *= extent. */ + gimplify_assign (size, build_int_cst (size_type_node, 1), seq); + + gfc_omp_gen_simple_loop (idx, begin, end, LT_EXPR, step, loc, &seq1, &seq2); + gimple_seq_add_seq (seq, seq1); + + tmp = fold_build2_loc (loc, MINUS_EXPR, gfc_array_index_type, + gfc_conv_descriptor_ubound_get (desc, idx), + gfc_conv_descriptor_lbound_get (desc, idx)); + tmp = fold_build2_loc (loc, PLUS_EXPR, gfc_array_index_type, + tmp, gfc_index_one_node); + gimplify_assign (extent, tmp, seq); + tmp = fold_build2_loc (loc, LT_EXPR, boolean_type_node, + extent, gfc_index_zero_node); + tmp = build3_v (COND_EXPR, tmp, + fold_build2_loc (loc, MODIFY_EXPR, + gfc_array_index_type, + extent, gfc_index_zero_node), + build_empty_stmt (loc)); + gimplify_and_add (tmp, seq); + /* size *= extent. */ + gimplify_assign (size, fold_build2_loc (loc, MULT_EXPR, size_type_node, size, + fold_convert (size_type_node, + extent)), seq); + gimple_seq_add_seq (seq, seq2); + return size; +} + +/* Generate loop to access every array element; takes addr of first element + (decl's data comp); returns loop code in seq1 + seq2 + and the pointer to the element as return value. */ +static tree +gfc_omp_elmental_loop (location_t loc, tree decl, tree size, tree elem_len, + gimple_seq *seq1, gimple_seq *seq2) +{ + tree idx = build_decl (loc, VAR_DECL, create_tmp_var_name ("idx"), + size_type_node); + tree begin = build_zero_cst (size_type_node); + tree end = size; + tree step = build_int_cst (size_type_node, 1); + tree ptr; + + gfc_omp_gen_simple_loop (idx, begin, end, LT_EXPR, step, loc, seq1, seq2); + + tree type = TREE_TYPE (decl); + if (POINTER_TYPE_P (type)) + { + type = TREE_TYPE (type); + gcc_assert (TREE_CODE (type) == ARRAY_TYPE); + decl = fold_convert (build_pointer_type (TREE_TYPE (type)), decl); + } + else + { + gcc_assert (TREE_CODE (type) == ARRAY_TYPE); + decl = build_fold_addr_expr_loc (loc, decl); + } + decl = fold_convert (build_pointer_type (TREE_TYPE (type)), decl); + tree tmp = build2_loc (loc, MULT_EXPR, size_type_node, idx, + fold_convert (size_type_node, elem_len)); + ptr = build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (decl), decl, tmp); + gimple_seq seq3 = NULL; + ptr = force_gimple_operand (ptr, &seq3, true, NULL_TREE); + gimple_seq_add_seq (seq1, seq3); + + return ptr; +} + + +/* If do_copy, copy data pointer and vptr (if applicable) as well. + Otherwise, only handle allocatable components. + do_copy == false can happen only with nonpolymorphic arguments + to a copy clause. + if (is_cnt) token ... offset is ignored and num is used, otherwise + num is NULL_TREE and unused. */ + +static void +gfc_omp_deep_mapping_item (bool is_cnt, bool do_copy, bool do_alloc_check, + location_t loc, tree decl, tree *token, + unsigned HOST_WIDE_INT tkind, tree data_array, + tree sizes_array, tree kinds_array, tree offset_data, + tree offset, tree num, gimple_seq *seq, + const gimple *ctx, bool *poly_warned) +{ + tree tmp; + tree type = TREE_TYPE (decl); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + tree end_label = NULL_TREE; + tree size = NULL_TREE, elem_len = NULL_TREE; + + bool poly = gfc_is_polymorphic_nonptr (type); + if (poly && is_cnt && !*poly_warned) + { + if (gfc_is_unlimited_polymorphic_nonptr (type)) + error_at (loc, + "Mapping of unlimited polymorphic list item %qD is " + "unspecified behavior and unsupported", decl); + + else + warning_at (loc, OPT_Wopenmp, + "Mapping of polymorphic list item %qD is " + "unspecified behavior", decl); + *poly_warned = true; + } + if (do_alloc_check) + { + tree then_label = create_artificial_label (loc); + end_label = create_artificial_label (loc); + tmp = decl; + if (TREE_CODE (TREE_TYPE (tmp)) == REFERENCE_TYPE + || (POINTER_TYPE_P (TREE_TYPE (tmp)) + && (POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (tmp))) + || GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (tmp)))))) + tmp = build_fold_indirect_ref_loc (loc, tmp); + if (poly) + tmp = gfc_class_data_get (tmp); + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (tmp))) + tmp = gfc_conv_descriptor_data_get (tmp); + gimple_seq seq2 = NULL; + tmp = force_gimple_operand (tmp, &seq2, true, NULL_TREE); + gimple_seq_add_seq (seq, seq2); + + gimple_seq_add_stmt (seq, + gimple_build_cond (NE_EXPR, tmp, null_pointer_node, + then_label, end_label)); + gimple_seq_add_stmt (seq, gimple_build_label (then_label)); + } + tree class_decl = decl; + if (poly) + { + decl = gfc_class_data_get (decl); + type = TREE_TYPE (decl); + } + if (POINTER_TYPE_P (TREE_TYPE (decl))) + { + decl = build_fold_indirect_ref (decl); + type = TREE_TYPE (decl); + } + + if (is_cnt && do_copy) + { + tree tmp = fold_build2_loc (loc, PLUS_EXPR, size_type_node, + num, build_int_cst (size_type_node, 1)); + gimplify_assign (num, tmp, seq); + } + else if (do_copy) + { + /* copy data pointer */ + tree bytesize; + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) + { + /* TODO: Optimization: Shouldn't this be an expr. const, except for + deferred-length strings. (Cf. also below). */ + elem_len = (poly ? gfc_class_vtab_size_get (class_decl) + : gfc_conv_descriptor_elem_len (decl)); + tmp = (POINTER_TYPE_P (TREE_TYPE (decl)) + ? build_fold_indirect_ref (decl) : decl); + size = gfc_omp_get_array_size (loc, tmp, seq); + bytesize = fold_build2_loc (loc, MULT_EXPR, size_type_node, + fold_convert (size_type_node, size), + fold_convert (size_type_node, elem_len)); + tmp = gfc_conv_descriptor_data_get (decl); + } + else if (poly) + { + tmp = decl; + bytesize = fold_convert (size_type_node, + gfc_class_vtab_size_get (class_decl)); + } + else + { + tmp = decl; + bytesize = TYPE_SIZE_UNIT (TREE_TYPE (decl)); + } + unsigned HOST_WIDE_INT tkind2 = tkind; + if (!is_cnt + && (tkind == GOMP_MAP_ALLOC + || (tkind == GOMP_MAP_FROM + && (gimple_omp_target_kind (ctx) + != GF_OMP_TARGET_KIND_EXIT_DATA))) + && gfc_omp_replace_alloc_by_to_mapping (TREE_TYPE (decl), decl, true)) + tkind2 = tkind == GOMP_MAP_ALLOC ? GOMP_MAP_TO : GOMP_MAP_TOFROM; + + gfc_omp_deep_mapping_map (tmp, bytesize, tkind2, loc, data_array, + sizes_array, kinds_array, offset_data, + offset, seq, ctx); + } + + tmp = decl; + if (POINTER_TYPE_P (TREE_TYPE (decl))) + while (TREE_CODE (tmp) == COMPONENT_REF || TREE_CODE (tmp) == ARRAY_REF) + tmp = TREE_OPERAND (tmp, TREE_CODE (tmp) == COMPONENT_REF ? 1 : 0); + if (poly || gfc_has_alloc_comps (type, tmp, true)) + { + gimple_seq seq2 = NULL; + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) + { + if (elem_len == NULL_TREE) + { + elem_len = gfc_conv_descriptor_elem_len (decl); + size = fold_convert (size_type_node, + gfc_omp_get_array_size (loc, decl, seq)); + } + decl = gfc_conv_descriptor_data_get (decl); + decl = gfc_omp_elmental_loop (loc, decl, size, elem_len, seq, &seq2); + decl = build_fold_indirect_ref_loc (loc, decl); + } + else if (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE) + { + type = TREE_TYPE (tmp); + /* FIXME: PR95868 - for var%str of deferred length, elem_len == 0; + len is stored as var%_str_length, but not in GFC_DECL_STRING_LEN + nor in TYPE_SIZE_UNIT as expression. */ + elem_len = TYPE_SIZE_UNIT (TREE_TYPE (type)); + size = fold_convert (size_type_node, GFC_TYPE_ARRAY_SIZE (type)); + decl = gfc_omp_elmental_loop (loc, decl, size, elem_len, seq, &seq2); + decl = build_fold_indirect_ref_loc (loc, decl); + } + else if (POINTER_TYPE_P (TREE_TYPE (decl))) + decl = build_fold_indirect_ref (decl); + + gfc_omp_deep_mapping_comps (is_cnt, loc, decl, token, tkind, + data_array, sizes_array, kinds_array, + offset_data, offset, num, seq, ctx, + poly_warned); + gimple_seq_add_seq (seq, seq2); + } + if (end_label) + gimple_seq_add_stmt (seq, gimple_build_label (end_label)); +} + + +/* Which map types to check/handle for deep mapping. */ +static bool +gfc_omp_deep_map_kind_p (tree clause) +{ + switch (OMP_CLAUSE_CODE (clause)) + { + case OMP_CLAUSE_MAP: + break; + case OMP_CLAUSE_FIRSTPRIVATE: + case OMP_CLAUSE_TO: + case OMP_CLAUSE_FROM: + return true; + default: + gcc_unreachable (); + } + + switch (OMP_CLAUSE_MAP_KIND (clause)) + { + case GOMP_MAP_TO: + case GOMP_MAP_FROM: + case GOMP_MAP_TOFROM: + case GOMP_MAP_ALWAYS_TO: + case GOMP_MAP_ALWAYS_FROM: + case GOMP_MAP_ALWAYS_TOFROM: + case GOMP_MAP_ALWAYS_PRESENT_FROM: + case GOMP_MAP_ALWAYS_PRESENT_TO: + case GOMP_MAP_ALWAYS_PRESENT_TOFROM: + case GOMP_MAP_FIRSTPRIVATE: + case GOMP_MAP_ALLOC: + return true; + case GOMP_MAP_POINTER: + case GOMP_MAP_TO_PSET: + case GOMP_MAP_FORCE_PRESENT: + case GOMP_MAP_DELETE: + case GOMP_MAP_FORCE_DEVICEPTR: + case GOMP_MAP_DEVICE_RESIDENT: + case GOMP_MAP_LINK: + case GOMP_MAP_IF_PRESENT: + case GOMP_MAP_PRESENT_ALLOC: + case GOMP_MAP_PRESENT_FROM: + case GOMP_MAP_PRESENT_TO: + case GOMP_MAP_PRESENT_TOFROM: + case GOMP_MAP_FIRSTPRIVATE_INT: + case GOMP_MAP_USE_DEVICE_PTR: + case GOMP_MAP_ZERO_LEN_ARRAY_SECTION: + case GOMP_MAP_FORCE_ALLOC: + case GOMP_MAP_FORCE_TO: + case GOMP_MAP_FORCE_FROM: + case GOMP_MAP_FORCE_TOFROM: + case GOMP_MAP_USE_DEVICE_PTR_IF_PRESENT: + case GOMP_MAP_STRUCT: + case GOMP_MAP_STRUCT_UNORD: + case GOMP_MAP_ALWAYS_POINTER: + case GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION: + case GOMP_MAP_DELETE_ZERO_LEN_ARRAY_SECTION: + case GOMP_MAP_RELEASE: + case GOMP_MAP_ATTACH: + case GOMP_MAP_DETACH: + case GOMP_MAP_FORCE_DETACH: + case GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION: + case GOMP_MAP_FIRSTPRIVATE_POINTER: + case GOMP_MAP_FIRSTPRIVATE_REFERENCE: + case GOMP_MAP_ATTACH_DETACH: + break; + default: + gcc_unreachable (); + } + return false; +} + +/* Three OpenMP deep-mapping lang hooks: gfc_omp_deep_mapping{_p,_cnt,}. */ + +/* Common check for gfc_omp_deep_mapping_p and gfc_omp_deep_mapping_do. */ + +static tree +gfc_omp_deep_mapping_int_p (const gimple *ctx, tree clause) +{ + if (is_gimple_omp_oacc (ctx) || !gfc_omp_deep_map_kind_p (clause)) + return NULL_TREE; + tree decl = OMP_CLAUSE_DECL (clause); + if (OMP_CLAUSE_SIZE (clause) != NULL_TREE + && DECL_P (OMP_CLAUSE_SIZE (clause)) + && DECL_LANG_SPECIFIC (OMP_CLAUSE_SIZE (clause)) + && GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_SIZE (clause))) + /* Saved decl. */ + decl = GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_SIZE (clause)); + else if (TREE_CODE (decl) == MEM_REF || TREE_CODE (decl) == INDIRECT_REF) + /* The following can happen for, e.g., class(t) :: var(..) */ + decl = TREE_OPERAND (decl, 0); + if (TREE_CODE (decl) == INDIRECT_REF) + /* The following can happen for, e.g., class(t) :: var(..) */ + decl = TREE_OPERAND (decl, 0); + if (DECL_P (decl) + && DECL_LANG_SPECIFIC (decl) + && GFC_DECL_SAVED_DESCRIPTOR (decl)) + decl = GFC_DECL_SAVED_DESCRIPTOR (decl); + /* Handle map(to: var.desc) map([to/from/tofrom:] var.desc.data) + to get proper map kind by skipping to the next item. */ + tree tmp = OMP_CLAUSE_CHAIN (clause); + if (tmp != NULL_TREE + && OMP_CLAUSE_CODE (tmp) == OMP_CLAUSE_CODE (clause) + && OMP_CLAUSE_SIZE (tmp) != NULL_TREE + && DECL_P (OMP_CLAUSE_SIZE (tmp)) + && DECL_LANG_SPECIFIC (OMP_CLAUSE_SIZE (tmp)) + && GFC_DECL_SAVED_DESCRIPTOR (OMP_CLAUSE_SIZE (tmp)) == decl) + return NULL_TREE; + if (DECL_P (decl) + && DECL_LANG_SPECIFIC (decl) + && GFC_DECL_SAVED_DESCRIPTOR (decl)) + decl = GFC_DECL_SAVED_DESCRIPTOR (decl); + tree type = TREE_TYPE (decl); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + tmp = decl; + while (TREE_CODE (tmp) == COMPONENT_REF || TREE_CODE (tmp) == ARRAY_REF) + tmp = TREE_OPERAND (tmp, TREE_CODE (tmp) == COMPONENT_REF ? 1 : 0); + if (!gfc_is_polymorphic_nonptr (type) + && !gfc_has_alloc_comps (type, tmp, true)) + return NULL_TREE; + return decl; +} + +/* Return true if there is deep mapping, even if the number of mapping is known + at compile time. */ +bool +gfc_omp_deep_mapping_p (const gimple *ctx, tree clause) +{ + tree decl = gfc_omp_deep_mapping_int_p (ctx, clause); + if (decl == NULL_TREE) + return false; + return true; +} + +/* Handle gfc_omp_deep_mapping{,_cnt} */ +static tree +gfc_omp_deep_mapping_do (bool is_cnt, const gimple *ctx, tree clause, + unsigned HOST_WIDE_INT tkind, tree data, tree sizes, + tree kinds, tree offset_data, tree offset, + gimple_seq *seq) +{ + tree num = NULL_TREE; + location_t loc = OMP_CLAUSE_LOCATION (clause); + tree decl = gfc_omp_deep_mapping_int_p (ctx, clause); + bool poly_warned = false; + if (decl == NULL_TREE) + return NULL_TREE; + /* Handle: map(alloc:dt%cmp [len: ptr_size]) map(tofrom: D.0123...), + where GFC_DECL_SAVED_DESCRIPTOR(D.0123) is the same (here: dt%cmp). */ + if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP + && (OMP_CLAUSE_MAP_KIND (clause) == GOMP_MAP_ALLOC + || OMP_CLAUSE_MAP_KIND (clause) == GOMP_MAP_PRESENT_ALLOC)) + { + tree c = clause; + while ((c = OMP_CLAUSE_CHAIN (c)) != NULL_TREE) + { + if (!gfc_omp_deep_map_kind_p (c)) + continue; + tree d = gfc_omp_deep_mapping_int_p (ctx, c); + if (d != NULL_TREE && operand_equal_p (decl, d, 0)) + return NULL_TREE; + } + } + tree type = TREE_TYPE (decl); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + bool poly = gfc_is_polymorphic_nonptr (type); + + if (is_cnt) + { + num = build_decl (loc, VAR_DECL, + create_tmp_var_name ("n_deepmap"), size_type_node); + tree tmp = fold_build2_loc (loc, MODIFY_EXPR, size_type_node, num, + build_int_cst (size_type_node, 0)); + gimple_add_tmp_var (num); + gimplify_and_add (tmp, seq); + } + else + gcc_assert (short_unsigned_type_node == TREE_TYPE (TREE_TYPE (kinds))); + + bool do_copy = poly; + bool do_alloc_check = false; + tree token = NULL_TREE; + tree tmp = decl; + if (poly) + { + tmp = TYPE_FIELDS (type); + type = TREE_TYPE (tmp); + } + else + while (TREE_CODE (tmp) == COMPONENT_REF || TREE_CODE (tmp) == ARRAY_REF) + tmp = TREE_OPERAND (tmp, TREE_CODE (tmp) == COMPONENT_REF ? 1 : 0); + /* If the clause argument is nonallocatable, skip is-allocate check. */ + if (GFC_DECL_GET_SCALAR_ALLOCATABLE (tmp) + || GFC_DECL_GET_SCALAR_POINTER (tmp) + || (GFC_DESCRIPTOR_TYPE_P (type) + && (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE + || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER + || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT))) + do_alloc_check = true; + + if (!is_cnt + && OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP + && (tkind == GOMP_MAP_ALLOC + || (tkind == GOMP_MAP_FROM + && (gimple_omp_target_kind (ctx) + != GF_OMP_TARGET_KIND_EXIT_DATA))) + && (poly || gfc_omp_replace_alloc_by_to_mapping (type, tmp, true))) + OMP_CLAUSE_SET_MAP_KIND (clause, tkind == GOMP_MAP_ALLOC ? GOMP_MAP_TO + : GOMP_MAP_TOFROM); + + /* TODO: For map(a(:)), we know it is present & allocated. */ + + tree present = (DECL_P (decl) ? gfc_omp_check_optional_argument (decl, true) + : NULL_TREE); + if (POINTER_TYPE_P (TREE_TYPE (decl)) + && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) + decl = build_fold_indirect_ref (decl); + if (present) + { + tree then_label = create_artificial_label (loc); + tree end_label = create_artificial_label (loc); + gimple_seq seq2 = NULL; + tmp = force_gimple_operand (present, &seq2, true, NULL_TREE); + gimple_seq_add_seq (seq, seq2); + gimple_seq_add_stmt (seq, + gimple_build_cond_from_tree (present, + then_label, end_label)); + gimple_seq_add_stmt (seq, gimple_build_label (then_label)); + gfc_omp_deep_mapping_item (is_cnt, do_copy, do_alloc_check, loc, decl, + &token, tkind, data, sizes, kinds, + offset_data, offset, num, seq, ctx, + &poly_warned); + gimple_seq_add_stmt (seq, gimple_build_label (end_label)); + } + else + gfc_omp_deep_mapping_item (is_cnt, do_copy, do_alloc_check, loc, decl, + &token, tkind, data, sizes, kinds, offset_data, + offset, num, seq, ctx, &poly_warned); + /* Multiply by 2 as there are two mappings: data + pointer assign. */ + if (is_cnt) + gimplify_assign (num, + fold_build2_loc (loc, MULT_EXPR, + size_type_node, num, + build_int_cst (size_type_node, 2)), seq); + return num; +} + +/* Return tree with a variable which contains the count of deep-mappyings + (value depends, e.g., on allocation status) */ +tree +gfc_omp_deep_mapping_cnt (const gimple *ctx, tree clause, gimple_seq *seq) +{ + return gfc_omp_deep_mapping_do (true, ctx, clause, 0, NULL_TREE, NULL_TREE, + NULL_TREE, NULL_TREE, NULL_TREE, seq); +} + +/* Does the actual deep mapping. */ +void +gfc_omp_deep_mapping (const gimple *ctx, tree clause, + unsigned HOST_WIDE_INT tkind, tree data, + tree sizes, tree kinds, tree offset_data, tree offset, + gimple_seq *seq) +{ + (void) gfc_omp_deep_mapping_do (false, ctx, clause, tkind, data, sizes, kinds, + offset_data, offset, seq); +} + /* Return true if DECL is a scalar variable (for the purpose of implicit firstprivatization/mapping). Only if 'ptr_alloc_ok.' is true, allocatables and pointers are permitted. */ @@ -2478,6 +3265,18 @@ gfc_trans_omp_array_section (stmtblock_t *block, gfc_exec_op op, elemsz = fold_convert (gfc_array_index_type, elemsz); OMP_CLAUSE_SIZE (node) = fold_build2 (MULT_EXPR, gfc_array_index_type, OMP_CLAUSE_SIZE (node), elemsz); + if (n->expr->ts.type == BT_DERIVED + && n->expr->ts.u.derived->attr.alloc_comp) + { + /* Save array descriptor for use in gfc_omp_deep_mapping{,_p,_cnt}; + force evaluate to ensure that it is not gimplified + is a decl. */ + tree tmp = OMP_CLAUSE_SIZE (node); + tree var = gfc_create_var (TREE_TYPE (tmp), NULL); + gfc_add_modify_loc (input_location, block, var, tmp); + OMP_CLAUSE_SIZE (node) = var; + gfc_allocate_lang_decl (var); + GFC_DECL_SAVED_DESCRIPTOR (var) = se.expr; + } } gcc_assert (se.post.head == NULL_TREE); gcc_assert (POINTER_TYPE_P (TREE_TYPE (ptr))); @@ -3213,8 +4012,9 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, if (!n->sym->attr.referenced) continue; + location_t map_loc = gfc_get_location (&n->where); bool always_modifier = false; - tree node = build_omp_clause (input_location, OMP_CLAUSE_MAP); + tree node = build_omp_clause (map_loc, OMP_CLAUSE_MAP); tree node2 = NULL_TREE; tree node3 = NULL_TREE; tree node4 = NULL_TREE; @@ -3361,7 +4161,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, && n->u.map.op != OMP_MAP_RELEASE) { gcc_assert (n->sym->ts.u.cl->backend_decl); - node5 = build_omp_clause (input_location, OMP_CLAUSE_MAP); + node5 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node5, GOMP_MAP_ALWAYS_TO); OMP_CLAUSE_DECL (node5) = n->sym->ts.u.cl->backend_decl; OMP_CLAUSE_SIZE (node5) @@ -3378,7 +4178,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, ptr = build_fold_indirect_ref (ptr); OMP_CLAUSE_DECL (node) = ptr; OMP_CLAUSE_SIZE (node) = gfc_class_vtab_size_get (decl); - node2 = build_omp_clause (input_location, OMP_CLAUSE_MAP); + node2 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node2, GOMP_MAP_ATTACH_DETACH); OMP_CLAUSE_DECL (node2) = gfc_class_data_get (decl); OMP_CLAUSE_SIZE (node2) = size_int (0); @@ -3434,8 +4234,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, size = TYPE_SIZE_UNIT (TREE_TYPE (decl)); else size = size_int (0); - node4 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node4 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node4, gmk); OMP_CLAUSE_DECL (node4) = decl; OMP_CLAUSE_SIZE (node4) = size; @@ -3459,8 +4258,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, size = TYPE_SIZE_UNIT (TREE_TYPE (decl)); else size = size_int (0); - node3 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node3 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node3, gmk); OMP_CLAUSE_DECL (node3) = decl; OMP_CLAUSE_SIZE (node3) = size; @@ -3477,7 +4275,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, gcc_assert (POINTER_TYPE_P (TREE_TYPE (ptr))); ptr = build_fold_indirect_ref (ptr); OMP_CLAUSE_DECL (node) = ptr; - node2 = build_omp_clause (input_location, OMP_CLAUSE_MAP); + node2 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_DECL (node2) = decl; OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type); if (n->u.map.op == OMP_MAP_DELETE) @@ -3493,8 +4291,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, && n->u.map.op != OMP_MAP_DELETE && n->u.map.op != OMP_MAP_RELEASE) { - node3 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node3 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); if (present) { ptr = gfc_conv_descriptor_data_get (decl); @@ -3634,10 +4431,10 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, { /* A single indirectref is handled by the middle end. */ gcc_assert (!POINTER_TYPE_P (TREE_TYPE (decl))); - decl = TREE_OPERAND (decl, 0); - decl = gfc_build_cond_assign_expr (block, present, decl, + tree tmp = TREE_OPERAND (decl, 0); + tmp = gfc_build_cond_assign_expr (block, present, tmp, null_pointer_node); - OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (decl); + OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (tmp); } else OMP_CLAUSE_DECL (node) = decl; @@ -3672,6 +4469,33 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, size = gfc_evaluate_now (size, block); OMP_CLAUSE_SIZE (node) = size; } + if ((TREE_CODE (decl) != PARM_DECL + || DECL_ARTIFICIAL (OMP_CLAUSE_DECL (node))) + && n->sym->ts.type == BT_DERIVED + && n->sym->ts.u.derived->attr.alloc_comp) + { + /* Save array descriptor for use in + gfc_omp_deep_mapping{,_p,_cnt}; force evaluate + to ensure that it is not gimplified + is a decl. */ + tree tmp = OMP_CLAUSE_SIZE (node); + if (tmp == NULL_TREE) + tmp = DECL_P (decl) ? DECL_SIZE_UNIT (decl) + : TYPE_SIZE_UNIT (TREE_TYPE (decl)); + tree var = gfc_create_var (TREE_TYPE (tmp), NULL); + gfc_add_modify_loc (input_location, block, var, tmp); + OMP_CLAUSE_SIZE (node) = var; + gfc_allocate_lang_decl (var); + if (TREE_CODE (decl) == INDIRECT_REF) + decl = TREE_OPERAND (decl, 0); + if (TREE_CODE (decl) == INDIRECT_REF) + decl = TREE_OPERAND (decl, 0); + if (DECL_LANG_SPECIFIC (decl) + && GFC_DECL_SAVED_DESCRIPTOR (decl)) + GFC_DECL_SAVED_DESCRIPTOR (var) + = GFC_DECL_SAVED_DESCRIPTOR (decl); + else + GFC_DECL_SAVED_DESCRIPTOR (var) = decl; + } } else if (n->expr && n->expr->expr_type == EXPR_VARIABLE @@ -3727,8 +4551,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, goto finalize_map_clause; } - node2 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node2 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node2, GOMP_MAP_ATTACH_DETACH); OMP_CLAUSE_DECL (node2) = POINTER_TYPE_P (TREE_TYPE (se.expr)) @@ -3754,13 +4577,37 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, kind = GOMP_MAP_RELEASE; else kind = GOMP_MAP_TO; - node3 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node3 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node3, kind); OMP_CLAUSE_DECL (node3) = se.string_length; OMP_CLAUSE_SIZE (node3) = TYPE_SIZE_UNIT (gfc_charlen_type_node); } + if (!openacc + && n->expr->ts.type == BT_DERIVED + && n->expr->ts.u.derived->attr.alloc_comp) + { + /* Save array descriptor for use in + gfc_omp_deep_mapping{,_p,_cnt}; force evaluate + to ensure that it is not gimplified + is a decl. */ + tree tmp = OMP_CLAUSE_SIZE (node); + if (tmp == NULL_TREE) + tmp = (DECL_P (se.expr) + ? DECL_SIZE_UNIT (se.expr) + : TYPE_SIZE_UNIT (TREE_TYPE (se.expr))); + tree var = gfc_create_var (TREE_TYPE (tmp), NULL); + gfc_add_modify_loc (input_location, block, var, tmp); + OMP_CLAUSE_SIZE (node) = var; + gfc_allocate_lang_decl (var); + if (TREE_CODE (se.expr) == INDIRECT_REF) + se.expr = TREE_OPERAND (se.expr, 0); + if (DECL_LANG_SPECIFIC (se.expr) + && GFC_DECL_SAVED_DESCRIPTOR (se.expr)) + GFC_DECL_SAVED_DESCRIPTOR (var) + = GFC_DECL_SAVED_DESCRIPTOR (se.expr); + else + GFC_DECL_SAVED_DESCRIPTOR (var) = se.expr; + } } } else if (n->expr @@ -3800,7 +4647,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, && (lastref->u.c.component->ts.type == BT_DERIVED || lastref->u.c.component->ts.type == BT_CLASS)) { - if (pointer || (openacc && allocatable)) + if (pointer || allocatable) { /* If it's a bare attach/detach clause, we just want to perform a single attach/detach operation, of the @@ -3880,8 +4727,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, OMP_CLAUSE_DECL (node) = data; OMP_CLAUSE_SIZE (node) = size; - node2 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node2 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node2, GOMP_MAP_ATTACH_DETACH); OMP_CLAUSE_DECL (node2) = build_fold_addr_expr (data); @@ -3893,6 +4739,22 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, OMP_CLAUSE_SIZE (node) = TYPE_SIZE_UNIT (TREE_TYPE (inner)); } + if (!openacc + && n->expr->ts.type == BT_DERIVED + && n->expr->ts.u.derived->attr.alloc_comp) + { + /* Save array descriptor for use in + gfc_omp_deep_mapping{,_p,_cnt}; force evaluate + to ensure that it is not gimplified + is a decl. */ + tree tmp = OMP_CLAUSE_SIZE (node); + tree var = gfc_create_var (TREE_TYPE (tmp), NULL); + gfc_add_modify_loc (input_location, block, var, tmp); + OMP_CLAUSE_SIZE (node) = var; + gfc_allocate_lang_decl (var); + if (TREE_CODE (inner) == INDIRECT_REF) + inner = TREE_OPERAND (inner, 0); + GFC_DECL_SAVED_DESCRIPTOR (var) = inner; + } } else if (lastref->type == REF_ARRAY && lastref->u.ar.type == AR_FULL) @@ -3952,8 +4814,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, elemsz = TYPE_SIZE_UNIT (elemsz); elemsz = fold_build2 (MULT_EXPR, size_type_node, len, elemsz); - node4 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node4 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node4, map_kind); OMP_CLAUSE_DECL (node4) = se.string_length; OMP_CLAUSE_SIZE (node4) @@ -3963,8 +4824,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, OMP_CLAUSE_SIZE (node) = fold_build2 (MULT_EXPR, gfc_array_index_type, OMP_CLAUSE_SIZE (node), elemsz); - node2 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node2 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); if (map_kind == GOMP_MAP_RELEASE || map_kind == GOMP_MAP_DELETE) { @@ -3978,6 +4838,23 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type); if (!openacc) { + if (n->expr->ts.type == BT_DERIVED + && n->expr->ts.u.derived->attr.alloc_comp) + { + /* Save array descriptor for use + in gfc_omp_deep_mapping{,_p,_cnt}; force + evaluate to ensure that it is + not gimplified + is a decl. */ + tree tmp = OMP_CLAUSE_SIZE (node); + tree var = gfc_create_var (TREE_TYPE (tmp), + NULL); + gfc_add_modify_loc (map_loc, block, + var, tmp); + OMP_CLAUSE_SIZE (node) = var; + gfc_allocate_lang_decl (var); + GFC_DECL_SAVED_DESCRIPTOR (var) = inner; + } + gfc_omp_namelist *n2 = clauses->lists[OMP_LIST_MAP]; @@ -4035,8 +4912,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, if (drop_mapping) continue; } - node3 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); + node3 = build_omp_clause (map_loc, OMP_CLAUSE_MAP); OMP_CLAUSE_SET_MAP_KIND (node3, GOMP_MAP_ATTACH_DETACH); OMP_CLAUSE_DECL (node3) @@ -4107,7 +4983,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, default: gcc_unreachable (); } - tree node = build_omp_clause (input_location, clause_code); + tree node = build_omp_clause (gfc_get_location (&n->where), + clause_code); if (n->expr == NULL || (n->expr->ref->type == REF_ARRAY && n->expr->ref->u.ar.type == AR_FULL diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc index 94ecde0..487b768 100644 --- a/gcc/fortran/trans-stmt.cc +++ b/gcc/fortran/trans-stmt.cc @@ -721,6 +721,15 @@ gfc_trans_stop (gfc_code *code, bool error_stop) return gfc_finish_block (&se.pre); } +tree +trans_exit () +{ + const char *name = gfc_get_string (PREFIX ("exit_i%d"), 4); + gfc_symbol *exsym = gfc_get_intrinsic_sub_symbol (name); + tree tmp = gfc_get_symbol_decl (exsym); + return build_call_expr_loc (input_location, tmp, 1, integer_zero_node); +} + /* Translate the FAIL IMAGE statement. */ tree @@ -730,11 +739,49 @@ gfc_trans_fail_image (gfc_code *code ATTRIBUTE_UNUSED) return build_call_expr_loc (input_location, gfor_fndecl_caf_fail_image, 0); else + return trans_exit (); +} + +void +gfc_trans_sync_stat (struct sync_stat *sync_stat, gfc_se *se, tree *stat, + tree *errmsg, tree *errmsg_len) +{ + gfc_se argse; + + if (sync_stat->stat) { - const char *name = gfc_get_string (PREFIX ("exit_i%d"), 4); - gfc_symbol *exsym = gfc_get_intrinsic_sub_symbol (name); - tree tmp = gfc_get_symbol_decl (exsym); - return build_call_expr_loc (input_location, tmp, 1, integer_zero_node); + gfc_init_se (&argse, NULL); + gfc_conv_expr (&argse, sync_stat->stat); + gfc_add_block_to_block (&se->pre, &argse.pre); + + if (TREE_TYPE (argse.expr) != integer_type_node) + { + tree tstat = gfc_create_var (integer_type_node, "stat"); + TREE_THIS_VOLATILE (tstat) = 1; + gfc_add_modify (&se->pre, tstat, + fold_convert (integer_type_node, argse.expr)); + gfc_add_modify (&se->post, argse.expr, + fold_convert (TREE_TYPE (argse.expr), tstat)); + *stat = build_fold_addr_expr (tstat); + } + else + *stat = build_fold_addr_expr (argse.expr); + } + else + *stat = null_pointer_node; + + if (sync_stat->errmsg) + { + gfc_init_se (&argse, NULL); + gfc_conv_expr_reference (&argse, sync_stat->errmsg); + gfc_add_block_to_block (&se->pre, &argse.pre); + *errmsg = argse.expr; + *errmsg_len = fold_convert (size_type_node, argse.string_length); + } + else + { + *errmsg = null_pointer_node; + *errmsg_len = build_zero_cst (size_type_node); } } @@ -745,38 +792,42 @@ gfc_trans_form_team (gfc_code *code) { if (flag_coarray == GFC_FCOARRAY_LIB) { - gfc_se se; - gfc_se argse1, argse2; - tree team_id, team_type, tmp; + gfc_se se, argse; + tree team_id, team_type, new_index, stat, errmsg, errmsg_len, tmp; gfc_init_se (&se, NULL); - gfc_init_se (&argse1, NULL); - gfc_init_se (&argse2, NULL); - gfc_start_block (&se.pre); + gfc_init_se (&argse, NULL); - gfc_conv_expr_val (&argse1, code->expr1); - gfc_conv_expr_val (&argse2, code->expr2); - team_id = fold_convert (integer_type_node, argse1.expr); - team_type = gfc_build_addr_expr (ppvoid_type_node, argse2.expr); + gfc_conv_expr_val (&argse, code->expr1); + team_id = fold_convert (integer_type_node, argse.expr); + gfc_conv_expr_reference (&argse, code->expr2); + team_type = argse.expr; - gfc_add_block_to_block (&se.pre, &argse1.pre); - gfc_add_block_to_block (&se.pre, &argse2.pre); - tmp = build_call_expr_loc (input_location, - gfor_fndecl_caf_form_team, 3, - team_id, team_type, - integer_zero_node); + /* NEW_INDEX=. */ + if (code->expr3) + { + gfc_conv_expr_reference (&argse, code->expr3); + new_index = argse.expr; + } + else + new_index = null_pointer_node; + + gfc_add_block_to_block (&se.post, &argse.post); + + gfc_trans_sync_stat (&code->ext.sync_stat, &se, &stat, &errmsg, + &errmsg_len); + + gfc_add_block_to_block (&se.pre, &argse.pre); + + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_form_team, 6, + team_id, team_type, new_index, stat, errmsg, + errmsg_len); gfc_add_expr_to_block (&se.pre, tmp); - gfc_add_block_to_block (&se.pre, &argse1.post); - gfc_add_block_to_block (&se.pre, &argse2.post); + gfc_add_block_to_block (&se.pre, &se.post); return gfc_finish_block (&se.pre); - } + } else - { - const char *name = gfc_get_string (PREFIX ("exit_i%d"), 4); - gfc_symbol *exsym = gfc_get_intrinsic_sub_symbol (name); - tree tmp = gfc_get_symbol_decl (exsym); - return build_call_expr_loc (input_location, tmp, 1, integer_zero_node); - } + return trans_exit (); } /* Translate the CHANGE TEAM statement. */ @@ -786,47 +837,56 @@ gfc_trans_change_team (gfc_code *code) { if (flag_coarray == GFC_FCOARRAY_LIB) { - gfc_se argse; - tree team_type, tmp; + stmtblock_t block; + gfc_se se; + tree team_type, stat, errmsg, errmsg_len, tmp; - gfc_init_se (&argse, NULL); - gfc_conv_expr_val (&argse, code->expr1); - team_type = gfc_build_addr_expr (ppvoid_type_node, argse.expr); + gfc_init_se (&se, NULL); + gfc_start_block (&block); - tmp = build_call_expr_loc (input_location, - gfor_fndecl_caf_change_team, 2, team_type, - integer_zero_node); - gfc_add_expr_to_block (&argse.pre, tmp); - gfc_add_block_to_block (&argse.pre, &argse.post); - return gfc_finish_block (&argse.pre); + gfc_conv_expr_val (&se, code->expr1); + team_type = se.expr; + + gfc_trans_sync_stat (&code->ext.block.sync_stat, &se, &stat, &errmsg, + &errmsg_len); + + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_change_team, 4, + team_type, stat, errmsg, errmsg_len); + + gfc_add_expr_to_block (&se.pre, tmp); + gfc_add_block_to_block (&se.pre, &se.post); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_expr_to_block (&block, gfc_trans_block_construct (code)); + return gfc_finish_block (&block); } else - { - const char *name = gfc_get_string (PREFIX ("exit_i%d"), 4); - gfc_symbol *exsym = gfc_get_intrinsic_sub_symbol (name); - tree tmp = gfc_get_symbol_decl (exsym); - return build_call_expr_loc (input_location, tmp, 1, integer_zero_node); - } + return trans_exit (); } /* Translate the END TEAM statement. */ tree -gfc_trans_end_team (gfc_code *code ATTRIBUTE_UNUSED) +gfc_trans_end_team (gfc_code *code) { if (flag_coarray == GFC_FCOARRAY_LIB) { - return build_call_expr_loc (input_location, - gfor_fndecl_caf_end_team, 1, - build_int_cst (pchar_type_node, 0)); + gfc_se se; + tree stat, errmsg, errmsg_len, tmp; + + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + gfc_trans_sync_stat (&code->ext.sync_stat, &se, &stat, &errmsg, + &errmsg_len); + + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_end_team, 3, + stat, errmsg, errmsg_len); + gfc_add_expr_to_block (&se.pre, tmp); + gfc_add_block_to_block (&se.pre, &se.post); + return gfc_finish_block (&se.pre); } else - { - const char *name = gfc_get_string (PREFIX ("exit_i%d"), 4); - gfc_symbol *exsym = gfc_get_intrinsic_sub_symbol (name); - tree tmp = gfc_get_symbol_decl (exsym); - return build_call_expr_loc (input_location, tmp, 1, integer_zero_node); - } + return trans_exit (); } /* Translate the SYNC TEAM statement. */ @@ -836,28 +896,25 @@ gfc_trans_sync_team (gfc_code *code) { if (flag_coarray == GFC_FCOARRAY_LIB) { - gfc_se argse; - tree team_type, tmp; + gfc_se se; + tree team_type, stat, errmsg, errmsg_len, tmp; - gfc_init_se (&argse, NULL); - gfc_conv_expr_val (&argse, code->expr1); - team_type = gfc_build_addr_expr (ppvoid_type_node, argse.expr); + gfc_init_se (&se, NULL); - tmp = build_call_expr_loc (input_location, - gfor_fndecl_caf_sync_team, 2, - team_type, - integer_zero_node); - gfc_add_expr_to_block (&argse.pre, tmp); - gfc_add_block_to_block (&argse.pre, &argse.post); - return gfc_finish_block (&argse.pre); + gfc_conv_expr_val (&se, code->expr1); + team_type = se.expr; + + gfc_trans_sync_stat (&code->ext.sync_stat, &se, &stat, &errmsg, + &errmsg_len); + + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_sync_team, 4, + team_type, stat, errmsg, errmsg_len); + gfc_add_expr_to_block (&se.pre, tmp); + gfc_add_block_to_block (&se.pre, &se.post); + return gfc_finish_block (&se.pre); } else - { - const char *name = gfc_get_string (PREFIX ("exit_i%d"), 4); - gfc_symbol *exsym = gfc_get_intrinsic_sub_symbol (name); - tree tmp = gfc_get_symbol_decl (exsym); - return build_call_expr_loc (input_location, tmp, 1, integer_zero_node); - } + return trans_exit (); } tree @@ -1280,8 +1337,7 @@ gfc_trans_sync (gfc_code *code, gfc_exec_op type) { tree cond2; tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_num_images, - 2, integer_zero_node, - build_int_cst (integer_type_node, -1)); + 2, null_pointer_node, null_pointer_node); cond = fold_build2_loc (input_location, GT_EXPR, logical_type_node, images2, tmp); cond2 = fold_build2_loc (input_location, LT_EXPR, logical_type_node, @@ -1609,35 +1665,41 @@ gfc_trans_arithmetic_if (gfc_code * code) /* Translate a CRITICAL block. */ + tree gfc_trans_critical (gfc_code *code) -{ - stmtblock_t block; - tree tmp, token = NULL_TREE; + { + stmtblock_t block; + tree tmp, token = NULL_TREE; + tree stat = NULL_TREE, errmsg, errmsg_len; - gfc_start_block (&block); + gfc_start_block (&block); - if (flag_coarray == GFC_FCOARRAY_LIB) - { - tree zero_size = build_zero_cst (size_type_node); - token = gfc_get_symbol_decl (code->resolved_sym); - token = GFC_TYPE_ARRAY_CAF_TOKEN (TREE_TYPE (token)); - tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_lock, 7, - token, zero_size, integer_one_node, - null_pointer_node, null_pointer_node, - null_pointer_node, zero_size); - gfc_add_expr_to_block (&block, tmp); + if (flag_coarray == GFC_FCOARRAY_LIB) + { + gfc_se se; - /* It guarantees memory consistency within the same segment */ - tmp = gfc_build_string_const (strlen ("memory")+1, "memory"), - tmp = build5_loc (input_location, ASM_EXPR, void_type_node, - gfc_build_string_const (1, ""), - NULL_TREE, NULL_TREE, - tree_cons (NULL_TREE, tmp, NULL_TREE), - NULL_TREE); - ASM_VOLATILE_P (tmp) = 1; + gfc_init_se (&se, NULL); + gfc_trans_sync_stat (&code->ext.sync_stat, &se, &stat, &errmsg, + &errmsg_len); + gfc_add_block_to_block (&block, &se.pre); - gfc_add_expr_to_block (&block, tmp); + token = gfc_get_symbol_decl (code->resolved_sym); + token = GFC_TYPE_ARRAY_CAF_TOKEN (TREE_TYPE (token)); + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_lock, 7, + token, integer_zero_node, integer_one_node, + null_pointer_node, stat, errmsg, errmsg_len); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, &se.post); + + /* It guarantees memory consistency within the same segment. */ + tmp = gfc_build_string_const (strlen ("memory") + 1, "memory"), + tmp = build5_loc (input_location, ASM_EXPR, void_type_node, + gfc_build_string_const (1, ""), NULL_TREE, NULL_TREE, + tree_cons (NULL_TREE, tmp, NULL_TREE), NULL_TREE); + ASM_VOLATILE_P (tmp) = 1; + + gfc_add_expr_to_block (&block, tmp); } tmp = gfc_trans_code (code->block->next); @@ -1645,11 +1707,19 @@ gfc_trans_critical (gfc_code *code) if (flag_coarray == GFC_FCOARRAY_LIB) { - tree zero_size = build_zero_cst (size_type_node); - tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_unlock, 6, - token, zero_size, integer_one_node, - null_pointer_node, null_pointer_node, - zero_size); + /* END CRITICAL does not accept STAT or ERRMSG arguments. + * If STAT= is specified for CRITICAL, pass a stat argument to + * _gfortran_caf_lock_unlock to prevent termination in the event of an + * error, but ignore any value assigned to it. + */ + tmp = build_call_expr_loc ( + input_location, gfor_fndecl_caf_unlock, 6, token, integer_zero_node, + integer_one_node, + stat != NULL_TREE + ? gfc_build_addr_expr (NULL, + gfc_create_var (integer_type_node, "stat")) + : null_pointer_node, + null_pointer_node, integer_zero_node); gfc_add_expr_to_block (&block, tmp); /* It guarantees memory consistency within the same segment */ @@ -1981,11 +2051,35 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block) GFC_DECL_PTR_ARRAY_P (sym->backend_decl) = 1; } - if (sym->attr.codimension && !sym->attr.dimension) + if (sym->attr.codimension) se.want_coarray = 1; gfc_conv_expr_descriptor (&se, e); + if (flag_coarray == GFC_FCOARRAY_LIB && sym->attr.codimension) + { + tree token = gfc_conv_descriptor_token (se.expr), + size + = sym->attr.dimension + ? fold_build2 (MULT_EXPR, gfc_array_index_type, + gfc_conv_descriptor_size (se.expr, e->rank), + gfc_conv_descriptor_span_get (se.expr)) + : gfc_conv_descriptor_span_get (se.expr); + /* Create a new token, because in the token the modified descriptor + is stored. The modified descriptor is needed for accesses on the + remote image. In the scalar case, the base address needs to be + associated correctly, which also needs a new token. + The token is freed automatically be the end team statement. */ + gfc_add_expr_to_block ( + &se.pre, + build_call_expr_loc ( + input_location, gfor_fndecl_caf_register, 7, size, + build_int_cst (integer_type_node, GFC_CAF_COARRAY_MAP_EXISTING), + gfc_build_addr_expr (pvoid_type_node, token), + gfc_build_addr_expr (NULL_TREE, se.expr), null_pointer_node, + null_pointer_node, integer_zero_node)); + } + if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary && sym->ts.u.cl->backend_decl @@ -5154,7 +5248,7 @@ gfc_trans_concurrent_locality_spec (bool after_body, stmtblock_t *body, gfc_start_saved_local_decls (); cnt = 0; - static_assert (LOCALITY_LOCAL_INIT - LOCALITY_LOCAL == 1); + static_assert (LOCALITY_LOCAL_INIT - LOCALITY_LOCAL == 1, "locality_type"); for (int type = LOCALITY_LOCAL; type <= LOCALITY_LOCAL_INIT; type++) for (el = locality_list[type]; el; el = el->next) diff --git a/gcc/fortran/trans-stmt.h b/gcc/fortran/trans-stmt.h index 67b1970..8fbcdcb 100644 --- a/gcc/fortran/trans-stmt.h +++ b/gcc/fortran/trans-stmt.h @@ -58,6 +58,7 @@ tree gfc_trans_sync (gfc_code *, gfc_exec_op); tree gfc_trans_lock_unlock (gfc_code *, gfc_exec_op); tree gfc_trans_event_post_wait (gfc_code *, gfc_exec_op); tree gfc_trans_fail_image (gfc_code *); +void gfc_trans_sync_stat (struct sync_stat *, gfc_se *, tree *, tree *, tree *); tree gfc_trans_forall (gfc_code *); tree gfc_trans_form_team (gfc_code *); tree gfc_trans_change_team (gfc_code *); diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index b03dcc1..fdeb1e8 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -1795,11 +1795,11 @@ gfc_finalize_tree_expr (gfc_se *se, gfc_symbol *derived, analyzed and set by this routine, and -2 to indicate that a non-coarray is to be deallocated. */ tree -gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, - tree errlen, tree label_finish, - bool can_fail, gfc_expr* expr, +gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, tree errlen, + tree label_finish, bool can_fail, gfc_expr *expr, int coarray_dealloc_mode, tree class_container, - tree add_when_allocated, tree caf_token) + tree add_when_allocated, tree caf_token, + bool unalloc_ok) { stmtblock_t null, non_null; tree cond, tmp, error; @@ -1891,7 +1891,7 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, tmp = fold_build2_loc (input_location, MODIFY_EXPR, status_type, fold_build1_loc (input_location, INDIRECT_REF, status_type, status), - build_int_cst (status_type, 1)); + build_int_cst (status_type, unalloc_ok ? 0 : 1)); error = fold_build3_loc (input_location, COND_EXPR, void_type_node, cond2, tmp, error); } @@ -1975,10 +1975,10 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, token = gfc_build_addr_expr (NULL_TREE, token); gcc_assert (caf_dereg_type > GFC_CAF_COARRAY_ANALYZE); - tmp = build_call_expr_loc (input_location, - gfor_fndecl_caf_deregister, 5, - token, build_int_cst (integer_type_node, - caf_dereg_type), + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_deregister, 5, + token, + build_int_cst (integer_type_node, + caf_dereg_type), pstat, errmsg, errlen); gfc_add_expr_to_block (&non_null, tmp); @@ -1990,7 +1990,7 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, ASM_VOLATILE_P (tmp) = 1; gfc_add_expr_to_block (&non_null, tmp); - if (status != NULL_TREE) + if (status != NULL_TREE && !integer_zerop (status)) { tree stat = build_fold_indirect_ref_loc (input_location, status); tree nullify = fold_build2_loc (input_location, MODIFY_EXPR, @@ -2024,9 +2024,10 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, tree gfc_deallocate_scalar_with_status (tree pointer, tree status, tree label_finish, - bool can_fail, gfc_expr* expr, + bool can_fail, gfc_expr *expr, gfc_typespec ts, tree class_container, - bool coarray) + bool coarray, bool unalloc_ok, tree errmsg, + tree errmsg_len) { stmtblock_t null, non_null; tree cond, tmp, error; @@ -2069,7 +2070,7 @@ gfc_deallocate_scalar_with_status (tree pointer, tree status, tree label_finish, tmp = fold_build2_loc (input_location, MODIFY_EXPR, status_type, fold_build1_loc (input_location, INDIRECT_REF, status_type, status), - build_int_cst (status_type, 1)); + build_int_cst (status_type, unalloc_ok ? 0 : 1)); error = fold_build3_loc (input_location, COND_EXPR, void_type_node, cond2, tmp, error); } @@ -2134,7 +2135,8 @@ gfc_deallocate_scalar_with_status (tree pointer, tree status, tree label_finish, else { tree token; - tree pstat = null_pointer_node; + tree pstat = null_pointer_node, perrmsg = null_pointer_node, + perrlen = size_zero_node; gfc_se se; gfc_init_se (&se, NULL); @@ -2147,11 +2149,17 @@ gfc_deallocate_scalar_with_status (tree pointer, tree status, tree label_finish, pstat = status; } - tmp = build_call_expr_loc (input_location, - gfor_fndecl_caf_deregister, 5, - token, build_int_cst (integer_type_node, - caf_dereg_type), - pstat, null_pointer_node, integer_zero_node); + if (errmsg != NULL_TREE) + { + perrmsg = errmsg; + perrlen = errmsg_len; + } + + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_deregister, 5, + token, + build_int_cst (integer_type_node, + caf_dereg_type), + pstat, perrmsg, perrlen); gfc_add_expr_to_block (&non_null, tmp); /* It guarantees memory consistency within the same segment. */ diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 63a566a..461b0cd 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -139,10 +139,10 @@ enum gfc_coarray_regtype GFC_CAF_EVENT_STATIC, GFC_CAF_EVENT_ALLOC, GFC_CAF_COARRAY_ALLOC_REGISTER_ONLY, - GFC_CAF_COARRAY_ALLOC_ALLOCATE_ONLY + GFC_CAF_COARRAY_ALLOC_ALLOCATE_ONLY, + GFC_CAF_COARRAY_MAP_EXISTING }; - /* Describes the action to take on _caf_deregister. Keep in sync with gcc/fortran/trans.h. The negative values are not valid for the library and are used by the drivers for building the correct call. */ @@ -774,12 +774,13 @@ void gfc_allocate_using_malloc (stmtblock_t *, tree, tree, tree, tree = NULL_TREE); /* Generate code to deallocate an array. */ -tree gfc_deallocate_with_status (tree, tree, tree, tree, tree, bool, - gfc_expr *, int, tree = NULL_TREE, - tree a = NULL_TREE, tree c = NULL_TREE); -tree gfc_deallocate_scalar_with_status (tree, tree, tree, bool, gfc_expr*, +tree gfc_deallocate_with_status (tree, tree, tree, tree, tree, bool, gfc_expr *, + int, tree = NULL_TREE, tree a = NULL_TREE, + tree c = NULL_TREE, bool u = false); +tree gfc_deallocate_scalar_with_status (tree, tree, tree, bool, gfc_expr *, gfc_typespec, tree = NULL_TREE, - bool c = false); + bool c = false, bool u = false, + tree = NULL_TREE, tree = NULL_TREE); /* Generate code to call realloc(). */ tree gfc_call_realloc (stmtblock_t *, tree, tree); @@ -839,6 +840,10 @@ tree gfc_omp_clause_assign_op (tree, tree, tree); tree gfc_omp_clause_linear_ctor (tree, tree, tree, tree); tree gfc_omp_clause_dtor (tree, tree); void gfc_omp_finish_clause (tree, gimple_seq *, bool); +bool gfc_omp_deep_mapping_p (const gimple *, tree); +tree gfc_omp_deep_mapping_cnt (const gimple *, tree, gimple_seq *); +void gfc_omp_deep_mapping (const gimple *, tree, unsigned HOST_WIDE_INT, tree, + tree, tree, tree, tree, gimple_seq *); bool gfc_omp_allocatable_p (tree); bool gfc_omp_scalar_p (tree, bool); bool gfc_omp_scalar_target_p (tree); @@ -30,6 +30,9 @@ compilation is specified by a string called a "spec". */ #define INCLUDE_STRING #include "config.h" #include "system.h" +#ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE +#include <sys/personality.h> +#endif #include "coretypes.h" #include "multilib.h" /* before tm.h */ #include "tm.h" @@ -7744,55 +7747,58 @@ print_configuration (FILE *file) #define RETRY_ICE_ATTEMPTS 3 -/* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise. */ +/* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise. + If lines start with 0x followed by 1-16 lowercase hexadecimal digits + followed by a space, ignore anything before that space. These are + typically function addresses from libbacktrace and those can differ + due to ASLR. */ static bool files_equal_p (char *file1, char *file2) { - struct stat st1, st2; - off_t n, len; - int fd1, fd2; - const int bufsize = 8192; - char *buf = XNEWVEC (char, bufsize); - - fd1 = open (file1, O_RDONLY); - fd2 = open (file2, O_RDONLY); - - if (fd1 < 0 || fd2 < 0) - goto error; - - if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0) - goto error; + FILE *f1 = fopen (file1, "rb"); + FILE *f2 = fopen (file2, "rb"); + char line1[256], line2[256]; - if (st1.st_size != st2.st_size) - goto error; - - for (n = st1.st_size; n; n -= len) + bool line_start = true; + while (fgets (line1, sizeof (line1), f1)) { - len = n; - if ((int) len > bufsize / 2) - len = bufsize / 2; - - if (read (fd1, buf, len) != (int) len - || read (fd2, buf + bufsize / 2, len) != (int) len) + if (!fgets (line2, sizeof (line2), f2)) + goto error; + char *p1 = line1, *p2 = line2; + if (line_start + && line1[0] == '0' + && line1[1] == 'x' + && line2[0] == '0' + && line2[1] == 'x') { - goto error; + int i, j; + for (i = 0; i < 16; ++i) + if (!ISXDIGIT (line1[2 + i]) || ISUPPER (line1[2 + i])) + break; + for (j = 0; j < 16; ++j) + if (!ISXDIGIT (line2[2 + j]) || ISUPPER (line2[2 + j])) + break; + if (i && line1[2 + i] == ' ' && j && line2[2 + j] == ' ') + { + p1 = line1 + i + 3; + p2 = line2 + j + 3; + } } - - if (memcmp (buf, buf + bufsize / 2, len) != 0) + if (strcmp (p1, p2) != 0) goto error; + line_start = strchr (line1, '\n') != NULL; } + if (fgets (line2, sizeof (line2), f2)) + goto error; - free (buf); - close (fd1); - close (fd2); - + fclose (f1); + fclose (f2); return 1; error: - free (buf); - close (fd1); - close (fd2); + fclose (f1); + fclose (f2); return 0; } @@ -8000,6 +8006,10 @@ try_generate_repro (const char **argv) else new_argv[out_arg] = "-o-"; +#ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE); +#endif + int status; for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS; ++attempt) { diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index b645613..94d5a1e 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -906,20 +906,60 @@ size_must_be_zero_p (tree size) static bool optimize_memcpy_to_memset (gimple_stmt_iterator *gsip, tree dest, tree src, tree len) { + ao_ref read; gimple *stmt = gsi_stmt (*gsip); if (gimple_has_volatile_ops (stmt)) return false; - tree vuse = gimple_vuse (stmt); - if (vuse == NULL || TREE_CODE (vuse) != SSA_NAME) - return false; - gimple *defstmt = SSA_NAME_DEF_STMT (vuse); tree src2 = NULL_TREE, len2 = NULL_TREE; poly_int64 offset, offset2; tree val = integer_zero_node; + bool len_was_null = len == NULL_TREE; + if (len == NULL_TREE) + len = (TREE_CODE (src) == COMPONENT_REF + ? DECL_SIZE_UNIT (TREE_OPERAND (src, 1)) + : TYPE_SIZE_UNIT (TREE_TYPE (src))); + if (len == NULL_TREE + || !poly_int_tree_p (len)) + return false; + + ao_ref_init (&read, src); + tree vuse = gimple_vuse (stmt); + gimple *defstmt; + do { + if (vuse == NULL || TREE_CODE (vuse) != SSA_NAME) + return false; + defstmt = SSA_NAME_DEF_STMT (vuse); + if (is_a <gphi*>(defstmt)) + return false; + + /* If the len was null, then we can use TBBA. */ + if (stmt_may_clobber_ref_p_1 (defstmt, &read, + /* tbaa_p = */ len_was_null)) + break; + vuse = gimple_vuse (defstmt); + } while (true); + if (gimple_store_p (defstmt) && gimple_assign_single_p (defstmt) + && TREE_CODE (gimple_assign_rhs1 (defstmt)) == STRING_CST + && !gimple_clobber_p (defstmt)) + { + tree str = gimple_assign_rhs1 (defstmt); + src2 = gimple_assign_lhs (defstmt); + /* The string must contain all null char's for now. */ + for (int i = 0; i < TREE_STRING_LENGTH (str); i++) + { + if (TREE_STRING_POINTER (str)[i] != 0) + { + src2 = NULL_TREE; + break; + } + } + } + else if (gimple_store_p (defstmt) + && gimple_assign_single_p (defstmt) && TREE_CODE (gimple_assign_rhs1 (defstmt)) == CONSTRUCTOR && !gimple_clobber_p (defstmt)) src2 = gimple_assign_lhs (defstmt); @@ -939,17 +979,11 @@ optimize_memcpy_to_memset (gimple_stmt_iterator *gsip, tree dest, tree src, tree if (src2 == NULL_TREE) return false; - if (len == NULL_TREE) - len = (TREE_CODE (src) == COMPONENT_REF - ? DECL_SIZE_UNIT (TREE_OPERAND (src, 1)) - : TYPE_SIZE_UNIT (TREE_TYPE (src))); if (len2 == NULL_TREE) len2 = (TREE_CODE (src2) == COMPONENT_REF ? DECL_SIZE_UNIT (TREE_OPERAND (src2, 1)) : TYPE_SIZE_UNIT (TREE_TYPE (src2))); - if (len == NULL_TREE - || !poly_int_tree_p (len) - || len2 == NULL_TREE + if (len2 == NULL_TREE || !poly_int_tree_p (len2)) return false; diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index cf30d8e..6fefc83 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -1547,14 +1547,15 @@ bitint_large_huge::handle_cast (tree lhs_type, tree rhs1, tree idx) } else { - if (tree_to_uhwi (idx) < low) + unsigned tidx = tree_to_uhwi (idx); + if (tidx < low) { t = handle_operand (rhs1, idx); if (m_first) m_data[save_data_cnt + 2] = build_int_cst (NULL_TREE, m_data_cnt); } - else if (tree_to_uhwi (idx) < high) + else if (tidx < high) { t = handle_operand (rhs1, size_int (low)); if (m_first) @@ -1587,7 +1588,9 @@ bitint_large_huge::handle_cast (tree lhs_type, tree rhs1, tree idx) m_data_cnt = tree_to_uhwi (m_data[save_data_cnt + 2]); if (TYPE_UNSIGNED (rhs_type)) t = build_zero_cst (m_limb_type); - else if (m_bb && m_data[save_data_cnt]) + else if (m_bb + && m_data[save_data_cnt] + && ((tidx & 1) == 0 || tidx != low + 1)) t = m_data[save_data_cnt]; else t = m_data[save_data_cnt + 1]; @@ -5916,7 +5919,8 @@ build_bitint_stmt_ssa_conflicts (gimple *stmt, live_track *live, ssa_conflicts *graph, bitmap names, void (*def) (live_track *, tree, ssa_conflicts *), - void (*use) (live_track *, tree)) + void (*use) (live_track *, tree), + void (*clear) (live_track *, tree)) { bool muldiv_p = false; tree lhs = NULL_TREE; @@ -5933,6 +5937,25 @@ build_bitint_stmt_ssa_conflicts (gimple *stmt, live_track *live, { if (!bitmap_bit_p (names, SSA_NAME_VERSION (lhs))) return; + + /* A copy between 2 partitions does not introduce an interference + by itself. If they did, you would never be able to coalesce + two things which are copied. If the two variables really do + conflict, they will conflict elsewhere in the program. + + This is handled by simply removing the SRC of the copy from + the live list, and processing the stmt normally. + + Don't do this if lhs is not in names though, in such cases + it is actually used at some point later in the basic + block. */ + if (gimple_assign_copy_p (stmt)) + { + tree rhs1 = gimple_assign_rhs1 (stmt); + if (TREE_CODE (rhs1) == SSA_NAME) + clear (live, rhs1); + } + switch (gimple_assign_rhs_code (stmt)) { case MULT_EXPR: @@ -6624,10 +6647,28 @@ gimple_lower_bitint (void) bitmap_set_bit (large_huge.m_names, SSA_NAME_VERSION (s)); if (has_single_use (s)) { - if (!large_huge.m_single_use_names) - large_huge.m_single_use_names = BITMAP_ALLOC (NULL); - bitmap_set_bit (large_huge.m_single_use_names, - SSA_NAME_VERSION (s)); + tree s2 = s; + /* The coalescing hook special cases SSA_NAME copies. + Make sure not to mark in m_single_use_names single + use SSA_NAMEs copied from non-single use SSA_NAMEs. */ + while (gimple_assign_copy_p (SSA_NAME_DEF_STMT (s2))) + { + s2 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (s2)); + if (TREE_CODE (s2) != SSA_NAME) + break; + if (!has_single_use (s2)) + { + s2 = NULL_TREE; + break; + } + } + if (s2) + { + if (!large_huge.m_single_use_names) + large_huge.m_single_use_names = BITMAP_ALLOC (NULL); + bitmap_set_bit (large_huge.m_single_use_names, + SSA_NAME_VERSION (s)); + } } if (SSA_NAME_VAR (s) && ((TREE_CODE (SSA_NAME_VAR (s)) == PARM_DECL diff --git a/gcc/gimple-lower-bitint.h b/gcc/gimple-lower-bitint.h index 8662c4b..4798484 100644 --- a/gcc/gimple-lower-bitint.h +++ b/gcc/gimple-lower-bitint.h @@ -26,6 +26,7 @@ extern void build_bitint_stmt_ssa_conflicts (gimple *, live_track *, ssa_conflicts *, bitmap, void (*) (live_track *, tree, ssa_conflicts *), + void (*) (live_track *, tree), void (*) (live_track *, tree)); #endif /* GCC_GIMPLE_LOWER_BITINT_H */ diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h index 0d53103..bacf24d 100644 --- a/gcc/ginclude/stddef.h +++ b/gcc/ginclude/stddef.h @@ -89,6 +89,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef _PTRDIFF_T_ #endif +/* When modular code is enabled with macOS SDKs from version 15, the + include guards are set in the includers of this code, rather than as + part of it. This means the we must unset them or the intended code + here will be bypassed (resulting in undefined values). */ +#if defined (__APPLE__) +# if defined(__has_feature) && __has_feature(modules) +# if defined (__need_ptrdiff_t) +# undef __PTRDIFF_T +# endif +# if defined (__need_size_t) +# undef __SIZE_T +# endif +# endif +#endif + /* On VxWorks, <type/vxTypesBase.h> may have defined macros like _TYPE_size_t which will typedef size_t. fixincludes patched the vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc index 2645689..b4b9699 100644 --- a/gcc/ipa-cp.cc +++ b/gcc/ipa-cp.cc @@ -147,10 +147,6 @@ object_allocator<ipcp_value_source<tree> > ipcp_sources_pool object_allocator<ipcp_agg_lattice> ipcp_agg_lattice_pool ("IPA_CP aggregate lattices"); -/* Base count to use in heuristics when using profile feedback. */ - -static profile_count base_count; - /* Original overall size of the program. */ static long overall_size, orig_overall_size; @@ -307,14 +303,31 @@ ipcp_lattice<valtype>::print (FILE * f, bool dump_sources, bool dump_benefits) fprintf (f, "\n"); } -/* If VALUE has all bits set to one, print "-1" to F, otherwise simply print it - hexadecimally to F. */ +/* Print VALUE to F in a form which in usual cases does not take thousands of + characters. */ static void ipcp_print_widest_int (FILE *f, const widest_int &value) { - if (wi::eq_p (wi::bit_not (value), 0)) + if (value == -1) fprintf (f, "-1"); + else if (wi::arshift (value, 128) == -1) + { + char buf[35], *p = buf + 2; + widest_int v = wi::zext (value, 128); + size_t len; + print_hex (v, buf); + len = strlen (p); + if (len == 32) + { + fprintf (f, "0xf..f"); + while (*p == 'f') + ++p; + } + else + fprintf (f, "0xf..f%0*d", (int) (32 - len), 0); + fputs (p, f); + } else print_hex (value, f); } @@ -331,7 +344,7 @@ ipcp_bits_lattice::print (FILE *f) fprintf (f, " Bits: value = "); ipcp_print_widest_int (f, get_value ()); fprintf (f, ", mask = "); - print_hex (get_mask (), f); + ipcp_print_widest_int (f, get_mask ()); fprintf (f, "\n"); } } @@ -488,14 +501,16 @@ struct caller_statistics profile_count count_sum; /* Sum of all frequencies for all calls. */ sreal freq_sum; - /* Number of calls and hot calls respectively. */ - int n_calls, n_hot_calls; + /* Number of calls and calls considered interesting respectively. */ + int n_calls, n_interesting_calls; /* If itself is set up, also count the number of non-self-recursive calls. */ int n_nonrec_calls; /* If non-NULL, this is the node itself and calls from it should have their counts included in rec_count_sum and not count_sum. */ cgraph_node *itself; + /* True if there is a caller that has no IPA profile. */ + bool called_without_ipa_profile; }; /* Initialize fields of STAT to zeroes and optionally set it up so that edges @@ -507,10 +522,39 @@ init_caller_stats (caller_statistics *stats, cgraph_node *itself = NULL) stats->rec_count_sum = profile_count::zero (); stats->count_sum = profile_count::zero (); stats->n_calls = 0; - stats->n_hot_calls = 0; + stats->n_interesting_calls = 0; stats->n_nonrec_calls = 0; stats->freq_sum = 0; stats->itself = itself; + stats->called_without_ipa_profile = false; +} + +/* We want to propagate across edges that may be executed, however + we do not want to check maybe_hot, since call itself may be cold + while calee contains some heavy loop which makes propagation still + relevant. + + In particular, even edge called once may lead to significant + improvement. */ + +static bool +cs_interesting_for_ipcp_p (cgraph_edge *e) +{ + /* If profile says the edge is executed, we want to optimize. */ + if (e->count.ipa ().nonzero_p ()) + return true; + /* If local (possibly guseed or adjusted 0 profile) claims edge is + not executed, do not propagate. */ + if (!e->count.nonzero_p ()) + return false; + /* If IPA profile says edge is executed zero times, but zero + is quality is ADJUSTED, still consider it for cloning in + case we have partial training. */ + if (e->count.ipa ().initialized_p () + && opt_for_fn (e->callee->decl,flag_profile_partial_training) + && e->count.nonzero_p ()) + return false; + return true; } /* Worker callback of cgraph_for_node_and_aliases accumulating statistics of @@ -536,13 +580,18 @@ gather_caller_stats (struct cgraph_node *node, void *data) else stats->count_sum += cs->count.ipa (); } + else + stats->called_without_ipa_profile = true; stats->freq_sum += cs->sreal_frequency (); stats->n_calls++; if (stats->itself && stats->itself != cs->caller) stats->n_nonrec_calls++; - if (cs->maybe_hot_p ()) - stats->n_hot_calls ++; + /* If profile known to be zero, we do not want to clone for performance. + However if call is cold, the called function may still contain + important hot loops. */ + if (cs_interesting_for_ipcp_p (cs)) + stats->n_interesting_calls++; } return false; @@ -585,26 +634,11 @@ ipcp_cloning_candidate_p (struct cgraph_node *node) node->dump_name ()); return true; } - - /* When profile is available and function is hot, propagate into it even if - calls seems cold; constant propagation can improve function's speed - significantly. */ - if (stats.count_sum > profile_count::zero () - && node->count.ipa ().initialized_p ()) - { - if (stats.count_sum > node->count.ipa ().apply_scale (90, 100)) - { - if (dump_file) - fprintf (dump_file, "Considering %s for cloning; " - "usually called directly.\n", - node->dump_name ()); - return true; - } - } - if (!stats.n_hot_calls) + if (!stats.n_interesting_calls) { if (dump_file) - fprintf (dump_file, "Not considering %s for cloning; no hot calls.\n", + fprintf (dump_file, "Not considering %s for cloning; " + "no calls considered interesting by profile.\n", node->dump_name ()); return false; } @@ -916,11 +950,13 @@ ipcp_bits_lattice::meet_with_1 (widest_int value, widest_int mask, m_mask = (m_mask | mask) | (m_value ^ value); if (drop_all_ones) m_mask |= m_value; - m_value &= ~m_mask; + widest_int cap_mask = wi::shifted_mask <widest_int> (0, precision, true); + m_mask |= cap_mask; if (wi::sext (m_mask, precision) == -1) return set_to_bottom (); + m_value &= ~m_mask; return m_mask != old_mask; } @@ -996,6 +1032,8 @@ ipcp_bits_lattice::meet_with (ipcp_bits_lattice& other, unsigned precision, adjusted_mask |= adjusted_value; adjusted_value &= ~adjusted_mask; } + widest_int cap_mask = wi::shifted_mask <widest_int> (0, precision, true); + adjusted_mask |= cap_mask; if (wi::sext (adjusted_mask, precision) == -1) return set_to_bottom (); return set_to_constant (adjusted_value, adjusted_mask); @@ -1467,10 +1505,12 @@ ipacp_value_safe_for_type (tree param_type, tree value) return NULL_TREE; } -/* Return the result of a (possibly arithmetic) operation on the constant value - INPUT. OPERAND is 2nd operand for binary operation. RES_TYPE is the type - in which any operation is to be performed. Return NULL_TREE if that cannot - be determined or be considered an interprocedural invariant. */ +/* Return the result of a (possibly arithmetic) operation determined by OPCODE + on the constant value INPUT. OPERAND is 2nd operand for binary operation + and is required for binary operations. RES_TYPE, required when opcode is + not NOP_EXPR, is the type in which any operation is to be performed. Return + NULL_TREE if that cannot be determined or be considered an interprocedural + invariant. */ static tree ipa_get_jf_arith_result (enum tree_code opcode, tree input, tree operand, @@ -1491,16 +1531,6 @@ ipa_get_jf_arith_result (enum tree_code opcode, tree input, tree operand, return NULL_TREE; } - if (!res_type) - { - if (TREE_CODE_CLASS (opcode) == tcc_comparison) - res_type = boolean_type_node; - else if (expr_type_first_operand_type_p (opcode)) - res_type = TREE_TYPE (input); - else - return NULL_TREE; - } - if (TREE_CODE_CLASS (opcode) == tcc_unary) res = fold_unary (opcode, res_type, input); else @@ -1584,7 +1614,10 @@ ipa_value_from_jfunc (class ipa_node_params *info, struct ipa_jump_func *jfunc, return NULL_TREE; enum tree_code opcode = ipa_get_jf_pass_through_operation (jfunc); tree op2 = ipa_get_jf_pass_through_operand (jfunc); - tree cstval = ipa_get_jf_arith_result (opcode, input, op2, NULL_TREE); + tree op_type + = (opcode == NOP_EXPR) ? NULL_TREE + : ipa_get_jf_pass_through_op_type (jfunc); + tree cstval = ipa_get_jf_arith_result (opcode, input, op2, op_type); return ipacp_value_safe_for_type (parm_type, cstval); } else @@ -1724,24 +1757,7 @@ ipa_vr_intersect_with_arith_jfunc (vrange &vr, const value_range *inter_vr; if (operation != NOP_EXPR) { - /* Since we construct arithmetic jump functions even when there is a - type conversion in between the operation encoded in the jump - function and when it is passed in a call argument, the IPA - propagation phase must also perform the operation and conversion - in two separate steps. - - TODO: In order to remove the use of expr_type_first_operand_type_p - predicate we would need to stream the operation type, ideally - encoding the whole jump function as a series of expr_eval_op - structures. */ - - tree operation_type; - if (expr_type_first_operand_type_p (operation)) - operation_type = src_type; - else if (operation == ABSU_EXPR) - operation_type = unsigned_type_for (src_type); - else - return; + tree operation_type = ipa_get_jf_pass_through_op_type (jfunc); op_res.set_varying (operation_type); if (!ipa_vr_operation_and_type_effects (op_res, src_vr, operation, operation_type, src_type)) @@ -1771,14 +1787,7 @@ ipa_vr_intersect_with_arith_jfunc (vrange &vr, value_range op_vr (TREE_TYPE (operand)); ipa_get_range_from_ip_invariant (op_vr, operand, context_node); - tree operation_type; - if (TREE_CODE_CLASS (operation) == tcc_comparison) - operation_type = boolean_type_node; - else if (expr_type_first_operand_type_p (operation)) - operation_type = src_type; - else - return; - + tree operation_type = ipa_get_jf_pass_through_op_type (jfunc); value_range op_res (operation_type); if (!ipa_vr_supported_type_p (operation_type) || !handler.operand_check_p (operation_type, src_type, op_vr.type ()) @@ -1918,10 +1927,11 @@ ipa_agg_value_from_jfunc (ipa_node_params *info, cgraph_node *node, return NULL_TREE; } - return ipa_get_jf_arith_result (item->value.pass_through.operation, - value, - item->value.pass_through.operand, - item->type); + tree cstval = ipa_get_jf_arith_result (item->value.pass_through.operation, + value, + item->value.pass_through.operand, + item->value.pass_through.op_type); + return ipacp_value_safe_for_type (item->type, cstval); } /* Process all items in AGG_JFUNC relative to caller (or the node the original @@ -2150,13 +2160,15 @@ ipcp_lattice<valtype>::add_value (valtype newval, cgraph_edge *cs, /* A helper function that returns result of operation specified by OPCODE on the value of SRC_VAL. If non-NULL, OPND1_TYPE is expected type for the value of SRC_VAL. If the operation is binary, OPND2 is a constant value - acting as its second operand. */ + acting as its second operand. OP_TYPE is the type in which the operation is + performed. */ static tree get_val_across_arith_op (enum tree_code opcode, tree opnd1_type, tree opnd2, - ipcp_value<tree> *src_val) + ipcp_value<tree> *src_val, + tree op_type) { tree opnd1 = src_val->value; @@ -2165,17 +2177,19 @@ get_val_across_arith_op (enum tree_code opcode, && !useless_type_conversion_p (opnd1_type, TREE_TYPE (opnd1))) return NULL_TREE; - return ipa_get_jf_arith_result (opcode, opnd1, opnd2, NULL_TREE); + return ipa_get_jf_arith_result (opcode, opnd1, opnd2, op_type); } /* Propagate values through an arithmetic transformation described by a jump function associated with edge CS, taking values from SRC_LAT and putting - them into DEST_LAT. OPND1_TYPE is expected type for the values in SRC_LAT. - OPND2 is a constant value if transformation is a binary operation. - SRC_OFFSET specifies offset in an aggregate if SRC_LAT describes lattice of - a part of the aggregate. SRC_IDX is the index of the source parameter. - RES_TYPE is the value type of result being propagated into. Return true if - DEST_LAT changed. */ + them into DEST_LAT. OPND1_TYPE, if non-NULL, is the expected type for the + values in SRC_LAT. OPND2 is a constant value if transformation is a binary + operation. SRC_OFFSET specifies offset in an aggregate if SRC_LAT describes + lattice of a part of an aggregate, otherwise it should be -1. SRC_IDX is + the index of the source parameter. OP_TYPE is the type in which the + operation is performed and can be NULL when OPCODE is NOP_EXPR. RES_TYPE is + the value type of result being propagated into. Return true if DEST_LAT + changed. */ static bool propagate_vals_across_arith_jfunc (cgraph_edge *cs, @@ -2186,6 +2200,7 @@ propagate_vals_across_arith_jfunc (cgraph_edge *cs, ipcp_lattice<tree> *dest_lat, HOST_WIDE_INT src_offset, int src_idx, + tree op_type, tree res_type) { ipcp_value<tree> *src_val; @@ -2241,7 +2256,7 @@ propagate_vals_across_arith_jfunc (cgraph_edge *cs, for (int j = 1; j < max_recursive_depth; j++) { tree cstval = get_val_across_arith_op (opcode, opnd1_type, opnd2, - src_val); + src_val, op_type); cstval = ipacp_value_safe_for_type (res_type, cstval); if (!cstval) break; @@ -2266,7 +2281,7 @@ propagate_vals_across_arith_jfunc (cgraph_edge *cs, } tree cstval = get_val_across_arith_op (opcode, opnd1_type, opnd2, - src_val); + src_val, op_type); cstval = ipacp_value_safe_for_type (res_type, cstval); if (cstval) ret |= dest_lat->add_value (cstval, cs, src_val, src_idx, @@ -2290,11 +2305,13 @@ propagate_vals_across_pass_through (cgraph_edge *cs, ipa_jump_func *jfunc, tree parm_type) { gcc_checking_assert (parm_type); - return propagate_vals_across_arith_jfunc (cs, - ipa_get_jf_pass_through_operation (jfunc), - NULL_TREE, + enum tree_code opcode = ipa_get_jf_pass_through_operation (jfunc); + tree op_type = (opcode == NOP_EXPR) ? NULL_TREE + : ipa_get_jf_pass_through_op_type (jfunc); + return propagate_vals_across_arith_jfunc (cs, opcode, NULL_TREE, ipa_get_jf_pass_through_operand (jfunc), - src_lat, dest_lat, -1, src_idx, parm_type); + src_lat, dest_lat, -1, src_idx, op_type, + parm_type); } /* Propagate values through an ancestor jump function JFUNC associated with @@ -2507,14 +2524,12 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx, return dest_lattice->set_to_bottom (); } - unsigned precision = TYPE_PRECISION (parm_type); - signop sgn = TYPE_SIGN (parm_type); - if (jfunc->type == IPA_JF_PASS_THROUGH || jfunc->type == IPA_JF_ANCESTOR) { ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); tree operand = NULL_TREE; + tree op_type = NULL_TREE; enum tree_code code; unsigned src_idx; bool keep_null = false; @@ -2524,7 +2539,10 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx, code = ipa_get_jf_pass_through_operation (jfunc); src_idx = ipa_get_jf_pass_through_formal_id (jfunc); if (code != NOP_EXPR) - operand = ipa_get_jf_pass_through_operand (jfunc); + { + operand = ipa_get_jf_pass_through_operand (jfunc); + op_type = ipa_get_jf_pass_through_op_type (jfunc); + } } else { @@ -2551,6 +2569,11 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx, if (!src_lats->bits_lattice.bottom_p ()) { + if (!op_type) + op_type = ipa_get_type (caller_info, src_idx); + + unsigned precision = TYPE_PRECISION (op_type); + signop sgn = TYPE_SIGN (op_type); bool drop_all_ones = keep_null && !src_lats->bits_lattice.known_nonzero_p (); @@ -2570,7 +2593,8 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx, = widest_int::from (bm.mask (), TYPE_SIGN (parm_type)); widest_int value = widest_int::from (bm.value (), TYPE_SIGN (parm_type)); - return dest_lattice->meet_with (value, mask, precision); + return dest_lattice->meet_with (value, mask, + TYPE_PRECISION (parm_type)); } } return dest_lattice->set_to_bottom (); @@ -2869,6 +2893,7 @@ propagate_aggregate_lattice (struct cgraph_edge *cs, src_lat, aglat, src_offset, src_idx, + item->value.pass_through.op_type, item->type); if (src_lat->contains_variable) @@ -3361,24 +3386,29 @@ incorporate_penalties (cgraph_node *node, ipa_node_params *info, static bool good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit, sreal freq_sum, profile_count count_sum, - int size_cost) + int size_cost, bool called_without_ipa_profile) { + gcc_assert (count_sum.ipa () == count_sum); if (time_benefit == 0 || !opt_for_fn (node->decl, flag_ipa_cp_clone) - || node->optimize_for_size_p ()) + || node->optimize_for_size_p () + /* If there is no call which was executed in profiling or where + profile is missing, we do not want to clone. */ + || (!called_without_ipa_profile && !count_sum.nonzero_p ())) return false; gcc_assert (size_cost > 0); ipa_node_params *info = ipa_node_params_sum->get (node); int eval_threshold = opt_for_fn (node->decl, param_ipa_cp_eval_threshold); + /* If we know the execution IPA execution counts, we can estimate overall + speedup of the program. */ if (count_sum.nonzero_p ()) { - gcc_assert (base_count.nonzero_p ()); - sreal factor = count_sum.probability_in (base_count).to_sreal (); - sreal evaluation = (time_benefit * factor) / size_cost; + profile_count saved_time = count_sum * time_benefit; + sreal evaluation = saved_time.to_sreal_scale (profile_count::one ()) + / size_cost; evaluation = incorporate_penalties (node, info, evaluation); - evaluation *= 1000; if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -3386,33 +3416,46 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit, "size: %i, count_sum: ", time_benefit.to_double (), size_cost); count_sum.dump (dump_file); + fprintf (dump_file, ", overall time saved: "); + saved_time.dump (dump_file); fprintf (dump_file, "%s%s) -> evaluation: %.2f, threshold: %i\n", info->node_within_scc ? (info->node_is_self_scc ? ", self_scc" : ", scc") : "", info->node_calling_single_call ? ", single_call" : "", evaluation.to_double (), eval_threshold); } - - return evaluation.to_int () >= eval_threshold; + gcc_checking_assert (saved_time == saved_time.ipa ()); + if (!maybe_hot_count_p (NULL, saved_time)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, " not cloning: time saved is not hot\n"); + } + /* Evaulation approximately corresponds to time saved per instruction + introduced. This is likely almost always going to be true, since we + already checked that time saved is large enough to be considered + hot. */ + else if (evaluation.to_int () >= eval_threshold) + return true; + /* If all call sites have profile known; we know we do not want t clone. + If there are calls with unknown profile; try local heuristics. */ + if (!called_without_ipa_profile) + return false; } - else - { - sreal evaluation = (time_benefit * freq_sum) / size_cost; - evaluation = incorporate_penalties (node, info, evaluation); - evaluation *= 1000; + sreal evaluation = (time_benefit * freq_sum) / size_cost; + evaluation = incorporate_penalties (node, info, evaluation); + evaluation *= 1000; - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, " good_cloning_opportunity_p (time: %g, " - "size: %i, freq_sum: %g%s%s) -> evaluation: %.2f, " - "threshold: %i\n", - time_benefit.to_double (), size_cost, freq_sum.to_double (), - info->node_within_scc - ? (info->node_is_self_scc ? ", self_scc" : ", scc") : "", - info->node_calling_single_call ? ", single_call" : "", - evaluation.to_double (), eval_threshold); + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, " good_cloning_opportunity_p (time: %g, " + "size: %i, freq_sum: %g%s%s) -> evaluation: %.2f, " + "threshold: %i\n", + time_benefit.to_double (), size_cost, freq_sum.to_double (), + info->node_within_scc + ? (info->node_is_self_scc ? ", self_scc" : ", scc") : "", + info->node_calling_single_call ? ", single_call" : "", + evaluation.to_double (), eval_threshold); - return evaluation.to_int () >= eval_threshold; - } + return evaluation.to_int () >= eval_threshold; } /* Grow vectors in AVALS and fill them with information about values of @@ -3605,7 +3648,8 @@ estimate_local_effects (struct cgraph_node *node) "known contexts, code not going to grow.\n"); } else if (good_cloning_opportunity_p (node, time, stats.freq_sum, - stats.count_sum, size)) + stats.count_sum, size, + stats.called_without_ipa_profile)) { if (size + overall_size <= get_max_overall_size (node)) { @@ -3971,7 +4015,7 @@ value_topo_info<valtype>::propagate_effects () processed_srcvals.empty (); for (src = val->sources; src; src = src->next) if (src->val - && src->cs->maybe_hot_p ()) + && cs_interesting_for_ipcp_p (src->cs)) { if (!processed_srcvals.add (src->val)) { @@ -4016,21 +4060,6 @@ value_topo_info<valtype>::propagate_effects () } } -/* Callback for qsort to sort counts of all edges. */ - -static int -compare_edge_profile_counts (const void *a, const void *b) -{ - const profile_count *cnt1 = (const profile_count *) a; - const profile_count *cnt2 = (const profile_count *) b; - - if (*cnt1 < *cnt2) - return 1; - if (*cnt1 > *cnt2) - return -1; - return 0; -} - /* Propagate constants, polymorphic contexts and their effects from the summaries interprocedurally. */ @@ -4043,10 +4072,6 @@ ipcp_propagate_stage (class ipa_topo_info *topo) if (dump_file) fprintf (dump_file, "\n Propagating constants:\n\n"); - base_count = profile_count::uninitialized (); - - bool compute_count_base = false; - unsigned base_count_pos_percent = 0; FOR_EACH_DEFINED_FUNCTION (node) { if (node->has_gimple_body_p () @@ -4063,57 +4088,8 @@ ipcp_propagate_stage (class ipa_topo_info *topo) ipa_size_summary *s = ipa_size_summaries->get (node); if (node->definition && !node->alias && s != NULL) overall_size += s->self_size; - if (node->count.ipa ().initialized_p ()) - { - compute_count_base = true; - unsigned pos_percent = opt_for_fn (node->decl, - param_ipa_cp_profile_count_base); - base_count_pos_percent = MAX (base_count_pos_percent, pos_percent); - } } - if (compute_count_base) - { - auto_vec<profile_count> all_edge_counts; - all_edge_counts.reserve_exact (symtab->edges_count); - FOR_EACH_DEFINED_FUNCTION (node) - for (cgraph_edge *cs = node->callees; cs; cs = cs->next_callee) - { - profile_count count = cs->count.ipa (); - if (!count.nonzero_p ()) - continue; - - enum availability avail; - cgraph_node *tgt - = cs->callee->function_or_virtual_thunk_symbol (&avail); - ipa_node_params *info = ipa_node_params_sum->get (tgt); - if (info && info->versionable) - all_edge_counts.quick_push (count); - } - - if (!all_edge_counts.is_empty ()) - { - gcc_assert (base_count_pos_percent <= 100); - all_edge_counts.qsort (compare_edge_profile_counts); - - unsigned base_count_pos - = ((all_edge_counts.length () * (base_count_pos_percent)) / 100); - base_count = all_edge_counts[base_count_pos]; - - if (dump_file) - { - fprintf (dump_file, "\nSelected base_count from %u edges at " - "position %u, arriving at: ", all_edge_counts.length (), - base_count_pos); - base_count.dump (dump_file); - fprintf (dump_file, "\n"); - } - } - else if (dump_file) - fprintf (dump_file, "\nNo candidates with non-zero call count found, " - "continuing as if without profile feedback.\n"); - } - orig_overall_size = overall_size; if (dump_file) @@ -4375,15 +4351,17 @@ static bool get_info_about_necessary_edges (ipcp_value<valtype> *val, cgraph_node *dest, sreal *freq_sum, int *caller_count, profile_count *rec_count_sum, - profile_count *nonrec_count_sum) + profile_count *nonrec_count_sum, + bool *called_without_ipa_profile) { ipcp_value_source<valtype> *src; sreal freq = 0; int count = 0; profile_count rec_cnt = profile_count::zero (); profile_count nonrec_cnt = profile_count::zero (); - bool hot = false; + bool interesting = false; bool non_self_recursive = false; + *called_without_ipa_profile = false; for (src = val->sources; src; src = src->next) { @@ -4394,15 +4372,19 @@ get_info_about_necessary_edges (ipcp_value<valtype> *val, cgraph_node *dest, { count++; freq += cs->sreal_frequency (); - hot |= cs->maybe_hot_p (); + interesting |= cs_interesting_for_ipcp_p (cs); if (cs->caller != dest) { non_self_recursive = true; if (cs->count.ipa ().initialized_p ()) rec_cnt += cs->count.ipa (); + else + *called_without_ipa_profile = true; } else if (cs->count.ipa ().initialized_p ()) nonrec_cnt += cs->count.ipa (); + else + *called_without_ipa_profile = true; } cs = get_next_cgraph_edge_clone (cs); } @@ -4418,19 +4400,7 @@ get_info_about_necessary_edges (ipcp_value<valtype> *val, cgraph_node *dest, *rec_count_sum = rec_cnt; *nonrec_count_sum = nonrec_cnt; - if (!hot && ipa_node_params_sum->get (dest)->node_within_scc) - { - struct cgraph_edge *cs; - - /* Cold non-SCC source edge could trigger hot recursive execution of - function. Consider the case as hot and rely on following cost model - computation to further select right one. */ - for (cs = dest->callers; cs; cs = cs->next_caller) - if (cs->caller == dest && cs->maybe_hot_p ()) - return true; - } - - return hot; + return interesting; } /* Given a NODE, and a set of its CALLERS, try to adjust order of the callers @@ -4669,7 +4639,7 @@ update_counts_for_self_gen_clones (cgraph_node *orig_node, const vec<cgraph_node *> &self_gen_clones) { profile_count redist_sum = orig_node->count.ipa (); - if (!(redist_sum > profile_count::zero ())) + if (!redist_sum.nonzero_p ()) return; if (dump_file) @@ -4740,7 +4710,7 @@ update_counts_for_self_gen_clones (cgraph_node *orig_node, it. */ for (cgraph_node *n : self_gen_clones) { - if (!(n->count.ipa () > profile_count::zero ())) + if (!n->count.ipa ().nonzero_p ()) continue; desc_incoming_count_struct desc; @@ -4786,7 +4756,7 @@ update_profiling_info (struct cgraph_node *orig_node, profile_count new_sum; profile_count remainder, orig_node_count = orig_node->count.ipa (); - if (!(orig_node_count > profile_count::zero ())) + if (!orig_node_count.nonzero_p ()) return; if (dump_file) @@ -4950,7 +4920,7 @@ update_specialized_profile (struct cgraph_node *new_node, orig_node_count.dump (dump_file); fprintf (dump_file, "\n"); } - if (!(orig_node_count > profile_count::zero ())) + if (!orig_node_count.nonzero_p ()) return; new_node_count = new_node->count; @@ -5394,11 +5364,14 @@ find_more_scalar_values_for_callers_subset (struct cgraph_node *node, if (self_recursive_pass_through_p (cs, jump_func, i, false)) { gcc_assert (newval); - t = ipa_get_jf_arith_result ( - ipa_get_jf_pass_through_operation (jump_func), - newval, + enum tree_code opcode + = ipa_get_jf_pass_through_operation (jump_func); + tree op_type = (opcode == NOP_EXPR) ? NULL_TREE + : ipa_get_jf_pass_through_op_type (jump_func); + t = ipa_get_jf_arith_result (opcode, newval, ipa_get_jf_pass_through_operand (jump_func), - type); + op_type); + t = ipacp_value_safe_for_type (type, t); } else t = ipa_value_from_jfunc (ipa_node_params_sum->get (cs->caller), @@ -5603,10 +5576,13 @@ push_agg_values_for_index_from_edge (struct cgraph_edge *cs, int index, && self_recursive_agg_pass_through_p (cs, &agg_jf, index, false) && (srcvalue = interim->get_value(index, agg_jf.offset / BITS_PER_UNIT))) - value = ipa_get_jf_arith_result (agg_jf.value.pass_through.operation, - srcvalue, - agg_jf.value.pass_through.operand, - agg_jf.type); + { + value = ipa_get_jf_arith_result (agg_jf.value.pass_through.operation, + srcvalue, + agg_jf.value.pass_through.operand, + agg_jf.value.pass_through.op_type); + value = ipacp_value_safe_for_type (agg_jf.type, value); + } else value = ipa_agg_value_from_jfunc (caller_info, cs->caller, &agg_jf); @@ -5914,6 +5890,7 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset, sreal freq_sum; profile_count count_sum, rec_count_sum; vec<cgraph_edge *> callers; + bool called_without_ipa_profile; if (val->spec_node) { @@ -5929,7 +5906,8 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset, return false; } else if (!get_info_about_necessary_edges (val, node, &freq_sum, &caller_count, - &rec_count_sum, &count_sum)) + &rec_count_sum, &count_sum, + &called_without_ipa_profile)) return false; if (!dbg_cnt (ipa_cp_values)) @@ -5966,9 +5944,11 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset, if (!good_cloning_opportunity_p (node, val->local_time_benefit, freq_sum, count_sum, - val->local_size_cost) + val->local_size_cost, + called_without_ipa_profile) && !good_cloning_opportunity_p (node, val->prop_time_benefit, - freq_sum, count_sum, val->prop_size_cost)) + freq_sum, count_sum, val->prop_size_cost, + called_without_ipa_profile)) return false; if (dump_file) @@ -6426,7 +6406,7 @@ ipcp_store_vr_results (void) fprintf (dump_file, " param %i: value = ", i); ipcp_print_widest_int (dump_file, bits->get_value ()); fprintf (dump_file, ", mask = "); - print_hex (bits->get_mask (), dump_file); + ipcp_print_widest_int (dump_file, bits->get_mask ()); fprintf (dump_file, "\n"); } } @@ -6550,7 +6530,6 @@ make_pass_ipa_cp (gcc::context *ctxt) void ipa_cp_cc_finalize (void) { - base_count = profile_count::uninitialized (); overall_size = 0; orig_overall_size = 0; ipcp_free_transformation_sum (); diff --git a/gcc/ipa-locality-cloning.cc b/gcc/ipa-locality-cloning.cc new file mode 100644 index 0000000..2684046 --- /dev/null +++ b/gcc/ipa-locality-cloning.cc @@ -0,0 +1,1137 @@ +/* Code locality based function cloning. + Copyright The GNU Toolchain Authors + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC 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 +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +/* This file implements cloning required to improve partitioning of the + callgraph for locality considerations. + + Partitioning for improving code locality. + This pass aims to place frequently executed callchains closer together in + memory to improve performance through improved locality. If any frequent + callchains cannot be placed together because they are already placed + elsewhere, local function clones are created and all callers near to the + clones are redirected to use this copy. + + Locality code placement is done in 2 parts. + 1. IPA pass to be executed after ipa-inline and before ipa-pure-const. + Execute stage prepares the plan to place all nodes into partitions. + 2. WPA Partition stage actually implements the plan. + + Brief overview of the IPA pass: + 1. Create and sort callchains. If PGO is available, use real profile + counts. Otherwise, use a set of heuristics to sort the callchains. + 2. Create a partition plan for the callchains, processing them in the sorted + order. + 1. If a function is unpartitioned, place it in the current partition. + 2. If a function is already placed in a partition away from current + partition as part of another callchain: + Create a local clone in current partition, if cloning criteria is + satisfied. + 3. Redirect any new caller to a local clone if one exists. + Partition size is param controlled to fine tune per program behavior. */ + +#include "config.h" +#define INCLUDE_ALGORITHM +#include "system.h" +#include "coretypes.h" +#include "target.h" +#include "function.h" +#include "tree.h" +#include "alloc-pool.h" +#include "tree-pass.h" +#include "cgraph.h" +#include "symbol-summary.h" +#include "tree-vrp.h" +#include "symtab-thunks.h" +#include "sreal.h" +#include "ipa-cp.h" +#include "ipa-prop.h" +#include "ipa-fnsummary.h" +#include "ipa-modref-tree.h" +#include "ipa-modref.h" +#include "symtab-clones.h" +#include "ipa-locality-cloning.h" + +/* Locality partitions, assigns nodes to partitions. These are used later in + WPA partitioning. */ +vec<locality_partition> locality_partitions; + +/* Map from original node to its latest clone. Gets overwritten whenever a new + clone is created from the same node. */ +hash_map<cgraph_node *, cgraph_node *> node_to_clone; +/* Map from clone to its original node. */ +hash_map<cgraph_node *, cgraph_node *> clone_to_node; + +/* Data structure to hold static heuristics and orders for cgraph_nodes. */ +struct locality_order +{ + cgraph_node *node; + sreal order; + locality_order (cgraph_node *node, sreal order) : node (node), order (order) + {} +}; + +/* Return true if NODE is already in some partition. */ +static inline bool +node_partitioned_p (cgraph_node *node) +{ + return node->aux; +} + +/* Add symbol NODE to partition PART. */ +static void +add_node_to_partition (locality_partition part, cgraph_node *node) +{ + struct cgraph_edge *e; + if (node_partitioned_p (node)) + return; + + part->nodes.safe_push (node); + node->aux = (void *) (uintptr_t) (part->part_id); + + if (!node->alias && node->get_partitioning_class () == SYMBOL_PARTITION) + part->insns += ipa_size_summaries->get (node)->size; + + /* Add all inline clones and callees that are duplicated. */ + for (e = node->callees; e; e = e->next_callee) + if (!e->inline_failed) + add_node_to_partition (part, e->callee); + /* omp declare_variant_alt or transparent_alias with definition or linker + discardable (non-local comdat but not forced and not + used by non-LTO). */ + else if (e->callee->get_partitioning_class () == SYMBOL_DUPLICATE) + add_node_to_partition (part, e->callee); + + /* Add all thunks associated with the function. */ + for (e = node->callers; e; e = e->next_caller) + if (e->caller->thunk && !e->caller->inlined_to) + add_node_to_partition (part, e->caller); + + /* Add all aliases associated with the symbol. */ + struct ipa_ref *ref; + FOR_EACH_ALIAS (node, ref) + if (!ref->referring->transparent_alias) + { + cgraph_node *referring = dyn_cast<cgraph_node *> (ref->referring); + /* Only add function aliases. + Varpool refs are added later in LTO partitioning pass. */ + if (referring) + add_node_to_partition (part, referring); + } + else + { + struct ipa_ref *ref2; + /* We do not need to add transparent aliases if they are not used. + However we must add aliases of transparent aliases if they exist. */ + FOR_EACH_ALIAS (ref->referring, ref2) + { + /* Nested transparent aliases are not permitted. */ + gcc_checking_assert (!ref2->referring->transparent_alias); + cgraph_node *referring = dyn_cast<cgraph_node *> (ref2->referring); + if (referring) + add_node_to_partition (part, referring); + } + } +} + +/* Return TRUE if NODE is in PARTITION. */ +static bool +node_in_partition_p (locality_partition partition, cgraph_node *node) +{ + return ((uintptr_t) (partition->part_id) == (uintptr_t) (node->aux)); +} + +/* Helper function for qsort; to break ties. */ +static int +compare_node_uids (cgraph_node *n1, cgraph_node *n2) +{ + int res = n1->get_uid () - n2->get_uid (); + gcc_assert (res != 0); + return res > 0 ? 1 : -1; +} + +/* Helper function for qsort; sort nodes by order. */ +static int +static_profile_cmp (const void *pa, const void *pb) +{ + const locality_order *a = *static_cast<const locality_order *const *> (pa); + const locality_order *b = *static_cast<const locality_order *const *> (pb); + /* Ascending order. */ + if (b->order < a->order) + return 1; + if (b->order > a->order) + return -1; + return compare_node_uids (a->node, b->node); +} + +/* Helper function for qsort; sort nodes by profile count. */ +static int +compare_edge_profile_counts (const void *pa, const void *pb) +{ + const locality_order *a = *static_cast<const locality_order *const *> (pa); + const locality_order *b = *static_cast<const locality_order *const *> (pb); + + profile_count cnt1 = a->node->count.ipa (); + profile_count cnt2 = b->node->count.ipa (); + if (!cnt1.compatible_p (cnt2)) + return static_profile_cmp (pa, pb); + + if (cnt1 < cnt2) + return 1; + if (cnt1 > cnt2) + return -1; + return static_profile_cmp (pa, pb); +} + +/* Create and return a new partition and increment NPARTITIONS. */ + +static locality_partition +create_partition (int &npartitions) +{ + locality_partition part = XCNEW (struct locality_partition_def); + npartitions++; + part->part_id = npartitions; + part->nodes.create (1); + part->insns = 0; + locality_partitions.safe_push (part); + return part; +} + +/* Structure for holding profile count information of callers of a node. */ +struct profile_stats +{ + /* Sum of non-recursive call counts. */ + profile_count nonrec_count; + + /* Sum of recursive call counts. */ + profile_count rec_count; + + /* If non-NULL, this node is the target of alias or thunk and calls from this + should be count in rec_count. */ + cgraph_node *target; +}; + +/* Initialize fields of STATS. */ +static inline void +init_profile_stats (profile_stats *stats, cgraph_node *target = NULL) +{ + stats->nonrec_count = profile_count::zero (); + stats->rec_count = profile_count::zero (); + stats->target = target; +} + +/* Helper function of to accumulate call counts. */ +static bool +accumulate_profile_counts_after_cloning (cgraph_node *node, void *data) +{ + struct profile_stats *stats = (struct profile_stats *) data; + for (cgraph_edge *e = node->callers; e; e = e->next_caller) + { + if (!e->count.initialized_p ()) + continue; + + if (e->caller == stats->target) + stats->rec_count += e->count.ipa (); + else + stats->nonrec_count += e->count.ipa (); + } + return false; +} + +/* NEW_NODE is a previously created clone of ORIG_NODE already present in + current partition. EDGES contains newly redirected edges to NEW_NODE. + Adjust profile information for both nodes and the edge. */ + +static void +adjust_profile_info_for_non_self_rec_edges (auto_vec<cgraph_edge *> &edges, + cgraph_node *new_node, + cgraph_node *orig_node) +{ + profile_count orig_node_count = orig_node->count.ipa (); + profile_count edge_count = profile_count::zero (); + profile_count final_new_count = profile_count::zero (); + profile_count final_orig_count = profile_count::zero (); + + for (unsigned i = 0; i < edges.length (); ++i) + if (edges[i]->count.initialized_p ()) + edge_count += edges[i]->count.ipa (); + + final_orig_count = orig_node_count - edge_count; + + /* NEW_NODE->count was adjusted for other callers when the clone was + first created. Just add the new edge count. */ + final_new_count = new_node->count + edge_count; + + final_new_count = orig_node_count.combine_with_ipa_count (final_new_count); + orig_node->count = final_orig_count; + new_node->count = final_new_count; + + if (dump_file) + { + fprintf (dump_file, "Adjusting profile information for %s\n", + new_node->dump_asm_name ()); + fprintf (dump_file, "\tOriginal node %s\n", orig_node->dump_asm_name ()); + fprintf (dump_file, "\tOriginal count: "); + orig_node_count.dump (dump_file); + fprintf (dump_file, "\n\tAdjusted original count to: "); + final_orig_count.dump (dump_file); + fprintf (dump_file, "\n\tAdjusted clone count to: "); + final_new_count.dump (dump_file); + fprintf (dump_file, "\n"); + } + + /* Scale all callee edges according to adjusted counts. */ + profile_count orig_node_count_copy = orig_node_count; + profile_count::adjust_for_ipa_scaling (&final_new_count, + &orig_node_count_copy); + for (cgraph_edge *cs = new_node->callees; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_new_count, orig_node_count_copy); + for (cgraph_edge *cs = new_node->indirect_calls; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_new_count, orig_node_count_copy); + + profile_count::adjust_for_ipa_scaling (&final_orig_count, &orig_node_count); + for (cgraph_edge *cs = orig_node->callees; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_orig_count, orig_node_count); + for (cgraph_edge *cs = orig_node->indirect_calls; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_orig_count, orig_node_count); +} + +/* Adjust profile counts of NEW_NODE and ORIG_NODE, where NEW_NODE is a clone + of OLD_NODE. + Assumes that all eligible edges from current partition so far are redirected + to NEW_NODE and recursive edges are adjusted. */ + +static void +adjust_profile_info (cgraph_node *new_node, cgraph_node *orig_node) +{ + /* If all calls to NEW_NODE are non-recursive, subtract corresponding count + from ORIG_NODE and assign to NEW_NODE, any unexpected remainder stays with + ORIG_NODE. + Recursive calls if present, likely contribute to majority of count; + scale according to redirected callers' count. */ + + profile_count orig_node_count = orig_node->count.ipa (); + profile_stats new_stats, orig_stats; + + init_profile_stats (&new_stats); + init_profile_stats (&orig_stats); + + new_node->call_for_symbol_thunks_and_aliases + (accumulate_profile_counts_after_cloning, &new_stats, false); + orig_node->call_for_symbol_thunks_and_aliases + (accumulate_profile_counts_after_cloning, &orig_stats, false); + + profile_count orig_nonrec_count = orig_stats.nonrec_count; + profile_count orig_rec_count = orig_stats.rec_count; + profile_count new_nonrec_count = new_stats.nonrec_count; + profile_count new_rec_count = new_stats.rec_count; + + profile_count final_new_count = new_nonrec_count; + profile_count final_orig_count = profile_count::zero (); + + /* All calls to NEW_NODE are non-recursive or recursive calls have + zero count. */ + if (!new_rec_count.nonzero_p ()) + final_orig_count = orig_node_count - new_nonrec_count; + else + { + /* If ORIG_NODE is externally visible, indirect calls or calls from + another part of the code may contribute to the count. + update_profiling_info () from ipa-cp.cc pretends to have an extra + caller to represent the extra counts. */ + if (!orig_node->local) + { + profile_count pretend_count = (orig_node_count - new_nonrec_count - + orig_nonrec_count - orig_rec_count); + orig_nonrec_count += pretend_count; + } + + /* Remaining rec_count is assigned in proportion to clone's non-recursive + count. */ + profile_count rec_count = orig_node_count - new_nonrec_count + - orig_nonrec_count; + profile_count new_rec_scaled + = rec_count.apply_scale (new_nonrec_count, + new_nonrec_count + orig_nonrec_count); + final_new_count += new_rec_scaled; + final_orig_count = orig_node_count - final_new_count; + } + + final_new_count = orig_node_count.combine_with_ipa_count (final_new_count); + new_node->count = final_new_count; + orig_node->count = final_orig_count; + + if (dump_file) + { + fprintf (dump_file, "Adjusting profile information for %s\n", + new_node->dump_asm_name ()); + fprintf (dump_file, "\tOriginal node %s\n", orig_node->dump_asm_name ()); + fprintf (dump_file, "\tOriginal count: "); + orig_node_count.dump (dump_file); + fprintf (dump_file, "\n\tAdjusted original count to: "); + final_orig_count.dump (dump_file); + fprintf (dump_file, "\n\tAdjusted clone count to: "); + final_new_count.dump (dump_file); + fprintf (dump_file, "\n"); + } + + /* Scale all callee edges according to adjusted counts. */ + profile_count orig_node_count_copy = orig_node_count; + profile_count::adjust_for_ipa_scaling (&final_new_count, + &orig_node_count_copy); + for (cgraph_edge *cs = new_node->callees; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_new_count, orig_node_count_copy); + for (cgraph_edge *cs = new_node->indirect_calls; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_new_count, orig_node_count_copy); + + profile_count::adjust_for_ipa_scaling (&final_orig_count, &orig_node_count); + for (cgraph_edge *cs = orig_node->callees; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_orig_count, orig_node_count); + for (cgraph_edge *cs = orig_node->indirect_calls; cs; cs = cs->next_callee) + cs->count = cs->count.apply_scale (final_orig_count, orig_node_count); +} + +/* Return true if EDGE can be safely redirected to another callee. */ +static inline bool +edge_redirectable_p (cgraph_edge *edge, lto_locality_cloning_model cm) +{ + if (cm == LTO_LOCALITY_NON_INTERPOSABLE_CLONING) + { + /* Interposability may change on edge basis. */ + enum availability avail; + avail = edge->callee->get_availability (edge->caller); + if (avail <= AVAIL_INTERPOSABLE) + return false; + } + return true; +} + +/* Create a locality clone of CNODE and redirect all callers present in + PARTITION. + Create a clone dpending on whether CNODE itself is a clone or not. */ + +static cgraph_node * +create_locality_clone (cgraph_node *cnode, + locality_partition partition, int &cl_num, + lto_locality_cloning_model cm) +{ + cgraph_node *cl_node = NULL; + vec<cgraph_edge *> redirect_callers = vNULL; + /* All callers of cnode in current partition are redirected. */ + struct cgraph_edge *edge; + for (edge = cnode->callers; edge; edge = edge->next_caller) + { + struct cgraph_node *caller = edge->caller; + if (node_in_partition_p (partition, caller) && caller->definition + && caller != cnode && edge_redirectable_p (edge, cm)) + redirect_callers.safe_push (edge); + } + + const char *suffix = "locality_clone"; + + tree old_decl = cnode->decl; + tree new_decl = copy_node (old_decl); + + /* Generate a new name for the new version. */ + const char *name = IDENTIFIER_POINTER (DECL_NAME (old_decl)); + DECL_NAME (new_decl) = clone_function_name (name, suffix, cl_num); + SET_DECL_ASSEMBLER_NAME (new_decl, + clone_function_name (old_decl, suffix, cl_num)); + cl_num++; + if (dump_file) + fprintf (dump_file, "\tNew name %s\n", + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (new_decl))); + + cl_node = cnode->create_clone (new_decl, cnode->count /*profile_count*/, + false /*update_original*/, redirect_callers, + false /*call_duplication_hook*/, + NULL /*new_inlined_to*/, + NULL /*param_adjustments*/, suffix); + + set_new_clone_decl_and_node_flags (cl_node); + + if (cnode->ipa_transforms_to_apply.exists ()) + cl_node->ipa_transforms_to_apply + = cnode->ipa_transforms_to_apply.copy (); + + if (dump_file) + { + fprintf (dump_file, "Cloned Node: %s %s\n", cnode->dump_asm_name (), + cl_node->dump_asm_name ()); + + for (edge = cl_node->callers; edge; edge = edge->next_caller) + fprintf (dump_file, "Redirected callers: %s\n", + edge->caller->dump_asm_name ()); + + for (edge = cl_node->callees; edge; edge = edge->next_callee) + fprintf (dump_file, "Callees of clone: %s %d\n", + edge->callee->dump_asm_name (), edge->frequency ()); + } + return cl_node; +} + +/* Redirect recursive edges of CLONE to correctly point to CLONE. As part of + cloning process, all callee edges of a node are just duplicated but not + redirected. Therefore, these edges still call to original of CLONE. + + For non-inlined CLONEs, NEW_CALLEE == CLONE and ORIG_CALLEE is CLONE's + original node. + + For inlined node, self recursion to CLONE's original same as non-inlined, + additionally, calls to CLONE->inlined_to are also recursive: + NEW_CALLEE == CLONE->inlined_into and + ORIG_CALLEE == original node of CLONE->inlined_into. */ + +static void +adjust_recursive_callees (cgraph_node *clone, cgraph_node *new_callee, + cgraph_node *orig_callee) +{ + cgraph_node *alias = NULL; + for (cgraph_edge *e = clone->callees; e; e = e->next_callee) + { + if (!e->inline_failed) + continue; + + /* Only self-cycle or local alias are handled. */ + cgraph_node *callee = e->callee; + if (callee == orig_callee) + { + cgraph_node **cl = node_to_clone.get (orig_callee); + gcc_assert (cl && *cl == new_callee); + e->redirect_callee_duplicating_thunks (new_callee); + if (dump_file) + fprintf (dump_file, "recursive call from %s to %s orig %s\n", + e->caller->dump_asm_name (), e->callee->dump_asm_name (), + callee->dump_asm_name ()); + } + else if (callee->alias + && e->callee->ultimate_alias_target () == orig_callee) + { + if (!alias) + { + alias = dyn_cast<cgraph_node *> ( + new_callee->noninterposable_alias ()); + } + e->redirect_callee_duplicating_thunks (alias); + if (dump_file) + fprintf (dump_file, "recursive call from %s to %s orig %s\n", + e->caller->dump_asm_name (), e->callee->dump_asm_name (), + callee->dump_asm_name ()); + } + } + new_callee->expand_all_artificial_thunks (); + if (alias) + alias->expand_all_artificial_thunks (); +} + +/* Create clones for CALLER's inlined callees, ORIG_INLINED_TO is the original + node from clone_as_needed () such that new_inlined_to is a clone of it. */ + +static void +inline_clones (cgraph_node *caller, cgraph_node *orig_inlined_to) +{ + struct cgraph_edge *edge; + for (edge = caller->callees; edge; edge = edge->next_callee) + { + struct cgraph_node *callee = edge->callee; + if (edge->inline_failed) + continue; + + if (callee->inlined_to != orig_inlined_to) + continue; + + struct cgraph_node *new_inlined_to, *cl; + if (caller->inlined_to) + new_inlined_to = caller->inlined_to; + else + new_inlined_to = caller; + + cl = callee->create_clone (callee->decl, + edge->count /*profile_count*/, + true /*update_original*/, + vNULL /*redirect_callers*/, + false /*call_duplication_hook*/, + new_inlined_to /*new_inlined_to*/, + NULL /*param_adjustments*/, + "locality_clone" /*suffix*/); + edge->redirect_callee (cl); + + node_to_clone.put (callee, cl); + clone_to_node.put (cl, callee); + + if (callee->thunk) + { + thunk_info *info = thunk_info::get (callee); + *thunk_info::get_create (cl) = *info; + } + + adjust_recursive_callees (cl, new_inlined_to, orig_inlined_to); + adjust_recursive_callees (cl, cl, callee); + if (dump_file) + { + fprintf (dump_file, "Inline cloned\n"); + cl->dump (dump_file); + } + + /* Recursively inline till end of this callchain. */ + inline_clones (cl, orig_inlined_to); + } +} + +/* Clone EDGE->CALLEE if it or a clone of it is not already in PARTITION. + Redirect all callers of EDGE->CALLEE that are in PARTITION, not just the + EDGE. If a clone is already present in PARTITION, redirect all edges from + EDGE->CALLER to EDGE->CALLEE. This is because we only visit one edge per + caller to callee and redirect for all others from there. + + If cloning, also recursively clone inlined functions till the end of the + callchain because inlined clones have 1-1 exclusive copy and edge from + caller to inlined node. + + There are 2 flows possible: + 1. Only redirect + 1.1. cnode is already in current partition - cnode mustn't be a + locality_clone -> nothing to do + 1.2. A clone of cnode is in current partition - find out if it's the + correct clone for edge - must be a locality_clone but the exact same + kind as callee i.e. orig or cp/sra clone, if yes, redirect, else go to #2 + 1.3. Cnode/a clone of cnode is in current partition but caller is inlined + 2. Clone and redirect + 2.1. cnode is original node + 2.2. cnode itself is a clone + Clone inlines + Flavors of edges: + 1. Normal -> orig nodes, locality clones or cp/sra clones + 2. Recursive -> direct recursion + 3. Alias -> recursion via aliasing or as a result of IPA code duplication + 4. Inline -> shouldn't be included in callchain. */ + +static cgraph_node * +clone_node_as_needed (cgraph_edge *edge, locality_partition partition, + int &cl_num, lto_locality_cloning_model cm) +{ + /* suitable_for_locality_cloning_p () currently prohibits cloning aliases due + to potential versioning and materialization issues. Could be enabled in + the future. suitable_for_locality_cloning_p () also checks for + interposability for CNODE but not for edge redirection. */ + struct cgraph_node *cnode = edge->callee; + struct cgraph_node *caller = edge->caller; + + /* If clone of cnode is already in the partition + Get latest clone of cnode. If current partition has cloned cnode, that + clone should be returned. Otherwise, clone from previous partition is + returned + Original node and its clone shouldn't co-exist in current partition + + This is required if callee is partitioned via another edge before caller + was, and we are now visiting caller->callee edge + + 1) a -> b ==> a -> bc1; b was cloned say via d -> bc1, a is orig + 2) ac1 -> b ==> ac1 -> bc1; b was cloned and a was just cloned + 3) a -> bc1 and bc2 present, mustn't happen, b was cloned and a was + redirected without being partitioned first. + Why will we do this again - multiple edges and something's wrong in + partition_callchain () + 4) ac1 -> bc1 ==> ac1 -> bc2; a was cloned and we already got (1) in some + other partition + 5) ac1 -> bc1 but no clone present in this PARTITION. Create from b, not + from bc1? + 6) a -> b; a -> bc0; create new clone, no clone present + 7) ac0 -> b; ac0 -> bc0 same as (6) + 8) a -> bc0 and no clone present, mustn't happen, same as (3) + + Redirect when bc1 is present and: + a -> b or ac -> b or ac -> bc0 */ + + cgraph_node *orig_cnode = cnode; + cgraph_node **o_cnode = clone_to_node.get (cnode); + if (o_cnode) + orig_cnode = *o_cnode; + + cgraph_node **cnode_cl = node_to_clone.get (orig_cnode); + + if (cnode_cl && node_in_partition_p (partition, *cnode_cl)) + { + if (node_in_partition_p (partition, caller)) + { + bool clone_p = false; + auto_vec<cgraph_edge *> redirected_edges; + for (cgraph_edge *ec = caller->callees; ec; ec = ec->next_callee) + if (ec->callee == cnode && edge_redirectable_p (ec, cm)) + { + ec->redirect_callee_duplicating_thunks (*cnode_cl); + clone_p = true; + redirected_edges.safe_push (ec); + if (dump_file) + { + fprintf (dump_file, "clone present %s %s redirecting %s\n", + cnode->dump_asm_name (), + (*cnode_cl)->dump_asm_name (), + caller->dump_asm_name ()); + } + } + if (clone_p) + { + (*cnode_cl)->expand_all_artificial_thunks (); + adjust_profile_info_for_non_self_rec_edges (redirected_edges, + *cnode_cl, cnode); + return NULL; + } + } + } + + /* Create a new clone for a -> b, ac -> b. + For ac -> bc, should be done on bc or b? + bc could be from b_cp/b_sra or b. */ + + if (orig_cnode != cnode) + { + if (dump_file) + fprintf (dump_file, "Clone of clone %s %s\n", cnode->dump_asm_name (), + orig_cnode->dump_asm_name ()); + return NULL; + } + + struct cgraph_node *cloned_node + = create_locality_clone (cnode, partition, cl_num, cm); + + gcc_assert (cloned_node); + if (!cloned_node) + return NULL; + + node_to_clone.put (cnode, cloned_node); + clone_to_node.put (cloned_node, cnode); + + adjust_recursive_callees (cloned_node, cloned_node, cnode); + symtab->call_cgraph_duplication_hooks (cnode, cloned_node); + + adjust_profile_info (cloned_node, cnode); + /* Inline clones are created iff their inlined_to == CNODE. */ + inline_clones (cloned_node, cnode); + + return cloned_node; +} + +/* Accumulate frequency of all edges from EDGE->caller to EDGE->callee. */ + +static sreal +accumulate_incoming_edge_frequency (cgraph_edge *edge) +{ + sreal count = 0; + struct cgraph_edge *e; + for (e = edge->callee->callers; e; e = e->next_caller) + { + /* Make a local decision about all edges for EDGE->caller but not the + other nodes already in the partition. Their edges will be visited + later or may have been visited before and not fit the + cut-off criteria. */ + if (e->caller == edge->caller) + count += e->sreal_frequency (); + } + return count; +} + +/* Determine if EDGE->CALLEE is suitable for cloning. It is assummed that the + callee is not an inlined node. */ + +static bool +suitable_for_locality_cloning_p (cgraph_edge *edge, + lto_locality_cloning_model cm) +{ + cgraph_node *node = edge->callee; + if (!node->versionable) + return false; + + /* Out-of-line locality clones of ipcp or sra clones will be created in this + pass after IPA inline is run. A locality clone has the same function + body and the same updated signature as the ipcp/sra clone. + This fails or asserts based on how the clone is created: + 1. If param_adjustments and tree_map are not recorded for locality clone: + clone materialization (tree_function_versioning ()) fails when + updating signature and remapping calls because clone_of (ipcp/sra + clone) and locality clone differ in param information. + 2. If param_adjustments and tree_map are provided: asserts are triggered + in fnsummary duplication because IPA inline resets some summaries. + + One inelegant solution is to provide param_adjustments and tree_map, and + then set clone_of to ipcp/sra clone's clone_of. However, this sometimes + results in segmentation fault when the compiled program is run. + Disabling clone of clones altogether for now with an aim to resolve this + is future. */ + if (node->clone_of) + return false; + + if (node->alias) + return false; + + if (edge->recursive_p ()) + return false; + + if (!node->definition) + return false; + + /* Don't clone NODE if IPA count of NODE or EDGE is zero. */ + if (!node->count.ipa ().nonzero_p () || !edge->count.ipa ().nonzero_p ()) + return false; + + if (cm == LTO_LOCALITY_NON_INTERPOSABLE_CLONING) + { + /* Interposability may change on edge basis. */ + enum availability avail; + edge->callee->ultimate_alias_target (&avail, edge->caller); + if (avail <= AVAIL_INTERPOSABLE) + return false; + } + + return true; +} + +/* Map from caller to all callees already visited for partitioning. */ +hash_map<cgraph_node *, auto_vec<cgraph_node *> > caller_to_callees; + +/* Partition EDGE->CALLEE into PARTITION or clone if already partitioned and + satisfies cloning criteria such as CLONING_MODEL, REAL_FREQ and SIZE + cut-offs and CLONE_FURTHER_P set by previous caller. */ + +/* callgraph can have multiple caller to callee edges for multiple callsites + For the first such edge, we make decisions about cutoffs and cloning because + we redirect ALL callsites to cloned callee, not just one of them. */ + +static void +partition_callchain (cgraph_edge *edge, locality_partition partition, + bool clone_further_p, + lto_locality_cloning_model cloning_model, + double freq_cutoff, int size, int &cl_num) +{ + /* Aliases are added in the same partition as their targets. + Aliases are not cloned and their callees are not processed separately. */ + cgraph_node *node = edge->callee->ultimate_alias_target (); + cgraph_node *caller = edge->caller; + cgraph_node *caller_node = node, *cl_node = NULL; + + /* Already visited the caller to callee edges. */ + auto_vec<cgraph_node *> &callees = caller_to_callees.get_or_insert (caller); + if (std::find (callees.begin (), callees.end (), node) != callees.end ()) + return; + + callees.safe_push (node); + + if (node->get_partitioning_class () == SYMBOL_PARTITION) + { + if (!node_partitioned_p (node)) + { + add_node_to_partition (partition, node); + if (dump_file) + fprintf (dump_file, "Partitioned node: %s\n", + node->dump_asm_name ()); + } + else if (cloning_model >= LTO_LOCALITY_NON_INTERPOSABLE_CLONING + && !node_in_partition_p (partition, node)) + { + /* Non-inlined node, or alias, already partitioned + If cut-off, don't clone callees but partition unpartitioned + callees. + size is node + inlined nodes. */ + if (clone_further_p) + { + if (!node->alias) + if (ipa_size_summaries->get (node)->size >= size) + clone_further_p = false; + + if (freq_cutoff != 0.0) + { + sreal acc_freq = accumulate_incoming_edge_frequency (edge); + if (acc_freq.to_double () < freq_cutoff) + clone_further_p = false; + } + } + + if (!suitable_for_locality_cloning_p (edge, cloning_model)) + clone_further_p = false; + + if (clone_further_p) + { + /* Try to clone NODE and its inline chain. */ + if (dump_file) + fprintf (dump_file, "Cloning node: %s\n", + node->dump_asm_name ()); + cl_node = clone_node_as_needed (edge, partition, cl_num, + cloning_model); + if (cl_node) + { + add_node_to_partition (partition, cl_node); + caller_node = cl_node; + } + else + caller_node = NULL; + } + } + } + else if (!node->inlined_to) + return; + + if (caller_node) + for (cgraph_edge *e = caller_node->callees; e; e = e->next_callee) + partition_callchain (e, partition, clone_further_p, cloning_model, + freq_cutoff, size, cl_num); +} + +/* Determine whether NODE is an entrypoint to a callchain. */ + +static bool +is_entry_node_p (cgraph_node *node) +{ + /* node->inlined_to is returned as SYMBOL_DUPLICATE. */ + if (node->get_partitioning_class () != SYMBOL_PARTITION) + return false; + + if (!node->callers) + return true; + + for (cgraph_edge *e = node->callers; e; e = e->next_caller) + { + if (! e->recursive_p ()) + return false; + } + if (node->alias + && !is_entry_node_p (node->ultimate_alias_target ())) + return false; + return true; +} + +/* Determine order of all external nodes if PGO profile is available. + Store the order in ORDER. */ + +static bool +locality_determine_ipa_order (auto_vec<locality_order *> *order) +{ + struct cgraph_node *node; + auto_vec<locality_order *> non_comparable_nodes; + FOR_EACH_DEFINED_FUNCTION (node) + if (node->get_partitioning_class () == SYMBOL_PARTITION) + { + if (node->no_reorder) + { + if (dump_file) + fprintf (dump_file, "no reorder %s\n", node->dump_asm_name ()); + return false; + } + else if (is_entry_node_p (node)) + { + profile_count pcnt = node->count.ipa (); + if (!pcnt.initialized_p () || !pcnt.ipa_p ()) + { + sreal cnt = 0; + locality_order *lo = new locality_order (node, cnt); + non_comparable_nodes.safe_push (lo); + continue; + } + sreal count = 0; + struct cgraph_edge *edge; + for (edge = node->callees; edge; edge = edge->next_callee) + { + /* For PGO, frequency is not used in + compare_edge_profile_counts (), it's used only as part of + static profile order. */ + sreal freq = edge->sreal_frequency (); + count += freq; + } + locality_order *cl = new locality_order (node, count); + order->safe_push (cl); + } + } + order->qsort (compare_edge_profile_counts); + for (auto el : non_comparable_nodes) + order->safe_push (el); + return true; +} + +/* Determine order of all external nodes if only static profile is available. + Store the order in ORDER. */ + +static bool +locality_determine_static_order (auto_vec<locality_order *> *order) +{ + struct cgraph_node *node; + FOR_EACH_DEFINED_FUNCTION (node) + if (node->get_partitioning_class () == SYMBOL_PARTITION) + { + if (node->no_reorder) + { + if (dump_file) + fprintf (dump_file, "no reorder %s\n", node->dump_asm_name ()); + return false; + } + else if (is_entry_node_p (node)) + { + sreal count = 0; + struct cgraph_edge *edge; + for (edge = node->callees; edge; edge = edge->next_callee) + { + sreal freq = edge->sreal_frequency (); + count += freq; + } + locality_order *cl = new locality_order (node, count); + order->safe_push (cl); + } + } + order->qsort (static_profile_cmp); + return true; +} + +/* Partitioning for code locality. + 1. Create and sort callchains. If PGO is available, use real profile + counts. Otherwise, use a set of heuristics to sort the callchains. + 2. Partition the external nodes and their callchains in the determined order + 2.1. If !partition, partition, else try and clone if it satisfies cloning + criteria. + 3. Partition all other unpartitioned nodes. */ + +static void +locality_partition_and_clone (int max_locality_partition_size, + lto_locality_cloning_model cloning_model, + int freq_denominator, int size) +{ + locality_partition partition; + int npartitions = 0; + + auto_vec<locality_order *> order; + auto_vec<varpool_node *> varpool_order; + struct cgraph_node *node; + bool order_p; + + int cl_num = 0; + + double real_freq = 0.0; + if (freq_denominator > 0) + real_freq = 1.0 / (double) freq_denominator; + + cgraph_node *n = symtab->first_defined_function (); + if (n && n->count.ipa_p ()) + order_p = locality_determine_ipa_order (&order); + else + order_p = locality_determine_static_order (&order); + if (!order_p) + { + if (dump_file) + { + fprintf (dump_file, "Locality partition: falling back to balanced" + "model\n"); + } + + return; + } + + int64_t partition_size + = max_locality_partition_size + ? max_locality_partition_size : param_max_partition_size; + partition = create_partition (npartitions); + + for (unsigned i = 0; i < order.length (); i++) + { + node = order[i]->node; + if (node_partitioned_p (node)) + continue; + + if (partition->insns > partition_size) + partition = create_partition (npartitions); + if (dump_file) + fprintf (dump_file, "Partition id: %d\n", partition->part_id); + + add_node_to_partition (partition, node); + if (dump_file) + fprintf (dump_file, "Ordered Node: %s\n", node->dump_asm_name ()); + + for (cgraph_edge *edge = node->callees; edge; edge = edge->next_callee) + { + /* Recursively partition the callchain of edge->callee. */ + partition_callchain (edge, partition, true, cloning_model, real_freq, + size, cl_num); + } + } + + for (unsigned i = 0; i < order.length (); i++) + delete order[i]; + order = vNULL; +} + +/* Entry point to locality-clone pass. */ +static int +lc_execute (void) +{ + symtab_node *node; + FOR_EACH_SYMBOL (node) + node->aux = NULL; + + locality_partition_and_clone (param_max_locality_partition_size, + flag_lto_locality_cloning, + param_lto_locality_frequency, + param_lto_locality_size); + + FOR_EACH_SYMBOL (node) + node->aux = NULL; + return 0; +} + +namespace { + +const pass_data pass_data_ipa_locality_clone = { + IPA_PASS, /* type */ + "locality-clone", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_IPA_LC, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + (TODO_dump_symtab | TODO_remove_functions), /* todo_flags_finish */ +}; + +class pass_ipa_locality_cloning : public ipa_opt_pass_d +{ +public: + pass_ipa_locality_cloning (gcc::context *ctxt) + : ipa_opt_pass_d (pass_data_ipa_locality_clone, ctxt, + NULL, /* generate_summary */ + NULL, /* write_summary */ + NULL, /* read_summary */ + NULL, /* write_optimization_summary */ + NULL, /* read_optimization_summary */ + NULL, /* stmt_fixup */ + 0, /* function_transform_todo_flags_start */ + NULL, /* function_transform */ + NULL) /* variable_transform */ + {} + + /* opt_pass methods: */ + virtual bool gate (function *) + { + return (flag_wpa && flag_ipa_reorder_for_locality); + } + + virtual unsigned int execute (function *) { return lc_execute (); } + +}; // class pass_ipa_locality_cloning + +} // namespace + +ipa_opt_pass_d * +make_pass_ipa_locality_cloning (gcc::context *ctxt) +{ + return new pass_ipa_locality_cloning (ctxt); +} diff --git a/gcc/ipa-locality-cloning.h b/gcc/ipa-locality-cloning.h new file mode 100644 index 0000000..591ce57 --- /dev/null +++ b/gcc/ipa-locality-cloning.h @@ -0,0 +1,35 @@ +/* LTO partitioning logic routines. + Copyright The GNU Toolchain Authors + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC 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 +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef IPA_LOCALITY_CLONING_H +#define IPA_LOCALITY_CLONING_H + +/* Structure describing locality partitions. */ +struct locality_partition_def +{ + int part_id; + vec<cgraph_node *> nodes; + int insns; +}; + +typedef struct locality_partition_def *locality_partition; + +extern vec<locality_partition> locality_partitions; + +#endif /* IPA_LOCALITY_CLONING_H */ diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc index a120f94..0398d69 100644 --- a/gcc/ipa-prop.cc +++ b/gcc/ipa-prop.cc @@ -60,6 +60,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-range.h" #include "value-range-storage.h" #include "vr-values.h" +#include "lto-streamer.h" /* Function summary where the parameter infos are actually stored. */ ipa_node_params_t *ipa_node_params_sum = NULL; @@ -454,7 +455,11 @@ ipa_dump_jump_function (FILE *f, ipa_jump_func *jump_func, if (jump_func->value.pass_through.operation != NOP_EXPR) { fprintf (f, " "); - print_generic_expr (f, jump_func->value.pass_through.operand); + if (jump_func->value.pass_through.operand) + print_generic_expr (f, jump_func->value.pass_through.operand); + fprintf (f, " (in type "); + print_generic_expr (f, jump_func->value.pass_through.op_type); + fprintf (f, ")"); } if (jump_func->value.pass_through.agg_preserved) fprintf (f, ", agg_preserved"); @@ -510,7 +515,11 @@ ipa_dump_jump_function (FILE *f, ipa_jump_func *jump_func, if (item->value.pass_through.operation != NOP_EXPR) { fprintf (f, " "); - print_generic_expr (f, item->value.pass_through.operand); + if (item->value.pass_through.operand) + print_generic_expr (f, item->value.pass_through.operand); + fprintf (f, " (in type "); + print_generic_expr (f, jump_func->value.pass_through.op_type); + fprintf (f, ")"); } } else if (item->jftype == IPA_JF_CONST) @@ -682,6 +691,7 @@ ipa_set_jf_simple_pass_through (struct ipa_jump_func *jfunc, int formal_id, { jfunc->type = IPA_JF_PASS_THROUGH; jfunc->value.pass_through.operand = NULL_TREE; + jfunc->value.pass_through.op_type = NULL_TREE; jfunc->value.pass_through.formal_id = formal_id; jfunc->value.pass_through.operation = NOP_EXPR; jfunc->value.pass_through.agg_preserved = agg_preserved; @@ -692,10 +702,11 @@ ipa_set_jf_simple_pass_through (struct ipa_jump_func *jfunc, int formal_id, static void ipa_set_jf_unary_pass_through (struct ipa_jump_func *jfunc, int formal_id, - enum tree_code operation) + enum tree_code operation, tree op_type) { jfunc->type = IPA_JF_PASS_THROUGH; jfunc->value.pass_through.operand = NULL_TREE; + jfunc->value.pass_through.op_type = op_type; jfunc->value.pass_through.formal_id = formal_id; jfunc->value.pass_through.operation = operation; jfunc->value.pass_through.agg_preserved = false; @@ -705,10 +716,12 @@ ipa_set_jf_unary_pass_through (struct ipa_jump_func *jfunc, int formal_id, static void ipa_set_jf_arith_pass_through (struct ipa_jump_func *jfunc, int formal_id, - tree operand, enum tree_code operation) + tree operand, enum tree_code operation, + tree op_type) { jfunc->type = IPA_JF_PASS_THROUGH; jfunc->value.pass_through.operand = unshare_expr_without_location (operand); + jfunc->value.pass_through.op_type = op_type; jfunc->value.pass_through.formal_id = formal_id; jfunc->value.pass_through.operation = operation; jfunc->value.pass_through.agg_preserved = false; @@ -1513,6 +1526,9 @@ compute_complex_assign_jump_func (struct ipa_func_body_info *fbi, if (index >= 0) { + if (lto_variably_modified_type_p (TREE_TYPE (name))) + return; + switch (gimple_assign_rhs_class (stmt)) { case GIMPLE_BINARY_RHS: @@ -1526,7 +1542,8 @@ compute_complex_assign_jump_func (struct ipa_func_body_info *fbi, return; ipa_set_jf_arith_pass_through (jfunc, index, op2, - gimple_assign_rhs_code (stmt)); + gimple_assign_rhs_code (stmt), + TREE_TYPE (name)); break; } case GIMPLE_SINGLE_RHS: @@ -1539,7 +1556,8 @@ compute_complex_assign_jump_func (struct ipa_func_body_info *fbi, case GIMPLE_UNARY_RHS: if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))) ipa_set_jf_unary_pass_through (jfunc, index, - gimple_assign_rhs_code (stmt)); + gimple_assign_rhs_code (stmt), + TREE_TYPE (name)); default:; } return; @@ -1912,6 +1930,7 @@ analyze_agg_content_value (struct ipa_func_body_info *fbi, if (!is_gimple_assign (stmt)) break; + lhs = gimple_assign_lhs (stmt); rhs1 = gimple_assign_rhs1 (stmt); } @@ -1931,7 +1950,8 @@ analyze_agg_content_value (struct ipa_func_body_info *fbi, PASS-THROUGH jump function with ASSERT_EXPR operation whith operand 1 (the constant from the PHI node). */ - if (gimple_phi_num_args (phi) != 2) + if (gimple_phi_num_args (phi) != 2 + || lto_variably_modified_type_p (TREE_TYPE (lhs))) return; tree arg0 = gimple_phi_arg_def (phi, 0); tree arg1 = gimple_phi_arg_def (phi, 1); @@ -1956,6 +1976,7 @@ analyze_agg_content_value (struct ipa_func_body_info *fbi, code = ASSERT_EXPR; agg_value->pass_through.operand = operand; + agg_value->pass_through.op_type = TREE_TYPE (lhs); } else if (is_gimple_assign (stmt)) { @@ -1980,10 +2001,12 @@ analyze_agg_content_value (struct ipa_func_body_info *fbi, with one operand, here we only allow tc_unary operation to avoid possible problem. Then we can use (opclass == tc_unary) or not to distinguish unary and binary. */ - if (TREE_CODE_CLASS (code) != tcc_unary || CONVERT_EXPR_CODE_P (code)) + if (TREE_CODE_CLASS (code) != tcc_unary || CONVERT_EXPR_CODE_P (code) + || lto_variably_modified_type_p (TREE_TYPE (lhs))) return; rhs1 = get_ssa_def_if_simple_copy (rhs1, &stmt); + agg_value->pass_through.op_type = TREE_TYPE (lhs); break; case GIMPLE_BINARY_RHS: @@ -1992,12 +2015,16 @@ analyze_agg_content_value (struct ipa_func_body_info *fbi, gimple *rhs2_stmt = stmt; tree rhs2 = gimple_assign_rhs2 (stmt); + if (lto_variably_modified_type_p (TREE_TYPE (lhs))) + return; + rhs1 = get_ssa_def_if_simple_copy (rhs1, &rhs1_stmt); rhs2 = get_ssa_def_if_simple_copy (rhs2, &rhs2_stmt); if (is_gimple_ip_invariant (rhs2)) { agg_value->pass_through.operand = rhs2; + agg_value->pass_through.op_type = TREE_TYPE (lhs); stmt = rhs1_stmt; } else if (is_gimple_ip_invariant (rhs1)) @@ -2008,6 +2035,7 @@ analyze_agg_content_value (struct ipa_func_body_info *fbi, return; agg_value->pass_through.operand = rhs1; + agg_value->pass_through.op_type = TREE_TYPE (lhs); stmt = rhs2_stmt; rhs1 = rhs2; } @@ -3520,12 +3548,17 @@ update_jump_functions_after_inlining (struct cgraph_edge *cs, ipa_set_jf_simple_pass_through (dst, formal_id, agg_p); } else if (TREE_CODE_CLASS (operation) == tcc_unary) - ipa_set_jf_unary_pass_through (dst, formal_id, operation); + { + tree op_t = ipa_get_jf_pass_through_op_type (src); + ipa_set_jf_unary_pass_through (dst, formal_id, operation, + op_t); + } else { tree operand = ipa_get_jf_pass_through_operand (src); + tree op_t = ipa_get_jf_pass_through_op_type (src); ipa_set_jf_arith_pass_through (dst, formal_id, operand, - operation); + operation, op_t); } break; } @@ -4935,9 +4968,13 @@ ipa_write_jump_function (struct output_block *ob, } else if (TREE_CODE_CLASS (jump_func->value.pass_through.operation) == tcc_unary) - streamer_write_uhwi (ob, jump_func->value.pass_through.formal_id); + { + stream_write_tree (ob, jump_func->value.pass_through.op_type, true); + streamer_write_uhwi (ob, jump_func->value.pass_through.formal_id); + } else { + stream_write_tree (ob, jump_func->value.pass_through.op_type, true); stream_write_tree (ob, jump_func->value.pass_through.operand, true); streamer_write_uhwi (ob, jump_func->value.pass_through.formal_id); } @@ -4979,6 +5016,8 @@ ipa_write_jump_function (struct output_block *ob, case IPA_JF_LOAD_AGG: streamer_write_uhwi (ob, item->value.pass_through.operation); streamer_write_uhwi (ob, item->value.pass_through.formal_id); + if (item->value.pass_through.operation != NOP_EXPR) + stream_write_tree (ob, item->value.pass_through.op_type, true); if (TREE_CODE_CLASS (item->value.pass_through.operation) != tcc_unary) stream_write_tree (ob, item->value.pass_through.operand, true); @@ -5047,15 +5086,18 @@ ipa_read_jump_function (class lto_input_block *ib, } else if (TREE_CODE_CLASS (operation) == tcc_unary) { + tree op_type = stream_read_tree (ib, data_in); int formal_id = streamer_read_uhwi (ib); - ipa_set_jf_unary_pass_through (jump_func, formal_id, operation); + ipa_set_jf_unary_pass_through (jump_func, formal_id, operation, + op_type); } else { + tree op_type = stream_read_tree (ib, data_in); tree operand = stream_read_tree (ib, data_in); int formal_id = streamer_read_uhwi (ib); ipa_set_jf_arith_pass_through (jump_func, formal_id, operand, - operation); + operation, op_type); } break; case IPA_JF_ANCESTOR: @@ -5103,6 +5145,10 @@ ipa_read_jump_function (class lto_input_block *ib, operation = (enum tree_code) streamer_read_uhwi (ib); item.value.pass_through.operation = operation; item.value.pass_through.formal_id = streamer_read_uhwi (ib); + if (operation != NOP_EXPR) + item.value.pass_through.op_type = stream_read_tree (ib, data_in); + else + item.value.pass_through.op_type = NULL_TREE; if (TREE_CODE_CLASS (operation) == tcc_unary) item.value.pass_through.operand = NULL_TREE; else @@ -5393,6 +5439,49 @@ ipa_read_node_info (class lto_input_block *ib, struct cgraph_node *node, } } +/* Stream out ipa_return_summary. */ +static void +ipa_write_return_summaries (output_block *ob) +{ + if (!ipa_return_value_sum) + { + streamer_write_uhwi (ob, 0); + return; + } + + lto_symtab_encoder_t encoder = ob->decl_state->symtab_node_encoder; + unsigned int count = 0; + for (int i = 0; i < lto_symtab_encoder_size (encoder); i++) + { + symtab_node *snode = lto_symtab_encoder_deref (encoder, i); + cgraph_node *cnode = dyn_cast <cgraph_node *> (snode); + ipa_return_value_summary *v; + + if (cnode && cnode->definition && !cnode->alias + && (v = ipa_return_value_sum->get (cnode)) + && v->vr) + count++; + } + streamer_write_uhwi (ob, count); + + for (int i = 0; i < lto_symtab_encoder_size (encoder); i++) + { + symtab_node *snode = lto_symtab_encoder_deref (encoder, i); + cgraph_node *cnode = dyn_cast <cgraph_node *> (snode); + ipa_return_value_summary *v; + + if (cnode && cnode->definition && !cnode->alias + && (v = ipa_return_value_sum->get (cnode)) + && v->vr) + { + streamer_write_uhwi + (ob, + lto_symtab_encoder_encode (encoder, cnode)); + v->vr->streamer_write (ob); + } + } +} + /* Write jump functions for nodes in SET. */ void @@ -5429,11 +5518,58 @@ ipa_prop_write_jump_functions (void) && ipa_node_params_sum->get (node) != NULL) ipa_write_node_info (ob, node); } - streamer_write_char_stream (ob->main_stream, 0); + ipa_write_return_summaries (ob); produce_asm (ob); destroy_output_block (ob); } +/* Record that return value range of N is VAL. */ + +static void +ipa_record_return_value_range_1 (cgraph_node *n, value_range val) +{ + if (!ipa_return_value_sum) + { + if (!ipa_vr_hash_table) + ipa_vr_hash_table = hash_table<ipa_vr_ggc_hash_traits>::create_ggc (37); + ipa_return_value_sum = new (ggc_alloc_no_dtor <ipa_return_value_sum_t> ()) + ipa_return_value_sum_t (symtab, true); + ipa_return_value_sum->disable_insertion_hook (); + } + ipa_return_value_sum->get_create (n)->vr = ipa_get_value_range (val); + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Recording return range of %s:", n->dump_name ()); + val.dump (dump_file); + fprintf (dump_file, "\n"); + } +} + +/* Stream out ipa_return_summary. */ +static void +ipa_read_return_summaries (lto_input_block *ib, + struct lto_file_decl_data *file_data, + class data_in *data_in) +{ + unsigned int f_count = streamer_read_uhwi (ib); + for (unsigned int i = 0; i < f_count; i++) + { + unsigned int index = streamer_read_uhwi (ib); + lto_symtab_encoder_t encoder = file_data->symtab_node_encoder; + struct cgraph_node *node + = dyn_cast <cgraph_node *> + (lto_symtab_encoder_deref (encoder, index)); + ipa_vr rvr; + rvr.streamer_read (ib, data_in); + if (node->prevailing_p ()) + { + value_range tmp; + rvr.get_vrange (tmp); + ipa_record_return_value_range_1 (node, tmp); + } + } +} + /* Read section in file FILE_DATA of length LEN with data DATA. */ static void @@ -5470,6 +5606,7 @@ ipa_prop_read_section (struct lto_file_decl_data *file_data, const char *data, gcc_assert (node->definition); ipa_read_node_info (&ib_main, node, data_in); } + ipa_read_return_summaries (&ib_main, file_data, data_in); lto_free_section_data (file_data, LTO_section_jump_functions, NULL, data, len); lto_data_in_delete (data_in); @@ -5589,6 +5726,7 @@ read_ipcp_transformation_info (lto_input_block *ib, cgraph_node *node, } } + /* Write all aggregate replacement for nodes in set. */ void @@ -5627,7 +5765,7 @@ ipcp_write_transformation_summaries (void) && lto_symtab_encoder_encode_body_p (encoder, cnode)) write_ipcp_transformation_info (ob, cnode, ts); } - streamer_write_char_stream (ob->main_stream, 0); + ipa_write_return_summaries (ob); produce_asm (ob); destroy_output_block (ob); } @@ -5668,6 +5806,7 @@ read_replacements_section (struct lto_file_decl_data *file_data, index)); read_ipcp_transformation_info (&ib_main, node, data_in); } + ipa_read_return_summaries (&ib_main, file_data, data_in); lto_free_section_data (file_data, LTO_section_jump_functions, NULL, data, len); lto_data_in_delete (data_in); @@ -6148,22 +6287,8 @@ ipcp_transform_function (struct cgraph_node *node) void ipa_record_return_value_range (value_range val) { - cgraph_node *n = cgraph_node::get (current_function_decl); - if (!ipa_return_value_sum) - { - if (!ipa_vr_hash_table) - ipa_vr_hash_table = hash_table<ipa_vr_ggc_hash_traits>::create_ggc (37); - ipa_return_value_sum = new (ggc_alloc_no_dtor <ipa_return_value_sum_t> ()) - ipa_return_value_sum_t (symtab, true); - ipa_return_value_sum->disable_insertion_hook (); - } - ipa_return_value_sum->get_create (n)->vr = ipa_get_value_range (val); - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Recording return range "); - val.dump (dump_file); - fprintf (dump_file, "\n"); - } + ipa_record_return_value_range_1 + (cgraph_node::get (current_function_decl), val); } /* Return true if value range of DECL is known and if so initialize RANGE. */ @@ -6224,6 +6349,10 @@ ipa_agg_pass_through_jf_equivalent_p (ipa_pass_through_data *ipt1, || ipt1->formal_id != ipt2->formal_id || (!agg_jf && (ipt1->agg_preserved != ipt2->agg_preserved))) return false; + if (ipt1->operation != NOP_EXPR + && (TYPE_MAIN_VARIANT (ipt1->op_type) + != TYPE_MAIN_VARIANT (ipt2->op_type))) + return false; if (((ipt1->operand != NULL_TREE) != (ipt2->operand != NULL_TREE)) || (ipt1->operand && !values_equal_for_ipcp_p (ipt1->operand, ipt2->operand))) diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 7735b57..3bd442f 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -96,6 +96,9 @@ struct GTY(()) ipa_pass_through_data /* If an operation is to be performed on the original parameter, this is the second (constant) operand. */ tree operand; + /* The result type of the operation. In case of no operation (represented by + NOP_EXPR) it should be NULL_TREE. */ + tree op_type; /* Number of the caller's formal parameter being passed. */ int formal_id; /* Operation that is performed on the argument before it is passed on. @@ -387,6 +390,18 @@ ipa_get_jf_pass_through_operand (struct ipa_jump_func *jfunc) return jfunc->value.pass_through.operand; } +/* Return the type of the operation in a non-NOP pass through jmp function + JFUNC. */ + +inline tree +ipa_get_jf_pass_through_op_type (struct ipa_jump_func *jfunc) +{ + gcc_checking_assert (jfunc->type == IPA_JF_PASS_THROUGH + && jfunc->value.pass_through.operation != NOP_EXPR); + + return jfunc->value.pass_through.op_type; +} + /* Return the number of the caller's formal parameter that a pass through jump function JFUNC refers to. */ diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc index ac835a4..8439c51 100644 --- a/gcc/lto-cgraph.cc +++ b/gcc/lto-cgraph.cc @@ -229,6 +229,8 @@ lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t encoder, symtab_node *node) { int index = lto_symtab_encoder_encode (encoder, node); + if (dump_file) + fprintf(dump_file, "Node %s, index %d\n", node->asm_name(), index); encoder->nodes[index].in_partition = true; } diff --git a/gcc/lto-streamer-out.cc b/gcc/lto-streamer-out.cc index d5b6ee7..a055d12d 100644 --- a/gcc/lto-streamer-out.cc +++ b/gcc/lto-streamer-out.cc @@ -130,7 +130,7 @@ destroy_output_block (struct output_block *ob) /* Wrapper around variably_modified_type_p avoiding type modification during WPA streaming. */ -static bool +bool lto_variably_modified_type_p (tree type) { return (in_lto_p diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index ff33bf0..4b7209e3 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -906,6 +906,7 @@ void lto_output_decl_state_streams (struct output_block *, void lto_output_decl_state_refs (struct output_block *, struct lto_output_stream *, struct lto_out_decl_state *); +bool lto_variably_modified_type_p (tree); void lto_output_location (struct output_block *, struct bitpack_d *, location_t); void lto_output_location_and_block (struct output_block *, struct bitpack_d *, diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index ee53915..4da9ca3 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,13 @@ +2025-04-15 Kyrylo Tkachov <ktkachov@nvidia.com> + + * lto-partition.cc (add_node_references_to_partition): Define. + (create_partition): Likewise. + (lto_locality_map): Likewise. + (lto_promote_cross_file_statics): Add extra dumping. + * lto-partition.h (lto_locality_map): Declare prototype. + * lto.cc (do_whole_program_analysis): Handle + flag_ipa_reorder_for_locality. + 2025-02-28 Richard Biener <rguenther@suse.de> PR lto/91299 diff --git a/gcc/lto/lto-partition.cc b/gcc/lto/lto-partition.cc index 3046951..c7e69ee 100644 --- a/gcc/lto/lto-partition.cc +++ b/gcc/lto/lto-partition.cc @@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-prop.h" #include "ipa-fnsummary.h" #include "lto-partition.h" +#include "ipa-locality-cloning.h" #include <limits> @@ -1418,6 +1419,126 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size) } } +/* Add all references of NODE into PARTITION. */ + +static void +add_node_references_to_partition (ltrans_partition partition, symtab_node *node) +{ + struct ipa_ref *ref = NULL; + varpool_node *vnode; + for (int j = 0; node->iterate_reference (j, ref); j++) + if (is_a <varpool_node *> (ref->referred)) + { + vnode = dyn_cast <varpool_node *> (ref->referred); + if (!symbol_partitioned_p (vnode) + && !vnode->no_reorder + && vnode->get_partitioning_class () == SYMBOL_PARTITION) + { + add_symbol_to_partition (partition, vnode); + if (dump_file) + fprintf (dump_file, "Varpool Node: %s\n", vnode->dump_asm_name ()); + add_node_references_to_partition (partition, vnode); + } + } + + for (int j = 0; node->iterate_referring (j, ref); j++) + if (is_a <varpool_node *> (ref->referring)) + { + vnode = dyn_cast <varpool_node *> (ref->referring); + gcc_assert (vnode->definition); + if (!symbol_partitioned_p (vnode) + && !vnode->no_reorder + && !vnode->can_remove_if_no_refs_p () + && vnode->get_partitioning_class () == SYMBOL_PARTITION) + { + add_symbol_to_partition (partition, vnode); + if (dump_file) + fprintf (dump_file, "Varpool Node: %s\n", vnode->dump_asm_name ()); + add_node_references_to_partition (partition, vnode); + } + } + if (cgraph_node *cnode = dyn_cast <cgraph_node *> (node)) + { + struct cgraph_edge *e; + + /* Add all inline clones and callees that are duplicated. */ + for (e = cnode->callees; e; e = e->next_callee) + if (e->callee->get_partitioning_class () == SYMBOL_DUPLICATE) + add_node_references_to_partition (partition, e->callee); + + /* Add all thunks associated with the function. */ + for (e = cnode->callers; e; e = e->next_caller) + if (e->caller->thunk && !e->caller->inlined_to) + add_node_references_to_partition (partition, e->caller); + } + +} + +/* Create and return the created partition of name NAME. */ + +static ltrans_partition +create_partition (int &npartitions, const char *name) +{ + npartitions++; + return new_partition (name); +} + +/* Partitioning for code locality. + The partitioning plan (and prerequisite cloning) will have been done by the + IPA locality cloning pass. This function just implements that plan by + assigning those partitions to ltrans_parititions. */ + +void +lto_locality_map (int max_partition_size) +{ + symtab_node *snode; + int npartitions = 0; + + auto_vec<varpool_node *> varpool_order; + struct cgraph_node *node; + + if (locality_partitions.length () == 0) + { + if (dump_file) + { + fprintf (dump_file, "Locality partition: falling back to balanced " + "model\n"); + } + lto_balanced_map (param_lto_partitions, param_max_partition_size); + return; + } + ltrans_partition partition = nullptr; + for (auto part : locality_partitions) + { + partition = create_partition (npartitions, ""); + for (unsigned j = 0; j < part->nodes.length (); j++) + { + node = part->nodes[j]; + if (symbol_partitioned_p (node)) + continue; + + add_symbol_to_partition (partition, node); + add_node_references_to_partition (partition, node); + } + } + + int64_t partition_size = max_partition_size; + /* All other unpartitioned symbols. */ + FOR_EACH_SYMBOL (snode) + { + if (snode->get_partitioning_class () == SYMBOL_PARTITION + && !symbol_partitioned_p (snode)) + { + if (partition->insns > partition_size) + partition = create_partition (npartitions, ""); + + add_symbol_to_partition (partition, snode); + if (dump_file) + fprintf (dump_file, "Un-ordered Node: %s\n", snode->dump_asm_name ()); + } + } +} + /* Return true if we must not change the name of the NODE. The name as extracted from the corresponding decl should be passed in NAME. */ @@ -1732,7 +1853,12 @@ lto_promote_cross_file_statics (void) { ltrans_partition part = ltrans_partitions[i]; + if (dump_file) + fprintf (dump_file, "lto_promote_cross_file_statics for part %s %p\n", + part->name, (void *)part->encoder); part->encoder = compute_ltrans_boundary (part->encoder); + if (dump_file) + fprintf (dump_file, "new encoder %p\n", (void *)part->encoder); } lto_clone_numbers = new hash_map<const char *, unsigned>; diff --git a/gcc/lto/lto-partition.h b/gcc/lto/lto-partition.h index 38b3f1e..a6a4195 100644 --- a/gcc/lto/lto-partition.h +++ b/gcc/lto/lto-partition.h @@ -37,6 +37,7 @@ void lto_1_to_1_map (void); void lto_max_map (void); void lto_cache_map (int, int); void lto_balanced_map (int, int); +void lto_locality_map (int); void lto_promote_cross_file_statics (void); void free_ltrans_partitions (void); void lto_promote_statics_nonwpa (void); diff --git a/gcc/lto/lto.cc b/gcc/lto/lto.cc index 18ca475..183634f 100644 --- a/gcc/lto/lto.cc +++ b/gcc/lto/lto.cc @@ -547,7 +547,9 @@ do_whole_program_analysis (void) symtab_node::checking_verify_symtab_nodes (); bitmap_obstack_release (NULL); - if (flag_lto_partition == LTO_PARTITION_1TO1) + if (flag_ipa_reorder_for_locality) + lto_locality_map (param_max_locality_partition_size); + else if (flag_lto_partition == LTO_PARTITION_1TO1) lto_1_to_1_map (); else if (flag_lto_partition == LTO_PARTITION_MAX) lto_max_map (); diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index da112bb..eeb5f66 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,18 @@ +2025-04-11 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/119735 + * gm2-compiler/M2MetaError.def: Hide %n from comment. + * gm2-compiler/SymbolTable.def (PutIncludedByDefinition): Remove ' + from comment. + * gm2-gcc/m2expr.def (init): Ditto. + * gm2-libiberty/pexecute.def: Ditto. + * gm2-libs-coroutines/Executive.def (InitSemaphore): Ditto. + (Wait): Ditto. + * gm2-libs-iso/ClientSocket.def: Ditto. + * gm2-libs-log/BlockOps.def (BlockMoveBackward): Ditto. + * gm2-libs-log/InOut.def: Ditto. + * mc/mcFileName.def: Ditto. + 2025-04-09 Jakub Jelinek <jakub@redhat.com> * gm2-compiler/M2MetaError.def: Fix comment typo, range" -> "range2". diff --git a/gcc/m2/gm2-compiler/M2Check.mod b/gcc/m2/gm2-compiler/M2Check.mod index 528c51d..d86ef8e 100644 --- a/gcc/m2/gm2-compiler/M2Check.mod +++ b/gcc/m2/gm2-compiler/M2Check.mod @@ -803,7 +803,12 @@ BEGIN THEN typeRight := GetDType (right) ; typeLeft := GetDType (left) ; - RETURN doCheckPair (result, tinfo, typeLeft, typeRight) + IF IsZRCType (typeLeft) AND IsUnbounded (typeRight) + THEN + RETURN false + ELSE + RETURN doCheckPair (result, tinfo, typeLeft, typeRight) + END END ; RETURN result END checkConstMeta ; @@ -868,7 +873,19 @@ END checkSubrangeTypeEquivalence ; (* - isZRC - + IsZRCType - return TRUE if type is a ZType, RType or a CType. +*) + +PROCEDURE IsZRCType (type: CARDINAL) : BOOLEAN ; +BEGIN + RETURN (type = CType) OR (type = ZType) OR (type = RType) +END IsZRCType ; + + +(* + isZRC - return TRUE if zrc is a ZType, RType or a CType + and sym is either a complex type when zrc = CType + or is not a composite type when zrc is a RType or ZType. *) PROCEDURE isZRC (zrc, sym: CARDINAL) : BOOLEAN ; diff --git a/gcc/m2/gm2-compiler/M2MetaError.def b/gcc/m2/gm2-compiler/M2MetaError.def index 92c4ad2..cfe9195 100644 --- a/gcc/m2/gm2-compiler/M2MetaError.def +++ b/gcc/m2/gm2-compiler/M2MetaError.def @@ -73,7 +73,8 @@ FROM NameKey IMPORT Name ; {%kword} the string word is unquoted and rendered as a keyword. {%C} chain this error on the previous rooted error. {%R} this error will be the root of the future chained errors. - {%n} decimal number. Not quoted. + {% n} decimal number. Not quoted. There is no space between the + % and n (this has been added to hide this comment from gettext). {%N} count (number), for example, 1st, 2nd, 3rd, 4th. Not quoted. {%X} push contents of the output string onto the string stack. {%Yname} place contents of dictionary entry name onto the output string. diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 9bb8c4d..4022657 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -69,6 +69,7 @@ FROM SymbolTable IMPORT ModeOfAddr, GetMode, PutMode, GetSymName, IsUnknown, GetArraySubscript, GetDimension, GetParam, GetNth, GetNthParamAny, + GetNthParamAnyClosest, GetFirstUsed, GetDeclaredMod, GetQuads, GetReadQuads, GetWriteQuads, GetWriteLimitQuads, GetReadLimitQuads, @@ -5676,7 +5677,8 @@ BEGIN WHILE i<=ParamTotal DO IF i <= NoOfParamAny (Proc) THEN - FormalI := GetParam(Proc, i) ; + (* FormalI := GetParam(Proc, i) ; *) + FormalI := GetNthParamAnyClosest (Proc, i, GetCurrentModule ()) ; IF CompilerDebugging THEN n1 := GetSymName(FormalI) ; @@ -5801,7 +5803,7 @@ BEGIN MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', call, GetNth (call, i), i) END ; BuildRange (InitTypesParameterCheck (tokno, CheckedProcedure, i, - GetParam (CheckedProcedure, i), + GetNthParamAnyClosest (CheckedProcedure, i, GetCurrentModule ()), GetParam (ProcType, i), ParamCheckId)) ; INC(i) END @@ -6150,7 +6152,7 @@ BEGIN MetaErrorStringT2 (tokpos, Msg, ProcedureSym, ParameterNo) ; IF NoOfParamAny (ProcedureSym) >= ParameterNo THEN - FormalParam := GetNthParamAny (ProcedureSym, ParameterNo) ; + FormalParam := GetNthParamAnyClosest (ProcedureSym, ParameterNo, GetCurrentModule ()) ; IF IsUnboundedParamAny (ProcedureSym, ParameterNo) THEN MetaErrorT2 (GetVarDeclFullTok (FormalParam), 'formal parameter {%1ad} has an open array type {%2tad}', @@ -6205,7 +6207,7 @@ BEGIN MetaErrorStringT2 (tokpos, Msg, ProcedureSym, ParameterNo) ; IF NoOfParamAny (ProcedureSym) >= ParameterNo THEN - FormalParam := GetNthParamAny (ProcedureSym, ParameterNo) ; + FormalParam := GetNthParamAnyClosest (ProcedureSym, ParameterNo, GetCurrentModule ()) ; IF IsUnboundedParamAny (ProcedureSym, ParameterNo) THEN MetaErrorT2 (GetVarDeclFullTok (FormalParam), '{%W}formal parameter {%1ad} has an open array type {%2tad}', diff --git a/gcc/m2/gm2-compiler/M2Range.mod b/gcc/m2/gm2-compiler/M2Range.mod index 2a5bfab..8e3943a 100644 --- a/gcc/m2/gm2-compiler/M2Range.mod +++ b/gcc/m2/gm2-compiler/M2Range.mod @@ -154,6 +154,34 @@ TYPE VAR TopOfRange: CARDINAL ; RangeIndex: Index ; + BreakRange: CARDINAL ; + + +PROCEDURE gdbhook ; +END gdbhook ; + + +(* + BreakWhenRangeCreated - to be called interactively by gdb. +*) + +PROCEDURE BreakWhenRangeCreated (r: CARDINAL) ; +BEGIN + BreakRange := r +END BreakWhenRangeCreated ; + + +(* + CheckBreak - if sym = BreakRange then call gdbhook. +*) + +PROCEDURE CheckBreak (r: CARDINAL) ; +BEGIN + IF BreakRange = r + THEN + gdbhook + END +END CheckBreak ; (* @@ -302,6 +330,7 @@ BEGIN THEN InternalError ('out of memory error') ELSE + CheckBreak (r) ; WITH p^ DO type := none ; des := NulSym ; @@ -3746,7 +3775,19 @@ END WriteRangeCheck ; PROCEDURE Init ; BEGIN TopOfRange := 0 ; - RangeIndex := InitIndex(1) + RangeIndex := InitIndex(1) ; + BreakWhenRangeCreated (0) ; (* Disable the intereactive range watch. *) + (* To examine the range when it is created run cc1gm2 from gdb + and set a break point on gdbhook. + (gdb) break gdbhook + (gdb) run + Now below interactively call BreakWhenRangeCreated with the symbol + under investigation. *) + gdbhook ; + (* Now is the time to interactively call gdb, for example: + (gdb) print BreakWhenRangeCreated (1234) + (gdb) cont + and you will arrive at gdbhook when this symbol is created. *) END Init ; diff --git a/gcc/m2/gm2-compiler/SymbolTable.def b/gcc/m2/gm2-compiler/SymbolTable.def index d9d4c87..2a9865a 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.def +++ b/gcc/m2/gm2-compiler/SymbolTable.def @@ -2025,7 +2025,7 @@ PROCEDURE PutIncludedByDefinition (Sym: CARDINAL) ; (* IsIncludedByDefinition - returns TRUE if definition module symbol, Sym, was included - by ModSym's definition module. + by ModSyms definition module. *) PROCEDURE IsIncludedByDefinition (ModSym, Sym: CARDINAL) : BOOLEAN ; @@ -3478,4 +3478,20 @@ PROCEDURE UsesOptArgAny (Sym: CARDINAL) : BOOLEAN ; PROCEDURE GetProcedureKindDesc (kind: ProcedureKind) : String ; +(* + GetNthParamAnyClosest - returns the nth parameter from the order + proper procedure, forward declaration + or definition module procedure. + It chooses the parameter which is closest + in source terms to currentmodule. + The same module will return using the order + proper procedure, forward procedure, definition module. + Whereas an imported procedure will choose from + DefProcedure, ProperProcedure, ForwardProcedure. +*) + +PROCEDURE GetNthParamAnyClosest (sym: CARDINAL; ParamNo: CARDINAL; + currentmodule: CARDINAL) : CARDINAL ; + + END SymbolTable. diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod b/gcc/m2/gm2-compiler/SymbolTable.mod index 826d2d3..551bbec 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.mod +++ b/gcc/m2/gm2-compiler/SymbolTable.mod @@ -122,8 +122,6 @@ CONST UnboundedAddressName = "_m2_contents" ; UnboundedHighName = "_m2_high_%d" ; - BreakSym = 203 ; - TYPE ProcAnyBoolean = PROCEDURE (CARDINAL, ProcedureKind) : BOOLEAN ; ProcAnyCardinal = PROCEDURE (CARDINAL, ProcedureKind) : CARDINAL ; @@ -930,6 +928,7 @@ VAR (* passes and reduce duplicate *) (* errors. *) ConstLitArray : Indexing.Index ; + BreakSym : CARDINAL ; (* Allows interactive debugging. *) (* @@ -1032,11 +1031,34 @@ END FinalSymbol ; (* - stop - a debugger convenience hook. + gdbhook - a debugger convenience hook. +*) + +PROCEDURE gdbhook ; +END gdbhook ; + + +(* + BreakWhenSymCreated - to be called interactively by gdb. *) -PROCEDURE stop ; -END stop ; +PROCEDURE BreakWhenSymCreated (sym: CARDINAL) ; +BEGIN + BreakSym := sym +END BreakWhenSymCreated ; + + +(* + CheckBreak - if sym = BreakSym then call gdbhook. +*) + +PROCEDURE CheckBreak (sym: CARDINAL) ; +BEGIN + IF sym = BreakSym + THEN + gdbhook + END +END CheckBreak ; (* @@ -1053,10 +1075,7 @@ BEGIN SymbolType := DummySym END ; PutIndice(Symbols, sym, pSym) ; - IF sym = BreakSym - THEN - stop - END ; + CheckBreak (sym) ; INC(FreeSymbol) END NewSym ; @@ -1660,6 +1679,18 @@ PROCEDURE Init ; VAR pCall: PtrToCallFrame ; BEGIN + BreakWhenSymCreated (NulSym) ; (* Disable the intereactive sym watch. *) + (* To examine the symbol table when a symbol is created run cc1gm2 from gdb + and set a break point on gdbhook. + (gdb) break gdbhook + (gdb) run + Now below interactively call BreakWhenSymCreated with the symbol + under investigation. *) + gdbhook ; + (* Now is the time to interactively call gdb, for example: + (gdb) print BreakWhenSymCreated (1234) + (gdb) cont + and you will arrive at gdbhook when this symbol is created. *) AnonymousName := 0 ; CurrentError := NIL ; InitTree (ConstLitPoolTree) ; @@ -3959,10 +3990,7 @@ VAR BEGIN tok := CheckTok (tok, 'procedure') ; Sym := DeclareSym(tok, ProcedureName) ; - IF Sym = BreakSym - THEN - stop - END ; + CheckBreak (Sym) ; IF NOT IsError(Sym) THEN pSym := GetPsym(Sym) ; @@ -6926,6 +6954,89 @@ END GetNthParamAny ; (* + GetNthParamChoice - returns the parameter definition from + sym:ParamNo:kind or NulSym. +*) + +PROCEDURE GetNthParamChoice (sym: CARDINAL; ParamNo: CARDINAL; + kind: ProcedureKind) : CARDINAL ; +BEGIN + IF GetProcedureParametersDefined (sym, kind) + THEN + RETURN GetNthParam (sym, kind, ParamNo) + ELSE + RETURN NulSym + END +END GetNthParamChoice ; + + +(* + GetNthParamOrdered - returns the parameter definition from list {a, b, c} + in order. + sym:ParamNo:{a,b,c} or NulSym. +*) + +PROCEDURE GetNthParamOrdered (sym: CARDINAL; ParamNo: CARDINAL; + a, b, c: ProcedureKind) : CARDINAL ; +VAR + param: CARDINAL ; +BEGIN + param := GetNthParamChoice (sym, ParamNo, a) ; + IF param = NulSym + THEN + param := GetNthParamChoice (sym, ParamNo, b) ; + IF param = NulSym + THEN + param := GetNthParamChoice (sym, ParamNo, c) + END + END ; + RETURN param +END GetNthParamOrdered ; + + +(* + GetNthParamAnyClosest - returns the nth parameter from the order + proper procedure, forward declaration + or definition module procedure. + It chooses the parameter which is closest + in source terms to currentmodule. + The same module will return using the order + proper procedure, forward procedure, definition module. + Whereas an imported procedure will choose from + DefProcedure, ProperProcedure, ForwardProcedure. +*) + +PROCEDURE GetNthParamAnyClosest (sym: CARDINAL; ParamNo: CARDINAL; + currentmodule: CARDINAL) : CARDINAL ; +BEGIN + IF GetOuterModuleScope (currentmodule) = GetOuterModuleScope (sym) + THEN + (* Same module. *) + RETURN GetNthParamOrdered (sym, ParamNo, + ProperProcedure, ForwardProcedure, DefProcedure) + ELSE + (* Procedure is imported. *) + RETURN GetNthParamOrdered (sym, ParamNo, + DefProcedure, ProperProcedure, ForwardProcedure) + END +END GetNthParamAnyClosest ; + + +(* + GetOuterModuleScope - returns the outer module symbol scope for sym. +*) + +PROCEDURE GetOuterModuleScope (sym: CARDINAL) : CARDINAL ; +BEGIN + WHILE NOT (IsDefImp (sym) OR + (IsModule (sym) AND (GetScope (sym) = NulSym))) DO + sym := GetScope (sym) + END ; + RETURN sym +END GetOuterModuleScope ; + + +(* The Following procedures fill in the symbol table with the symbol entities. *) diff --git a/gcc/m2/gm2-gcc/m2expr.def b/gcc/m2/gm2-gcc/m2expr.def index e9f48b8..a9f5f37 100644 --- a/gcc/m2/gm2-gcc/m2expr.def +++ b/gcc/m2/gm2-gcc/m2expr.def @@ -45,7 +45,7 @@ PROCEDURE init (location: location_t) ; (* CSTIntToString - return an integer string using base 10 and no padding. - The string returned will have been malloc'd. + The string returned will have been mallocd. *) PROCEDURE CSTIntToString (t: tree) : CharStar ; diff --git a/gcc/m2/gm2-libiberty/pexecute.def b/gcc/m2/gm2-libiberty/pexecute.def index 30a41e1..49af52c 100644 --- a/gcc/m2/gm2-libiberty/pexecute.def +++ b/gcc/m2/gm2-libiberty/pexecute.def @@ -31,16 +31,16 @@ EXPORT UNQUALIFIED pexecute ; THIS_PNAME is name of the calling program (i.e. argv[0]). TEMP_BASE is the path name, sans suffix, of a temporary file to use - if needed. This is currently only needed for MSDOS ports that don't use - GO32 (do any still exist?). Ports that don't need it can pass NULL. + if needed. This is currently only needed for MSDOS ports that dont use + GO32 (do any still exist?). Ports that dont need it can pass NULL. (FLAGS & PEXECUTE_SEARCH) is non-zero if $PATH should be searched - (??? It's not clear that GCC passes this flag correctly). + (??? Its not clear that GCC passes this flag correctly). (FLAGS & PEXECUTE_FIRST) is nonzero for the first process in chain. (FLAGS & PEXECUTE_FIRST) is nonzero for the last process in chain. FIRST_LAST could be simplified to only mark the last of a chain of processes but that requires the caller to always mark the last one (and not give up - early if some error occurs). It's more robust to require the caller to + early if some error occurs). Its more robust to require the caller to mark both ends of the chain. The result is the pid on systems like Unix where we fork/exec and on systems @@ -52,20 +52,20 @@ EXPORT UNQUALIFIED pexecute ; Upon failure, ERRMSG_FMT and ERRMSG_ARG are set to the text of the error message with an optional argument (if not needed, ERRMSG_ARG is set to - NULL), and -1 is returned. `errno' is available to the caller to use. + NULL), and -1 is returned. errno is available to the caller to use. pwait: cover function for wait. PID is the process id of the task to wait for. - STATUS is the `status' argument to wait. + STATUS is the status argument to wait. FLAGS is currently unused (allows future enhancement without breaking upward compatibility). Pass 0 for now. The result is the pid of the child reaped, or -1 for failure (errno says why). - On systems that don't support waiting for a particular child, PID is - ignored. On systems like MSDOS that don't really multitask pwait + On systems that dont support waiting for a particular child, PID is + ignored. On systems like MSDOS that dont really multitask pwait is just a mechanism to provide a consistent interface for the caller. pfinish: finish generation of script diff --git a/gcc/m2/gm2-libs-coroutines/Executive.def b/gcc/m2/gm2-libs-coroutines/Executive.def index 40eb8f1..f21a066 100644 --- a/gcc/m2/gm2-libs-coroutines/Executive.def +++ b/gcc/m2/gm2-libs-coroutines/Executive.def @@ -32,7 +32,7 @@ EXPORT QUALIFIED SEMAPHORE, DESCRIPTOR, RotateRunQueue, ProcessName, DebugProcess ; TYPE - SEMAPHORE ; (* defines Dijkstra's semaphores *) + SEMAPHORE ; (* defines Dijkstras semaphores *) DESCRIPTOR ; (* handle onto a process *) @@ -85,7 +85,7 @@ PROCEDURE InitSemaphore (v: CARDINAL; Name: ARRAY OF CHAR) : SEMAPHORE ; (* - Wait - performs dijkstra's P operation on a semaphore. + Wait - performs dijkstras P operation on a semaphore. A process which calls this procedure will wait until the value of the semaphore is > 0 and then it will decrement this value. @@ -95,7 +95,7 @@ PROCEDURE Wait (s: SEMAPHORE) ; (* - Signal - performs dijkstra's V operation on a semaphore. + Signal - performs dijkstras V operation on a semaphore. A process which calls the procedure will increment the semaphores value. *) diff --git a/gcc/m2/gm2-libs-iso/ClientSocket.def b/gcc/m2/gm2-libs-iso/ClientSocket.def index 293b53a..98aefc6 100644 --- a/gcc/m2/gm2-libs-iso/ClientSocket.def +++ b/gcc/m2/gm2-libs-iso/ClientSocket.def @@ -1,4 +1,4 @@ -(* ClientSocket.def provides a client TCP interface for ChanId's. +(* ClientSocket.def provides a client TCP interface for ChanIds. Copyright (C) 2008-2025 Free Software Foundation, Inc. Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. diff --git a/gcc/m2/gm2-libs-log/BlockOps.def b/gcc/m2/gm2-libs-log/BlockOps.def index 2978920..b770acc 100644 --- a/gcc/m2/gm2-libs-log/BlockOps.def +++ b/gcc/m2/gm2-libs-log/BlockOps.def @@ -50,7 +50,7 @@ PROCEDURE BlockMoveBackward (dest, src: ADDRESS; n: CARDINAL) ; (* - BlockClear - fills, block..block+n-1, with zero's. + BlockClear - fills, block..block+n-1, with zeros. *) PROCEDURE BlockClear (block: ADDRESS; n: CARDINAL) ; diff --git a/gcc/m2/gm2-libs-log/InOut.def b/gcc/m2/gm2-libs-log/InOut.def index 9335d0a..f2294e9 100644 --- a/gcc/m2/gm2-libs-log/InOut.def +++ b/gcc/m2/gm2-libs-log/InOut.def @@ -45,7 +45,7 @@ VAR (* OpenInput - reads a string from stdin as the filename for reading. - If the filename ends with `.' then it appends the defext + If the filename ends with '.' then it appends the defext extension. The global variable Done is set if all was successful. *) @@ -63,7 +63,7 @@ PROCEDURE CloseInput ; (* OpenOutput - reads a string from stdin as the filename for writing. - If the filename ends with `.' then it appends the defext + If the filename ends with '.' then it appends the defext extension. The global variable Done is set if all was successful. *) diff --git a/gcc/m2/gm2-libs/FormatStrings.mod b/gcc/m2/gm2-libs/FormatStrings.mod index ec2985b..aea8da9 100644 --- a/gcc/m2/gm2-libs/FormatStrings.mod +++ b/gcc/m2/gm2-libs/FormatStrings.mod @@ -378,7 +378,7 @@ BEGIN THEN INC (afterperc) ; Cast (u, w) ; - in := ConCat (in, Slice (fmt, startpos, nextperc)) ; + in := Copy (fmt, in, startpos, nextperc) ; in := ConCat (in, CardinalToString (u, width, leader, 16, TRUE)) ; startpos := afterperc ; DSdbExit (NIL) ; @@ -387,7 +387,7 @@ BEGIN THEN INC (afterperc) ; Cast (u, w) ; - in := ConCat (in, Slice (fmt, startpos, nextperc)) ; + in := Copy (fmt, in, startpos, nextperc) ; in := ConCat (in, CardinalToString (u, width, leader, 10, FALSE)) ; startpos := afterperc ; DSdbExit (NIL) ; diff --git a/gcc/m2/mc/mcFileName.def b/gcc/m2/mc/mcFileName.def index da9db60..7768c2f 100644 --- a/gcc/m2/mc/mcFileName.def +++ b/gcc/m2/mc/mcFileName.def @@ -29,7 +29,7 @@ FROM DynamicStrings IMPORT String ; given a module and an extension. This file name length will be operating system specific. String, Extension, is concatenated onto - Module and thus it is safe to `Mark' the extension + Module and thus it is safe to Mark the extension for garbage collection. *) diff --git a/gcc/opts.cc b/gcc/opts.cc index 80c7a97..ffcbdfe 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -1037,6 +1037,25 @@ report_conflicting_sanitizer_options (struct gcc_options *opts, location_t loc, } } +/* Validate from OPTS and OPTS_SET that when -fipa-reorder-for-locality is + enabled no explicit -flto-partition is also passed as the locality cloning + pass uses its own partitioning scheme. */ + +static void +validate_ipa_reorder_locality_lto_partition (struct gcc_options *opts, + struct gcc_options *opts_set) +{ + static bool validated_p = false; + + if (opts_set->x_flag_lto_partition) + { + if (opts->x_flag_ipa_reorder_for_locality && !validated_p) + error ("%<-fipa-reorder-for-locality%> is incompatible with" + " an explicit %qs option", "-flto-partition"); + } + validated_p = true; +} + /* After all options at LOC have been read into OPTS and OPTS_SET, finalize settings of those options and diagnose incompatible combinations. */ @@ -1249,6 +1268,8 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, if (opts->x_flag_reorder_blocks_and_partition) SET_OPTION_IF_UNSET (opts, opts_set, flag_reorder_functions, 1); + validate_ipa_reorder_locality_lto_partition (opts, opts_set); + /* The -gsplit-dwarf option requires -ggnu-pubnames. */ if (opts->x_dwarf_split_debug_info) opts->x_debug_generate_pub_sections = 2; diff --git a/gcc/params.opt b/gcc/params.opt index 422d082..ef19051 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -273,10 +273,6 @@ The size of translation unit that IPA-CP pass considers large. Common Joined UInteger Var(param_ipa_cp_value_list_size) Init(8) Param Optimization Maximum size of a list of values associated with each parameter for interprocedural constant propagation. --param=ipa-cp-profile-count-base= -Common Joined UInteger Var(param_ipa_cp_profile_count_base) Init(10) IntegerRange(0, 100) Param Optimization -When using profile feedback, use the edge at this percentage position in frequency histogram as the bases for IPA-CP heuristics. - -param=ipa-jump-function-lookups= Common Joined UInteger Var(param_ipa_jump_function_lookups) Init(8) Param Optimization Maximum number of statements visited during jump function offset discovery. @@ -469,6 +465,33 @@ Minimal size of a partition for LTO (in estimated instructions). Common Joined UInteger Var(param_lto_partitions) Init(128) IntegerRange(1, 65536) Param Number of partitions the program should be split to. +Enum +Name(lto_locality_cloning_model) Type(enum lto_locality_cloning_model) UnknownError(unknown LTO partitioning model %qs) + +EnumValue +Enum(lto_locality_cloning_model) String(no) Value(LTO_LOCALITY_NO_CLONING) + +EnumValue +Enum(lto_locality_cloning_model) String(non_interposable) Value(LTO_LOCALITY_NON_INTERPOSABLE_CLONING) + +EnumValue +Enum(lto_locality_cloning_model) String(maximal) Value(LTO_LOCALITY_MAXIMAL_CLONING) + +-param=lto-partition-locality-cloning= +Common Joined RejectNegative Enum(lto_locality_cloning_model) Var(flag_lto_locality_cloning) Init(LTO_LOCALITY_MAXIMAL_CLONING) Optimization + +-param=lto-partition-locality-frequency-cutoff= +Common Joined UInteger Var(param_lto_locality_frequency) Init(1) IntegerRange(0, 65536) Param Optimization +The denominator n of fraction 1/n of the execution frequency of callee to be cloned for a particular caller. Special value of 0 dictates to always clone without a cut-off. + +-param=lto-partition-locality-size-cutoff= +Common Joined UInteger Var(param_lto_locality_size) Init(1000) IntegerRange(1, 65536) Param Optimization +Size cut-off for callee including inlined calls to be cloned for a particular caller. + +-param=lto-max-locality-partition= +Common Joined UInteger Var(param_max_locality_partition_size) Init(1000000) Param +Maximal size of a locality partition for LTO (in estimated instructions). Value of 0 results in default value being used. + -param=max-average-unrolled-insns= Common Joined UInteger Var(param_max_average_unrolled_insns) Init(80) Param Optimization The maximum number of instructions to consider to unroll in a loop on average. diff --git a/gcc/passes.def b/gcc/passes.def index 9fd85a3..3b25105 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -162,6 +162,7 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_ipa_sra); NEXT_PASS (pass_ipa_fn_summary); NEXT_PASS (pass_ipa_inline); + NEXT_PASS (pass_ipa_locality_cloning); NEXT_PASS (pass_ipa_pure_const); NEXT_PASS (pass_ipa_modref); NEXT_PASS (pass_ipa_free_fn_summary, false /* small_p */); diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot index 2eea928..16ab924 100644 --- a/gcc/po/gcc.pot +++ b/gcc/po/gcc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" -"POT-Creation-Date: 2025-04-04 20:42+0000\n" +"POT-Creation-Date: 2025-04-23 19:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -241,47 +241,47 @@ msgstr "" msgid "error" msgstr "" -#: gcc.cc:856 gcc.cc:913 +#: gcc.cc:859 gcc.cc:916 msgid "-gz is not supported in this configuration" msgstr "" -#: gcc.cc:862 +#: gcc.cc:865 msgid "-gz=zstd is not supported in this configuration" msgstr "" -#: gcc.cc:1096 +#: gcc.cc:1099 msgid "-fuse-linker-plugin is not supported in this configuration" msgstr "" -#: gcc.cc:1112 +#: gcc.cc:1115 msgid "cannot specify -static with -fsanitize=address" msgstr "" -#: gcc.cc:1114 +#: gcc.cc:1117 msgid "cannot specify -static with -fsanitize=hwaddress" msgstr "" -#: gcc.cc:1116 +#: gcc.cc:1119 msgid "cannot specify -static with -fsanitize=thread" msgstr "" -#: gcc.cc:1138 +#: gcc.cc:1141 msgid "-fvtable-verify=std is not supported in this configuration" msgstr "" -#: gcc.cc:1140 +#: gcc.cc:1143 msgid "-fvtable-verify=preinit is not supported in this configuration" msgstr "" -#: gcc.cc:1283 ada/gcc-interface/lang-specs.h:37 +#: gcc.cc:1286 ada/gcc-interface/lang-specs.h:37 msgid "-pg and -fomit-frame-pointer are incompatible" msgstr "" -#: gcc.cc:1458 +#: gcc.cc:1461 msgid "GNU C no longer supports -traditional without -E" msgstr "" -#: gcc.cc:1467 +#: gcc.cc:1470 msgid "-E or -x required when input is from standard input" msgstr "" @@ -329,7 +329,7 @@ msgstr "" msgid "-force_flat_namespace not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:216 config/darwin.h:671 +#: config/darwin.h:216 config/darwin.h:672 msgid "gsplit-dwarf is not supported on this platform" msgstr "" @@ -539,11 +539,11 @@ msgstr "" msgid "Warn about creation of array temporaries." msgstr "" -#: fortran/lang.opt:214 fortran/lang.opt:547 c-family/c.opt:1691 +#: fortran/lang.opt:214 fortran/lang.opt:547 c-family/c.opt:1692 #: config/alpha/alpha.opt:31 common.opt:691 common.opt:849 common.opt:1112 #: common.opt:1116 common.opt:1120 common.opt:1124 common.opt:1876 -#: common.opt:1979 common.opt:2156 common.opt:2160 common.opt:2471 -#: common.opt:2697 common.opt:3464 +#: common.opt:1979 common.opt:2161 common.opt:2165 common.opt:2479 +#: common.opt:2705 common.opt:3472 #, no-c-format msgid "Does nothing. Preserved for backward compatibility." msgstr "" @@ -938,7 +938,7 @@ msgstr "" msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions." msgstr "" -#: fortran/lang.opt:615 cobol/lang.opt:86 +#: fortran/lang.opt:615 cobol/lang.opt:82 #, no-c-format msgid "Assume that the source file is free form." msgstr "" @@ -1176,19 +1176,19 @@ msgstr "" msgid "Append underscores to externally visible names." msgstr "" -#: fortran/lang.opt:871 c-family/c.opt:1830 c-family/c.opt:1907 -#: c-family/c.opt:1915 c-family/c.opt:2246 config/xtensa/xtensa.opt:42 +#: fortran/lang.opt:871 c-family/c.opt:1831 c-family/c.opt:1908 +#: c-family/c.opt:1916 c-family/c.opt:2247 config/xtensa/xtensa.opt:42 #: config/pa/pa.opt:46 config/pa/pa.opt:78 config/arc/arc.opt:140 #: config/arc/arc.opt:296 config/arc/arc.opt:304 config/arc/arc.opt:308 #: config/arc/arc.opt:312 config/arc/arc.opt:317 config/arc/arc.opt:326 #: config/arc/arc.opt:405 common.opt:649 common.opt:1210 common.opt:1214 #: common.opt:1218 common.opt:1313 common.opt:1658 common.opt:1740 -#: common.opt:1839 common.opt:2108 common.opt:2251 common.opt:2305 -#: common.opt:2775 common.opt:2811 common.opt:2904 common.opt:2908 -#: common.opt:3017 common.opt:3152 common.opt:3160 common.opt:3168 -#: common.opt:3176 common.opt:3277 common.opt:3337 common.opt:3425 -#: common.opt:3605 common.opt:3609 common.opt:3613 common.opt:3617 -#: common.opt:3691 common.opt:3695 common.opt:3726 common.opt:3730 +#: common.opt:1839 common.opt:2109 common.opt:2256 common.opt:2313 +#: common.opt:2783 common.opt:2819 common.opt:2912 common.opt:2916 +#: common.opt:3025 common.opt:3160 common.opt:3168 common.opt:3176 +#: common.opt:3184 common.opt:3285 common.opt:3345 common.opt:3433 +#: common.opt:3613 common.opt:3617 common.opt:3621 common.opt:3625 +#: common.opt:3699 common.opt:3703 common.opt:3734 common.opt:3738 #, no-c-format msgid "Does nothing. Preserved for backward compatibility." msgstr "" @@ -1248,19 +1248,19 @@ msgstr "" msgid "Accept extensions to support legacy code." msgstr "" -#: rust/lang.opt:47 rust/lang.opt:51 c-family/c.opt:1562 c-family/c.opt:1566 +#: rust/lang.opt:47 rust/lang.opt:51 c-family/c.opt:1563 c-family/c.opt:1567 #, no-c-format msgid "Warn when a const variable is unused." msgstr "" -#: rust/lang.opt:55 c-family/c.opt:1578 +#: rust/lang.opt:55 c-family/c.opt:1579 #, no-c-format msgid "" "Warn if a caller of a function, marked with attribute warn_unused_result, " "does not use its return value." msgstr "" -#: rust/lang.opt:59 c-family/c.opt:892 common.opt:660 +#: rust/lang.opt:59 c-family/c.opt:893 common.opt:660 #, no-c-format msgid "Warn for infinitely recursive calls." msgstr "" @@ -1516,1292 +1516,1297 @@ msgid "" "does not have." msgstr "" -#: c-family/c.opt:310 +#: c-family/c.opt:307 +#, no-c-format +msgid "Warn about code affected by incompatible psABI changes." +msgstr "" + +#: c-family/c.opt:311 #, no-c-format msgid "" "Warn on suspicious calls of standard functions computing absolute values." msgstr "" -#: c-family/c.opt:314 +#: c-family/c.opt:315 #, no-c-format msgid "Warn about suspicious uses of memory addresses." msgstr "" -#: c-family/c.opt:318 +#: c-family/c.opt:319 #, no-c-format msgid "Warn when the address of packed member of struct or union is taken." msgstr "" -#: c-family/c.opt:334 +#: c-family/c.opt:335 #, no-c-format msgid "Warn about 'new' of type with extended alignment without -faligned-new." msgstr "" -#: c-family/c.opt:338 +#: c-family/c.opt:339 #, no-c-format msgid "" "-Waligned-new=[none|global|all]\tWarn even if 'new' uses a class member " "allocation function." msgstr "" -#: c-family/c.opt:342 ada/gcc-interface/lang.opt:57 +#: c-family/c.opt:343 ada/gcc-interface/lang.opt:57 #, no-c-format msgid "Enable most warning messages." msgstr "" -#: c-family/c.opt:346 +#: c-family/c.opt:347 #, no-c-format msgid "Warn on any use of alloca." msgstr "" -#: c-family/c.opt:350 +#: c-family/c.opt:351 #, no-c-format msgid "" "Warn when allocating insufficient storage for the target type of the " "assigned pointer." msgstr "" -#: c-family/c.opt:354 +#: c-family/c.opt:355 #, no-c-format msgid "" "-Walloc-size-larger-than=<bytes>\tWarn for calls to allocation functions " "that attempt to allocate objects larger than the specified number of bytes." msgstr "" -#: c-family/c.opt:359 +#: c-family/c.opt:360 #, no-c-format msgid "" "Disable Walloc-size-larger-than= warning. Equivalent to Walloc-size-larger-" "than=<SIZE_MAX> or larger." msgstr "" -#: c-family/c.opt:363 +#: c-family/c.opt:364 #, no-c-format msgid "Warn for calls to allocation functions that specify zero bytes." msgstr "" -#: c-family/c.opt:367 +#: c-family/c.opt:368 #, no-c-format msgid "" "-Walloca-larger-than=<number>\tWarn on unbounded uses of alloca, and on " "bounded uses of alloca whose bound can be larger than <number> bytes." msgstr "" -#: c-family/c.opt:373 +#: c-family/c.opt:374 #, no-c-format msgid "" "Disable Walloca-larger-than= warning. Equivalent to Walloca-larger-" "than=<SIZE_MAX> or larger." msgstr "" -#: c-family/c.opt:377 +#: c-family/c.opt:378 #, no-c-format msgid "" "Warn if conversion of the result of arithmetic might change the value even " "though converting the operands cannot." msgstr "" -#: c-family/c.opt:385 +#: c-family/c.opt:386 #, no-c-format msgid "Warn about comparisons between two operands of array type." msgstr "" -#: c-family/c.opt:389 c-family/c.opt:393 +#: c-family/c.opt:390 c-family/c.opt:394 #, no-c-format msgid "" "Warn about mismatched declarations of array parameters and unsafe accesses " "to them." msgstr "" -#: c-family/c.opt:397 +#: c-family/c.opt:398 #, no-c-format msgid "" "Warn whenever an Objective-C assignment is being intercepted by the garbage " "collector." msgstr "" -#: c-family/c.opt:401 +#: c-family/c.opt:402 #, no-c-format msgid "Warn about casting functions to incompatible types." msgstr "" -#: c-family/c.opt:409 +#: c-family/c.opt:410 #, no-c-format msgid "" "-Wbidi-chars=[none|unpaired|any|ucn] Warn about UTF-8 bidirectional control " "characters." msgstr "" -#: c-family/c.opt:432 +#: c-family/c.opt:433 #, no-c-format msgid "" "Warn about boolean expression compared with an integer value different from " "true/false." msgstr "" -#: c-family/c.opt:436 +#: c-family/c.opt:437 #, no-c-format msgid "Warn about certain operations on boolean expressions." msgstr "" -#: c-family/c.opt:440 +#: c-family/c.opt:441 #, no-c-format msgid "Warn when a built-in function is declared with the wrong signature." msgstr "" -#: c-family/c.opt:444 +#: c-family/c.opt:445 #, no-c-format msgid "Warn when a built-in preprocessor macro is undefined or redefined." msgstr "" -#: c-family/c.opt:448 +#: c-family/c.opt:449 #, no-c-format msgid "Warn about features not present in ISO C11, but present in ISO C23." msgstr "" -#: c-family/c.opt:452 +#: c-family/c.opt:453 #, no-c-format msgid "Deprecated in favor of -Wc11-c23-compat." msgstr "" -#: c-family/c.opt:456 +#: c-family/c.opt:457 #, no-c-format msgid "Warn about features not present in ISO C23, but present in ISO C2Y." msgstr "" -#: c-family/c.opt:460 +#: c-family/c.opt:461 #, no-c-format msgid "Warn about features not present in ISO C90, but present in ISO C99." msgstr "" -#: c-family/c.opt:464 +#: c-family/c.opt:465 #, no-c-format msgid "Warn about features not present in ISO C99, but present in ISO C11." msgstr "" -#: c-family/c.opt:468 +#: c-family/c.opt:469 #, no-c-format msgid "Warn about C constructs that are not in the common subset of C and C++." msgstr "" -#: c-family/c.opt:475 +#: c-family/c.opt:476 #, no-c-format msgid "" "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO " "C++ 2011." msgstr "" -#: c-family/c.opt:479 +#: c-family/c.opt:480 #, no-c-format msgid "" "Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO " "C++ 2014." msgstr "" -#: c-family/c.opt:486 +#: c-family/c.opt:487 #, no-c-format msgid "" "Warn about C++ constructs whose meaning differs between ISO C++ 2014 and ISO " "C++ 2017." msgstr "" -#: c-family/c.opt:493 +#: c-family/c.opt:494 #, no-c-format msgid "" "Warn about C++ constructs whose meaning differs between ISO C++ 2017 and ISO " "C++ 2020." msgstr "" -#: c-family/c.opt:497 +#: c-family/c.opt:498 #, no-c-format msgid "Warn about C++11 constructs in code compiled with an older standard." msgstr "" -#: c-family/c.opt:501 +#: c-family/c.opt:502 #, no-c-format msgid "Warn about C++14 constructs in code compiled with an older standard." msgstr "" -#: c-family/c.opt:505 +#: c-family/c.opt:506 #, no-c-format msgid "Warn about C++17 constructs in code compiled with an older standard." msgstr "" -#: c-family/c.opt:509 +#: c-family/c.opt:510 #, no-c-format msgid "Warn about C++20 constructs in code compiled with an older standard." msgstr "" -#: c-family/c.opt:513 +#: c-family/c.opt:514 #, no-c-format msgid "Warn about C++23 constructs in code compiled with an older standard." msgstr "" -#: c-family/c.opt:517 +#: c-family/c.opt:518 #, no-c-format msgid "Warn about C++26 constructs in code compiled with an older standard." msgstr "" -#: c-family/c.opt:521 +#: c-family/c.opt:522 #, no-c-format msgid "" "Warn about suspicious calls to calloc-like functions where sizeof expression " "is the earlier size argument and not the latter." msgstr "" -#: c-family/c.opt:525 +#: c-family/c.opt:526 #, no-c-format msgid "Warn about casts between incompatible function types." msgstr "" -#: c-family/c.opt:529 +#: c-family/c.opt:530 #, no-c-format msgid "Warn about casts which discard qualifiers." msgstr "" -#: c-family/c.opt:533 +#: c-family/c.opt:534 #, no-c-format msgid "" "Warn about a cast to reference type that does not use a related user-defined " "conversion function." msgstr "" -#: c-family/c.opt:537 c-family/c.opt:541 +#: c-family/c.opt:538 c-family/c.opt:542 #, no-c-format msgid "Warn about catch handlers of non-reference type." msgstr "" -#: c-family/c.opt:545 +#: c-family/c.opt:546 #, no-c-format msgid "" "Complain about a name being declared as a class member after a previous use " "of the same name." msgstr "" -#: c-family/c.opt:549 +#: c-family/c.opt:550 #, no-c-format msgid "Warn about subscripts whose type is \"char\"." msgstr "" -#: c-family/c.opt:553 c-family/c.opt:1727 c-family/c.opt:1731 -#: c-family/c.opt:1735 c-family/c.opt:1739 c-family/c.opt:1743 -#: c-family/c.opt:1747 c-family/c.opt:1751 c-family/c.opt:1758 -#: c-family/c.opt:1762 c-family/c.opt:1766 c-family/c.opt:1770 -#: c-family/c.opt:1774 c-family/c.opt:1778 c-family/c.opt:1782 -#: c-family/c.opt:1786 c-family/c.opt:1790 c-family/c.opt:1794 -#: c-family/c.opt:1798 c-family/c.opt:1802 c-family/c.opt:1806 +#: c-family/c.opt:554 c-family/c.opt:1728 c-family/c.opt:1732 +#: c-family/c.opt:1736 c-family/c.opt:1740 c-family/c.opt:1744 +#: c-family/c.opt:1748 c-family/c.opt:1752 c-family/c.opt:1759 +#: c-family/c.opt:1763 c-family/c.opt:1767 c-family/c.opt:1771 +#: c-family/c.opt:1775 c-family/c.opt:1779 c-family/c.opt:1783 +#: c-family/c.opt:1787 c-family/c.opt:1791 c-family/c.opt:1795 +#: c-family/c.opt:1799 c-family/c.opt:1803 c-family/c.opt:1807 #: config/i386/i386.opt:1005 #, no-c-format msgid "Removed in GCC 9. This switch has no effect." msgstr "" -#: c-family/c.opt:557 +#: c-family/c.opt:558 #, no-c-format msgid "" "Warn when a conversion function will never be called due to the type it " "converts to." msgstr "" -#: c-family/c.opt:561 +#: c-family/c.opt:562 #, no-c-format msgid "Warn for unsafe raw memory writes to objects of class types." msgstr "" -#: c-family/c.opt:565 +#: c-family/c.opt:566 #, no-c-format msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"." msgstr "" -#: c-family/c.opt:569 +#: c-family/c.opt:570 #, no-c-format msgid "Warn about uses of a comma operator within a subscripting expression." msgstr "" -#: c-family/c.opt:573 +#: c-family/c.opt:574 #, no-c-format msgid "" "Warn about possibly nested block comments, and C++ comments spanning more " "than one physical line." msgstr "" -#: c-family/c.opt:577 +#: c-family/c.opt:578 #, no-c-format msgid "Synonym for -Wcomment." msgstr "" -#: c-family/c.opt:581 +#: c-family/c.opt:582 #, no-c-format msgid "Warn for conditionally-supported constructs." msgstr "" -#: c-family/c.opt:585 +#: c-family/c.opt:586 #, no-c-format msgid "Warn for implicit type conversions that may change a value." msgstr "" -#: c-family/c.opt:589 +#: c-family/c.opt:590 #, no-c-format msgid "Warn for converting NULL from/to a non-pointer type." msgstr "" -#: c-family/c.opt:597 +#: c-family/c.opt:598 #, no-c-format msgid "" "Warn when performing class template argument deduction on a type with no " "deduction guides." msgstr "" -#: c-family/c.opt:602 +#: c-family/c.opt:603 #, no-c-format msgid "Warn when all constructors and destructors are private." msgstr "" -#: c-family/c.opt:606 +#: c-family/c.opt:607 #, no-c-format msgid "Warn about dangling else." msgstr "" -#: c-family/c.opt:610 c-family/c.opt:614 +#: c-family/c.opt:611 c-family/c.opt:615 #, no-c-format msgid "Warn for uses of pointers to auto variables whose lifetime has ended." msgstr "" -#: c-family/c.opt:618 +#: c-family/c.opt:619 #, no-c-format msgid "Warn when a reference is bound to a temporary whose lifetime has ended." msgstr "" -#: c-family/c.opt:622 +#: c-family/c.opt:623 #, no-c-format msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage." msgstr "" -#: c-family/c.opt:626 +#: c-family/c.opt:627 #, no-c-format msgid "Warn when a declaration is found after a statement." msgstr "" -#: c-family/c.opt:630 +#: c-family/c.opt:631 #, no-c-format msgid "Warn for missing parameter types in function declarations." msgstr "" -#: c-family/c.opt:634 +#: c-family/c.opt:635 #, no-c-format msgid "Warn when an explicitly defaulted function is deleted." msgstr "" -#: c-family/c.opt:638 +#: c-family/c.opt:639 #, no-c-format msgid "Warn when deleting a pointer to incomplete type." msgstr "" -#: c-family/c.opt:642 +#: c-family/c.opt:643 #, no-c-format msgid "Warn about deleting polymorphic objects with non-virtual destructors." msgstr "" -#: c-family/c.opt:650 +#: c-family/c.opt:651 #, no-c-format msgid "" "Mark implicitly-declared copy operations as deprecated if the class has a " "user-provided copy operation." msgstr "" -#: c-family/c.opt:655 +#: c-family/c.opt:656 #, no-c-format msgid "" "Mark implicitly-declared copy operations as deprecated if the class has a " "user-provided copy operation or destructor." msgstr "" -#: c-family/c.opt:660 +#: c-family/c.opt:661 #, no-c-format msgid "" "Warn about deprecated arithmetic conversions on operands of enumeration " "types." msgstr "" -#: c-family/c.opt:664 +#: c-family/c.opt:665 #, no-c-format msgid "" "Warn about deprecated arithmetic conversions on operands where one is of " "enumeration type and the other is of a floating-point type." msgstr "" -#: c-family/c.opt:669 +#: c-family/c.opt:670 #, no-c-format msgid "" "Warn about deprecated space between \"\" and suffix in a user-defined " "literal operator." msgstr "" -#: c-family/c.opt:673 +#: c-family/c.opt:674 #, no-c-format msgid "" "Warn about calls with arguments to functions declared without parameters." msgstr "" -#: c-family/c.opt:677 +#: c-family/c.opt:678 #, no-c-format msgid "" "Warn about deprecated omission of comma before ... in varargs function " "declaration." msgstr "" -#: c-family/c.opt:681 +#: c-family/c.opt:682 #, no-c-format msgid "" "Warn about positional initialization of structs requiring designated " "initializers." msgstr "" -#: c-family/c.opt:685 +#: c-family/c.opt:686 #, no-c-format msgid "Warn if qualifiers on arrays which are pointer targets are discarded." msgstr "" -#: c-family/c.opt:689 +#: c-family/c.opt:690 #, no-c-format msgid "Warn if type qualifiers on pointers are discarded." msgstr "" -#: c-family/c.opt:693 +#: c-family/c.opt:694 #, no-c-format msgid "Warn about compile-time integer division by zero." msgstr "" -#: c-family/c.opt:697 +#: c-family/c.opt:698 #, no-c-format msgid "Warn about implicit conversions from \"float\" to \"double\"." msgstr "" -#: c-family/c.opt:701 +#: c-family/c.opt:702 #, no-c-format msgid "" "Warn when a declaration has duplicate const, volatile, restrict or _Atomic " "specifier." msgstr "" -#: c-family/c.opt:705 +#: c-family/c.opt:706 #, no-c-format msgid "Warn about duplicated branches in if-else statements." msgstr "" -#: c-family/c.opt:709 +#: c-family/c.opt:710 #, no-c-format msgid "Warn about duplicated conditions in an if-else-if chain." msgstr "" -#: c-family/c.opt:713 +#: c-family/c.opt:714 #, no-c-format msgid "Warn about violations of Effective C++ style rules." msgstr "" -#: c-family/c.opt:717 +#: c-family/c.opt:718 #, no-c-format msgid "" "Warn if an additional enum-base is used in an elaborated-type-specifier." msgstr "" -#: c-family/c.opt:721 +#: c-family/c.opt:722 #, no-c-format msgid "Warn about an empty body in an if or else statement." msgstr "" -#: c-family/c.opt:725 +#: c-family/c.opt:726 #, no-c-format msgid "Warn about stray tokens after #else and #endif." msgstr "" -#: c-family/c.opt:729 +#: c-family/c.opt:730 #, no-c-format msgid "Warn about comparison of different enum types." msgstr "" -#: c-family/c.opt:733 +#: c-family/c.opt:734 #, no-c-format msgid "Warn about implicit conversion of enum types." msgstr "" -#: c-family/c.opt:737 +#: c-family/c.opt:738 #, no-c-format msgid "Warn about enum/integer type mismatches." msgstr "" -#: c-family/c.opt:745 +#: c-family/c.opt:746 #, no-c-format msgid "" "This switch is deprecated; use -Werror=implicit-function-declaration instead." msgstr "" -#: c-family/c.opt:749 +#: c-family/c.opt:750 #, no-c-format msgid "Warn when an exception handler is shadowed by another handler." msgstr "" -#: c-family/c.opt:753 +#: c-family/c.opt:754 #, no-c-format msgid "Warn if \"defined\" is used outside #if." msgstr "" -#: c-family/c.opt:761 +#: c-family/c.opt:762 #, no-c-format msgid "Warn about semicolon after in-class function definition." msgstr "" -#: c-family/c.opt:765 +#: c-family/c.opt:766 #, no-c-format msgid "" "Warn when a structure containing a C99 flexible array member as the last " "field is not at the end of another structure." msgstr "" -#: c-family/c.opt:770 +#: c-family/c.opt:771 #, no-c-format msgid "" "Warn for implicit type conversions that cause loss of floating point " "precision." msgstr "" -#: c-family/c.opt:774 +#: c-family/c.opt:775 #, no-c-format msgid "Warn if testing floating point numbers for equality." msgstr "" -#: c-family/c.opt:778 c-family/c.opt:833 +#: c-family/c.opt:779 c-family/c.opt:834 #, no-c-format msgid "Warn about printf/scanf/strftime/strfmon format string anomalies." msgstr "" -#: c-family/c.opt:782 +#: c-family/c.opt:783 #, no-c-format msgid "Warn about format strings that contain NUL bytes." msgstr "" -#: c-family/c.opt:786 +#: c-family/c.opt:787 #, no-c-format msgid "Warn about GCC format strings with strings unsuitable for diagnostics." msgstr "" -#: c-family/c.opt:790 +#: c-family/c.opt:791 #, no-c-format msgid "Warn if passing too many arguments to a function for its format string." msgstr "" -#: c-family/c.opt:794 +#: c-family/c.opt:795 #, no-c-format msgid "Warn about format strings that are not literals." msgstr "" -#: c-family/c.opt:798 +#: c-family/c.opt:799 #, no-c-format msgid "" "Warn about function calls with format strings that write past the end of the " "destination region. Same as -Wformat-overflow=1." msgstr "" -#: c-family/c.opt:803 +#: c-family/c.opt:804 #, no-c-format msgid "" "Warn about function calls with format strings that write past the end of the " "destination region." msgstr "" -#: c-family/c.opt:808 +#: c-family/c.opt:809 #, no-c-format msgid "Warn about possible security problems with format functions." msgstr "" -#: c-family/c.opt:812 +#: c-family/c.opt:813 #, no-c-format msgid "Warn about sign differences with format functions." msgstr "" -#: c-family/c.opt:816 +#: c-family/c.opt:817 #, no-c-format msgid "" "Warn about calls to snprintf and similar functions that truncate output. " "Same as -Wformat-truncation=1." msgstr "" -#: c-family/c.opt:821 +#: c-family/c.opt:822 #, no-c-format msgid "" "Warn about calls to snprintf and similar functions that truncate output." msgstr "" -#: c-family/c.opt:825 +#: c-family/c.opt:826 #, no-c-format msgid "Warn about strftime formats yielding 2-digit years." msgstr "" -#: c-family/c.opt:829 +#: c-family/c.opt:830 #, no-c-format msgid "Warn about zero-length formats." msgstr "" -#: c-family/c.opt:837 +#: c-family/c.opt:838 #, no-c-format msgid "" "Warn when __builtin_frame_address or __builtin_return_address is used " "unsafely." msgstr "" -#: c-family/c.opt:841 +#: c-family/c.opt:842 #, no-c-format msgid "" "Warn about labels on declarations and at the end of compound statements." msgstr "" -#: c-family/c.opt:845 +#: c-family/c.opt:846 #, no-c-format msgid "" "Warn about the global module fragment not containing only preprocessing " "directives." msgstr "" -#: c-family/c.opt:849 +#: c-family/c.opt:850 #, no-c-format msgid "" "Warn when #ifndef of a header guard is followed by #define of a different " "macro with the header guard macro not defined at the end of header." msgstr "" -#: c-family/c.opt:853 +#: c-family/c.opt:854 #, no-c-format msgid "Warn when the field in a struct is not aligned." msgstr "" -#: c-family/c.opt:857 +#: c-family/c.opt:858 #, no-c-format msgid "Warn whenever type qualifiers are ignored." msgstr "" -#: c-family/c.opt:861 +#: c-family/c.opt:862 #, no-c-format msgid "Warn whenever attributes are ignored." msgstr "" -#: c-family/c.opt:865 +#: c-family/c.opt:866 #, no-c-format msgid "Warn about implicit declarations." msgstr "" -#: c-family/c.opt:873 +#: c-family/c.opt:874 #, no-c-format msgid "Warn about implicit function declarations." msgstr "" -#: c-family/c.opt:877 +#: c-family/c.opt:878 #, no-c-format msgid "Warn when a declaration does not specify a type." msgstr "" -#: c-family/c.opt:884 +#: c-family/c.opt:885 #, no-c-format msgid "Warn when a base is inaccessible in derived due to ambiguity." msgstr "" -#: c-family/c.opt:888 +#: c-family/c.opt:889 #, no-c-format msgid "" "Warn when there is a conversion between pointers that have incompatible " "types." msgstr "" -#: c-family/c.opt:896 +#: c-family/c.opt:897 #, no-c-format msgid "Warn about variables which are initialized to themselves." msgstr "" -#: c-family/c.opt:900 +#: c-family/c.opt:901 #, no-c-format msgid "" "Warn about uses of std::initializer_list that can result in dangling " "pointers." msgstr "" -#: c-family/c.opt:904 +#: c-family/c.opt:905 #, no-c-format msgid "" "Warn about nonsensical values of --param destructive-interference-size or " "constructive-interference-size." msgstr "" -#: c-family/c.opt:909 +#: c-family/c.opt:910 #, no-c-format msgid "" "Warn about C++11 inheriting constructors when the base has a variadic " "constructor." msgstr "" -#: c-family/c.opt:913 +#: c-family/c.opt:914 #, no-c-format msgid "" "Warn about incompatible integer to pointer and pointer to integer " "conversions." msgstr "" -#: c-family/c.opt:917 +#: c-family/c.opt:918 #, no-c-format msgid "Warn for suspicious integer expressions in boolean context." msgstr "" -#: c-family/c.opt:921 +#: c-family/c.opt:922 #, no-c-format msgid "" "Warn when there is a cast to a pointer from an integer of a different size." msgstr "" -#: c-family/c.opt:925 +#: c-family/c.opt:926 #, no-c-format msgid "Warn when a function never produces a constant expression." msgstr "" -#: c-family/c.opt:929 +#: c-family/c.opt:930 #, no-c-format msgid "Warn about invalid uses of the \"offsetof\" macro." msgstr "" -#: c-family/c.opt:933 +#: c-family/c.opt:934 #, no-c-format msgid "Warn about PCH files that are found but not used." msgstr "" -#: c-family/c.opt:937 +#: c-family/c.opt:938 #, no-c-format msgid "Warn about invalid UTF-8 characters." msgstr "" -#: c-family/c.opt:941 +#: c-family/c.opt:942 #, no-c-format msgid "Warn when a jump misses a variable initialization." msgstr "" -#: c-family/c.opt:960 +#: c-family/c.opt:961 #, no-c-format msgid "" "Warn about leading whitespace style issues on lines except when in raw " "string literals." msgstr "" -#: c-family/c.opt:964 +#: c-family/c.opt:965 #, no-c-format msgid "" "Warn when a string or character literal is followed by a ud-suffix which " "does not begin with an underscore." msgstr "" -#: c-family/c.opt:968 +#: c-family/c.opt:969 #, no-c-format msgid "" "Warn when logical not is used on the left hand side operand of a comparison." msgstr "" -#: c-family/c.opt:972 +#: c-family/c.opt:973 #, no-c-format msgid "" "Warn when a logical operator is suspiciously always evaluating to true or " "false." msgstr "" -#: c-family/c.opt:976 +#: c-family/c.opt:977 #, no-c-format msgid "Do not warn about using \"long long\" when -pedantic." msgstr "" -#: c-family/c.opt:980 +#: c-family/c.opt:981 #, no-c-format msgid "Warn about suspicious declarations of \"main\"." msgstr "" -#: c-family/c.opt:992 +#: c-family/c.opt:993 #, no-c-format msgid "" "Warn about suspicious calls to memset where the third argument contains the " "number of elements not multiplied by the element size." msgstr "" -#: c-family/c.opt:996 +#: c-family/c.opt:997 #, no-c-format msgid "" "Warn about suspicious calls to memset where the third argument is constant " "literal zero and the second is not." msgstr "" -#: c-family/c.opt:1000 +#: c-family/c.opt:1001 #, no-c-format msgid "" "Warn when the indentation of the code does not reflect the block structure." msgstr "" -#: c-family/c.opt:1004 +#: c-family/c.opt:1005 #, no-c-format msgid "" "Warn for deallocation calls with arguments returned from mismatched " "allocation functions." msgstr "" -#: c-family/c.opt:1009 +#: c-family/c.opt:1010 #, no-c-format msgid "" "Warn for mismatches between calls to operator new or delete and the " "corresponding call to the allocation or deallocation function." msgstr "" -#: c-family/c.opt:1014 +#: c-family/c.opt:1015 #, no-c-format msgid "" "Warn when a class is redeclared or referenced using a mismatched class-key." msgstr "" -#: c-family/c.opt:1018 +#: c-family/c.opt:1019 #, no-c-format msgid "" "Warn about declarations of entities that may be missing attributes that " "related entities have been declared with." msgstr "" -#: c-family/c.opt:1023 +#: c-family/c.opt:1024 #, no-c-format msgid "Warn about possibly missing braces around initializers." msgstr "" -#: c-family/c.opt:1027 +#: c-family/c.opt:1028 #, no-c-format msgid "Warn about global functions without previous declarations." msgstr "" -#: c-family/c.opt:1031 +#: c-family/c.opt:1032 #, no-c-format msgid "Warn about missing fields in struct initializers." msgstr "" -#: c-family/c.opt:1039 +#: c-family/c.opt:1040 #, no-c-format msgid "Warn about user-specified include directories that do not exist." msgstr "" -#: c-family/c.opt:1043 +#: c-family/c.opt:1044 #, no-c-format msgid "Warn about function definitions omitting parameter names." msgstr "" -#: c-family/c.opt:1047 +#: c-family/c.opt:1048 #, no-c-format msgid "" "Warn about function parameters declared without a type specifier in K&R-" "style functions." msgstr "" -#: c-family/c.opt:1051 +#: c-family/c.opt:1052 #, no-c-format msgid "Warn about global functions without prototypes." msgstr "" -#: c-family/c.opt:1055 +#: c-family/c.opt:1056 #, no-c-format msgid "Warn about likely missing requires keyword." msgstr "" -#: c-family/c.opt:1059 +#: c-family/c.opt:1060 #, no-c-format msgid "" "Warn when the template keyword is missing after a member access token in a " "dependent member access expression if that member is a template." msgstr "" -#: c-family/c.opt:1063 +#: c-family/c.opt:1064 #, no-c-format msgid "Warn about global variables without previous declarations." msgstr "" -#: c-family/c.opt:1070 +#: c-family/c.opt:1071 #, no-c-format msgid "Warn about use of multi-character character constants." msgstr "" -#: c-family/c.opt:1074 +#: c-family/c.opt:1075 #, no-c-format msgid "Warn on direct multiple inheritance." msgstr "" -#: c-family/c.opt:1078 +#: c-family/c.opt:1079 #, no-c-format msgid "" "Warn about unsafe macros expanding to multiple statements used as a body of " "a clause such as if, else, while, switch, or for." msgstr "" -#: c-family/c.opt:1082 +#: c-family/c.opt:1083 #, no-c-format msgid "Warn on namespace definition." msgstr "" -#: c-family/c.opt:1086 +#: c-family/c.opt:1087 #, no-c-format msgid "" "Warn about narrowing conversions within { } that are ill-formed in C++11." msgstr "" -#: c-family/c.opt:1090 +#: c-family/c.opt:1091 #, no-c-format msgid "Warn about \"extern\" declarations not at file scope." msgstr "" -#: c-family/c.opt:1094 +#: c-family/c.opt:1095 #, no-c-format msgid "" "Warn when a noexcept expression evaluates to false even though the " "expression can't actually throw." msgstr "" -#: c-family/c.opt:1098 +#: c-family/c.opt:1099 #, no-c-format msgid "" "Warn if C++17 noexcept function type will change the mangled name of a " "symbol." msgstr "" -#: c-family/c.opt:1102 +#: c-family/c.opt:1103 #, no-c-format msgid "" "Warn when non-templatized friend functions are declared within a template." msgstr "" -#: c-family/c.opt:1106 +#: c-family/c.opt:1107 #, no-c-format msgid "Warn about non-virtual destructors." msgstr "" -#: c-family/c.opt:1110 +#: c-family/c.opt:1111 #, no-c-format msgid "" "Warn about NULL being passed to argument slots marked as requiring non-NULL." msgstr "" -#: c-family/c.opt:1126 +#: c-family/c.opt:1127 #, no-c-format msgid "" "-Wnormalized=[none|id|nfc|nfkc]\tWarn about non-normalized Unicode strings." msgstr "" -#: c-family/c.opt:1149 +#: c-family/c.opt:1150 #, no-c-format msgid "" "Warn if a class interface has no superclass. Root classes may use an " "attribute to suppress this warning." msgstr "" -#: c-family/c.opt:1154 +#: c-family/c.opt:1155 #, no-c-format msgid "Warn if a C-style cast is used in a program." msgstr "" -#: c-family/c.opt:1158 +#: c-family/c.opt:1159 #, no-c-format msgid "Warn for obsolescent usage in a declaration." msgstr "" -#: c-family/c.opt:1162 +#: c-family/c.opt:1163 #, no-c-format msgid "Warn if an old-style parameter definition is used." msgstr "" -#: c-family/c.opt:1166 +#: c-family/c.opt:1167 #, no-c-format msgid "" "Warn about potentially suboptimal choices related to OpenACC parallelism." msgstr "" -#: c-family/c.opt:1170 +#: c-family/c.opt:1171 #, no-c-format msgid "Warn about suspicious OpenMP code." msgstr "" -#: c-family/c.opt:1174 +#: c-family/c.opt:1175 #, no-c-format msgid "Warn if a simd directive is overridden by the vectorizer cost model." msgstr "" -#: c-family/c.opt:1178 +#: c-family/c.opt:1179 #, no-c-format msgid "" "Warn if a string is longer than the maximum portable length specified by the " "standard." msgstr "" -#: c-family/c.opt:1182 c-family/c.opt:1186 +#: c-family/c.opt:1183 c-family/c.opt:1187 #, no-c-format msgid "Warn about overloaded virtual function names." msgstr "" -#: c-family/c.opt:1190 +#: c-family/c.opt:1191 #, no-c-format msgid "Warn about overriding initializers without side effects." msgstr "" -#: c-family/c.opt:1194 +#: c-family/c.opt:1195 #, no-c-format msgid "Warn about overriding initializers with side effects." msgstr "" -#: c-family/c.opt:1198 +#: c-family/c.opt:1199 #, no-c-format msgid "" "Warn if the named return value optimization is not performed although it is " "allowed." msgstr "" -#: c-family/c.opt:1202 +#: c-family/c.opt:1203 #, no-c-format msgid "Warn about packed bit-fields whose offset changed in GCC 4.4." msgstr "" -#: c-family/c.opt:1206 +#: c-family/c.opt:1207 #, no-c-format msgid "Warn when fields in a struct with the packed attribute are misaligned." msgstr "" -#: c-family/c.opt:1210 +#: c-family/c.opt:1211 #, no-c-format msgid "Warn about possibly missing parentheses." msgstr "" -#: c-family/c.opt:1218 +#: c-family/c.opt:1219 #, no-c-format msgid "" "Warn about calling std::move on a local object in a return statement " "preventing copy elision." msgstr "" -#: c-family/c.opt:1222 c-family/c.opt:1226 +#: c-family/c.opt:1223 c-family/c.opt:1227 #, no-c-format msgid "Warn for placement new expressions with undefined behavior." msgstr "" -#: c-family/c.opt:1230 +#: c-family/c.opt:1231 #, no-c-format msgid "Warn when converting the type of pointers to member functions." msgstr "" -#: c-family/c.opt:1234 +#: c-family/c.opt:1235 #, no-c-format msgid "Warn about function pointer arithmetic." msgstr "" -#: c-family/c.opt:1238 +#: c-family/c.opt:1239 #, no-c-format msgid "Warn when a pointer differs in signedness in an assignment." msgstr "" -#: c-family/c.opt:1242 +#: c-family/c.opt:1243 #, no-c-format msgid "Warn when a pointer is compared with a zero character constant." msgstr "" -#: c-family/c.opt:1246 +#: c-family/c.opt:1247 #, no-c-format msgid "Warn when a pointer is cast to an integer of a different size." msgstr "" -#: c-family/c.opt:1250 +#: c-family/c.opt:1251 #, no-c-format msgid "Warn about misuses of pragmas." msgstr "" -#: c-family/c.opt:1254 +#: c-family/c.opt:1255 #, no-c-format msgid "Warn about #pragma once outside of a header." msgstr "" -#: c-family/c.opt:1258 +#: c-family/c.opt:1259 #, no-c-format msgid "" "Warn if constructor or destructors with priorities from 0 to 100 are used." msgstr "" -#: c-family/c.opt:1262 +#: c-family/c.opt:1263 #, no-c-format msgid "" "Warn if a property for an Objective-C object has no assign semantics " "specified." msgstr "" -#: c-family/c.opt:1266 +#: c-family/c.opt:1267 #, no-c-format msgid "Warn if inherited methods are unimplemented." msgstr "" -#: c-family/c.opt:1270 +#: c-family/c.opt:1271 #, no-c-format msgid "Warn when a range-based for-loop is creating unnecessary copies." msgstr "" -#: c-family/c.opt:1274 +#: c-family/c.opt:1275 #, no-c-format msgid "Warn about multiple declarations of the same object." msgstr "" -#: c-family/c.opt:1278 +#: c-family/c.opt:1279 #, no-c-format msgid "Warn about redundant calls to std::move." msgstr "" -#: c-family/c.opt:1282 +#: c-family/c.opt:1283 #, no-c-format msgid "" "Warn when a class or enumerated type is referenced using a redundant class-" "key." msgstr "" -#: c-family/c.opt:1286 +#: c-family/c.opt:1287 #, no-c-format msgid "Warn about uses of register storage specifier." msgstr "" -#: c-family/c.opt:1290 +#: c-family/c.opt:1291 #, no-c-format msgid "Warn when the compiler reorders code." msgstr "" -#: c-family/c.opt:1294 +#: c-family/c.opt:1295 #, no-c-format msgid "" "Warn when an argument passed to a restrict-qualified parameter aliases with " "another argument." msgstr "" -#: c-family/c.opt:1299 +#: c-family/c.opt:1300 #, no-c-format msgid "" "Warn whenever void-returning functions return a non-void expressions, or a " "return expression is missing in a function not returning void." msgstr "" -#: c-family/c.opt:1303 +#: c-family/c.opt:1304 #, no-c-format msgid "" "Warn whenever a function's return type defaults to \"int\" (C), or about " "inconsistent return types (C++)." msgstr "" -#: c-family/c.opt:1307 +#: c-family/c.opt:1308 #, no-c-format msgid "Warn on suspicious constructs involving reverse scalar storage order." msgstr "" -#: c-family/c.opt:1311 +#: c-family/c.opt:1312 #, no-c-format msgid "Warn if a selector has multiple methods." msgstr "" -#: c-family/c.opt:1315 +#: c-family/c.opt:1316 #, no-c-format msgid "Warn when a value is moved to itself with std::move." msgstr "" -#: c-family/c.opt:1319 +#: c-family/c.opt:1320 #, no-c-format msgid "Warn about possible violations of sequence point rules." msgstr "" -#: c-family/c.opt:1323 +#: c-family/c.opt:1324 #, no-c-format msgid "Warn if a local declaration hides an instance variable." msgstr "" -#: c-family/c.opt:1327 c-family/c.opt:1331 +#: c-family/c.opt:1328 c-family/c.opt:1332 #, no-c-format msgid "Warn if left shift of a signed value overflows." msgstr "" -#: c-family/c.opt:1335 +#: c-family/c.opt:1336 #, no-c-format msgid "Warn if shift count is negative." msgstr "" -#: c-family/c.opt:1339 +#: c-family/c.opt:1340 #, no-c-format msgid "Warn if shift count >= width of type." msgstr "" -#: c-family/c.opt:1343 +#: c-family/c.opt:1344 #, no-c-format msgid "Warn if left shifting a negative value." msgstr "" -#: c-family/c.opt:1347 +#: c-family/c.opt:1348 #, no-c-format msgid "Warn about signed-unsigned comparisons." msgstr "" -#: c-family/c.opt:1355 +#: c-family/c.opt:1356 #, no-c-format msgid "" "Warn for implicit type conversions between signed and unsigned integers." msgstr "" -#: c-family/c.opt:1359 +#: c-family/c.opt:1360 #, no-c-format msgid "Warn when overload promotes from unsigned to signed." msgstr "" -#: c-family/c.opt:1363 +#: c-family/c.opt:1364 #, no-c-format msgid "Warn about missing sized deallocation functions." msgstr "" -#: c-family/c.opt:1367 +#: c-family/c.opt:1368 #, no-c-format msgid "" "Warn about divisions of two sizeof operators when the first one is applied " "to an array and the divisor does not equal the size of the array element." msgstr "" -#: c-family/c.opt:1372 +#: c-family/c.opt:1373 #, no-c-format msgid "Warn when sizeof is applied on a parameter declared as an array." msgstr "" -#: c-family/c.opt:1376 +#: c-family/c.opt:1377 #, no-c-format msgid "" "Warn about suspicious divisions of two sizeof expressions that don't work " "correctly with pointers." msgstr "" -#: c-family/c.opt:1380 +#: c-family/c.opt:1381 #, no-c-format msgid "" "Warn about suspicious length parameters to certain string functions if the " "argument uses sizeof." msgstr "" -#: c-family/c.opt:1388 +#: c-family/c.opt:1389 #, no-c-format msgid "" "Warn about improper usages of flexible array members according to the level " "of -fstrict-flex-arrays." msgstr "" -#: c-family/c.opt:1393 +#: c-family/c.opt:1394 #, no-c-format msgid "Warn about uncasted NULL used as sentinel." msgstr "" -#: c-family/c.opt:1401 +#: c-family/c.opt:1402 #, no-c-format msgid "Warn about unprototyped function declarations." msgstr "" -#: c-family/c.opt:1405 +#: c-family/c.opt:1406 #, no-c-format msgid "Warn if type signatures of candidate methods do not match exactly." msgstr "" -#: c-family/c.opt:1409 +#: c-family/c.opt:1410 #, no-c-format msgid "" "Warn about calls to strcmp and strncmp used in equality expressions that are " @@ -2809,134 +2814,134 @@ msgid "" "argument." msgstr "" -#: c-family/c.opt:1415 +#: c-family/c.opt:1416 #, no-c-format msgid "" "Warn about buffer overflow in string manipulation functions like memcpy and " "strcpy." msgstr "" -#: c-family/c.opt:1420 +#: c-family/c.opt:1421 #, no-c-format msgid "" "Under the control of Object Size type, warn about buffer overflow in string " "manipulation functions like memcpy and strcpy." msgstr "" -#: c-family/c.opt:1425 +#: c-family/c.opt:1426 #, no-c-format msgid "" "Warn about reading past the end of a source array in string manipulation " "functions like memchr and memcpy." msgstr "" -#: c-family/c.opt:1429 +#: c-family/c.opt:1430 #, no-c-format msgid "" "Warn about truncation in string manipulation functions like strncat and " "strncpy." msgstr "" -#: c-family/c.opt:1433 +#: c-family/c.opt:1434 #, no-c-format msgid "" "Warn if a class type has a base or a field whose type uses the anonymous " "namespace or depends on a type with no linkage." msgstr "" -#: c-family/c.opt:1437 +#: c-family/c.opt:1438 #, no-c-format msgid "Warn about functions which might be candidates for format attributes." msgstr "" -#: c-family/c.opt:1441 +#: c-family/c.opt:1442 #, no-c-format msgid "" "Suggest that the override keyword be used when the declaration of a virtual " "function overrides another." msgstr "" -#: c-family/c.opt:1446 +#: c-family/c.opt:1447 #, no-c-format msgid "Warn about enumerated switches, with no default, missing a case." msgstr "" -#: c-family/c.opt:1450 +#: c-family/c.opt:1451 #, no-c-format msgid "Warn about enumerated switches missing a \"default:\" statement." msgstr "" -#: c-family/c.opt:1454 +#: c-family/c.opt:1455 #, no-c-format msgid "Warn about all enumerated switches missing a specific case." msgstr "" -#: c-family/c.opt:1458 +#: c-family/c.opt:1459 #, no-c-format msgid "Warn about switches with boolean controlling expression." msgstr "" -#: c-family/c.opt:1462 +#: c-family/c.opt:1463 #, no-c-format msgid "Warn about switch values that are outside of the switch's type range." msgstr "" -#: c-family/c.opt:1466 +#: c-family/c.opt:1467 #, no-c-format msgid "" "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions " "are used." msgstr "" -#: c-family/c.opt:1470 +#: c-family/c.opt:1471 #, no-c-format msgid "Deprecated. This switch has no effect." msgstr "" -#: c-family/c.opt:1478 +#: c-family/c.opt:1479 #, no-c-format msgid "Warn on primary template declaration." msgstr "" -#: c-family/c.opt:1482 +#: c-family/c.opt:1483 #, no-c-format msgid "Diagnose errors when parsing a template." msgstr "" -#: c-family/c.opt:1486 +#: c-family/c.opt:1487 #, no-c-format msgid "Warn about simple-template-id in a constructor or destructor." msgstr "" -#: c-family/c.opt:1490 +#: c-family/c.opt:1491 #, no-c-format msgid "Warn about templates naming TU-local entities in a module." msgstr "" -#: c-family/c.opt:1494 +#: c-family/c.opt:1495 #, no-c-format msgid "Warn if a throw expression will always result in a call to terminate()." msgstr "" -#: c-family/c.opt:1498 +#: c-family/c.opt:1499 #, no-c-format msgid "Warn about features not present in traditional C." msgstr "" -#: c-family/c.opt:1502 +#: c-family/c.opt:1503 #, no-c-format msgid "" "Warn of prototypes causing type conversions different from what would happen " "in the absence of prototype." msgstr "" -#: c-family/c.opt:1518 +#: c-family/c.opt:1519 #, no-c-format msgid "" "Warn about trailing whitespace on lines except when in raw string literals." msgstr "" -#: c-family/c.opt:1522 +#: c-family/c.opt:1523 #, no-c-format msgid "" "Warn about trailing whitespace on lines except when in raw string " @@ -2944,88 +2949,88 @@ msgid "" "Wtrailing-whitespace=none when disabled." msgstr "" -#: c-family/c.opt:1526 +#: c-family/c.opt:1527 #, no-c-format msgid "" "Warn if trigraphs are encountered that might affect the meaning of the " "program." msgstr "" -#: c-family/c.opt:1530 +#: c-family/c.opt:1531 #, no-c-format msgid "Warn about @selector()s without previously declared methods." msgstr "" -#: c-family/c.opt:1534 +#: c-family/c.opt:1535 #, no-c-format msgid "Warn if an undefined macro is used in an #if directive." msgstr "" -#: c-family/c.opt:1538 +#: c-family/c.opt:1539 #, no-c-format msgid "Warn about invalid forms of delimited or named escape sequences." msgstr "" -#: c-family/c.opt:1546 +#: c-family/c.opt:1547 #, no-c-format msgid "Warn about unrecognized pragmas." msgstr "" -#: c-family/c.opt:1550 +#: c-family/c.opt:1551 #, no-c-format msgid "Warn about unsuffixed float constants." msgstr "" -#: c-family/c.opt:1554 +#: c-family/c.opt:1555 #, no-c-format msgid "" "Warn about character arrays initialized as unterminated character sequences " "with a string literal." msgstr "" -#: c-family/c.opt:1570 +#: c-family/c.opt:1571 #, no-c-format msgid "Warn when typedefs locally defined in a function are not used." msgstr "" -#: c-family/c.opt:1574 +#: c-family/c.opt:1575 #, no-c-format msgid "Warn about macros defined in the main file that are not used." msgstr "" -#: c-family/c.opt:1594 +#: c-family/c.opt:1595 #, no-c-format msgid "Warn about useless casts." msgstr "" -#: c-family/c.opt:1598 +#: c-family/c.opt:1599 #, no-c-format msgid "Warn about using variadic macros." msgstr "" -#: c-family/c.opt:1602 +#: c-family/c.opt:1603 #, no-c-format msgid "" "Warn about questionable usage of the macros used to retrieve variable " "arguments." msgstr "" -#: c-family/c.opt:1606 +#: c-family/c.opt:1607 #, no-c-format msgid "Warn about the most vexing parse syntactic ambiguity." msgstr "" -#: c-family/c.opt:1610 +#: c-family/c.opt:1611 #, no-c-format msgid "Warn if a virtual base has a non-trivial move assignment operator." msgstr "" -#: c-family/c.opt:1614 +#: c-family/c.opt:1615 #, no-c-format msgid "Warn if a variable length array is used." msgstr "" -#: c-family/c.opt:1618 +#: c-family/c.opt:1619 #, no-c-format msgid "" "-Wvla-larger-than=<number>\tWarn on unbounded uses of variable-length " @@ -3033,34 +3038,34 @@ msgid "" "larger than <number> bytes." msgstr "" -#: c-family/c.opt:1624 +#: c-family/c.opt:1625 #, no-c-format msgid "" "Disable Wvla-larger-than= warning. Equivalent to Wvla-larger-" "than=<SIZE_MAX> or larger." msgstr "" -#: c-family/c.opt:1628 +#: c-family/c.opt:1629 #, no-c-format msgid "Warn about mismatched declarations of VLA parameters." msgstr "" -#: c-family/c.opt:1632 +#: c-family/c.opt:1633 #, no-c-format msgid "Warn about deprecated uses of volatile qualifier." msgstr "" -#: c-family/c.opt:1636 +#: c-family/c.opt:1637 #, no-c-format msgid "Warn when a register variable is declared volatile." msgstr "" -#: c-family/c.opt:1640 +#: c-family/c.opt:1641 #, no-c-format msgid "Warn on direct virtual inheritance." msgstr "" -#: c-family/c.opt:1644 +#: c-family/c.opt:1645 #, no-c-format msgid "" "In C++, nonzero means warn about deprecated conversion from string literals " @@ -3068,195 +3073,195 @@ msgid "" "not deprecated by the ISO C standard." msgstr "" -#: c-family/c.opt:1648 +#: c-family/c.opt:1649 #, no-c-format msgid "" "Warn about xor operators where it appears the user meant exponentiation." msgstr "" -#: c-family/c.opt:1652 +#: c-family/c.opt:1653 #, no-c-format msgid "Warn when a literal '0' is used as null pointer." msgstr "" -#: c-family/c.opt:1656 +#: c-family/c.opt:1657 #, no-c-format msgid "Warn about accesses to interior zero-length array members." msgstr "" -#: c-family/c.opt:1660 +#: c-family/c.opt:1661 #, no-c-format msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)." msgstr "" -#: c-family/c.opt:1668 +#: c-family/c.opt:1669 #, no-c-format msgid "" "The version of the C++ ABI used for -Wabi warnings and link compatibility " "aliases." msgstr "" -#: c-family/c.opt:1672 +#: c-family/c.opt:1673 #, no-c-format msgid "Enforce class member access control semantics." msgstr "" -#: c-family/c.opt:1676 +#: c-family/c.opt:1677 #, no-c-format msgid "-fada-spec-parent=unit\tDump Ada specs as child units of given parent." msgstr "" -#: c-family/c.opt:1680 +#: c-family/c.opt:1681 #, no-c-format msgid "Support C++17 allocation of over-aligned types." msgstr "" -#: c-family/c.opt:1684 +#: c-family/c.opt:1685 #, no-c-format msgid "" "-faligned-new=<N>\tUse C++17 over-aligned type allocation for alignments " "greater than N." msgstr "" -#: c-family/c.opt:1695 c-family/c.opt:2016 c-family/c.opt:2429 -#: c-family/c.opt:2433 c-family/c.opt:2449 +#: c-family/c.opt:1696 c-family/c.opt:2017 c-family/c.opt:2430 +#: c-family/c.opt:2434 c-family/c.opt:2450 #, no-c-format msgid "No longer supported." msgstr "" -#: c-family/c.opt:1699 +#: c-family/c.opt:1700 #, no-c-format msgid "Recognize the \"asm\" keyword." msgstr "" -#: c-family/c.opt:1703 +#: c-family/c.opt:1704 #, no-c-format msgid "" "Assume C++ replaceable global operators new, new[], delete, delete[] don't " "read or write visible global state." msgstr "" -#: c-family/c.opt:1711 +#: c-family/c.opt:1712 #, no-c-format msgid "Recognize built-in functions." msgstr "" -#: c-family/c.opt:1718 +#: c-family/c.opt:1719 #, no-c-format msgid "Where shorter, use canonicalized paths to systems headers." msgstr "" -#: c-family/c.opt:1722 +#: c-family/c.opt:1723 #, no-c-format msgid "" "Enable the char8_t fundamental type and use it as the type for UTF-8 string " "and character literals." msgstr "" -#: c-family/c.opt:1810 +#: c-family/c.opt:1811 #, no-c-format msgid "Removed in GCC 8. This switch has no effect." msgstr "" -#: c-family/c.opt:1814 +#: c-family/c.opt:1815 #, no-c-format msgid "Enable support for C++ concepts." msgstr "" -#: c-family/c.opt:1818 +#: c-family/c.opt:1819 #, no-c-format msgid "Removed in GCC 15. This switch has no effect." msgstr "" -#: c-family/c.opt:1822 +#: c-family/c.opt:1823 #, no-c-format msgid "" "Specify maximum error replay depth during recursive diagnosis of a " "constraint satisfaction failure." msgstr "" -#: c-family/c.opt:1826 +#: c-family/c.opt:1827 #, no-c-format msgid "Allow the arguments of the '?' operator to have different types." msgstr "" -#: c-family/c.opt:1834 +#: c-family/c.opt:1835 #, no-c-format msgid "-fconst-string-class=<name>\tUse class <name> for constant strings." msgstr "" -#: c-family/c.opt:1838 +#: c-family/c.opt:1839 #, no-c-format msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth." msgstr "" -#: c-family/c.opt:1842 +#: c-family/c.opt:1843 #, no-c-format msgid "" "-fconstexpr-cache-depth=<number>\tSpecify maximum constexpr recursion cache " "depth." msgstr "" -#: c-family/c.opt:1846 +#: c-family/c.opt:1847 #, no-c-format msgid "Allow IEC559 floating point exceptions in constant expressions." msgstr "" -#: c-family/c.opt:1850 +#: c-family/c.opt:1851 #, no-c-format msgid "" "-fconstexpr-loop-limit=<number>\tSpecify maximum constexpr loop iteration " "count." msgstr "" -#: c-family/c.opt:1854 +#: c-family/c.opt:1855 #, no-c-format msgid "" "-fconstexpr-ops-limit=<number>\tSpecify maximum number of constexpr " "operations during a single constexpr evaluation." msgstr "" -#: c-family/c.opt:1858 +#: c-family/c.opt:1859 #, no-c-format msgid "Enable certain features present in drafts of C++ Contracts." msgstr "" -#: c-family/c.opt:1871 +#: c-family/c.opt:1872 #, no-c-format msgid "" "-fcontract-assumption-mode=[on|off]\tEnable or disable treating axiom level " "contracts as assumptions (default on)." msgstr "" -#: c-family/c.opt:1875 +#: c-family/c.opt:1876 #, no-c-format msgid "" "-fcontract-build-level=[off|default|audit]\tSpecify max contract level to " "generate runtime checks for." msgstr "" -#: c-family/c.opt:1879 +#: c-family/c.opt:1880 #, no-c-format msgid "" "-fcontract-strict-declarations=[on|off]\tEnable or disable warnings on " "generalized redeclaration of functions with contracts (default off)." msgstr "" -#: c-family/c.opt:1883 +#: c-family/c.opt:1884 #, no-c-format msgid "" "-fcontract-mode=[on|off]\tEnable or disable all contract facilities (default " "on)." msgstr "" -#: c-family/c.opt:1887 +#: c-family/c.opt:1888 #, no-c-format msgid "" "-fcontract-continuation-mode=[on|off]\tEnable or disable contract " "continuation mode (default off)." msgstr "" -#: c-family/c.opt:1891 +#: c-family/c.opt:1892 #, no-c-format msgid "" "-fcontract-role=<name>:<semantics>\tSpecify the semantics for all levels in " @@ -3264,451 +3269,451 @@ msgid "" "(ex: opt:assume,assume,assume)." msgstr "" -#: c-family/c.opt:1895 +#: c-family/c.opt:1896 #, no-c-format msgid "" "-fcontract-semantic=<level>:<semantic>\tSpecify the concrete semantics for " "level." msgstr "" -#: c-family/c.opt:1899 +#: c-family/c.opt:1900 #, no-c-format msgid "Enable C++ coroutines (experimental)." msgstr "" -#: c-family/c.opt:1903 +#: c-family/c.opt:1904 #, no-c-format msgid "Emit debug annotations during preprocessing." msgstr "" -#: c-family/c.opt:1911 +#: c-family/c.opt:1912 #, no-c-format msgid "Factor complex constructors and destructors to favor space over speed." msgstr "" -#: c-family/c.opt:1919 +#: c-family/c.opt:1920 #, no-c-format msgid "Print hierarchical comparisons when template types are mismatched." msgstr "" -#: c-family/c.opt:1923 +#: c-family/c.opt:1924 #, no-c-format msgid "Note all candidates during overload resolution failure." msgstr "" -#: c-family/c.opt:1927 +#: c-family/c.opt:1928 #, no-c-format msgid "Preprocess directives only." msgstr "" -#: c-family/c.opt:1931 +#: c-family/c.opt:1932 #, no-c-format msgid "Permit '$' as an identifier character." msgstr "" -#: c-family/c.opt:1935 +#: c-family/c.opt:1936 #, no-c-format msgid "" "-fmacro-prefix-map=<old>=<new>\tMap one directory name to another in " "__FILE__, __BASE_FILE__, and __builtin_FILE()." msgstr "" -#: c-family/c.opt:1939 +#: c-family/c.opt:1940 #, no-c-format msgid "Write all declarations as Ada code transitively." msgstr "" -#: c-family/c.opt:1943 +#: c-family/c.opt:1944 #, no-c-format msgid "Write all declarations as Ada code for the given file only." msgstr "" -#: c-family/c.opt:1950 +#: c-family/c.opt:1951 #, no-c-format msgid "Do not elide common elements in template comparisons." msgstr "" -#: c-family/c.opt:1954 +#: c-family/c.opt:1955 #, no-c-format msgid "Generate code to check exception specifications." msgstr "" -#: c-family/c.opt:1961 +#: c-family/c.opt:1962 #, no-c-format msgid "" "-fexec-charset=<cset>\tConvert all strings and character constants to " "character set <cset>." msgstr "" -#: c-family/c.opt:1965 +#: c-family/c.opt:1966 #, no-c-format msgid "Permit universal character names (\\u and \\U) in identifiers." msgstr "" -#: c-family/c.opt:1969 +#: c-family/c.opt:1970 #, no-c-format msgid "" "-finput-charset=<cset>\tSpecify the default character set for source files." msgstr "" -#: c-family/c.opt:1973 +#: c-family/c.opt:1974 #, no-c-format msgid "" "Support dynamic initialization of thread-local variables in a different " "translation unit." msgstr "" -#: c-family/c.opt:1980 +#: c-family/c.opt:1981 #, no-c-format msgid "Fold calls to simple inline functions." msgstr "" -#: c-family/c.opt:1987 +#: c-family/c.opt:1988 #, no-c-format msgid "Do not assume that standard C libraries and \"main\" exist." msgstr "" -#: c-family/c.opt:1991 +#: c-family/c.opt:1992 #, no-c-format msgid "Recognize GNU-defined keywords." msgstr "" -#: c-family/c.opt:1995 +#: c-family/c.opt:1996 #, no-c-format msgid "Generate code for GNU runtime environment." msgstr "" -#: c-family/c.opt:1999 +#: c-family/c.opt:2000 #, no-c-format msgid "Use traditional GNU semantics for inline functions." msgstr "" -#: c-family/c.opt:2012 +#: c-family/c.opt:2013 #, no-c-format msgid "Assume normal C execution environment." msgstr "" -#: c-family/c.opt:2020 +#: c-family/c.opt:2021 #, no-c-format msgid "Implement P2564 for consteval propagation." msgstr "" -#: c-family/c.opt:2024 +#: c-family/c.opt:2025 #, no-c-format msgid "Export functions even if they can be inlined." msgstr "" -#: c-family/c.opt:2028 +#: c-family/c.opt:2029 #, no-c-format msgid "Make inline functions constexpr by default." msgstr "" -#: c-family/c.opt:2032 +#: c-family/c.opt:2033 #, no-c-format msgid "Emit implicit instantiations of inline templates." msgstr "" -#: c-family/c.opt:2036 +#: c-family/c.opt:2037 #, no-c-format msgid "Emit implicit instantiations of templates." msgstr "" -#: c-family/c.opt:2040 +#: c-family/c.opt:2041 #, no-c-format msgid "Implement C++17 inheriting constructor semantics." msgstr "" -#: c-family/c.opt:2047 +#: c-family/c.opt:2048 #, no-c-format msgid "Don't emit dllexported inline functions unless needed." msgstr "" -#: c-family/c.opt:2054 +#: c-family/c.opt:2055 #, no-c-format msgid "" "Allow implicit conversions between vectors with differing numbers of " "subparts and/or differing element types." msgstr "" -#: c-family/c.opt:2058 +#: c-family/c.opt:2059 #, no-c-format msgid "Enable C++20 Modules (experimental)." msgstr "" -#: c-family/c.opt:2066 +#: c-family/c.opt:2067 #, no-c-format msgid "Enable C++ header module (experimental)." msgstr "" -#: c-family/c.opt:2073 +#: c-family/c.opt:2074 #, no-c-format msgid "" "Member functions defined within their class are inline in module purview." msgstr "" -#: c-family/c.opt:2077 +#: c-family/c.opt:2078 #, no-c-format msgid "Only emit Compiled Module Interface." msgstr "" -#: c-family/c.opt:2081 +#: c-family/c.opt:2082 #, no-c-format msgid "Mapper for module to CMI files." msgstr "" -#: c-family/c.opt:2085 +#: c-family/c.opt:2086 #, no-c-format msgid "Enable lazy module importing." msgstr "" -#: c-family/c.opt:2093 +#: c-family/c.opt:2094 #, no-c-format msgid "Warn about macros that have conflicting header units definitions." msgstr "" -#: c-family/c.opt:2097 +#: c-family/c.opt:2098 #, no-c-format msgid "Warn if pointers of distinct types are compared without a cast." msgstr "" -#: c-family/c.opt:2101 +#: c-family/c.opt:2102 #, no-c-format msgid "Note #include directives translated to import declarations." msgstr "" -#: c-family/c.opt:2105 +#: c-family/c.opt:2106 #, no-c-format msgid "" "Note #include directives not translated to import declarations, and not " "known to be textual." msgstr "" -#: c-family/c.opt:2109 +#: c-family/c.opt:2110 #, no-c-format msgid "Note a #include translation of a specific header." msgstr "" -#: c-family/c.opt:2113 +#: c-family/c.opt:2114 #, no-c-format msgid "Note Compiled Module Interface pathnames." msgstr "" -#: c-family/c.opt:2117 +#: c-family/c.opt:2118 #, no-c-format msgid "" "Note Compiled Module Interface pathname of a specific module or header-unit." msgstr "" -#: c-family/c.opt:2121 +#: c-family/c.opt:2122 #, no-c-format msgid "" "fmax-include-depth=<number> Set the maximum depth of the nested #include." msgstr "" -#: c-family/c.opt:2125 +#: c-family/c.opt:2126 #, no-c-format msgid "Don't warn about uses of Microsoft extensions." msgstr "" -#: c-family/c.opt:2144 +#: c-family/c.opt:2145 #, no-c-format msgid "" "Implement resolution of DR 150 for matching of template template arguments." msgstr "" -#: c-family/c.opt:2148 +#: c-family/c.opt:2149 #, no-c-format msgid "Generate code for NeXT (Apple macOS) runtime environment." msgstr "" -#: c-family/c.opt:2152 +#: c-family/c.opt:2153 #, no-c-format msgid "Assume that receivers of Objective-C messages may be nil." msgstr "" -#: c-family/c.opt:2156 +#: c-family/c.opt:2157 #, no-c-format msgid "" "Allow access to instance variables as if they were local declarations within " "instance method implementations." msgstr "" -#: c-family/c.opt:2160 +#: c-family/c.opt:2161 #, no-c-format msgid "" "-fvisibility=[private|protected|public|package]\tSet the default symbol " "visibility." msgstr "" -#: c-family/c.opt:2185 +#: c-family/c.opt:2186 #, no-c-format msgid "" "Treat a throw() exception specification as noexcept to improve code size." msgstr "" -#: c-family/c.opt:2189 +#: c-family/c.opt:2190 #, no-c-format msgid "" "Specify which ABI to use for Objective-C family code and meta-data " "generation." msgstr "" -#: c-family/c.opt:2195 +#: c-family/c.opt:2196 #, no-c-format msgid "" "Generate special Objective-C methods to initialize/destroy non-POD C++ " "ivars, if needed." msgstr "" -#: c-family/c.opt:2199 +#: c-family/c.opt:2200 #, no-c-format msgid "Allow fast jumps to the message dispatcher." msgstr "" -#: c-family/c.opt:2205 +#: c-family/c.opt:2206 #, no-c-format msgid "Enable Objective-C exception and synchronization syntax." msgstr "" -#: c-family/c.opt:2209 +#: c-family/c.opt:2210 #, no-c-format msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs." msgstr "" -#: c-family/c.opt:2213 +#: c-family/c.opt:2214 #, no-c-format msgid "" "Enable inline checks for nil receivers with the NeXT runtime and ABI version " "2." msgstr "" -#: c-family/c.opt:2218 +#: c-family/c.opt:2219 #, no-c-format msgid "Enable Objective-C setjmp exception handling runtime." msgstr "" -#: c-family/c.opt:2222 +#: c-family/c.opt:2223 #, no-c-format msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0." msgstr "" -#: c-family/c.opt:2226 +#: c-family/c.opt:2227 #, no-c-format msgid "Enable OpenACC." msgstr "" -#: c-family/c.opt:2230 +#: c-family/c.opt:2231 #, no-c-format msgid "Specify default OpenACC compute dimensions." msgstr "" -#: c-family/c.opt:2234 +#: c-family/c.opt:2235 #, no-c-format msgid "Enable OpenMP (implies -frecursive in Fortran)." msgstr "" -#: c-family/c.opt:2238 +#: c-family/c.opt:2239 #, no-c-format msgid "Enable OpenMP's SIMD directives." msgstr "" -#: c-family/c.opt:2242 +#: c-family/c.opt:2243 #, no-c-format msgid "Recognize C++ keywords like \"compl\" and \"xor\"." msgstr "" -#: c-family/c.opt:2253 +#: c-family/c.opt:2254 #, no-c-format msgid "Look for and use PCH files even when preprocessing." msgstr "" -#: c-family/c.opt:2257 +#: c-family/c.opt:2258 #, no-c-format msgid "Downgrade conformance errors to warnings." msgstr "" -#: c-family/c.opt:2261 +#: c-family/c.opt:2262 #, no-c-format msgid "Enable Plan 9 language extensions." msgstr "" -#: c-family/c.opt:2265 +#: c-family/c.opt:2266 #, no-c-format msgid "Treat the input file as already preprocessed." msgstr "" -#: c-family/c.opt:2273 +#: c-family/c.opt:2274 #, no-c-format msgid "" "-ftrack-macro-expansion=<0|1|2>\tTrack locations of tokens coming from macro " "expansion and display them in error messages." msgstr "" -#: c-family/c.opt:2277 +#: c-family/c.opt:2278 #, no-c-format msgid "" "Do not pretty-print template specializations as the template signature " "followed by the arguments." msgstr "" -#: c-family/c.opt:2281 +#: c-family/c.opt:2282 #, no-c-format msgid "Treat known sprintf return values as constants." msgstr "" -#: c-family/c.opt:2285 +#: c-family/c.opt:2286 #, no-c-format msgid "Enable lifetime extension of range based for temporaries." msgstr "" -#: c-family/c.opt:2289 +#: c-family/c.opt:2290 #, no-c-format msgid "" "Used in Fix-and-Continue mode to indicate that object files may be swapped " "in at runtime." msgstr "" -#: c-family/c.opt:2293 +#: c-family/c.opt:2294 #, no-c-format msgid "Removed in GCC 10. This switch has no effect." msgstr "" -#: c-family/c.opt:2297 +#: c-family/c.opt:2298 #, no-c-format msgid "Generate run time type descriptor information." msgstr "" -#: c-family/c.opt:2301 +#: c-family/c.opt:2302 #, no-c-format msgid "Look for the main source file on the include path." msgstr "" -#: c-family/c.opt:2308 ada/gcc-interface/lang.opt:81 +#: c-family/c.opt:2309 ada/gcc-interface/lang.opt:81 #, no-c-format msgid "Use the narrowest integer type possible for enumeration types." msgstr "" -#: c-family/c.opt:2312 +#: c-family/c.opt:2313 #, no-c-format msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"." msgstr "" -#: c-family/c.opt:2316 +#: c-family/c.opt:2317 #, no-c-format msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed." msgstr "" -#: c-family/c.opt:2320 ada/gcc-interface/lang.opt:85 +#: c-family/c.opt:2321 ada/gcc-interface/lang.opt:85 #, no-c-format msgid "Make \"char\" signed by default." msgstr "" -#: c-family/c.opt:2324 +#: c-family/c.opt:2325 #, no-c-format msgid "Enable C++14 sized deallocation support." msgstr "" -#: c-family/c.opt:2331 +#: c-family/c.opt:2332 #, no-c-format msgid "" "-fstrict-flex-arrays=<level> Control when to treat the trailing array of " @@ -3717,450 +3722,450 @@ msgid "" "structures as flexible array members." msgstr "" -#: c-family/c.opt:2338 +#: c-family/c.opt:2339 #, no-c-format msgid "" "-fsso-struct=[big-endian|little-endian|native]\tSet the default scalar " "storage order." msgstr "" -#: c-family/c.opt:2354 +#: c-family/c.opt:2355 #, no-c-format msgid "Display statistics accumulated during compilation." msgstr "" -#: c-family/c.opt:2358 +#: c-family/c.opt:2359 #, no-c-format msgid "" "Assume that values of enumeration type are always within the minimum range " "of that type." msgstr "" -#: c-family/c.opt:2365 c-family/c.opt:2370 +#: c-family/c.opt:2366 c-family/c.opt:2371 #, no-c-format msgid "" "Follow the C++17 evaluation order requirements for assignment expressions, " "shift, member function calls, etc." msgstr "" -#: c-family/c.opt:2387 +#: c-family/c.opt:2388 #, no-c-format msgid "" "Set the maximum number of template instantiation notes for a single warning " "or error." msgstr "" -#: c-family/c.opt:2394 +#: c-family/c.opt:2395 #, no-c-format msgid "" "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth." msgstr "" -#: c-family/c.opt:2401 +#: c-family/c.opt:2402 #, no-c-format msgid "" "-fno-threadsafe-statics\tDo not generate thread-safe code for initializing " "local statics." msgstr "" -#: c-family/c.opt:2405 +#: c-family/c.opt:2406 #, no-c-format msgid "" "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned." msgstr "" -#: c-family/c.opt:2409 ada/gcc-interface/lang.opt:89 +#: c-family/c.opt:2410 ada/gcc-interface/lang.opt:89 #, no-c-format msgid "Make \"char\" unsigned by default." msgstr "" -#: c-family/c.opt:2413 +#: c-family/c.opt:2414 #, no-c-format msgid "Use __cxa_atexit to register destructors." msgstr "" -#: c-family/c.opt:2417 +#: c-family/c.opt:2418 #, no-c-format msgid "Use __cxa_get_exception_ptr in exception handling." msgstr "" -#: c-family/c.opt:2421 +#: c-family/c.opt:2422 #, no-c-format msgid "Marks all inlined functions and methods as having hidden visibility." msgstr "" -#: c-family/c.opt:2425 +#: c-family/c.opt:2426 #, no-c-format msgid "Changes visibility to match Microsoft Visual Studio by default." msgstr "" -#: c-family/c.opt:2437 +#: c-family/c.opt:2438 #, no-c-format msgid "Emit common-like symbols as weak symbols." msgstr "" -#: c-family/c.opt:2441 +#: c-family/c.opt:2442 #, no-c-format msgid "" "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants " "to character set <cset>." msgstr "" -#: c-family/c.opt:2445 +#: c-family/c.opt:2446 #, no-c-format msgid "Generate a #line directive pointing at the current working directory." msgstr "" -#: c-family/c.opt:2453 +#: c-family/c.opt:2454 #, no-c-format msgid "" "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode." msgstr "" -#: c-family/c.opt:2457 +#: c-family/c.opt:2458 #, no-c-format msgid "Dump declarations to a .decl file." msgstr "" -#: c-family/c.opt:2461 +#: c-family/c.opt:2462 #, no-c-format msgid "" "-femit-struct-debug-baseonly\tAggressive reduced debug info for structs." msgstr "" -#: c-family/c.opt:2465 +#: c-family/c.opt:2466 #, no-c-format msgid "" "-femit-struct-debug-reduced\tConservative reduced debug info for structs." msgstr "" -#: c-family/c.opt:2469 +#: c-family/c.opt:2470 #, no-c-format msgid "" "-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for " "structs." msgstr "" -#: c-family/c.opt:2473 +#: c-family/c.opt:2474 #, no-c-format msgid "" "Interpret imaginary, fixed-point, or other gnu number suffix as the " "corresponding number literal rather than a user-defined number literal." msgstr "" -#: c-family/c.opt:2478 +#: c-family/c.opt:2479 #, no-c-format msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path." msgstr "" -#: c-family/c.opt:2482 +#: c-family/c.opt:2483 #, no-c-format msgid "-imacros <file>\tAccept definition of macros in <file>." msgstr "" -#: c-family/c.opt:2486 +#: c-family/c.opt:2487 #, no-c-format msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory." msgstr "" -#: c-family/c.opt:2490 +#: c-family/c.opt:2491 #, no-c-format msgid "-include <file>\tInclude the contents of <file> before other files." msgstr "" -#: c-family/c.opt:2494 +#: c-family/c.opt:2495 #, no-c-format msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options." msgstr "" -#: c-family/c.opt:2498 +#: c-family/c.opt:2499 #, no-c-format msgid "-isysroot <dir>\tSet <dir> to be the system root directory." msgstr "" -#: c-family/c.opt:2502 +#: c-family/c.opt:2503 #, no-c-format msgid "-isystem <dir>\tAdd <dir> to the start of the system include path." msgstr "" -#: c-family/c.opt:2506 +#: c-family/c.opt:2507 #, no-c-format msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path." msgstr "" -#: c-family/c.opt:2510 +#: c-family/c.opt:2511 #, no-c-format msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path." msgstr "" -#: c-family/c.opt:2514 +#: c-family/c.opt:2515 #, no-c-format msgid "" "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path." msgstr "" -#: c-family/c.opt:2524 +#: c-family/c.opt:2525 #, no-c-format msgid "" "Do not search standard system include directories (those specified with -" "isystem will still be used)." msgstr "" -#: c-family/c.opt:2528 +#: c-family/c.opt:2529 #, no-c-format msgid "Do not search standard system include directories for C++." msgstr "" -#: c-family/c.opt:2540 +#: c-family/c.opt:2541 #, no-c-format msgid "Generate C header of platform-specific features." msgstr "" -#: c-family/c.opt:2544 +#: c-family/c.opt:2545 #, no-c-format msgid "Remap file names when including files." msgstr "" -#: c-family/c.opt:2548 c-family/c.opt:2552 +#: c-family/c.opt:2549 c-family/c.opt:2553 #, no-c-format msgid "" "Conform to the ISO 1998 C++ standard revised by the 2003 technical " "corrigendum." msgstr "" -#: c-family/c.opt:2556 +#: c-family/c.opt:2557 #, no-c-format msgid "Conform to the ISO 2011 C++ standard." msgstr "" -#: c-family/c.opt:2560 +#: c-family/c.opt:2561 #, no-c-format msgid "Deprecated in favor of -std=c++11." msgstr "" -#: c-family/c.opt:2564 +#: c-family/c.opt:2565 #, no-c-format msgid "Deprecated in favor of -std=c++14." msgstr "" -#: c-family/c.opt:2568 +#: c-family/c.opt:2569 #, no-c-format msgid "Conform to the ISO 2014 C++ standard." msgstr "" -#: c-family/c.opt:2572 +#: c-family/c.opt:2573 #, no-c-format msgid "Deprecated in favor of -std=c++17." msgstr "" -#: c-family/c.opt:2576 +#: c-family/c.opt:2577 #, no-c-format msgid "Conform to the ISO 2017 C++ standard." msgstr "" -#: c-family/c.opt:2580 c-family/c.opt:2584 +#: c-family/c.opt:2581 c-family/c.opt:2585 #, no-c-format msgid "" "Conform to the ISO 2020 C++ standard (experimental and incomplete support)." msgstr "" -#: c-family/c.opt:2588 c-family/c.opt:2592 +#: c-family/c.opt:2589 c-family/c.opt:2593 #, no-c-format msgid "" "Conform to the ISO 2023 C++ standard (published in 2024; experimental and " "incomplete support)." msgstr "" -#: c-family/c.opt:2596 c-family/c.opt:2600 +#: c-family/c.opt:2597 c-family/c.opt:2601 #, no-c-format msgid "" "Conform to the ISO 2026 C++ draft standard (experimental and incomplete " "support)." msgstr "" -#: c-family/c.opt:2604 c-family/c.opt:2766 +#: c-family/c.opt:2605 c-family/c.opt:2767 #, no-c-format msgid "Conform to the ISO 2011 C standard." msgstr "" -#: c-family/c.opt:2608 +#: c-family/c.opt:2609 #, no-c-format msgid "Deprecated in favor of -std=c11." msgstr "" -#: c-family/c.opt:2612 c-family/c.opt:2616 c-family/c.opt:2770 -#: c-family/c.opt:2774 +#: c-family/c.opt:2613 c-family/c.opt:2617 c-family/c.opt:2771 +#: c-family/c.opt:2775 #, no-c-format msgid "Conform to the ISO 2017 C standard (published in 2018)." msgstr "" -#: c-family/c.opt:2620 c-family/c.opt:2778 +#: c-family/c.opt:2621 c-family/c.opt:2779 #, no-c-format msgid "Conform to the ISO 2023 C standard (published in 2024)." msgstr "" -#: c-family/c.opt:2624 +#: c-family/c.opt:2625 #, no-c-format msgid "Deprecated in favor of -std=c23." msgstr "" -#: c-family/c.opt:2628 +#: c-family/c.opt:2629 #, no-c-format msgid "" "Conform to the ISO 202Y C standard draft (experimental and incomplete " "support)." msgstr "" -#: c-family/c.opt:2632 c-family/c.opt:2636 c-family/c.opt:2750 +#: c-family/c.opt:2633 c-family/c.opt:2637 c-family/c.opt:2751 #, no-c-format msgid "Conform to the ISO 1990 C standard." msgstr "" -#: c-family/c.opt:2640 c-family/c.opt:2758 +#: c-family/c.opt:2641 c-family/c.opt:2759 #, no-c-format msgid "Conform to the ISO 1999 C standard." msgstr "" -#: c-family/c.opt:2644 +#: c-family/c.opt:2645 #, no-c-format msgid "Deprecated in favor of -std=c99." msgstr "" -#: c-family/c.opt:2648 c-family/c.opt:2653 +#: c-family/c.opt:2649 c-family/c.opt:2654 #, no-c-format msgid "" "Conform to the ISO 1998 C++ standard revised by the 2003 technical " "corrigendum with GNU extensions." msgstr "" -#: c-family/c.opt:2658 +#: c-family/c.opt:2659 #, no-c-format msgid "Conform to the ISO 2011 C++ standard with GNU extensions." msgstr "" -#: c-family/c.opt:2662 +#: c-family/c.opt:2663 #, no-c-format msgid "Deprecated in favor of -std=gnu++11." msgstr "" -#: c-family/c.opt:2666 +#: c-family/c.opt:2667 #, no-c-format msgid "Deprecated in favor of -std=gnu++14." msgstr "" -#: c-family/c.opt:2670 +#: c-family/c.opt:2671 #, no-c-format msgid "Conform to the ISO 2014 C++ standard with GNU extensions." msgstr "" -#: c-family/c.opt:2674 +#: c-family/c.opt:2675 #, no-c-format msgid "Deprecated in favor of -std=gnu++17." msgstr "" -#: c-family/c.opt:2678 +#: c-family/c.opt:2679 #, no-c-format msgid "Conform to the ISO 2017 C++ standard with GNU extensions." msgstr "" -#: c-family/c.opt:2682 c-family/c.opt:2686 +#: c-family/c.opt:2683 c-family/c.opt:2687 #, no-c-format msgid "" "Conform to the ISO 2020 C++ standard with GNU extensions (experimental and " "incomplete support)." msgstr "" -#: c-family/c.opt:2690 c-family/c.opt:2694 +#: c-family/c.opt:2691 c-family/c.opt:2695 #, no-c-format msgid "" "Conform to the ISO 2023 C++ standard with GNU extensions (published in 2024; " "experimental and incomplete support)." msgstr "" -#: c-family/c.opt:2698 c-family/c.opt:2702 +#: c-family/c.opt:2699 c-family/c.opt:2703 #, no-c-format msgid "" "Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental " "and incomplete support)." msgstr "" -#: c-family/c.opt:2706 +#: c-family/c.opt:2707 #, no-c-format msgid "Conform to the ISO 2011 C standard with GNU extensions." msgstr "" -#: c-family/c.opt:2710 +#: c-family/c.opt:2711 #, no-c-format msgid "Deprecated in favor of -std=gnu11." msgstr "" -#: c-family/c.opt:2714 c-family/c.opt:2718 +#: c-family/c.opt:2715 c-family/c.opt:2719 #, no-c-format msgid "" "Conform to the ISO 2017 C standard (published in 2018) with GNU extensions." msgstr "" -#: c-family/c.opt:2722 +#: c-family/c.opt:2723 #, no-c-format msgid "" "Conform to the ISO 2023 C standard (published in 2024) with GNU extensions." msgstr "" -#: c-family/c.opt:2726 +#: c-family/c.opt:2727 #, no-c-format msgid "Deprecated in favor of -std=gnu23." msgstr "" -#: c-family/c.opt:2730 +#: c-family/c.opt:2731 #, no-c-format msgid "" "Conform to the ISO 202Y C standard draft with GNU extensions (experimental " "and incomplete support)." msgstr "" -#: c-family/c.opt:2734 c-family/c.opt:2738 +#: c-family/c.opt:2735 c-family/c.opt:2739 #, no-c-format msgid "Conform to the ISO 1990 C standard with GNU extensions." msgstr "" -#: c-family/c.opt:2742 +#: c-family/c.opt:2743 #, no-c-format msgid "Conform to the ISO 1999 C standard with GNU extensions." msgstr "" -#: c-family/c.opt:2746 +#: c-family/c.opt:2747 #, no-c-format msgid "Deprecated in favor of -std=gnu99." msgstr "" -#: c-family/c.opt:2754 +#: c-family/c.opt:2755 #, no-c-format msgid "Conform to the ISO 1990 C standard as amended in 1994." msgstr "" -#: c-family/c.opt:2762 +#: c-family/c.opt:2763 #, no-c-format msgid "Deprecated in favor of -std=iso9899:1999." msgstr "" -#: c-family/c.opt:2782 +#: c-family/c.opt:2783 #, no-c-format msgid "" "-stdlib=[libstdc++|libc++]\tThe standard library to be used for C++ headers " "and runtime." msgstr "" -#: c-family/c.opt:2799 +#: c-family/c.opt:2800 #, no-c-format msgid "Enable traditional preprocessing." msgstr "" -#: c-family/c.opt:2803 +#: c-family/c.opt:2804 #, no-c-format msgid "-trigraphs\tSupport ISO C trigraphs." msgstr "" -#: c-family/c.opt:2807 +#: c-family/c.opt:2808 #, no-c-format msgid "Do not predefine system-specific and GCC-specific macros." msgstr "" @@ -4190,50 +4195,50 @@ msgstr "" msgid "Enable Cobol lex debugging" msgstr "" -#: cobol/lang.opt:90 +#: cobol/lang.opt:86 #, no-c-format msgid "-findicator-column=<n>\tColumn after which Region A begins" msgstr "" -#: cobol/lang.opt:94 +#: cobol/lang.opt:90 #, no-c-format msgid "-finternal-ebcdic\tInternal processing is in EBCDIC Code Page 1140" msgstr "" -#: cobol/lang.opt:102 +#: cobol/lang.opt:94 #, no-c-format msgid "Enable/disable static linkage for CALL literals" msgstr "" -#: cobol/lang.opt:106 +#: cobol/lang.opt:98 #, no-c-format msgid "Enable Cobol parser debugging" msgstr "" -#: cobol/lang.opt:110 +#: cobol/lang.opt:102 #, no-c-format msgid "Enable Cobol yacc debugging" msgstr "" -#: cobol/lang.opt:114 +#: cobol/lang.opt:106 #, no-c-format msgid "preprocess <source_filter> before compiling" msgstr "" -#: cobol/lang.opt:134 +#: cobol/lang.opt:126 #, no-c-format msgid "" "-main\tThe first program-id in the next source file is called by a generated " "main() entry point" msgstr "" -#: cobol/lang.opt:138 +#: cobol/lang.opt:130 #, no-c-format msgid "" "-main=<source_file> source_file/PROGRAM-ID is called by the generated main()" msgstr "" -#: cobol/lang.opt:142 +#: cobol/lang.opt:134 #, no-c-format msgid "-nomain\tNo main() function is created from COBOL source files" msgstr "" @@ -4414,217 +4419,222 @@ msgstr "" #: d/lang.opt:332 #, no-c-format -msgid "Generate code for class invariant contracts." +msgid "Include imported modules in the compilation." msgstr "" #: d/lang.opt:336 #, no-c-format -msgid "Generate a default D main() function when compiling." +msgid "Generate code for class invariant contracts." msgstr "" #: d/lang.opt:340 #, no-c-format +msgid "Generate a default D main() function when compiling." +msgstr "" + +#: d/lang.opt:344 +#, no-c-format msgid "" "-fmodule-file=<package.module>=<filespec>\tuse <filespec> as source file for " "<package.module>." msgstr "" -#: d/lang.opt:344 +#: d/lang.opt:348 #, no-c-format msgid "Generate ModuleInfo struct for output module." msgstr "" -#: d/lang.opt:348 +#: d/lang.opt:352 #, no-c-format msgid "" "Process all modules specified on the command line, but only generate code " "for the module specified by the argument." msgstr "" -#: d/lang.opt:352 +#: d/lang.opt:356 #, no-c-format msgid "Generate code for postcondition contracts." msgstr "" -#: d/lang.opt:356 +#: d/lang.opt:360 #, no-c-format msgid "Generate code for precondition contracts." msgstr "" -#: d/lang.opt:360 +#: d/lang.opt:364 #, no-c-format msgid "Turn on all upcoming D language features." msgstr "" -#: d/lang.opt:364 +#: d/lang.opt:368 #, no-c-format msgid "Implement D bit-fields." msgstr "" -#: d/lang.opt:368 +#: d/lang.opt:372 #, no-c-format msgid "Implement DIP1000: Scoped pointers." msgstr "" -#: d/lang.opt:372 +#: d/lang.opt:376 #, no-c-format msgid "Implement DIP1008: Allow exceptions in @nogc code." msgstr "" -#: d/lang.opt:376 +#: d/lang.opt:380 #, no-c-format msgid "Implement DIP1021: Mutable function arguments." msgstr "" -#: d/lang.opt:380 +#: d/lang.opt:384 #, no-c-format msgid "Destruct fields of partially constructed objects." msgstr "" -#: d/lang.opt:384 +#: d/lang.opt:388 #, no-c-format msgid "Use field-wise comparisons for struct equality." msgstr "" -#: d/lang.opt:388 +#: d/lang.opt:392 #, no-c-format msgid "" "When a symbol is resolved, check `alias this' scope before going to upper " "scopes." msgstr "" -#: d/lang.opt:392 +#: d/lang.opt:396 #, no-c-format msgid "" "Disallow unsound immutable conversions that were formerly incorrectly " "permitted." msgstr "" -#: d/lang.opt:396 +#: d/lang.opt:400 #, no-c-format msgid "Implement 'in' parameters to mean scope const." msgstr "" -#: d/lang.opt:400 +#: d/lang.opt:404 #, no-c-format msgid "" "Implement 'in' contracts of overridden methods to be a superset of parent " "contract." msgstr "" -#: d/lang.opt:404 +#: d/lang.opt:408 #, no-c-format msgid "Disable access to shared memory objects." msgstr "" -#: d/lang.opt:408 +#: d/lang.opt:412 #, no-c-format msgid "Enable safety checks on all functions by default." msgstr "" -#: d/lang.opt:412 +#: d/lang.opt:416 #, no-c-format msgid "Enable rvalue arguments to ref parameters." msgstr "" -#: d/lang.opt:416 +#: d/lang.opt:420 #, no-c-format msgid "Disable access to variables marked `@system' from @safe code." msgstr "" -#: d/lang.opt:420 +#: d/lang.opt:424 #, no-c-format msgid "Compile release version." msgstr "" -#: d/lang.opt:424 +#: d/lang.opt:428 #, no-c-format msgid "Turn off all revertable D language features." msgstr "" -#: d/lang.opt:428 +#: d/lang.opt:432 #, no-c-format msgid "Revert DIP1000: Scoped pointers." msgstr "" -#: d/lang.opt:432 +#: d/lang.opt:436 #, no-c-format msgid "Don't destruct fields of partially constructed objects." msgstr "" -#: d/lang.opt:436 +#: d/lang.opt:440 #, no-c-format msgid "Don't use C-style integral promotion for unary '+', '-' and '~'." msgstr "" -#: d/lang.opt:444 +#: d/lang.opt:448 #, no-c-format msgid "" "-fsave-mixins=<filename>\tExpand and save mixins to file specified by " "<filename>." msgstr "" -#: d/lang.opt:448 +#: d/lang.opt:452 #, no-c-format msgid "Generate code for switches without a default case." msgstr "" -#: d/lang.opt:452 +#: d/lang.opt:456 #, no-c-format msgid "List information on all D language transitions." msgstr "" -#: d/lang.opt:456 +#: d/lang.opt:460 #, no-c-format msgid "List all non-mutable fields which occupy an object instance." msgstr "" -#: d/lang.opt:460 +#: d/lang.opt:464 #, no-c-format msgid "List all usages of 'in' on parameter." msgstr "" -#: d/lang.opt:464 +#: d/lang.opt:468 #, no-c-format msgid "List all hidden GC allocations." msgstr "" -#: d/lang.opt:468 +#: d/lang.opt:472 #, no-c-format msgid "List statistics on template instantiations." msgstr "" -#: d/lang.opt:472 +#: d/lang.opt:476 #, no-c-format msgid "List all variables going into thread local storage." msgstr "" -#: d/lang.opt:476 +#: d/lang.opt:480 #, no-c-format msgid "Compile in unittest code." msgstr "" -#: d/lang.opt:480 +#: d/lang.opt:484 #, no-c-format msgid "-fversion=<ident>\tCompile in version code identified by <ident>." msgstr "" -#: d/lang.opt:484 +#: d/lang.opt:488 #, no-c-format msgid "Emit template instantiations as weak symbols." msgstr "" -#: d/lang.opt:504 +#: d/lang.opt:508 #, no-c-format msgid "Do not link the standard D library in the compilation." msgstr "" -#: d/lang.opt:512 +#: d/lang.opt:516 #, no-c-format msgid "Link the standard D library statically in the compilation." msgstr "" -#: d/lang.opt:516 +#: d/lang.opt:520 #, no-c-format msgid "Link the standard D library dynamically in the compilation." msgstr "" @@ -7585,7 +7595,7 @@ msgstr "" msgid "Specify bit size of immediate TLS offsets." msgstr "" -#: config/ia64/ia64.opt:122 config/i386/i386.opt:542 config/s390/s390.opt:206 +#: config/ia64/ia64.opt:122 config/i386/i386.opt:542 config/s390/s390.opt:209 #: config/sparc/sparc.opt:146 config/visium/visium.opt:49 #, no-c-format msgid "Schedule code for given CPU." @@ -8039,13 +8049,13 @@ msgstr "" msgid "Use 80-bit long double." msgstr "" -#: config/i386/i386.opt:229 config/s390/s390.opt:166 +#: config/i386/i386.opt:229 config/s390/s390.opt:169 #: config/sparc/long-double-switch.opt:27 config/alpha/alpha.opt:110 #, no-c-format msgid "Use 64-bit long double." msgstr "" -#: config/i386/i386.opt:233 config/s390/s390.opt:162 +#: config/i386/i386.opt:233 config/s390/s390.opt:165 #: config/sparc/long-double-switch.opt:23 config/alpha/alpha.opt:106 #, no-c-format msgid "Use 128-bit long double." @@ -8801,7 +8811,7 @@ msgstr "" msgid "Generate __mcount_loc section with all mcount or __fentry__ calls." msgstr "" -#: config/i386/i386.opt:972 config/s390/s390.opt:310 +#: config/i386/i386.opt:972 config/s390/s390.opt:313 #, no-c-format msgid "" "Generate mcount/__fentry__ calls as nops. To activate they need to be " @@ -8908,7 +8918,7 @@ msgstr "" msgid "Convert function return to call and return thunk." msgstr "" -#: config/i386/i386.opt:1087 config/s390/s390.opt:276 +#: config/i386/i386.opt:1087 config/s390/s390.opt:279 #, no-c-format msgid "" "Known indirect branch choices (for use with the -mindirect-branch=/-" @@ -9974,32 +9984,32 @@ msgstr "" msgid "64 bit ABI." msgstr "" -#: config/s390/s390.opt:132 +#: config/s390/s390.opt:135 #, no-c-format msgid "Maintain backchain pointer." msgstr "" -#: config/s390/s390.opt:136 +#: config/s390/s390.opt:139 #, no-c-format msgid "Additional debug prints." msgstr "" -#: config/s390/s390.opt:140 +#: config/s390/s390.opt:143 #, no-c-format msgid "ESA/390 architecture." msgstr "" -#: config/s390/s390.opt:144 +#: config/s390/s390.opt:147 #, no-c-format msgid "Enable decimal floating point hardware support." msgstr "" -#: config/s390/s390.opt:148 +#: config/s390/s390.opt:151 #, no-c-format msgid "Enable hardware floating point." msgstr "" -#: config/s390/s390.opt:152 +#: config/s390/s390.opt:155 #, no-c-format msgid "" "Takes two non-negative integer numbers separated by a comma. Prepend the " @@ -10010,102 +10020,102 @@ msgid "" "size. Using 0 for both values disables hotpatching." msgstr "" -#: config/s390/s390.opt:170 +#: config/s390/s390.opt:173 #, no-c-format msgid "Use hardware transactional execution instructions." msgstr "" -#: config/s390/s390.opt:174 +#: config/s390/s390.opt:177 #, no-c-format msgid "Use hardware vector facility instructions and enable the vector ABI." msgstr "" -#: config/s390/s390.opt:178 +#: config/s390/s390.opt:181 #, no-c-format msgid "Use packed stack layout." msgstr "" -#: config/s390/s390.opt:182 +#: config/s390/s390.opt:185 #, no-c-format msgid "Use bras for executable < 64k." msgstr "" -#: config/s390/s390.opt:186 +#: config/s390/s390.opt:189 #, no-c-format msgid "Disable hardware floating point." msgstr "" -#: config/s390/s390.opt:190 +#: config/s390/s390.opt:193 #, no-c-format msgid "" "Set the max. number of bytes which has to be left to stack size before a " "trap instruction is triggered." msgstr "" -#: config/s390/s390.opt:194 +#: config/s390/s390.opt:197 #, no-c-format msgid "Switches off the -mstack-guard= option." msgstr "" -#: config/s390/s390.opt:198 +#: config/s390/s390.opt:201 #, no-c-format msgid "" "Emit extra code in the function prologue in order to trap if the stack size " "exceeds the given limit." msgstr "" -#: config/s390/s390.opt:202 +#: config/s390/s390.opt:205 #, no-c-format msgid "Switches off the -mstack-size= option." msgstr "" -#: config/s390/s390.opt:210 +#: config/s390/s390.opt:213 #, no-c-format msgid "Use the mvcle instruction for block moves." msgstr "" -#: config/s390/s390.opt:214 +#: config/s390/s390.opt:217 #, no-c-format msgid "" "Enable the z vector language extension providing the context-sensitive " "vector macro and enable the Altivec-style builtins in vecintrin.h." msgstr "" -#: config/s390/s390.opt:219 +#: config/s390/s390.opt:222 #, no-c-format msgid "Warn if a function uses alloca or creates an array with dynamic size." msgstr "" -#: config/s390/s390.opt:223 +#: config/s390/s390.opt:226 #, no-c-format msgid "Warn if a single function's framesize exceeds the given framesize." msgstr "" -#: config/s390/s390.opt:227 +#: config/s390/s390.opt:230 #, no-c-format msgid "z/Architecture." msgstr "" -#: config/s390/s390.opt:231 +#: config/s390/s390.opt:234 #, no-c-format msgid "" "Set the branch costs for conditional branch instructions. Reasonable values " "are small, non-negative integers. The default branch cost is 1." msgstr "" -#: config/s390/s390.opt:237 config/arm/arm.opt:178 +#: config/s390/s390.opt:240 config/arm/arm.opt:178 #, no-c-format msgid "Assume data segments are relative to text segment." msgstr "" -#: config/s390/s390.opt:242 +#: config/s390/s390.opt:245 #, no-c-format msgid "" "Wrap all indirect branches into execute in order to disable branch " "prediction." msgstr "" -#: config/s390/s390.opt:247 +#: config/s390/s390.opt:250 #, no-c-format msgid "" "Wrap indirect table jumps and computed gotos into execute in order to " @@ -10115,20 +10125,20 @@ msgid "" "required please use thunk-inline instead." msgstr "" -#: config/s390/s390.opt:255 +#: config/s390/s390.opt:258 #, no-c-format msgid "" "Wrap all indirect calls into execute in order to disable branch prediction." msgstr "" -#: config/s390/s390.opt:259 +#: config/s390/s390.opt:262 #, no-c-format msgid "" "Wrap all indirect return branches into execute in order to disable branch " "prediction." msgstr "" -#: config/s390/s390.opt:264 +#: config/s390/s390.opt:267 #, no-c-format msgid "" "Wrap indirect return branches into execute in order to disable branch " @@ -10136,7 +10146,7 @@ msgid "" "be restored from memory." msgstr "" -#: config/s390/s390.opt:270 +#: config/s390/s390.opt:273 #, no-c-format msgid "" "Wrap indirect return branches into execute in order to disable branch " @@ -10144,7 +10154,7 @@ msgid "" "to be restored from memory." msgstr "" -#: config/s390/s390.opt:292 +#: config/s390/s390.opt:295 #, no-c-format msgid "" "Generate sections .s390_indirect_jump, .s390_indirect_call, ." @@ -10155,19 +10165,19 @@ msgid "" "location." msgstr "" -#: config/s390/s390.opt:301 +#: config/s390/s390.opt:304 #, no-c-format msgid "" "Emit profiling counter call at function entry before prologue. The compiled " "code will require a 64-bit CPU and glibc 2.29 or newer to run." msgstr "" -#: config/s390/s390.opt:306 +#: config/s390/s390.opt:309 #, no-c-format msgid "Generate __mcount_loc section with all _mcount and __fentry__ calls." msgstr "" -#: config/s390/s390.opt:315 +#: config/s390/s390.opt:318 #, no-c-format msgid "" "Emit fused multiply-add instructions for long doubles in vector registers " @@ -10180,12 +10190,12 @@ msgid "" "testing purposes." msgstr "" -#: config/s390/s390.opt:330 +#: config/s390/s390.opt:333 #, no-c-format msgid "Store all argument registers on the stack." msgstr "" -#: config/s390/s390.opt:334 +#: config/s390/s390.opt:337 #, no-c-format msgid "" "Assume external symbols, whose natural alignment would be 1, to be " @@ -15659,7 +15669,7 @@ msgstr "" msgid "Mark all loops as parallel." msgstr "" -#: common.opt:1852 common.opt:1860 common.opt:3241 +#: common.opt:1852 common.opt:1860 common.opt:3249 #, no-c-format msgid "Enable loop nest transforms. Same as -floop-nest-optimize." msgstr "" @@ -15831,7 +15841,12 @@ msgid "" "operations inline, even if against optimization." msgstr "" -#: common.opt:2061 +#: common.opt:2058 +#, no-c-format +msgid "Equivalent to -fcf-protection=full." +msgstr "" + +#: common.opt:2062 #, no-c-format msgid "" "-fcf-protection=[full|branch|return|none|check]\tInstrument functions with " @@ -15839,367 +15854,372 @@ msgid "" "valid targets." msgstr "" -#: common.opt:2084 +#: common.opt:2085 #, no-c-format msgid "Instrument function entry and exit with profiling calls." msgstr "" -#: common.opt:2088 +#: common.opt:2089 #, no-c-format msgid "Instrument function entry and exit with profiling calls invoked once." msgstr "" -#: common.opt:2092 +#: common.opt:2093 #, no-c-format msgid "" "-finstrument-functions-exclude-function-list=name,...\tDo not instrument " "listed functions." msgstr "" -#: common.opt:2096 +#: common.opt:2097 #, no-c-format msgid "" "-finstrument-functions-exclude-file-list=filename,...\tDo not instrument " "functions listed in files." msgstr "" -#: common.opt:2100 +#: common.opt:2101 #, no-c-format msgid "Perform interprocedural constant propagation." msgstr "" -#: common.opt:2104 +#: common.opt:2105 #, no-c-format msgid "Perform cloning to make Interprocedural constant propagation stronger." msgstr "" -#: common.opt:2112 +#: common.opt:2113 #, no-c-format msgid "Perform interprocedural bitwise constant propagation." msgstr "" -#: common.opt:2116 +#: common.opt:2117 #, no-c-format msgid "Perform interprocedural modref analysis." msgstr "" -#: common.opt:2120 +#: common.opt:2121 +#, no-c-format +msgid "Perform reordering and cloning of functions to maximize locality." +msgstr "" + +#: common.opt:2125 #, no-c-format msgid "Perform interprocedural profile propagation." msgstr "" -#: common.opt:2124 +#: common.opt:2129 #, no-c-format msgid "Perform interprocedural points-to analysis." msgstr "" -#: common.opt:2128 +#: common.opt:2133 #, no-c-format msgid "Discover pure and const functions." msgstr "" -#: common.opt:2132 +#: common.opt:2137 #, no-c-format msgid "Perform Identical Code Folding for functions and read-only variables." msgstr "" -#: common.opt:2136 +#: common.opt:2141 #, no-c-format msgid "Perform Identical Code Folding for functions." msgstr "" -#: common.opt:2140 +#: common.opt:2145 #, no-c-format msgid "Perform Identical Code Folding for variables." msgstr "" -#: common.opt:2144 +#: common.opt:2149 #, no-c-format msgid "Discover read-only and non addressable static variables." msgstr "" -#: common.opt:2148 +#: common.opt:2153 #, no-c-format msgid "Discover read-only, write-only and non-addressable static variables." msgstr "" -#: common.opt:2152 +#: common.opt:2157 #, no-c-format msgid "Reduce stack alignment on call sites if possible." msgstr "" -#: common.opt:2164 +#: common.opt:2169 #, no-c-format msgid "Perform IPA Value Range Propagation." msgstr "" -#: common.opt:2168 +#: common.opt:2173 #, no-c-format msgid "-fira-algorithm=[CB|priority]\tSet the used IRA algorithm." msgstr "" -#: common.opt:2172 +#: common.opt:2177 #, no-c-format msgid "" "Assume strict aliasing rules apply across (uninlined) function boundaries." msgstr "" -#: common.opt:2185 +#: common.opt:2190 #, no-c-format msgid "-fira-region=[one|all|mixed]\tSet regions for IRA." msgstr "" -#: common.opt:2201 +#: common.opt:2206 #, no-c-format msgid "Use IRA based register pressure calculation in RTL hoist optimizations." msgstr "" -#: common.opt:2206 +#: common.opt:2211 #, no-c-format msgid "Use IRA based register pressure calculation in RTL loop optimizations." msgstr "" -#: common.opt:2211 +#: common.opt:2216 #, no-c-format msgid "Share slots for saving different hard registers." msgstr "" -#: common.opt:2215 +#: common.opt:2220 #, no-c-format msgid "Share stack slots for spilled pseudo-registers." msgstr "" -#: common.opt:2219 +#: common.opt:2224 #, no-c-format msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages." msgstr "" -#: common.opt:2223 +#: common.opt:2228 #, no-c-format msgid "Optimize induction variables on trees." msgstr "" -#: common.opt:2227 +#: common.opt:2232 #, no-c-format msgid "Use jump tables for sufficiently large switch statements." msgstr "" -#: common.opt:2231 +#: common.opt:2236 #, no-c-format msgid "Use bit tests for sufficiently large switch statements." msgstr "" -#: common.opt:2235 +#: common.opt:2240 #, no-c-format msgid "Generate code for functions even if they are fully inlined." msgstr "" -#: common.opt:2239 +#: common.opt:2244 #, no-c-format msgid "Generate code for static functions even if they are never called." msgstr "" -#: common.opt:2243 +#: common.opt:2248 #, no-c-format msgid "Emit static const variables even if they are not used." msgstr "" -#: common.opt:2247 +#: common.opt:2252 #, no-c-format msgid "Give external symbols a leading underscore." msgstr "" -#: common.opt:2255 +#: common.opt:2260 #, no-c-format msgid "Do CFG-sensitive rematerialization in LRA." msgstr "" -#: common.opt:2259 +#: common.opt:2264 #, no-c-format msgid "Enable link-time optimization." msgstr "" -#: common.opt:2263 +#: common.opt:2268 #, no-c-format msgid "Link-time optimization with number of parallel jobs or jobserver." msgstr "" -#: common.opt:2267 +#: common.opt:2272 #, no-c-format msgid "Enable incremental LTO, with its cache in given directory." msgstr "" -#: common.opt:2271 +#: common.opt:2276 #, no-c-format msgid "" "Number of cache entries in incremental LTO after which to prune old entries." msgstr "" -#: common.opt:2296 +#: common.opt:2304 #, no-c-format msgid "Specify the algorithm to partition symbols and vars at linktime." msgstr "" -#: common.opt:2301 +#: common.opt:2309 #, no-c-format msgid "Use zlib/zstd compression level <number> for IL." msgstr "" -#: common.opt:2309 +#: common.opt:2317 #, no-c-format msgid "Report various link-time optimization statistics." msgstr "" -#: common.opt:2313 +#: common.opt:2321 #, no-c-format msgid "Report various link-time optimization statistics for WPA only." msgstr "" -#: common.opt:2317 +#: common.opt:2325 #, no-c-format msgid "Set errno after built-in math functions." msgstr "" -#: common.opt:2321 +#: common.opt:2329 #, no-c-format msgid "-fmax-errors=<number>\tMaximum number of errors to report." msgstr "" -#: common.opt:2325 +#: common.opt:2333 #, no-c-format msgid "Allow removal of malloc and free pairs when allocated block is unused." msgstr "" -#: common.opt:2332 +#: common.opt:2340 #, no-c-format msgid "Report on permanent memory allocation." msgstr "" -#: common.opt:2336 +#: common.opt:2344 #, no-c-format msgid "Report on permanent memory allocation in WPA only." msgstr "" -#: common.opt:2343 +#: common.opt:2351 #, no-c-format msgid "Attempt to merge identical constants and constant variables." msgstr "" -#: common.opt:2347 +#: common.opt:2355 #, no-c-format msgid "Attempt to merge identical constants across compilation units." msgstr "" -#: common.opt:2351 +#: common.opt:2359 #, no-c-format msgid "Attempt to merge identical debug strings across compilation units." msgstr "" -#: common.opt:2355 +#: common.opt:2363 #, no-c-format msgid "" "-fmessage-length=<number>\tLimit diagnostics to <number> characters per " "line. 0 suppresses line-wrapping." msgstr "" -#: common.opt:2359 +#: common.opt:2367 #, no-c-format msgid "Align the start of every function." msgstr "" -#: common.opt:2363 +#: common.opt:2371 #, no-c-format msgid "Perform SMS based modulo scheduling before the first scheduling pass." msgstr "" -#: common.opt:2367 +#: common.opt:2375 #, no-c-format msgid "Perform SMS based modulo scheduling with register moves allowed." msgstr "" -#: common.opt:2371 +#: common.opt:2379 #, no-c-format msgid "Move loop invariant computations out of loops." msgstr "" -#: common.opt:2375 +#: common.opt:2383 #, no-c-format msgid "Move stores out of loops." msgstr "" -#: common.opt:2379 +#: common.opt:2387 #, no-c-format msgid "Building block for specs-based multilib-aware TFLAGS." msgstr "" -#: common.opt:2383 +#: common.opt:2391 #, no-c-format msgid "Use the RTL dead code elimination pass." msgstr "" -#: common.opt:2387 +#: common.opt:2395 #, no-c-format msgid "Use the RTL dead store elimination pass." msgstr "" -#: common.opt:2391 +#: common.opt:2399 #, no-c-format msgid "" "Enable/Disable the traditional scheduling in loops that already passed " "modulo scheduling." msgstr "" -#: common.opt:2395 +#: common.opt:2403 #, no-c-format msgid "Support synchronous non-call exceptions." msgstr "" -#: common.opt:2402 +#: common.opt:2410 #, no-c-format msgid "" "-foffload-options=<targets>=<options>\tSpecify options for the offloading " "targets." msgstr "" -#: common.opt:2406 +#: common.opt:2414 #, no-c-format msgid "-foffload-abi=[lp64|ilp32]\tSet the ABI to use in an offload compiler." msgstr "" -#: common.opt:2419 +#: common.opt:2427 #, no-c-format msgid "-foffload-abi-host-opts=<options>\tSpecify host ABI options." msgstr "" -#: common.opt:2423 +#: common.opt:2431 #, no-c-format msgid "When possible do not generate stack frames." msgstr "" -#: common.opt:2430 +#: common.opt:2438 #, no-c-format msgid "" "Generate SIMD clones for functions with the OpenMP declare target directive." msgstr "" -#: common.opt:2449 +#: common.opt:2457 #, no-c-format msgid "Enable all optimization info dumps on stderr." msgstr "" -#: common.opt:2453 +#: common.opt:2461 #, no-c-format msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details." msgstr "" -#: common.opt:2457 +#: common.opt:2465 #, no-c-format msgid "" "Write a SRCFILE.opt-record.json file detailing what optimizations were " "performed." msgstr "" -#: common.opt:2461 +#: common.opt:2469 #, no-c-format msgid "" "Detect loops calculating CRC and replace with faster implementation. If the " @@ -16210,275 +16230,275 @@ msgid "" "based CRC." msgstr "" -#: common.opt:2475 +#: common.opt:2483 #, no-c-format msgid "Optimize sibling and tail recursive calls." msgstr "" -#: common.opt:2479 +#: common.opt:2487 #, no-c-format msgid "Insert path profiling code." msgstr "" -#: common.opt:2483 +#: common.opt:2491 #, no-c-format msgid "Perform partial inlining." msgstr "" -#: common.opt:2487 common.opt:2491 +#: common.opt:2495 common.opt:2499 #, no-c-format msgid "Report on memory allocation before interprocedural optimization." msgstr "" -#: common.opt:2495 +#: common.opt:2503 #, no-c-format msgid "Pack structure members together without holes." msgstr "" -#: common.opt:2499 +#: common.opt:2507 #, no-c-format msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment." msgstr "" -#: common.opt:2503 +#: common.opt:2511 #, no-c-format msgid "Return small aggregates in memory, not registers." msgstr "" -#: common.opt:2507 +#: common.opt:2515 #, no-c-format msgid "Perform loop peeling." msgstr "" -#: common.opt:2511 +#: common.opt:2519 #, no-c-format msgid "Enable machine specific peephole optimizations." msgstr "" -#: common.opt:2515 +#: common.opt:2523 #, no-c-format msgid "Enable an RTL peephole pass before sched2." msgstr "" -#: common.opt:2519 +#: common.opt:2527 #, no-c-format msgid "Generate position-independent code if possible (large mode)." msgstr "" -#: common.opt:2523 +#: common.opt:2531 #, no-c-format msgid "" "Generate position-independent code for executables if possible (large mode)." msgstr "" -#: common.opt:2527 +#: common.opt:2535 #, no-c-format msgid "Generate position-independent code if possible (small mode)." msgstr "" -#: common.opt:2531 +#: common.opt:2539 #, no-c-format msgid "" "Generate position-independent code for executables if possible (small mode)." msgstr "" -#: common.opt:2535 +#: common.opt:2543 #, no-c-format msgid "" "Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)." msgstr "" -#: common.opt:2539 +#: common.opt:2547 #, no-c-format msgid "Specify a plugin to load." msgstr "" -#: common.opt:2543 +#: common.opt:2551 #, no-c-format msgid "" "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for " "plugin <name>." msgstr "" -#: common.opt:2547 +#: common.opt:2555 #, no-c-format msgid "Run predictive commoning optimization." msgstr "" -#: common.opt:2551 +#: common.opt:2559 #, no-c-format msgid "Generate prefetch instructions, if available, for arrays in loops." msgstr "" -#: common.opt:2555 +#: common.opt:2563 #, no-c-format msgid "Enable basic program profiling code." msgstr "" -#: common.opt:2559 +#: common.opt:2567 #, no-c-format msgid "Generate absolute source path names for gcov." msgstr "" -#: common.opt:2563 +#: common.opt:2571 #, no-c-format msgid "Insert arc-based program profiling code." msgstr "" -#: common.opt:2567 +#: common.opt:2575 #, no-c-format msgid "Insert condition coverage profiling code." msgstr "" -#: common.opt:2571 +#: common.opt:2579 #, no-c-format msgid "" "Set the top-level directory for storing the profile data. The default is " "'pwd'." msgstr "" -#: common.opt:2576 +#: common.opt:2584 #, no-c-format msgid "Select the name for storing the profile note file." msgstr "" -#: common.opt:2580 +#: common.opt:2588 #, no-c-format msgid "Enable correction of flow inconsistent profile data input." msgstr "" -#: common.opt:2584 +#: common.opt:2592 #, no-c-format msgid "" "-fprofile-update=[single|atomic|prefer-atomic]\tSet the profile update " "method." msgstr "" -#: common.opt:2588 +#: common.opt:2596 #, no-c-format msgid "" "Instrument only functions from files whose name matches any of the regular " "expressions (separated by semi-colons)." msgstr "" -#: common.opt:2592 +#: common.opt:2600 #, no-c-format msgid "" "Instrument only functions from files whose name does not match any of the " "regular expressions (separated by semi-colons)." msgstr "" -#: common.opt:2608 +#: common.opt:2616 #, no-c-format msgid "" "-fprofile-reproducible=[serial|parallel-runs|multithreaded]\tControl level " "of reproducibility of profile gathered by -fprofile-generate." msgstr "" -#: common.opt:2624 +#: common.opt:2632 #, no-c-format msgid "" "Remove prefix from absolute path before mangling name for -fprofile-" "generate= and -fprofile-use=." msgstr "" -#: common.opt:2628 +#: common.opt:2636 #, no-c-format msgid "" "-fprofile-prefix-map=<old>=<new>\tMap one directory name to another in GCOV " "coverage result." msgstr "" -#: common.opt:2632 +#: common.opt:2640 #, no-c-format msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations." msgstr "" -#: common.opt:2636 +#: common.opt:2644 #, no-c-format msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations, and set -fprofile-dir=." msgstr "" -#: common.opt:2640 +#: common.opt:2648 #, no-c-format msgid "" "Register the profile information in the .gcov_info section instead of using " "a constructor/destructor." msgstr "" -#: common.opt:2644 +#: common.opt:2652 #, no-c-format msgid "" "Register the profile information in the specified section instead of using a " "constructor/destructor." msgstr "" -#: common.opt:2648 +#: common.opt:2656 #, no-c-format msgid "" "Do not assume that functions never executed during the train run are cold." msgstr "" -#: common.opt:2652 +#: common.opt:2660 #, no-c-format msgid "" "Enable common options for performing profile feedback directed optimizations." msgstr "" -#: common.opt:2656 +#: common.opt:2664 #, no-c-format msgid "" "Enable common options for performing profile feedback directed " "optimizations, and set -fprofile-dir=." msgstr "" -#: common.opt:2660 +#: common.opt:2668 #, no-c-format msgid "Insert code to profile values of expressions." msgstr "" -#: common.opt:2664 +#: common.opt:2672 #, no-c-format msgid "Report on consistency of profile." msgstr "" -#: common.opt:2668 +#: common.opt:2676 #, no-c-format msgid "Enable function reordering that improves code placement." msgstr "" -#: common.opt:2672 +#: common.opt:2680 #, no-c-format msgid "Insert NOP instructions at each function entry." msgstr "" -#: common.opt:2679 +#: common.opt:2687 #, no-c-format msgid "-frandom-seed=<string>\tMake compile reproducible using <string>." msgstr "" -#: common.opt:2689 +#: common.opt:2697 #, no-c-format msgid "Record gcc command line switches in the object file." msgstr "" -#: common.opt:2693 +#: common.opt:2701 #, no-c-format msgid "Return small aggregates in registers." msgstr "" -#: common.opt:2701 +#: common.opt:2709 #, no-c-format msgid "" "Tell DSE that the storage for a C++ object is dead when the constructor " "starts and when the destructor finishes." msgstr "" -#: common.opt:2715 +#: common.opt:2723 #, no-c-format msgid "" "-flive-patching=[inline-only-static|inline-clone]\tControl IPA optimizations " @@ -16486,520 +16506,520 @@ msgid "" "multiple-level control on the enabled IPA optimizations." msgstr "" -#: common.opt:2730 +#: common.opt:2738 #, no-c-format msgid "Tell DCE to remove unused C++ allocations." msgstr "" -#: common.opt:2734 +#: common.opt:2742 #, no-c-format msgid "Relief of register pressure through live range shrinkage." msgstr "" -#: common.opt:2738 +#: common.opt:2746 #, no-c-format msgid "Perform a register renaming optimization pass." msgstr "" -#: common.opt:2742 +#: common.opt:2750 #, no-c-format msgid "Perform a target dependent instruction fusion optimization pass." msgstr "" -#: common.opt:2746 +#: common.opt:2754 #, no-c-format msgid "Reorder basic blocks to improve code placement." msgstr "" -#: common.opt:2750 +#: common.opt:2758 #, no-c-format msgid "" "-freorder-blocks-algorithm=[simple|stc]\tSet the used basic block reordering " "algorithm." msgstr "" -#: common.opt:2763 +#: common.opt:2771 #, no-c-format msgid "Reorder basic blocks and partition into hot and cold sections." msgstr "" -#: common.opt:2767 +#: common.opt:2775 #, no-c-format msgid "Reorder functions to improve code placement." msgstr "" -#: common.opt:2771 +#: common.opt:2779 #, no-c-format msgid "Add a common subexpression elimination pass after loop optimizations." msgstr "" -#: common.opt:2779 +#: common.opt:2787 #, no-c-format msgid "Disable optimizations that assume default FP rounding behavior." msgstr "" -#: common.opt:2783 +#: common.opt:2791 #, no-c-format msgid "Enable scheduling across basic blocks." msgstr "" -#: common.opt:2787 +#: common.opt:2795 #, no-c-format msgid "Enable register pressure sensitive insn scheduling." msgstr "" -#: common.opt:2791 +#: common.opt:2799 #, no-c-format msgid "Allow speculative motion of non-loads." msgstr "" -#: common.opt:2795 +#: common.opt:2803 #, no-c-format msgid "Allow speculative motion of some loads." msgstr "" -#: common.opt:2799 +#: common.opt:2807 #, no-c-format msgid "Allow speculative motion of more loads." msgstr "" -#: common.opt:2803 +#: common.opt:2811 #, no-c-format msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler." msgstr "" -#: common.opt:2807 +#: common.opt:2815 #, no-c-format msgid "If scheduling post reload, do superblock scheduling." msgstr "" -#: common.opt:2815 +#: common.opt:2823 #, no-c-format msgid "Reschedule instructions before register allocation." msgstr "" -#: common.opt:2819 +#: common.opt:2827 #, no-c-format msgid "Reschedule instructions after register allocation." msgstr "" -#: common.opt:2826 +#: common.opt:2834 #, no-c-format msgid "Schedule instructions using selective scheduling algorithm." msgstr "" -#: common.opt:2830 +#: common.opt:2838 #, no-c-format msgid "Run selective scheduling after reload." msgstr "" -#: common.opt:2834 +#: common.opt:2842 #, no-c-format msgid "Run self-tests, using the given path to locate test files." msgstr "" -#: common.opt:2838 +#: common.opt:2846 #, no-c-format msgid "Perform software pipelining of inner loops during selective scheduling." msgstr "" -#: common.opt:2842 +#: common.opt:2850 #, no-c-format msgid "Perform software pipelining of outer loops during selective scheduling." msgstr "" -#: common.opt:2846 +#: common.opt:2854 #, no-c-format msgid "Reschedule pipelined regions without pipelining." msgstr "" -#: common.opt:2850 +#: common.opt:2858 #, no-c-format msgid "" "Allow interposing function (or variables) by ones with different semantics " "(or initializer) respectively by dynamic linker." msgstr "" -#: common.opt:2856 +#: common.opt:2864 #, no-c-format msgid "Allow premature scheduling of queued insns." msgstr "" -#: common.opt:2860 +#: common.opt:2868 #, no-c-format msgid "" "-fsched-stalled-insns=<number>\tSet number of queued insns that can be " "prematurely scheduled." msgstr "" -#: common.opt:2868 +#: common.opt:2876 #, no-c-format msgid "" "Set dependence distance checking in premature scheduling of queued insns." msgstr "" -#: common.opt:2872 +#: common.opt:2880 #, no-c-format msgid "" "-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in " "premature scheduling of queued insns." msgstr "" -#: common.opt:2876 +#: common.opt:2884 #, no-c-format msgid "Enable the group heuristic in the scheduler." msgstr "" -#: common.opt:2880 +#: common.opt:2888 #, no-c-format msgid "Enable the critical path heuristic in the scheduler." msgstr "" -#: common.opt:2884 +#: common.opt:2892 #, no-c-format msgid "Enable the speculative instruction heuristic in the scheduler." msgstr "" -#: common.opt:2888 +#: common.opt:2896 #, no-c-format msgid "Enable the rank heuristic in the scheduler." msgstr "" -#: common.opt:2892 +#: common.opt:2900 #, no-c-format msgid "Enable the last instruction heuristic in the scheduler." msgstr "" -#: common.opt:2896 +#: common.opt:2904 #, no-c-format msgid "Enable the dependent count heuristic in the scheduler." msgstr "" -#: common.opt:2900 +#: common.opt:2908 #, no-c-format msgid "Access data in the same section from shared anchor points." msgstr "" -#: common.opt:2912 +#: common.opt:2920 #, no-c-format msgid "Turn on Redundant Extensions Elimination pass." msgstr "" -#: common.opt:2916 +#: common.opt:2924 #, no-c-format msgid "Show column numbers in diagnostics, when available. Default on." msgstr "" -#: common.opt:2920 +#: common.opt:2928 #, no-c-format msgid "" "Emit function prologues only before parts of the function that need it, " "rather than at the top of the function." msgstr "" -#: common.opt:2925 +#: common.opt:2933 #, no-c-format msgid "Shrink-wrap parts of the prologue and epilogue separately." msgstr "" -#: common.opt:2929 +#: common.opt:2937 #, no-c-format msgid "Disable optimizations observable by IEEE signaling NaNs." msgstr "" -#: common.opt:2933 +#: common.opt:2941 #, no-c-format msgid "" "Disable floating point optimizations that ignore the IEEE signedness of zero." msgstr "" -#: common.opt:2937 +#: common.opt:2945 #, no-c-format msgid "Convert floating point constants to single precision constants." msgstr "" -#: common.opt:2941 +#: common.opt:2949 #, no-c-format msgid "Split lifetimes of induction variables when loops are unrolled." msgstr "" -#: common.opt:2945 +#: common.opt:2953 #, no-c-format msgid "Generate discontiguous stack frames." msgstr "" -#: common.opt:2949 +#: common.opt:2957 #, no-c-format msgid "Split wide types into independent registers." msgstr "" -#: common.opt:2953 +#: common.opt:2961 #, no-c-format msgid "Split wide types into independent registers earlier." msgstr "" -#: common.opt:2957 +#: common.opt:2965 #, no-c-format msgid "Enable backward propagation of use properties at the SSA level." msgstr "" -#: common.opt:2961 +#: common.opt:2969 #, no-c-format msgid "Optimize conditional patterns using SSA PHI nodes." msgstr "" -#: common.opt:2965 +#: common.opt:2973 #, no-c-format msgid "" "Optimize amount of stdarg registers saved to stack at start of function." msgstr "" -#: common.opt:2969 +#: common.opt:2977 #, no-c-format msgid "Apply variable expansion when loops are unrolled." msgstr "" -#: common.opt:2973 +#: common.opt:2981 #, no-c-format msgid "" "-fstack-check=[no|generic|specific]\tInsert stack checking code into the " "program." msgstr "" -#: common.opt:2977 +#: common.opt:2985 #, no-c-format msgid "" "Insert stack checking code into the program. Same as -fstack-check=specific." msgstr "" -#: common.opt:2981 +#: common.opt:2989 #, no-c-format msgid "" "Insert code to probe each page of stack space as it is allocated to protect " "from stack-clash style attacks." msgstr "" -#: common.opt:2989 +#: common.opt:2997 #, no-c-format msgid "" "-fstack-limit-register=<register>\tTrap if the stack goes past <register>." msgstr "" -#: common.opt:2993 +#: common.opt:3001 #, no-c-format msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>." msgstr "" -#: common.opt:2997 +#: common.opt:3005 #, no-c-format msgid "Use propolice as a stack protection method." msgstr "" -#: common.opt:3001 +#: common.opt:3009 #, no-c-format msgid "Use a stack protection method for every function." msgstr "" -#: common.opt:3005 +#: common.opt:3013 #, no-c-format msgid "Use a smart stack protection method for certain functions." msgstr "" -#: common.opt:3009 +#: common.opt:3017 #, no-c-format msgid "" "Use stack protection method only for functions with the stack_protect " "attribute." msgstr "" -#: common.opt:3013 +#: common.opt:3021 #, no-c-format msgid "Output stack usage information on a per-function basis." msgstr "" -#: common.opt:3025 +#: common.opt:3033 #, no-c-format msgid "Assume strict aliasing rules apply." msgstr "" -#: common.opt:3029 +#: common.opt:3037 #, no-c-format msgid "" "Treat signed overflow as undefined. Negated as -fwrapv -fwrapv-pointer." msgstr "" -#: common.opt:3033 +#: common.opt:3041 #, no-c-format msgid "Disable stack scrub entirely, disregarding strub attributes." msgstr "" -#: common.opt:3037 +#: common.opt:3045 #, no-c-format msgid "Enable stack scrub as per attributes, with strict call checking." msgstr "" -#: common.opt:3046 +#: common.opt:3054 #, no-c-format msgid "Restore default strub mode: as per attributes, with relaxed checking." msgstr "" -#: common.opt:3050 +#: common.opt:3058 #, no-c-format msgid "Enable stack scrubbing for all viable functions." msgstr "" -#: common.opt:3054 +#: common.opt:3062 #, no-c-format msgid "Enable at-calls stack scrubbing for all viable functions." msgstr "" -#: common.opt:3058 +#: common.opt:3066 #, no-c-format msgid "Enable internal stack scrubbing for all viable functions." msgstr "" -#: common.opt:3062 +#: common.opt:3070 #, no-c-format msgid "Implement __atomic operations via libcalls to legacy __sync functions." msgstr "" -#: common.opt:3066 +#: common.opt:3074 #, no-c-format msgid "Check for syntax errors, then stop." msgstr "" -#: common.opt:3070 +#: common.opt:3078 #, no-c-format msgid "Create data files needed by \"gcov\"." msgstr "" -#: common.opt:3074 +#: common.opt:3082 #, no-c-format msgid "Perform jump threading optimizations." msgstr "" -#: common.opt:3078 +#: common.opt:3086 #, no-c-format msgid "Report the time taken by each compiler pass." msgstr "" -#: common.opt:3082 +#: common.opt:3090 #, no-c-format msgid "Record times taken by sub-phases separately." msgstr "" -#: common.opt:3086 +#: common.opt:3094 #, no-c-format msgid "" "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the " "default thread-local storage code generation model." msgstr "" -#: common.opt:3105 +#: common.opt:3113 #, no-c-format msgid "Reorder top level functions, variables, and asms." msgstr "" -#: common.opt:3109 +#: common.opt:3117 #, no-c-format msgid "Perform superblock formation via tail duplication." msgstr "" -#: common.opt:3113 +#: common.opt:3121 #, no-c-format msgid "" "For targets that normally need trampolines for nested functions, always " "generate them instead of using descriptors." msgstr "" -#: common.opt:3118 +#: common.opt:3126 #, no-c-format msgid "" "Whether trampolines are generated in executable memory rather than " "executable stack." msgstr "" -#: common.opt:3136 +#: common.opt:3144 #, no-c-format msgid "Assume floating-point operations can trap." msgstr "" -#: common.opt:3140 +#: common.opt:3148 #, no-c-format msgid "Trap for signed overflow in addition, subtraction and multiplication." msgstr "" -#: common.opt:3144 +#: common.opt:3152 #, no-c-format msgid "Enable SSA-CCP optimization on trees." msgstr "" -#: common.opt:3148 +#: common.opt:3156 #, no-c-format msgid "Enable SSA-BIT-CCP optimization on trees." msgstr "" -#: common.opt:3156 +#: common.opt:3164 #, no-c-format msgid "Enable loop header copying on trees." msgstr "" -#: common.opt:3164 +#: common.opt:3172 #, no-c-format msgid "Enable SSA coalescing of user variables." msgstr "" -#: common.opt:3172 +#: common.opt:3180 #, no-c-format msgid "Enable copy propagation on trees." msgstr "" -#: common.opt:3180 +#: common.opt:3188 #, no-c-format msgid "Transform condition stores into unconditional ones." msgstr "" -#: common.opt:3184 +#: common.opt:3192 #, no-c-format msgid "Perform conversions of switch initializations." msgstr "" -#: common.opt:3188 +#: common.opt:3196 #, no-c-format msgid "Enable SSA dead code elimination optimization on trees." msgstr "" -#: common.opt:3192 +#: common.opt:3200 #, no-c-format msgid "Enable dominator optimizations." msgstr "" -#: common.opt:3196 +#: common.opt:3204 #, no-c-format msgid "Enable tail merging on trees." msgstr "" -#: common.opt:3200 +#: common.opt:3208 #, no-c-format msgid "Enable dead store elimination." msgstr "" -#: common.opt:3204 +#: common.opt:3212 #, no-c-format msgid "Enable forward propagation on trees." msgstr "" -#: common.opt:3208 +#: common.opt:3216 #, no-c-format msgid "Enable Full Redundancy Elimination (FRE) on trees." msgstr "" -#: common.opt:3212 +#: common.opt:3220 #, no-c-format msgid "Enable string length optimizations on trees." msgstr "" -#: common.opt:3216 +#: common.opt:3224 #, no-c-format msgid "" "Detect paths that trigger erroneous or undefined behavior due to " @@ -17007,7 +17027,7 @@ msgid "" "flow and turn the statement with erroneous or undefined behavior into a trap." msgstr "" -#: common.opt:3222 +#: common.opt:3230 #, no-c-format msgid "" "Detect paths that trigger erroneous or undefined behavior due to a null " @@ -17016,538 +17036,538 @@ msgid "" "statement with erroneous or undefined behavior into a trap." msgstr "" -#: common.opt:3229 +#: common.opt:3237 #, no-c-format msgid "Enable loop distribution on trees." msgstr "" -#: common.opt:3233 +#: common.opt:3241 #, no-c-format msgid "Enable loop distribution for patterns transformed into a library call." msgstr "" -#: common.opt:3237 +#: common.opt:3245 #, no-c-format msgid "Enable loop invariant motion on trees." msgstr "" -#: common.opt:3245 +#: common.opt:3253 #, no-c-format msgid "Create canonical induction variables in loops." msgstr "" -#: common.opt:3249 +#: common.opt:3257 #, no-c-format msgid "Enable loop optimizations on tree level." msgstr "" -#: common.opt:3253 +#: common.opt:3261 #, no-c-format msgid "" "-ftree-parallelize-loops=<number>\tEnable automatic parallelization of loops." msgstr "" -#: common.opt:3257 +#: common.opt:3265 #, no-c-format msgid "Enable hoisting loads from conditional pointers." msgstr "" -#: common.opt:3261 +#: common.opt:3269 #, no-c-format msgid "Enable SSA-PRE optimization on trees." msgstr "" -#: common.opt:3265 +#: common.opt:3273 #, no-c-format msgid "" "In SSA-PRE optimization on trees, enable partial-partial redundancy " "elimination." msgstr "" -#: common.opt:3269 +#: common.opt:3277 #, no-c-format msgid "Perform function-local points-to analysis on trees." msgstr "" -#: common.opt:3273 +#: common.opt:3281 #, no-c-format msgid "Enable reassociation on tree level." msgstr "" -#: common.opt:3281 +#: common.opt:3289 #, no-c-format msgid "Enable SSA code sinking on trees." msgstr "" -#: common.opt:3285 +#: common.opt:3293 #, no-c-format msgid "Perform straight-line strength reduction." msgstr "" -#: common.opt:3289 +#: common.opt:3297 #, no-c-format msgid "Perform scalar replacement of aggregates." msgstr "" -#: common.opt:3293 +#: common.opt:3301 #, no-c-format msgid "Replace temporary expressions in the SSA->normal pass." msgstr "" -#: common.opt:3297 +#: common.opt:3305 #, no-c-format msgid "Perform live range splitting during the SSA->normal pass." msgstr "" -#: common.opt:3301 +#: common.opt:3309 #, no-c-format msgid "Perform Value Range Propagation on trees." msgstr "" -#: common.opt:3305 +#: common.opt:3313 #, no-c-format msgid "Split paths leading to loop backedges." msgstr "" -#: common.opt:3309 +#: common.opt:3317 #, no-c-format msgid "" "Assume common declarations may be overridden with ones with a larger " "trailing array." msgstr "" -#: common.opt:3314 +#: common.opt:3322 #, no-c-format msgid "Compile whole compilation unit at a time." msgstr "" -#: common.opt:3318 +#: common.opt:3326 #, no-c-format msgid "Trap on __builtin_unreachable instead of using it for optimization." msgstr "" -#: common.opt:3322 +#: common.opt:3330 #, no-c-format msgid "Perform loop unrolling when iteration count is known." msgstr "" -#: common.opt:3326 +#: common.opt:3334 #, no-c-format msgid "Perform loop unrolling for all loops." msgstr "" -#: common.opt:3341 +#: common.opt:3349 #, no-c-format msgid "" "Allow optimization for floating-point arithmetic which may change the result " "of the operation due to rounding." msgstr "" -#: common.opt:3346 +#: common.opt:3354 #, no-c-format msgid "Same as -fassociative-math for expressions which include division." msgstr "" -#: common.opt:3354 +#: common.opt:3362 #, no-c-format msgid "Allow math optimizations that may violate IEEE or ISO standards." msgstr "" -#: common.opt:3358 +#: common.opt:3366 #, no-c-format msgid "Perform loop unswitching." msgstr "" -#: common.opt:3362 +#: common.opt:3370 #, no-c-format msgid "Perform loop splitting." msgstr "" -#: common.opt:3366 +#: common.opt:3374 #, no-c-format msgid "Version loops based on whether indices have a stride of one." msgstr "" -#: common.opt:3370 +#: common.opt:3378 #, no-c-format msgid "Just generate unwind tables for exception handling." msgstr "" -#: common.opt:3374 +#: common.opt:3382 #, no-c-format msgid "Use the bfd linker instead of the default linker." msgstr "" -#: common.opt:3378 +#: common.opt:3386 #, no-c-format msgid "Use the gold linker instead of the default linker." msgstr "" -#: common.opt:3382 +#: common.opt:3390 #, no-c-format msgid "Use the lld LLVM linker instead of the default linker." msgstr "" -#: common.opt:3386 +#: common.opt:3394 #, no-c-format msgid "Use the Modern linker (MOLD) linker instead of the default linker." msgstr "" -#: common.opt:3396 +#: common.opt:3404 #, no-c-format msgid "Perform variable tracking." msgstr "" -#: common.opt:3403 +#: common.opt:3411 #, no-c-format msgid "Perform variable tracking by annotating assignments." msgstr "" -#: common.opt:3409 +#: common.opt:3417 #, no-c-format msgid "Toggle -fvar-tracking-assignments." msgstr "" -#: common.opt:3416 +#: common.opt:3424 #, no-c-format msgid "" "Perform variable tracking and also tag variables that are uninitialized." msgstr "" -#: common.opt:3421 +#: common.opt:3429 #, no-c-format msgid "Enable vectorization on trees." msgstr "" -#: common.opt:3429 +#: common.opt:3437 #, no-c-format msgid "Enable loop vectorization on trees." msgstr "" -#: common.opt:3433 +#: common.opt:3441 #, no-c-format msgid "Enable basic block vectorization (SLP) on trees." msgstr "" -#: common.opt:3437 +#: common.opt:3445 #, no-c-format msgid "" "-fvect-cost-model=[unlimited|dynamic|cheap|very-cheap]\tSpecifies the cost " "model for vectorization." msgstr "" -#: common.opt:3441 +#: common.opt:3449 #, no-c-format msgid "" "-fsimd-cost-model=[unlimited|dynamic|cheap|very-cheap]\tSpecifies the " "vectorization cost model for code marked with a simd directive." msgstr "" -#: common.opt:3460 +#: common.opt:3468 #, no-c-format msgid "" "Enables the dynamic vectorizer cost model. Preserved for backward " "compatibility." msgstr "" -#: common.opt:3468 +#: common.opt:3476 #, no-c-format msgid "Enable copy propagation of scalar-evolution information." msgstr "" -#: common.opt:3472 +#: common.opt:3480 #, no-c-format msgid "" "-ftrivial-auto-var-init=[uninitialized|pattern|zero]\tAdd initializations to " "automatic variables." msgstr "" -#: common.opt:3494 +#: common.opt:3502 #, no-c-format msgid "Add extra commentary to assembler output." msgstr "" -#: common.opt:3498 +#: common.opt:3506 #, no-c-format msgid "" "-fvisibility=[default|internal|hidden|protected]\tSet the default symbol " "visibility." msgstr "" -#: common.opt:3517 +#: common.opt:3525 #, no-c-format msgid "Validate vtable pointers before using them." msgstr "" -#: common.opt:3533 +#: common.opt:3541 #, no-c-format msgid "Output vtable verification counters." msgstr "" -#: common.opt:3537 +#: common.opt:3545 #, no-c-format msgid "Output vtable verification pointer sets information." msgstr "" -#: common.opt:3541 +#: common.opt:3549 #, no-c-format msgid "Use expression value profiles in optimizations." msgstr "" -#: common.opt:3545 +#: common.opt:3553 #, no-c-format msgid "Construct webs and split unrelated uses of single variable." msgstr "" -#: common.opt:3549 +#: common.opt:3557 #, no-c-format msgid "Enable conditional dead code elimination for builtin calls." msgstr "" -#: common.opt:3553 +#: common.opt:3561 #, no-c-format msgid "Perform whole program optimizations." msgstr "" -#: common.opt:3557 +#: common.opt:3565 #, no-c-format msgid "Assume pointer overflow wraps around." msgstr "" -#: common.opt:3561 +#: common.opt:3569 #, no-c-format msgid "Assume signed arithmetic overflow wraps around." msgstr "" -#: common.opt:3565 +#: common.opt:3573 #, no-c-format msgid "Put zero initialized data in the bss section." msgstr "" -#: common.opt:3569 +#: common.opt:3577 #, no-c-format msgid "Clear call-used registers upon function return." msgstr "" -#: common.opt:3573 +#: common.opt:3581 #, no-c-format msgid "" "-fzero-init-padding-bits=[standard|unions|all]\tZero padding bits in " "initializers." msgstr "" -#: common.opt:3589 +#: common.opt:3597 #, no-c-format msgid "Generate debug information in default format." msgstr "" -#: common.opt:3593 +#: common.opt:3601 #, no-c-format msgid "Assume assembler support for (DWARF2+) .loc directives." msgstr "" -#: common.opt:3597 +#: common.opt:3605 #, no-c-format msgid "Assume assembler support for view in (DWARF2+) .loc directives." msgstr "" -#: common.opt:3601 +#: common.opt:3609 #, no-c-format msgid "Generate debug information in CodeView format." msgstr "" -#: common.opt:3621 +#: common.opt:3629 #, no-c-format msgid "Record DW_AT_decl_column and DW_AT_call_column in DWARF." msgstr "" -#: common.opt:3627 +#: common.opt:3635 #, no-c-format msgid "Generate CTF debug information at default level." msgstr "" -#: common.opt:3631 +#: common.opt:3639 #, no-c-format msgid "Generate BTF debug information at default level." msgstr "" -#: common.opt:3635 +#: common.opt:3643 #, no-c-format msgid "Generate pruned BTF when emitting BTF info." msgstr "" -#: common.opt:3639 +#: common.opt:3647 #, no-c-format msgid "Generate debug information in default version of DWARF format." msgstr "" -#: common.opt:3643 +#: common.opt:3651 #, no-c-format msgid "Generate debug information in DWARF v2 (or later) format." msgstr "" -#: common.opt:3647 +#: common.opt:3655 #, no-c-format msgid "Use 32-bit DWARF format when emitting DWARF debug information." msgstr "" -#: common.opt:3651 +#: common.opt:3659 #, no-c-format msgid "Use 64-bit DWARF format when emitting DWARF debug information." msgstr "" -#: common.opt:3655 +#: common.opt:3663 #, no-c-format msgid "Generate debug information in default extended format." msgstr "" -#: common.opt:3659 +#: common.opt:3667 #, no-c-format msgid "Generate extended entry point information for inlined functions." msgstr "" -#: common.opt:3663 +#: common.opt:3671 #, no-c-format msgid "Compute locview reset points based on insn length estimates." msgstr "" -#: common.opt:3671 +#: common.opt:3679 #, no-c-format msgid "Don't generate DWARF pubnames and pubtypes sections." msgstr "" -#: common.opt:3675 +#: common.opt:3683 #, no-c-format msgid "Generate DWARF pubnames and pubtypes sections." msgstr "" -#: common.opt:3679 +#: common.opt:3687 #, no-c-format msgid "Generate DWARF pubnames and pubtypes sections with GNU extensions." msgstr "" -#: common.opt:3683 +#: common.opt:3691 #, no-c-format msgid "Record gcc command line switches in DWARF DW_AT_producer." msgstr "" -#: common.opt:3687 +#: common.opt:3695 #, no-c-format msgid "Generate debug information in separate .dwo files." msgstr "" -#: common.opt:3699 +#: common.opt:3707 #, no-c-format msgid "Emit progressive recommended breakpoint locations." msgstr "" -#: common.opt:3703 +#: common.opt:3711 #, no-c-format msgid "Don't emit DWARF additions beyond selected version." msgstr "" -#: common.opt:3707 +#: common.opt:3715 #, no-c-format msgid "" "Add description attributes to some DWARF DIEs that have no name attribute." msgstr "" -#: common.opt:3711 +#: common.opt:3719 #, no-c-format msgid "Toggle debug information generation." msgstr "" -#: common.opt:3715 +#: common.opt:3723 #, no-c-format msgid "Augment variable location lists with progressive views." msgstr "" -#: common.opt:3722 +#: common.opt:3730 #, no-c-format msgid "Generate debug information in VMS format." msgstr "" -#: common.opt:3751 +#: common.opt:3759 #, no-c-format msgid "Generate compressed debug sections." msgstr "" -#: common.opt:3755 +#: common.opt:3763 #, no-c-format msgid "-gz=<format>\tGenerate compressed debug sections in format <format>." msgstr "" -#: common.opt:3762 +#: common.opt:3770 #, no-c-format msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory." msgstr "" -#: common.opt:3766 +#: common.opt:3774 #, no-c-format msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory." msgstr "" -#: common.opt:3794 +#: common.opt:3802 #, no-c-format msgid "-o <file>\tPlace output into <file>." msgstr "" -#: common.opt:3798 +#: common.opt:3806 #, no-c-format msgid "Enable function profiling." msgstr "" -#: common.opt:3808 +#: common.opt:3816 #, no-c-format msgid "Like -pedantic but issue errors instead of warnings." msgstr "" -#: common.opt:3848 +#: common.opt:3856 #, no-c-format msgid "Do not display functions compiled or elapsed time." msgstr "" -#: common.opt:3880 +#: common.opt:3888 #, no-c-format msgid "Enable verbose output." msgstr "" -#: common.opt:3884 +#: common.opt:3892 #, no-c-format msgid "Display the compiler's version." msgstr "" -#: common.opt:3888 +#: common.opt:3896 #, no-c-format msgid "Suppress warnings." msgstr "" -#: common.opt:3898 +#: common.opt:3906 #, no-c-format msgid "Create a shared library." msgstr "" -#: common.opt:3962 +#: common.opt:3970 #, no-c-format msgid "Don't create a dynamically linked position independent executable." msgstr "" -#: common.opt:3966 +#: common.opt:3974 #, no-c-format msgid "Create a dynamically linked position independent executable." msgstr "" -#: common.opt:3970 +#: common.opt:3978 #, no-c-format msgid "Create a static position independent executable." msgstr "" -#: common.opt:3977 +#: common.opt:3985 #, no-c-format msgid "Use caller save register across calls if possible." msgstr "" -#: common.opt:3981 +#: common.opt:3989 #, no-c-format msgid "" "Perform dead code elimination on zero and sign extensions with special " @@ -17947,73 +17967,66 @@ msgstr "" #: params.opt:278 #, no-c-format msgid "" -"When using profile feedback, use the edge at this percentage position in " -"frequency histogram as the bases for IPA-CP heuristics." -msgstr "" - -#: params.opt:282 -#, no-c-format -msgid "" "Maximum number of statements visited during jump function offset discovery." msgstr "" -#: params.opt:286 +#: params.opt:282 #, no-c-format msgid "" "Maximum number of statements that will be visited by IPA formal parameter " "analysis based on alias analysis in any given function." msgstr "" -#: params.opt:290 +#: params.opt:286 #, no-c-format msgid "" "Maximum number of aggregate content items for a parameter in jump functions " "and lattices." msgstr "" -#: params.opt:294 +#: params.opt:290 #, no-c-format msgid "" "Maximum number of operations in a parameter expression that can be handled " "by IPA analysis." msgstr "" -#: params.opt:298 +#: params.opt:294 #, no-c-format msgid "" "Maximum number of different predicates used to track properties of loops in " "IPA analysis." msgstr "" -#: params.opt:302 +#: params.opt:298 #, no-c-format msgid "" "Maximal number of boundary endpoints of case ranges of switch statement used " "during IPA function summary generation." msgstr "" -#: params.opt:306 +#: params.opt:302 #, no-c-format msgid "" "Minimum probability (in percent) of dereferencing of a function pointer " "parameter for it to be considered for replacement with simple values." msgstr "" -#: params.opt:310 +#: params.opt:306 #, no-c-format msgid "" "Maximum pieces that IPA-SRA tracks per formal parameter, as a consequence, " "also the maximum number of replacements of a formal parameter." msgstr "" -#: params.opt:314 +#: params.opt:310 #, no-c-format msgid "" "Maximum allowed growth of total size of new parameters that ipa-sra replaces " "a pointer to an aggregate with." msgstr "" -#: params.opt:318 +#: params.opt:314 #, no-c-format msgid "" "Additional maximum allowed growth of total size of new parameters that ipa-" @@ -18022,29 +18035,29 @@ msgid "" "functions." msgstr "" -#: params.opt:322 +#: params.opt:318 #, no-c-format msgid "" "The number of registers in each class kept unused by loop invariant motion." msgstr "" -#: params.opt:326 +#: params.opt:322 #, no-c-format msgid "Max size of conflict table in MB." msgstr "" -#: params.opt:330 +#: params.opt:326 #, no-c-format msgid "" "Approximate function insn number in 1K units triggering simple local RA." msgstr "" -#: params.opt:334 +#: params.opt:330 #, no-c-format msgid "Max loops number for regional RA." msgstr "" -#: params.opt:338 +#: params.opt:334 #, no-c-format msgid "" "Control ira to consider matching constraint (duplicated operand number) " @@ -18056,45 +18069,45 @@ msgid "" "class and respect the found qualified matching constraint." msgstr "" -#: params.opt:342 +#: params.opt:338 #, no-c-format msgid "" "If number of candidates in the set is smaller, we always try to remove " "unused ivs during its optimization." msgstr "" -#: params.opt:346 +#: params.opt:342 #, no-c-format msgid "" "Bound on number of candidates below that all candidates are considered in iv " "optimizations." msgstr "" -#: params.opt:350 +#: params.opt:346 #, no-c-format msgid "Bound on number of iv uses in loop optimized in iv optimizations." msgstr "" -#: params.opt:354 +#: params.opt:350 #, no-c-format msgid "" "The maximum code size growth ratio when expanding into a jump table (in " "percent). The parameter is used when optimizing for size." msgstr "" -#: params.opt:358 +#: params.opt:354 #, no-c-format msgid "" "The maximum code size growth ratio when expanding into a jump table (in " "percent). The parameter is used when optimizing for speed." msgstr "" -#: params.opt:362 +#: params.opt:358 #, no-c-format msgid "The size of L1 cache line." msgstr "" -#: params.opt:366 +#: params.opt:362 #, no-c-format msgid "" "The minimum recommended offset between two concurrently-accessed objects to " @@ -18105,7 +18118,7 @@ msgid "" "discouraged from doing so in public ABIs." msgstr "" -#: params.opt:375 +#: params.opt:371 #, no-c-format msgid "" "The maximum recommended size of contiguous memory occupied by two objects " @@ -18114,750 +18127,779 @@ msgid "" "processors with different cache line sizes." msgstr "" -#: params.opt:382 +#: params.opt:378 #, no-c-format msgid "The size of L1 cache." msgstr "" -#: params.opt:386 +#: params.opt:382 #, no-c-format msgid "The size of L2 cache." msgstr "" -#: params.opt:390 +#: params.opt:386 #, no-c-format msgid "Maximal growth due to inlining of large function (in percent)." msgstr "" -#: params.opt:394 +#: params.opt:390 #, no-c-format msgid "The size of function body to be considered large." msgstr "" -#: params.opt:398 +#: params.opt:394 #, no-c-format msgid "The size of stack frame to be considered large." msgstr "" -#: params.opt:402 +#: params.opt:398 #, no-c-format msgid "Maximal stack frame growth due to inlining (in percent)." msgstr "" -#: params.opt:406 +#: params.opt:402 #, no-c-format msgid "The size of translation unit to be considered large." msgstr "" -#: params.opt:410 +#: params.opt:406 #, no-c-format msgid "Maximum number of concurrently open C++ module files when lazy loading." msgstr "" -#: params.opt:414 +#: params.opt:410 #, no-c-format msgid "" "The minimum cost of an expensive expression in the loop invariant motion." msgstr "" -#: params.opt:418 +#: params.opt:414 #, no-c-format msgid "True if a non-short-circuit operation is optimal." msgstr "" -#: params.opt:422 +#: params.opt:418 #, no-c-format msgid "Size of tiles for loop blocking." msgstr "" -#: params.opt:426 +#: params.opt:422 #, no-c-format msgid "The maximum number of stmts in loop nest for loop interchange." msgstr "" -#: params.opt:430 +#: params.opt:426 #, no-c-format msgid "The minimum stride ratio for loop interchange to be profitable." msgstr "" -#: params.opt:434 +#: params.opt:430 #, no-c-format msgid "Max basic blocks number in loop for loop invariant motion." msgstr "" -#: params.opt:438 +#: params.opt:434 #, no-c-format msgid "Maximum number of datarefs in loop for building loop data dependencies." msgstr "" -#: params.opt:442 +#: params.opt:438 #, no-c-format msgid "" "The maximum number of instructions in an inner loop that is being considered " "for versioning." msgstr "" -#: params.opt:446 +#: params.opt:442 #, no-c-format msgid "" "The maximum number of instructions in an outer loop that is being considered " "for versioning, on top of the instructions in inner loops." msgstr "" -#: params.opt:450 +#: params.opt:446 #, no-c-format msgid "" "Minimal fall-through edge probability in percentage used to add BB to " "inheritance EBB in LRA." msgstr "" -#: params.opt:454 +#: params.opt:450 #, no-c-format msgid "" "The max number of reload pseudos which are considered during spilling a non-" "reload pseudo." msgstr "" -#: params.opt:458 +#: params.opt:454 #, no-c-format msgid "Maximal size of a partition for LTO (in estimated instructions)." msgstr "" -#: params.opt:462 +#: params.opt:458 #, no-c-format msgid "maximal number of LTO partitions streamed in parallel." msgstr "" -#: params.opt:466 +#: params.opt:462 #, no-c-format msgid "Minimal size of a partition for LTO (in estimated instructions)." msgstr "" -#: params.opt:470 +#: params.opt:466 #, no-c-format msgid "Number of partitions the program should be split to." msgstr "" -#: params.opt:474 +#: params.opt:485 +#, no-c-format +msgid "" +"The denominator n of fraction 1/n of the execution frequency of callee to be " +"cloned for a particular caller. Special value of 0 dictates to always clone " +"without a cut-off." +msgstr "" + +#: params.opt:489 +#, no-c-format +msgid "" +"Size cut-off for callee including inlined calls to be cloned for a " +"particular caller." +msgstr "" + +#: params.opt:493 +#, no-c-format +msgid "" +"Maximal size of a locality partition for LTO (in estimated instructions). " +"Value of 0 results in default value being used." +msgstr "" + +#: params.opt:497 #, no-c-format msgid "" "The maximum number of instructions to consider to unroll in a loop on " "average." msgstr "" -#: params.opt:478 +#: params.opt:501 #, no-c-format msgid "The maximum number of insns combine tries to combine." msgstr "" -#: params.opt:482 +#: params.opt:505 +#, no-c-format +msgid "" +"The maximum number of instructions that combine searches in order to find " +"the next use of a particular register." +msgstr "" + +#: params.opt:509 #, no-c-format msgid "The maximum depth of a loop nest we completely peel." msgstr "" -#: params.opt:486 +#: params.opt:513 #, no-c-format msgid "" "The maximum number of peelings of a single loop that is peeled completely." msgstr "" -#: params.opt:490 +#: params.opt:517 #, no-c-format msgid "The maximum number of insns of a completely peeled loop." msgstr "" -#: params.opt:494 +#: params.opt:521 #, no-c-format msgid "The maximum number of incoming edges to consider for crossjumping." msgstr "" -#: params.opt:498 +#: params.opt:525 #, no-c-format msgid "The maximum instructions CSE process before flushing." msgstr "" -#: params.opt:502 +#: params.opt:529 #, no-c-format msgid "The maximum length of path considered in cse." msgstr "" -#: params.opt:506 +#: params.opt:533 #, no-c-format msgid "The maximum memory locations recorded by cselib." msgstr "" -#: params.opt:510 +#: params.opt:537 #, no-c-format msgid "Max. count of debug markers to expand or inline." msgstr "" -#: params.opt:514 +#: params.opt:541 #, no-c-format msgid "The maximum number of instructions to consider to fill a delay slot." msgstr "" -#: params.opt:518 +#: params.opt:545 #, no-c-format msgid "" "The maximum number of instructions to consider to find accurate live " "register information." msgstr "" -#: params.opt:522 +#: params.opt:549 #, no-c-format msgid "Maximum number of active local stores in RTL dead store elimination." msgstr "" -#: params.opt:526 +#: params.opt:553 #, no-c-format msgid "" "The maximum number of nested indirect inlining performed by early inliner." msgstr "" -#: params.opt:530 +#: params.opt:557 #, no-c-format msgid "" "Maximum number of fields in a structure before pointer analysis treats the " "structure as a single variable." msgstr "" -#: params.opt:534 +#: params.opt:561 #, no-c-format msgid "" "Maximum number of instructions to copy when duplicating blocks on a finite " "state automaton jump thread path." msgstr "" -#: params.opt:538 +#: params.opt:565 #, no-c-format msgid "The maximum ratio of insertions to deletions of expressions in GCSE." msgstr "" -#: params.opt:542 +#: params.opt:569 #, no-c-format msgid "The maximum amount of memory to be allocated by GCSE, in kilobytes." msgstr "" -#: params.opt:546 +#: params.opt:573 #, no-c-format msgid "" "The maximum number of insns to duplicate when unfactoring computed gotos." msgstr "" -#: params.opt:550 +#: params.opt:577 #, no-c-format msgid "The maximum expansion factor when copying basic blocks." msgstr "" -#: params.opt:554 +#: params.opt:581 #, no-c-format msgid "Maximum depth of search in the dominator tree for expressions to hoist." msgstr "" -#: params.opt:558 +#: params.opt:585 #, no-c-format msgid "" "Maximum loop depth of a call which is considered for inlining functions " "called once." msgstr "" -#: params.opt:562 +#: params.opt:589 #, no-c-format msgid "" "Maximum combined size of caller and callee which is inlined if callee is " "called once." msgstr "" -#: params.opt:566 +#: params.opt:593 #, no-c-format msgid "The maximum number of instructions when automatically inlining." msgstr "" -#: params.opt:570 +#: params.opt:597 #, no-c-format msgid "" "The maximum number of instructions inline function can grow to via recursive " "inlining." msgstr "" -#: params.opt:574 +#: params.opt:601 #, no-c-format msgid "" "The maximum number of instructions non-inline function can grow to via " "recursive inlining." msgstr "" -#: params.opt:578 +#: params.opt:605 #, no-c-format msgid "" "The maximum number of instructions in a single function eligible for " "inlining." msgstr "" -#: params.opt:582 +#: params.opt:609 #, no-c-format msgid "The maximum number of instructions when inlining for size." msgstr "" -#: params.opt:586 +#: params.opt:613 #, no-c-format msgid "" "The maximum number of instructions when automatically inlining small " "functions." msgstr "" -#: params.opt:590 +#: params.opt:617 #, no-c-format msgid "The maximum depth of recursive inlining for inline functions." msgstr "" -#: params.opt:594 +#: params.opt:621 #, no-c-format msgid "The maximum depth of recursive inlining for non-inline functions." msgstr "" -#: params.opt:598 +#: params.opt:625 #, no-c-format msgid "Maximum number of isl operations, 0 means unlimited." msgstr "" -#: params.opt:602 +#: params.opt:629 #, no-c-format msgid "Bound on the cost of an expression to compute the number of iterations." msgstr "" -#: params.opt:606 +#: params.opt:633 #, no-c-format msgid "" "Bound on the number of iterations the brute force # of iterations analysis " "algorithm evaluates." msgstr "" -#: params.opt:610 +#: params.opt:637 #, no-c-format msgid "" "Maximum number of statements allowed in a block that needs to be duplicated " "when threading jumps." msgstr "" -#: params.opt:614 +#: params.opt:641 #, no-c-format msgid "Search space limit for the backwards jump threader." msgstr "" -#: params.opt:618 +#: params.opt:645 #, no-c-format msgid "" "The maximum number of RTL nodes that can be recorded as combiner's last " "value." msgstr "" -#: params.opt:622 +#: params.opt:649 #, no-c-format msgid "" "The maximum number of insns in loop header duplicated by the copy loop " "headers pass." msgstr "" -#: params.opt:626 +#: params.opt:653 #, no-c-format msgid "" "The maximum number of backtrack attempts the scheduler should make when " "modulo scheduling a loop." msgstr "" -#: params.opt:630 +#: params.opt:657 #, no-c-format msgid "Minimum page size for warning purposes." msgstr "" -#: params.opt:634 +#: params.opt:661 #, no-c-format msgid "" "Maximum length of partial antic set when performing tree pre optimization." msgstr "" -#: params.opt:638 +#: params.opt:665 #, no-c-format msgid "The maximum number of branches on the path through the peeled sequence." msgstr "" -#: params.opt:642 +#: params.opt:669 #, no-c-format msgid "The maximum number of peelings of a single loop." msgstr "" -#: params.opt:646 +#: params.opt:673 #, no-c-format msgid "The maximum number of insns of a peeled loop." msgstr "" -#: params.opt:650 +#: params.opt:677 #, no-c-format msgid "The maximum length of scheduling's pending operations list." msgstr "" -#: params.opt:654 params.opt:698 +#: params.opt:681 params.opt:725 #, no-c-format msgid "" "The maximum number of blocks in a region to be considered for interblock " "scheduling." msgstr "" -#: params.opt:658 params.opt:702 +#: params.opt:685 params.opt:729 #, no-c-format msgid "" "The maximum number of insns in a region to be considered for interblock " "scheduling." msgstr "" -#: params.opt:662 +#: params.opt:689 #, no-c-format msgid "" "Maximum depth of sqrt chains to use when synthesizing exponentiation by a " "real constant." msgstr "" -#: params.opt:666 +#: params.opt:693 #, no-c-format msgid "The maximum number of loop iterations we predict statically." msgstr "" -#: params.opt:670 +#: params.opt:697 #, no-c-format msgid "" "The maximum number of instructions to search backward when looking for " "equivalent reload." msgstr "" -#: params.opt:674 +#: params.opt:701 #, no-c-format msgid "" "Maximum number of insns in a basic block to consider for RTL if-conversion." msgstr "" -#: params.opt:678 +#: params.opt:705 #, no-c-format msgid "" "Maximum permissible cost for the sequence that would be generated by the RTL " "if-conversion pass for a branch that is considered predictable." msgstr "" -#: params.opt:682 +#: params.opt:709 #, no-c-format msgid "" "Maximum permissible cost for the sequence that would be generated by the RTL " "if-conversion pass for a branch that is considered unpredictable." msgstr "" -#: params.opt:686 +#: params.opt:713 #, no-c-format msgid "The maximum number of iterations through CFG to extend regions." msgstr "" -#: params.opt:690 +#: params.opt:717 #, no-c-format msgid "" "The maximum conflict delay for an insn to be considered for speculative " "motion." msgstr "" -#: params.opt:694 +#: params.opt:721 #, no-c-format msgid "" "The maximum number of instructions ready to be issued to be considered by " "the scheduler during the first scheduling pass." msgstr "" -#: params.opt:706 +#: params.opt:733 #, no-c-format msgid "Maximum length of candidate scans for straight-line strength reduction." msgstr "" -#: params.opt:710 +#: params.opt:737 #, no-c-format msgid "Maximum number of may-defs visited when devirtualizing speculatively." msgstr "" -#: params.opt:714 +#: params.opt:741 #, no-c-format msgid "" "Maximum recursion depth allowed when querying a property of an SSA name." msgstr "" -#: params.opt:718 +#: params.opt:745 #, no-c-format msgid "Maximum number of constant stores to merge in the store merging pass." msgstr "" -#: params.opt:722 +#: params.opt:749 #, no-c-format msgid "Maximum number of conditional store pairs that can be sunk." msgstr "" -#: params.opt:726 params.opt:730 +#: params.opt:753 params.opt:757 #, no-c-format msgid "" "Maximum number of store chains to track at the same time in the store " "merging pass." msgstr "" -#: params.opt:734 +#: params.opt:761 #, no-c-format msgid "Maximum amount of similar bbs to compare a bb with." msgstr "" -#: params.opt:738 +#: params.opt:765 #, no-c-format msgid "Maximum amount of iterations of the pass over a function." msgstr "" -#: params.opt:742 +#: params.opt:769 #, no-c-format msgid "" "Maximum number of strings for which strlen optimization pass will track " "string lengths." msgstr "" -#: params.opt:746 +#: params.opt:773 #, no-c-format msgid "" "Maximum number of arguments in a PHI supported by TREE if-conversion unless " "the loop is marked with simd pragma." msgstr "" -#: params.opt:750 +#: params.opt:777 #, no-c-format msgid "The maximum number of unrollings of a single loop." msgstr "" -#: params.opt:754 +#: params.opt:781 #, no-c-format msgid "The maximum number of instructions to consider to unroll in a loop." msgstr "" -#: params.opt:758 +#: params.opt:785 #, no-c-format msgid "The maximum number of insns of an unswitched loop." msgstr "" -#: params.opt:762 +#: params.opt:789 #, no-c-format msgid "The maximum depth of a loop nest to be unswitched." msgstr "" -#: params.opt:766 +#: params.opt:793 #, no-c-format msgid "" "If -fvariable-expansion-in-unroller is used, the maximum number of times " "that an individual variable will be expanded during loop unrolling." msgstr "" -#: params.opt:770 +#: params.opt:797 #, no-c-format msgid "Max. recursion depth for expanding var tracking expressions." msgstr "" -#: params.opt:774 +#: params.opt:801 #, no-c-format msgid "Max. size of loc list for which reverse ops should be added." msgstr "" -#: params.opt:778 +#: params.opt:805 #, no-c-format msgid "Max. size of var tracking hash tables." msgstr "" -#: params.opt:782 +#: params.opt:809 #, no-c-format msgid "Maximum number of VALUEs handled during a single find_base_term call." msgstr "" -#: params.opt:786 +#: params.opt:813 #, no-c-format msgid "" "The minimum number of matching instructions to consider for crossjumping." msgstr "" -#: params.opt:790 +#: params.opt:817 #, no-c-format msgid "" "Inline recursively only when the probability of call being executed exceeds " "the parameter." msgstr "" -#: params.opt:794 +#: params.opt:821 #, no-c-format msgid "" "Min. ratio of insns to prefetches to enable prefetching for a loop with an " "unknown trip count." msgstr "" -#: params.opt:798 +#: params.opt:825 #, no-c-format msgid "" "The minimum threshold for probability of semi-invariant condition statement " "to trigger loop split." msgstr "" -#: params.opt:802 +#: params.opt:829 #, no-c-format msgid "The minimum UID to be used for a nondebug insn." msgstr "" -#: params.opt:806 +#: params.opt:833 #, no-c-format msgid "" "The minimum size of variables taking part in stack slot sharing when not " "optimizing." msgstr "" -#: params.opt:810 +#: params.opt:837 #, no-c-format msgid "" "The minimum probability of reaching a source block for interblock " "speculative scheduling." msgstr "" -#: params.opt:814 +#: params.opt:841 #, no-c-format msgid "" "If -ftree-vectorize is used, the minimal loop bound of a loop to be " "considered for vectorization." msgstr "" -#: params.opt:818 +#: params.opt:845 #, no-c-format msgid "" "--param=openacc-kernels=[decompose|parloops]\tSpecify mode of OpenACC " "'kernels' constructs handling." msgstr "" -#: params.opt:831 +#: params.opt:858 #, no-c-format msgid "" "--param=openacc-privatization=[quiet|noisy]\tSpecify mode of OpenACC " "privatization diagnostics." msgstr "" -#: params.opt:844 +#: params.opt:871 #, no-c-format msgid "Chunk size of omp schedule for loops parallelized by parloops." msgstr "" -#: params.opt:848 +#: params.opt:875 #, no-c-format msgid "" "Minimum number of iterations per thread of an innermost parallelized loop." msgstr "" -#: params.opt:852 +#: params.opt:879 #, no-c-format msgid "" "--param=parloops-schedule=[static|dynamic|guided|auto|runtime]\tSchedule " "type of omp schedule for loops parallelized by parloops." msgstr "" -#: params.opt:874 +#: params.opt:901 #, no-c-format msgid "" "Maximum probability of the entry BB of split region (in percent relative to " "entry BB of the function) to make partial inlining happen." msgstr "" -#: params.opt:878 +#: params.opt:905 #, no-c-format msgid "" "Maximum number of statements allowed inbetween the statement and the end to " "considered not extending the liferange." msgstr "" -#: params.opt:882 +#: params.opt:909 #, no-c-format msgid "Maximal estimated outcome of branch considered predictable." msgstr "" -#: params.opt:886 +#: params.opt:913 #, no-c-format msgid "" "Whether software prefetch hints should be issued for non-constant strides." msgstr "" -#: params.opt:890 +#: params.opt:917 #, no-c-format msgid "The number of insns executed before prefetch is completed." msgstr "" -#: params.opt:894 +#: params.opt:921 #, no-c-format msgid "Min. ratio of insns to mem ops to enable prefetching in a loop." msgstr "" -#: params.opt:898 +#: params.opt:925 #, no-c-format msgid "" "The minimum constant stride beyond which we should use prefetch hints for." msgstr "" -#: params.opt:902 +#: params.opt:929 #, no-c-format msgid "Use internal function id in profile lookup." msgstr "" -#: params.opt:906 +#: params.opt:933 #, no-c-format msgid "" "--param=ranger-debug=[none|trace|gori|cache|tracegori|all] Specifies the " "output mode for debugging ranger." msgstr "" -#: params.opt:931 +#: params.opt:958 #, no-c-format msgid "" "Maximum depth of logical expression evaluation ranger will look through when " "evaluating outgoing edge ranges." msgstr "" -#: params.opt:936 +#: params.opt:963 #, no-c-format msgid "" "Maximum depth of instruction chains to consider for recomputation in the " "outgoing range calculator." msgstr "" -#: params.opt:941 +#: params.opt:968 #, no-c-format msgid "Maximum number of relations the oracle will register in a basic block." msgstr "" -#: params.opt:945 +#: params.opt:972 #, no-c-format msgid "" "Work bound when discovering transitive relations from existing relations." msgstr "" -#: params.opt:949 +#: params.opt:976 #, no-c-format msgid "Maximum depth of a loop nest to fully value-number optimistically." msgstr "" -#: params.opt:953 +#: params.opt:980 #, no-c-format msgid "Maximum number of disambiguations to perform per memory access." msgstr "" -#: params.opt:957 +#: params.opt:984 #, no-c-format msgid "" "Bound on the complexity of the expressions in the scalar evolutions analyzer." msgstr "" -#: params.opt:961 +#: params.opt:988 #, no-c-format msgid "Bound on size of expressions used in the scalar evolutions analyzer." msgstr "" -#: params.opt:965 +#: params.opt:992 #, no-c-format msgid "" "Hardware autoprefetcher scheduler model control flag. Number of lookahead " @@ -18865,143 +18907,143 @@ msgid "" "heuristic. Disabled by default." msgstr "" -#: params.opt:969 +#: params.opt:996 #, no-c-format msgid "Minimal distance between possibly conflicting store and load." msgstr "" -#: params.opt:973 +#: params.opt:1000 #, no-c-format msgid "Which -fsched-pressure algorithm to apply." msgstr "" -#: params.opt:977 +#: params.opt:1004 #, no-c-format msgid "" "The minimal probability of speculation success (in percents), so that " "speculative insn will be scheduled." msgstr "" -#: params.opt:981 +#: params.opt:1008 #, no-c-format msgid "" "The minimum probability an edge must have for the scheduler to save its " "state across it." msgstr "" -#: params.opt:985 +#: params.opt:1012 #, no-c-format msgid "" "Maximum number of instructions in the ready list that are considered " "eligible for renaming." msgstr "" -#: params.opt:989 +#: params.opt:1016 #, no-c-format msgid "The maximum size of the lookahead window of selective scheduling." msgstr "" -#: params.opt:993 +#: params.opt:1020 #, no-c-format msgid "Maximum number of times that an insn could be scheduled." msgstr "" -#: params.opt:997 +#: params.opt:1024 #, no-c-format msgid "The number of prefetches that can run at the same time." msgstr "" -#: params.opt:1001 +#: params.opt:1028 #, no-c-format msgid "" "Target block's relative execution frequency (as a percentage) required to " "sink a statement." msgstr "" -#: params.opt:1005 +#: params.opt:1032 #, no-c-format msgid "" "The number of cycles the swing modulo scheduler considers when checking " "conflicts using DFA." msgstr "" -#: params.opt:1009 +#: params.opt:1036 #, no-c-format msgid "" "A threshold on the average loop count considered by the swing modulo " "scheduler." msgstr "" -#: params.opt:1013 +#: params.opt:1040 #, no-c-format msgid "" "A factor for tuning the upper bound that swing modulo scheduler uses for " "scheduling a loop." msgstr "" -#: params.opt:1017 +#: params.opt:1044 #, no-c-format msgid "" "The minimum value of stage count that swing modulo scheduler will generate." msgstr "" -#: params.opt:1021 +#: params.opt:1048 #, no-c-format msgid "" "Maximum size, in storage units, of an aggregate which should be considered " "for scalarization when compiling for size." msgstr "" -#: params.opt:1025 +#: params.opt:1052 #, no-c-format msgid "" "Maximum size, in storage units, of an aggregate which should be considered " "for scalarization when compiling for speed." msgstr "" -#: params.opt:1029 +#: params.opt:1056 #, no-c-format msgid "" "Maximum number of artificial accesses to enable forward propagation that " "Scalar Replacement of Aggregates will keep for one local variable." msgstr "" -#: params.opt:1033 +#: params.opt:1060 #, no-c-format msgid "" "The maximum number of SSA_NAME assignments to follow in determining a value." msgstr "" -#: params.opt:1037 +#: params.opt:1064 #, no-c-format msgid "" "The lower bound for a buffer to be considered for stack smashing protection." msgstr "" -#: params.opt:1041 +#: params.opt:1068 #, no-c-format msgid "Size of the stack guard expressed as a power of two in bytes." msgstr "" -#: params.opt:1045 +#: params.opt:1072 #, no-c-format msgid "" "Interval in which to probe the stack expressed as a power of two in bytes." msgstr "" -#: params.opt:1049 +#: params.opt:1076 #, no-c-format msgid "" "Allow the store merging pass to introduce unaligned stores if it is legal to " "do so." msgstr "" -#: params.opt:1053 +#: params.opt:1080 #, no-c-format msgid "Maximum size of a single store merging region in bytes." msgstr "" -#: params.opt:1057 +#: params.opt:1084 #, no-c-format msgid "" "Maximum number of instruction distance that a small store forwarded to a " @@ -19009,166 +19051,166 @@ msgid "" "store-forwarding pass." msgstr "" -#: params.opt:1061 +#: params.opt:1088 #, no-c-format msgid "" "The maximum ratio between array size and switch branches for a switch " "conversion to take place." msgstr "" -#: params.opt:1065 +#: params.opt:1092 #, no-c-format msgid "Maximum number of cases for slow switch lowering algorithms to be used." msgstr "" -#: params.opt:1069 +#: params.opt:1096 #, no-c-format msgid "Maximum number of bases stored in each modref tree." msgstr "" -#: params.opt:1073 +#: params.opt:1100 #, no-c-format msgid "Maximum number of references stored in each modref base." msgstr "" -#: params.opt:1077 +#: params.opt:1104 #, no-c-format msgid "Maximum number of accesses stored in each modref reference." msgstr "" -#: params.opt:1081 +#: params.opt:1108 #, no-c-format msgid "Maximum number of tests performed by modref query." msgstr "" -#: params.opt:1085 +#: params.opt:1112 #, no-c-format msgid "Maximum depth of DFS walk used by modref escape analysis." msgstr "" -#: params.opt:1089 +#: params.opt:1116 #, no-c-format msgid "Maximum number of escape points tracked by modref per SSA-name." msgstr "" -#: params.opt:1093 +#: params.opt:1120 #, no-c-format msgid "Maximum number of times a given range is adjusted during the dataflow." msgstr "" -#: params.opt:1097 +#: params.opt:1124 #, no-c-format msgid "" "--param=threader-debug=[none|all] Enables verbose dumping of the threader " "solver." msgstr "" -#: params.opt:1110 +#: params.opt:1137 #, no-c-format msgid "" "Size in bytes after which thread-local aggregates should be instrumented " "with the logging functions instead of save/restore pairs." msgstr "" -#: params.opt:1114 +#: params.opt:1141 #, no-c-format msgid "" "The percentage of function, weighted by execution frequency, that must be " "covered by trace formation. Used when profile feedback is not available." msgstr "" -#: params.opt:1118 +#: params.opt:1145 #, no-c-format msgid "" "The percentage of function, weighted by execution frequency, that must be " "covered by trace formation. Used when profile feedback is available." msgstr "" -#: params.opt:1122 +#: params.opt:1149 #, no-c-format msgid "Maximal code growth caused by tail duplication (in percent)." msgstr "" -#: params.opt:1126 +#: params.opt:1153 #, no-c-format msgid "" "Stop forward growth if the probability of best edge is less than this " "threshold (in percent). Used when profile feedback is not available." msgstr "" -#: params.opt:1130 +#: params.opt:1157 #, no-c-format msgid "" "Stop forward growth if the probability of best edge is less than this " "threshold (in percent). Used when profile feedback is available." msgstr "" -#: params.opt:1134 +#: params.opt:1161 #, no-c-format msgid "" "Stop reverse growth if the reverse probability of best edge is less than " "this threshold (in percent)." msgstr "" -#: params.opt:1138 +#: params.opt:1165 #, no-c-format msgid "" "Set the maximum number of instructions executed in parallel in reassociated " "tree. If 0, use the target dependent heuristic." msgstr "" -#: params.opt:1142 +#: params.opt:1169 #, no-c-format msgid "Emit special instrumentation for accesses to volatiles." msgstr "" -#: params.opt:1146 +#: params.opt:1173 #, no-c-format msgid "" "Emit instrumentation calls to __tsan_func_entry() and __tsan_func_exit()." msgstr "" -#: params.opt:1150 +#: params.opt:1177 #, no-c-format msgid "" "Maximum number of nested calls to search for control dependencies during " "uninitialized variable analysis." msgstr "" -#: params.opt:1154 +#: params.opt:1181 #, no-c-format msgid "" "Maximum number of predicates anded for each predicate ored in the normalized " "predicate chain." msgstr "" -#: params.opt:1159 +#: params.opt:1186 #, no-c-format msgid "Maximum number of predicates ored in the normalized predicate chain." msgstr "" -#: params.opt:1163 +#: params.opt:1190 #, no-c-format msgid "" "Instruction accounted for function prologue, epilogue and other overhead." msgstr "" -#: params.opt:1167 +#: params.opt:1194 #, no-c-format msgid "Time accounted for function prologue, epilogue and other overhead." msgstr "" -#: params.opt:1171 +#: params.opt:1198 #, no-c-format msgid "Instruction accounted for function thunk overhead." msgstr "" -#: params.opt:1175 +#: params.opt:1202 #, no-c-format msgid "Time accounted for function thunk overhead." msgstr "" -#: params.opt:1179 +#: params.opt:1206 #, no-c-format msgid "" "The denominator n of fraction 1/n of the number of profiled runs of the " @@ -19176,64 +19218,64 @@ msgid "" "order for the basic block to be considered unlikely." msgstr "" -#: params.opt:1183 +#: params.opt:1210 #, no-c-format msgid "Maximum unroll factor for the unroll-and-jam transformation." msgstr "" -#: params.opt:1187 +#: params.opt:1214 #, no-c-format msgid "" "Minimum percentage of memrefs that must go away for unroll-and-jam to be " "considered profitable." msgstr "" -#: params.opt:1191 +#: params.opt:1218 #, no-c-format msgid "" "Use direct poisoning/unpoisoning instructions for variables smaller or equal " "to this number." msgstr "" -#: params.opt:1195 +#: params.opt:1222 #, no-c-format msgid "Whether to use canonical types." msgstr "" -#: params.opt:1199 +#: params.opt:1226 #, no-c-format msgid "Enable loop epilogue vectorization using smaller vector size." msgstr "" -#: params.opt:1203 +#: params.opt:1230 #, no-c-format msgid "" "Maximum number of possible vector layouts (such as permutations) to consider " "when optimizing to-be-vectorized code." msgstr "" -#: params.opt:1207 +#: params.opt:1234 #, no-c-format msgid "" "Maximum number of loop peels to enhance alignment of data references in a " "loop." msgstr "" -#: params.opt:1211 +#: params.opt:1238 #, no-c-format msgid "" "Bound on number of runtime checks inserted by the vectorizer's loop " "versioning for alias check." msgstr "" -#: params.opt:1215 +#: params.opt:1242 #, no-c-format msgid "" "Bound on number of runtime checks inserted by the vectorizer's loop " "versioning for alignment check." msgstr "" -#: params.opt:1219 +#: params.opt:1246 #, no-c-format msgid "" "Controls how loop vectorizer uses partial vectors. 0 means never, 1 means " @@ -19241,118 +19283,118 @@ msgid "" "The default value is 2." msgstr "" -#: params.opt:1223 +#: params.opt:1250 #, no-c-format msgid "" "The maximum factor which the loop vectorizer applies to the cost of " "statements in an inner loop relative to the loop being vectorized." msgstr "" -#: params.opt:1227 +#: params.opt:1254 #, no-c-format msgid "Enable loop vectorization of floating point inductions." msgstr "" -#: params.opt:1231 +#: params.opt:1258 #, no-c-format msgid "Force the use of SLP when vectorizing, fail if not possible." msgstr "" -#: params.opt:1235 +#: params.opt:1262 #, no-c-format msgid "" "Maximum number of basic blocks before VRP switches to a fast model with less " "memory requirements." msgstr "" -#: params.opt:1239 +#: params.opt:1266 #, no-c-format msgid "Maximum number of basic blocks before VRP uses a sparse bitmap cache." msgstr "" -#: params.opt:1243 +#: params.opt:1270 #, no-c-format msgid "" "Maximum number of outgoing edges in a switch before VRP will not process it." msgstr "" -#: params.opt:1247 +#: params.opt:1274 #, no-c-format msgid "Maximum number of basic blocks for VRP to use a basic cache vector." msgstr "" -#: calls.cc:1451 +#: calls.cc:1458 msgid "a callee-copied argument is stored in the current function's frame" msgstr "" -#: calls.cc:1520 +#: calls.cc:1528 msgid "argument must be passed by copying" msgstr "" -#: calls.cc:2539 +#: calls.cc:2545 msgid "" "machine description does not have a sibcall_epilogue instruction pattern" msgstr "" -#: calls.cc:2550 +#: calls.cc:2557 msgid "callee returns a structure" msgstr "" -#: calls.cc:2559 +#: calls.cc:2565 msgid "target is not able to optimize the call into a sibling call" msgstr "" -#: calls.cc:2568 +#: calls.cc:2574 msgid "callee returns twice" msgstr "" -#: calls.cc:2573 +#: calls.cc:2579 msgid "callee does not return" msgstr "" -#: calls.cc:2579 +#: calls.cc:2585 msgid "volatile function type" msgstr "" -#: calls.cc:2598 +#: calls.cc:2604 msgid "nested function" msgstr "" -#: calls.cc:2610 +#: calls.cc:2615 msgid "callee required more stack slots than the caller" msgstr "" -#: calls.cc:2625 +#: calls.cc:2629 msgid "inconsistent number of popped arguments" msgstr "" -#: calls.cc:2632 +#: calls.cc:2636 msgid "frontend does not support sibling call" msgstr "" -#: calls.cc:2688 +#: calls.cc:2692 msgid "other reasons" msgstr "" -#: calls.cc:3062 +#: calls.cc:3066 msgid "inside another call" msgstr "" -#: calls.cc:3071 +#: calls.cc:3075 msgid "variable size arguments" msgstr "" -#: calls.cc:3096 +#: calls.cc:3099 msgid "hidden string length argument passed on stack" msgstr "" -#: calls.cc:3144 +#: calls.cc:3148 msgid "caller and callee disagree in promotion of function return value" msgstr "" #. Ideally we'd emit a message for all of the ways that it could #. have failed. -#: calls.cc:4056 +#: calls.cc:4060 msgid "tail call production failed" msgstr "" @@ -19576,298 +19618,298 @@ msgstr "" #. PRINT_OPERAND must handle them. #. We can't handle floating point constants; #. TARGET_PRINT_OPERAND must handle them. -#: final.cc:3738 config/arc/arc.cc:6311 config/i386/i386.cc:12793 +#: final.cc:3738 config/arc/arc.cc:6311 config/i386/i386.cc:12800 #, c-format msgid "floating constant misused" msgstr "" -#: final.cc:3796 config/arc/arc.cc:6408 config/i386/i386.cc:12884 +#: final.cc:3796 config/arc/arc.cc:6408 config/i386/i386.cc:12891 #: config/pdp11/pdp11.cc:1872 #, c-format msgid "invalid expression as operand" msgstr "" -#: gcc.cc:129 +#: gcc.cc:132 #, c-format msgid "%s\n" msgstr "" -#: gcc.cc:1864 +#: gcc.cc:1867 #, c-format msgid "Using built-in specs.\n" msgstr "" -#: gcc.cc:2109 +#: gcc.cc:2112 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" -#: gcc.cc:2318 +#: gcc.cc:2321 #, c-format msgid "Reading specs from %s\n" msgstr "" -#: gcc.cc:2448 +#: gcc.cc:2451 #, c-format msgid "could not find specs file %s\n" msgstr "" -#: gcc.cc:2519 +#: gcc.cc:2522 #, c-format msgid "rename spec %s to %s\n" msgstr "" -#: gcc.cc:2521 +#: gcc.cc:2524 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" -#: gcc.cc:3382 +#: gcc.cc:3385 #, c-format msgid "" "\n" "Go ahead? (y or n) " msgstr "" -#: gcc.cc:3554 +#: gcc.cc:3557 #, c-format msgid "# %s %.2f %.2f\n" msgstr "" -#: gcc.cc:3734 +#: gcc.cc:3737 #, c-format msgid "Usage: %s [options] file...\n" msgstr "" -#: gcc.cc:3735 +#: gcc.cc:3738 msgid "Options:\n" msgstr "" -#: gcc.cc:3737 +#: gcc.cc:3740 msgid " -pass-exit-codes Exit with highest error code from a phase.\n" msgstr "" -#: gcc.cc:3738 +#: gcc.cc:3741 msgid " --help Display this information.\n" msgstr "" -#: gcc.cc:3739 +#: gcc.cc:3742 msgid "" " --target-help Display target specific command line options " "(including assembler and linker options).\n" msgstr "" -#: gcc.cc:3741 +#: gcc.cc:3744 msgid "" " --help={common|optimizers|params|target|warnings|[^]{joined|separate|" "undocumented}}[,...].\n" msgstr "" -#: gcc.cc:3742 +#: gcc.cc:3745 msgid "" " Display specific types of command line options.\n" msgstr "" -#: gcc.cc:3744 +#: gcc.cc:3747 msgid " (Use '-v --help' to display command line options of sub-processes).\n" msgstr "" -#: gcc.cc:3745 +#: gcc.cc:3748 msgid " --version Display compiler version information.\n" msgstr "" -#: gcc.cc:3746 +#: gcc.cc:3749 msgid " -dumpspecs Display all of the built in spec strings.\n" msgstr "" -#: gcc.cc:3747 +#: gcc.cc:3750 msgid " -dumpversion Display the version of the compiler.\n" msgstr "" -#: gcc.cc:3748 +#: gcc.cc:3751 msgid " -dumpmachine Display the compiler's target processor.\n" msgstr "" -#: gcc.cc:3749 +#: gcc.cc:3752 msgid " -foffload=<targets> Specify offloading targets.\n" msgstr "" -#: gcc.cc:3750 +#: gcc.cc:3753 msgid "" " -print-search-dirs Display the directories in the compiler's search " "path.\n" msgstr "" -#: gcc.cc:3751 +#: gcc.cc:3754 msgid "" " -print-libgcc-file-name Display the name of the compiler's companion " "library.\n" msgstr "" -#: gcc.cc:3752 +#: gcc.cc:3755 msgid " -print-file-name=<lib> Display the full path to library <lib>.\n" msgstr "" -#: gcc.cc:3753 +#: gcc.cc:3756 msgid "" " -print-prog-name=<prog> Display the full path to compiler component " "<prog>.\n" msgstr "" -#: gcc.cc:3754 +#: gcc.cc:3757 msgid "" " -print-multiarch Display the target's normalized GNU triplet, used " "as\n" " a component in the library path.\n" msgstr "" -#: gcc.cc:3757 +#: gcc.cc:3760 msgid "" " -print-multi-directory Display the root directory for versions of " "libgcc.\n" msgstr "" -#: gcc.cc:3758 +#: gcc.cc:3761 msgid "" " -print-multi-lib Display the mapping between command line options " "and\n" " multiple library search directories.\n" msgstr "" -#: gcc.cc:3761 +#: gcc.cc:3764 msgid "" " -print-multi-os-directory Display the relative path to OS libraries.\n" msgstr "" -#: gcc.cc:3762 +#: gcc.cc:3765 msgid " -print-sysroot Display the target libraries directory.\n" msgstr "" -#: gcc.cc:3763 +#: gcc.cc:3766 msgid "" " -print-sysroot-headers-suffix Display the sysroot suffix used to find " "headers.\n" msgstr "" -#: gcc.cc:3764 +#: gcc.cc:3767 msgid "" " -Wa,<options> Pass comma-separated <options> on to the " "assembler.\n" msgstr "" -#: gcc.cc:3765 +#: gcc.cc:3768 msgid "" " -Wp,<options> Pass comma-separated <options> on to the " "preprocessor.\n" msgstr "" -#: gcc.cc:3766 +#: gcc.cc:3769 msgid "" " -Wl,<options> Pass comma-separated <options> on to the linker.\n" msgstr "" -#: gcc.cc:3767 +#: gcc.cc:3770 msgid " -Xassembler <arg> Pass <arg> on to the assembler.\n" msgstr "" -#: gcc.cc:3768 +#: gcc.cc:3771 msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor.\n" msgstr "" -#: gcc.cc:3769 +#: gcc.cc:3772 msgid " -Xlinker <arg> Pass <arg> on to the linker.\n" msgstr "" -#: gcc.cc:3770 +#: gcc.cc:3773 msgid " -save-temps Do not delete intermediate files.\n" msgstr "" -#: gcc.cc:3771 +#: gcc.cc:3774 msgid " -save-temps=<arg> Do not delete intermediate files.\n" msgstr "" -#: gcc.cc:3772 +#: gcc.cc:3775 msgid "" " -no-canonical-prefixes Do not canonicalize paths when building relative\n" " prefixes to other gcc components.\n" msgstr "" -#: gcc.cc:3775 +#: gcc.cc:3778 msgid " -pipe Use pipes rather than intermediate files.\n" msgstr "" -#: gcc.cc:3776 +#: gcc.cc:3779 msgid " -time Time the execution of each subprocess.\n" msgstr "" -#: gcc.cc:3777 +#: gcc.cc:3780 msgid "" " -specs=<file> Override built-in specs with the contents of " "<file>.\n" msgstr "" -#: gcc.cc:3778 +#: gcc.cc:3781 msgid "" " -std=<standard> Assume that the input sources are for " "<standard>.\n" msgstr "" -#: gcc.cc:3779 +#: gcc.cc:3782 msgid "" " --sysroot=<directory> Use <directory> as the root directory for " "headers\n" " and libraries.\n" msgstr "" -#: gcc.cc:3782 +#: gcc.cc:3785 msgid "" " -B <directory> Add <directory> to the compiler's search paths.\n" msgstr "" -#: gcc.cc:3783 +#: gcc.cc:3786 msgid "" " -v Display the programs invoked by the compiler.\n" msgstr "" -#: gcc.cc:3784 +#: gcc.cc:3787 msgid "" " -### Like -v but options quoted and commands not " "executed.\n" msgstr "" -#: gcc.cc:3785 +#: gcc.cc:3788 msgid "" " -E Preprocess only; do not compile, assemble or " "link.\n" msgstr "" -#: gcc.cc:3786 +#: gcc.cc:3789 msgid " -S Compile only; do not assemble or link.\n" msgstr "" -#: gcc.cc:3787 +#: gcc.cc:3790 msgid " -c Compile and assemble, but do not link.\n" msgstr "" -#: gcc.cc:3788 +#: gcc.cc:3791 msgid " -o <file> Place the output into <file>.\n" msgstr "" -#: gcc.cc:3789 +#: gcc.cc:3792 msgid "" " -pie Create a dynamically linked position independent\n" " executable.\n" msgstr "" -#: gcc.cc:3791 +#: gcc.cc:3794 msgid " -shared Create a shared library.\n" msgstr "" -#: gcc.cc:3792 +#: gcc.cc:3795 msgid "" " -x <language> Specify the language of the following input " "files.\n" @@ -19878,7 +19920,7 @@ msgid "" "extension.\n" msgstr "" -#: gcc.cc:3799 +#: gcc.cc:3802 #, c-format msgid "" "\n" @@ -19887,97 +19929,97 @@ msgid "" " other options on to these processes the -W<letter> options must be used.\n" msgstr "" -#: gcc.cc:6945 +#: gcc.cc:6948 #, c-format msgid "Processing spec (%s), which is '%s'\n" msgstr "" -#: gcc.cc:7706 +#: gcc.cc:7709 #, c-format msgid "Target: %s\n" msgstr "" -#: gcc.cc:7707 +#: gcc.cc:7710 #, c-format msgid "Configured with: %s\n" msgstr "" -#: gcc.cc:7721 +#: gcc.cc:7724 #, c-format msgid "Thread model: %s\n" msgstr "" -#: gcc.cc:7722 +#: gcc.cc:7725 #, c-format msgid "Supported LTO compression algorithms: zlib" msgstr "" -#: gcc.cc:7724 +#: gcc.cc:7727 #, c-format msgid " zstd" msgstr "" -#: gcc.cc:7726 gcov.cc:1902 gcov.cc:1962 gcov.cc:1974 gcov.cc:3564 +#: gcc.cc:7729 gcov.cc:1902 gcov.cc:1962 gcov.cc:1974 gcov.cc:3564 #, c-format msgid "\n" msgstr "" -#: gcc.cc:7737 +#: gcc.cc:7740 #, c-format msgid "gcc version %s %s\n" msgstr "" -#: gcc.cc:7740 +#: gcc.cc:7743 #, c-format msgid "gcc driver version %s %sexecuting gcc version %s\n" msgstr "" -#: gcc.cc:7813 gcc.cc:8023 +#: gcc.cc:7819 gcc.cc:8033 #, c-format msgid "" "The bug is not reproducible, so it is likely a hardware or OS problem.\n" msgstr "" -#: gcc.cc:7947 +#: gcc.cc:7953 #, c-format msgid "" "Preprocessed source stored into %s file, please attach this to your " "bugreport.\n" msgstr "" -#: gcc.cc:8787 +#: gcc.cc:8797 #, c-format msgid "install: %s%s\n" msgstr "" -#: gcc.cc:8790 +#: gcc.cc:8800 #, c-format msgid "programs: %s\n" msgstr "" -#: gcc.cc:8792 +#: gcc.cc:8802 #, c-format msgid "libraries: %s\n" msgstr "" -#: gcc.cc:8909 +#: gcc.cc:8919 #, c-format msgid "" "\n" "For bug reporting instructions, please see:\n" msgstr "" -#: gcc.cc:8925 gcov-tool.cc:594 sarif-replay.cc:56 +#: gcc.cc:8935 gcov-tool.cc:594 sarif-replay.cc:56 #, c-format msgid "%s %s%s\n" msgstr "" -#: gcc.cc:8928 gcov-tool.cc:596 gcov.cc:1155 sarif-replay.cc:59 +#: gcc.cc:8938 gcov-tool.cc:596 gcov.cc:1155 sarif-replay.cc:59 #: fortran/gfortranspec.cc:282 msgid "(C)" msgstr "" -#: gcc.cc:8929 gcov-tool.cc:598 gcov.cc:1157 sarif-replay.cc:60 +#: gcc.cc:8939 gcov-tool.cc:598 gcov.cc:1157 sarif-replay.cc:60 #: fortran/gfortranspec.cc:283 #, c-format msgid "" @@ -19986,7 +20028,7 @@ msgid "" "\n" msgstr "" -#: gcc.cc:9272 +#: gcc.cc:9282 #, c-format msgid "" "\n" @@ -19995,14 +20037,14 @@ msgid "" "\n" msgstr "" -#: gcc.cc:9273 +#: gcc.cc:9283 #, c-format msgid "" "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n" "\n" msgstr "" -#: gcc.cc:10679 +#: gcc.cc:10689 #, c-format msgid "" "Assembler options\n" @@ -20010,7 +20052,7 @@ msgid "" "\n" msgstr "" -#: gcc.cc:10680 +#: gcc.cc:10690 #, c-format msgid "" "Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n" @@ -20794,113 +20836,113 @@ msgstr "" msgid "Uses of this option are diagnosed." msgstr "" -#: opts.cc:1700 +#: opts.cc:1723 #, c-format msgid "Same as %s%s (or, in negated form, %s%s)." msgstr "" -#: opts.cc:1705 +#: opts.cc:1728 #, c-format msgid "Same as %s%s." msgstr "" -#: opts.cc:1710 +#: opts.cc:1733 #, c-format msgid "Same as %s." msgstr "" -#: opts.cc:1718 +#: opts.cc:1741 #, c-format msgid "%s Same as %s." msgstr "" -#: opts.cc:1781 +#: opts.cc:1804 msgid "[available in " msgstr "" -#: opts.cc:1813 +#: opts.cc:1836 msgid "[default]" msgstr "" -#: opts.cc:1822 +#: opts.cc:1845 #, c-format msgid "%llu bytes" msgstr "" -#: opts.cc:1859 +#: opts.cc:1882 msgid "[enabled]" msgstr "" -#: opts.cc:1861 +#: opts.cc:1884 msgid "[disabled]" msgstr "" -#: opts.cc:1897 +#: opts.cc:1920 #, c-format msgid " No options with the desired characteristics were found\n" msgstr "" -#: opts.cc:1906 +#: opts.cc:1929 #, c-format msgid "" " None found. Use --help=%s to show *all* the options supported by the %s " "front-end.\n" msgstr "" -#: opts.cc:1912 +#: opts.cc:1935 #, c-format msgid "" " All options with the desired characteristics have already been displayed\n" msgstr "" -#: opts.cc:1957 +#: opts.cc:1980 #, c-format msgid "" " Known valid arguments for %s option:\n" " " msgstr "" -#: opts.cc:2007 +#: opts.cc:2030 msgid "The following options are target specific" msgstr "" -#: opts.cc:2010 +#: opts.cc:2033 msgid "The following options control compiler warning messages" msgstr "" -#: opts.cc:2013 +#: opts.cc:2036 msgid "The following options control optimizations" msgstr "" -#: opts.cc:2016 opts.cc:2056 +#: opts.cc:2039 opts.cc:2079 msgid "The following options are language-independent" msgstr "" -#: opts.cc:2019 +#: opts.cc:2042 msgid "The following options control parameters" msgstr "" -#: opts.cc:2025 +#: opts.cc:2048 msgid "The following options are specific to just the language " msgstr "" -#: opts.cc:2027 +#: opts.cc:2050 msgid "The following options are supported by the language " msgstr "" -#: opts.cc:2038 +#: opts.cc:2061 msgid "The following options are not documented" msgstr "" -#: opts.cc:2040 +#: opts.cc:2063 msgid "The following options take separate arguments" msgstr "" -#: opts.cc:2042 +#: opts.cc:2065 msgid "The following options take joined arguments" msgstr "" -#: opts.cc:2054 +#: opts.cc:2077 msgid "The following options are language-related" msgstr "" @@ -21001,89 +21043,93 @@ msgid "" "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" msgstr "" -#: tree-diagnostic.cc:100 tree-logical-location.cc:92 c/c-decl.cc:6606 -#: c/c-typeck.cc:8999 cp/error.cc:1301 c-family/c-pretty-print.cc:447 +#: tree-diagnostic.cc:100 tree-logical-location.cc:92 c/c-decl.cc:6607 +#: c/c-typeck.cc:9013 cp/error.cc:1301 c-family/c-pretty-print.cc:447 #, gcc-internal-format msgid "<anonymous>" msgstr "" -#: tree-tailcall.cc:153 +#: tree-tailcall.cc:158 msgid "caller uses stdargs" msgstr "" -#: tree-tailcall.cc:172 +#: tree-tailcall.cc:177 msgid "caller uses alloca" msgstr "" -#: tree-tailcall.cc:182 +#: tree-tailcall.cc:187 msgid "caller uses sjlj exceptions" msgstr "" -#: tree-tailcall.cc:192 tree-tailcall.cc:690 +#: tree-tailcall.cc:197 tree-tailcall.cc:723 msgid "caller uses setjmp" msgstr "" -#: tree-tailcall.cc:200 +#: tree-tailcall.cc:205 msgid "caller uses __builtin_eh_return" msgstr "" -#: tree-tailcall.cc:600 +#: tree-tailcall.cc:633 msgid "memory reference or volatile after call" msgstr "" -#: tree-tailcall.cc:657 +#: tree-tailcall.cc:690 msgid "address of caller arguments taken" msgstr "" -#: tree-tailcall.cc:684 +#: tree-tailcall.cc:717 msgid "return value in memory" msgstr "" -#: tree-tailcall.cc:701 +#: tree-tailcall.cc:734 msgid "code between call and return" msgstr "" -#: tree-tailcall.cc:715 +#: tree-tailcall.cc:747 msgid "call may throw exception that does not propagate" msgstr "" -#: tree-tailcall.cc:725 +#: tree-tailcall.cc:760 tree-tailcall.cc:1166 msgid "call may throw exception caught locally or perform cleanups" msgstr "" -#: tree-tailcall.cc:759 +#: tree-tailcall.cc:795 msgid "return value used after call" msgstr "" -#: tree-tailcall.cc:858 tree-tailcall.cc:887 +#: tree-tailcall.cc:893 tree-tailcall.cc:921 msgid "call invocation refers to locals" msgstr "" -#: tree-tailcall.cc:953 +#: tree-tailcall.cc:1001 msgid "unhandled code after call" msgstr "" -#: tree-tailcall.cc:963 +#: tree-tailcall.cc:1011 msgid "return value changed after call" msgstr "" -#: tree-tailcall.cc:1012 +#: tree-tailcall.cc:1060 msgid "internal call" msgstr "" -#: tree-tailcall.cc:1021 tree-tailcall.cc:1061 +#: tree-tailcall.cc:1068 tree-tailcall.cc:1139 msgid "call and return value are different" msgstr "" -#: tree-tailcall.cc:1072 +#: tree-tailcall.cc:1149 msgid "operations after non tail recursive call" msgstr "" -#: tree-tailcall.cc:1081 +#: tree-tailcall.cc:1157 msgid "tail recursion with pointers can only use additions" msgstr "" -#: tree-tailcall.cc:1563 +#: tree-tailcall.cc:1170 +msgid "exception cleanups omit __tsan_func_exit call" +msgstr "" + +#: tree-tailcall.cc:1672 msgid "tail recursion with accumulation mixed with musttail non-recursive call" msgstr "" @@ -21450,85 +21496,85 @@ msgstr "" msgid "cannot combine GNU and SVE vectors in a binary operation" msgstr "" -#: config/alpha/alpha.cc:5783 config/i386/i386.cc:14069 +#: config/alpha/alpha.cc:5780 config/i386/i386.cc:14076 #: config/rs6000/rs6000.cc:14674 config/sparc/sparc.cc:9400 #, c-format msgid "'%%&' used without any local dynamic TLS references" msgstr "" -#: config/alpha/alpha.cc:5841 config/bfin/bfin.cc:1428 +#: config/alpha/alpha.cc:5838 config/bfin/bfin.cc:1428 #, c-format msgid "invalid %%J value" msgstr "" -#: config/alpha/alpha.cc:5871 config/ia64/ia64.cc:5592 config/or1k/or1k.cc:1252 +#: config/alpha/alpha.cc:5868 config/ia64/ia64.cc:5592 config/or1k/or1k.cc:1252 #, c-format msgid "invalid %%r value" msgstr "" -#: config/alpha/alpha.cc:5881 config/ia64/ia64.cc:5546 +#: config/alpha/alpha.cc:5878 config/ia64/ia64.cc:5546 #: config/rs6000/rs6000.cc:14369 config/xtensa/xtensa.cc:3144 #, c-format msgid "invalid %%R value" msgstr "" -#: config/alpha/alpha.cc:5887 config/rs6000/rs6000.cc:14289 +#: config/alpha/alpha.cc:5884 config/rs6000/rs6000.cc:14289 #: config/xtensa/xtensa.cc:3117 #, c-format msgid "invalid %%N value" msgstr "" -#: config/alpha/alpha.cc:5895 config/rs6000/rs6000.cc:14317 +#: config/alpha/alpha.cc:5892 config/rs6000/rs6000.cc:14317 #, c-format msgid "invalid %%P value" msgstr "" -#: config/alpha/alpha.cc:5903 +#: config/alpha/alpha.cc:5900 #, c-format msgid "invalid %%h value" msgstr "" -#: config/alpha/alpha.cc:5911 config/xtensa/xtensa.cc:3137 +#: config/alpha/alpha.cc:5908 config/xtensa/xtensa.cc:3137 #, c-format msgid "invalid %%L value" msgstr "" -#: config/alpha/alpha.cc:5930 +#: config/alpha/alpha.cc:5927 #, c-format msgid "invalid %%m value" msgstr "" -#: config/alpha/alpha.cc:5936 +#: config/alpha/alpha.cc:5933 #, c-format msgid "invalid %%M value" msgstr "" -#: config/alpha/alpha.cc:5973 +#: config/alpha/alpha.cc:5970 #, c-format msgid "invalid %%U value" msgstr "" -#: config/alpha/alpha.cc:5981 config/rs6000/rs6000.cc:14377 +#: config/alpha/alpha.cc:5978 config/rs6000/rs6000.cc:14377 #, c-format msgid "invalid %%s value" msgstr "" -#: config/alpha/alpha.cc:5992 +#: config/alpha/alpha.cc:5989 #, c-format msgid "invalid %%C value" msgstr "" -#: config/alpha/alpha.cc:6029 config/rs6000/rs6000.cc:14153 +#: config/alpha/alpha.cc:6026 config/rs6000/rs6000.cc:14153 #, c-format msgid "invalid %%E value" msgstr "" -#: config/alpha/alpha.cc:6054 config/alpha/alpha.cc:6104 +#: config/alpha/alpha.cc:6051 config/alpha/alpha.cc:6101 #, c-format msgid "unknown relocation unspec" msgstr "" -#: config/alpha/alpha.cc:6063 config/gcn/gcn.cc:7341 config/gcn/gcn.cc:7350 +#: config/alpha/alpha.cc:6060 config/gcn/gcn.cc:7341 config/gcn/gcn.cc:7350 #: config/gcn/gcn.cc:7408 config/gcn/gcn.cc:7416 config/gcn/gcn.cc:7432 #: config/gcn/gcn.cc:7450 config/gcn/gcn.cc:7501 config/gcn/gcn.cc:7620 #: config/gcn/gcn.cc:7733 config/rs6000/rs6000.cc:14679 @@ -21536,7 +21582,7 @@ msgstr "" msgid "invalid %%xn code" msgstr "" -#: config/alpha/alpha.cc:6169 +#: config/alpha/alpha.cc:6166 #, c-format msgid "invalid operand address" msgstr "" @@ -21825,9 +21871,9 @@ msgstr "" #. Format punctuators via %s to avoid -Wformat-diag. #: config/cris/cris.cc:783 config/ft32/ft32.cc:110 config/moxie/moxie.cc:108 -#: cobol/dts.h:71 final.cc:3194 final.cc:3196 fold-const.cc:347 gcc.cc:6296 -#: gcc.cc:6310 rtl-error.cc:101 toplev.cc:322 cobol/gcobolspec.cc:442 -#: cobol/gcobolspec.cc:518 cobol/gcobolspec.cc:528 cobol/gcobolspec.cc:622 +#: cobol/dts.h:71 final.cc:3194 final.cc:3196 fold-const.cc:347 gcc.cc:6299 +#: gcc.cc:6313 rtl-error.cc:101 toplev.cc:322 cobol/gcobolspec.cc:366 +#: cobol/gcobolspec.cc:440 cobol/gcobolspec.cc:450 cobol/gcobolspec.cc:525 #: cp/logic.cc:311 cp/logic.cc:313 cp/typeck.cc:7836 d/d-convert.cc:237 #: go/go-gcc-diagnostics.cc:28 go/go-gcc-diagnostics.cc:37 #: go/go-gcc-diagnostics.cc:45 go/go-gcc-diagnostics.cc:53 @@ -22073,122 +22119,122 @@ msgstr "" msgid "Expected register or constant integer." msgstr "" -#: config/i386/i386.cc:12878 +#: config/i386/i386.cc:12885 #, c-format msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.cc:13417 +#: config/i386/i386.cc:13424 #, c-format msgid "invalid use of register '%s'" msgstr "" -#: config/i386/i386.cc:13422 +#: config/i386/i386.cc:13429 #, c-format msgid "invalid use of asm flag output" msgstr "" -#: config/i386/i386.cc:13656 +#: config/i386/i386.cc:13663 #, c-format msgid "invalid operand size for operand code 'O'" msgstr "" -#: config/i386/i386.cc:13691 +#: config/i386/i386.cc:13698 #, c-format msgid "invalid operand size for operand code 'z'" msgstr "" -#: config/i386/i386.cc:13766 +#: config/i386/i386.cc:13773 #, c-format msgid "invalid operand type used with operand code '%c'" msgstr "" -#: config/i386/i386.cc:13771 +#: config/i386/i386.cc:13778 #, c-format msgid "invalid operand size for operand code '%c'" msgstr "" -#: config/i386/i386.cc:13849 +#: config/i386/i386.cc:13856 #, c-format msgid "operand is not a condition code, invalid operand code 'Y'" msgstr "" -#: config/i386/i386.cc:13928 +#: config/i386/i386.cc:13935 #, c-format msgid "operand is not a condition code, invalid operand code 'D'" msgstr "" -#: config/i386/i386.cc:13946 +#: config/i386/i386.cc:13953 #, c-format msgid "operand is not a condition code, invalid operand code '%c'" msgstr "" -#: config/i386/i386.cc:13967 +#: config/i386/i386.cc:13974 #, c-format msgid "" "operand is not an offsettable memory reference, invalid operand code 'H'" msgstr "" -#: config/i386/i386.cc:13982 +#: config/i386/i386.cc:13989 #, c-format msgid "operand is not an integer, invalid operand code 'K'" msgstr "" -#: config/i386/i386.cc:14010 +#: config/i386/i386.cc:14017 #, c-format msgid "operand is not a specific integer, invalid operand code 'r'" msgstr "" -#: config/i386/i386.cc:14028 +#: config/i386/i386.cc:14035 #, c-format msgid "operand is not an integer, invalid operand code 'R'" msgstr "" -#: config/i386/i386.cc:14051 +#: config/i386/i386.cc:14058 #, c-format msgid "operand is not a specific integer, invalid operand code 'R'" msgstr "" -#: config/i386/i386.cc:14144 +#: config/i386/i386.cc:14151 #, c-format msgid "invalid operand code '%c'" msgstr "" -#: config/i386/i386.cc:14206 config/i386/i386.cc:14595 +#: config/i386/i386.cc:14213 config/i386/i386.cc:14602 #, c-format msgid "invalid constraints for operand" msgstr "" -#: config/i386/i386.cc:14307 +#: config/i386/i386.cc:14314 #, c-format msgid "invalid vector immediate" msgstr "" -#: config/i386/i386.cc:17477 +#: config/i386/i386.cc:17484 msgid "unknown insn mode" msgstr "" -#: config/i386/i386.cc:24007 +#: config/i386/i386.cc:24042 msgid "invalid conversion from type %<__bf16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:24010 +#: config/i386/i386.cc:24045 msgid "invalid conversion from type %<_Float16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:24013 +#: config/i386/i386.cc:24048 msgid "invalid conversion to type %<__bf16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:24016 +#: config/i386/i386.cc:24051 msgid "invalid conversion to type %<_Float16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:24054 config/i386/i386.cc:24079 +#: config/i386/i386.cc:24089 config/i386/i386.cc:24114 msgid "operation not permitted on type %<__bf16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:24057 config/i386/i386.cc:24083 +#: config/i386/i386.cc:24092 config/i386/i386.cc:24118 msgid "operation not permitted on type %<_Float16%> without option %<-msse2%>" msgstr "" @@ -22636,31 +22682,31 @@ msgstr "" msgid "AltiVec argument passed to unprototyped function" msgstr "" -#: config/rs6000/rs6000.cc:28020 +#: config/rs6000/rs6000.cc:28023 msgid "Could not generate addis value for fusion" msgstr "" -#: config/rs6000/rs6000.cc:28089 +#: config/rs6000/rs6000.cc:28092 msgid "Unable to generate load/store offset for fusion" msgstr "" -#: config/rs6000/rs6000.cc:28165 +#: config/rs6000/rs6000.cc:28168 msgid "Bad GPR fusion" msgstr "" -#: config/rs6000/rs6000.cc:28767 +#: config/rs6000/rs6000.cc:28770 msgid "invalid conversion from type %<__vector_quad%>" msgstr "" -#: config/rs6000/rs6000.cc:28769 +#: config/rs6000/rs6000.cc:28772 msgid "invalid conversion to type %<__vector_quad%>" msgstr "" -#: config/rs6000/rs6000.cc:28771 +#: config/rs6000/rs6000.cc:28774 msgid "invalid conversion from type %<__vector_pair%>" msgstr "" -#: config/rs6000/rs6000.cc:28773 +#: config/rs6000/rs6000.cc:28776 msgid "invalid conversion to type %<__vector_pair%>" msgstr "" @@ -22744,19 +22790,19 @@ msgstr "" msgid "vector argument passed to unprototyped function" msgstr "" -#: config/s390/s390.cc:17327 +#: config/s390/s390.cc:17350 msgid "types differ in signedness" msgstr "" -#: config/s390/s390.cc:17337 +#: config/s390/s390.cc:17360 msgid "binary operator does not support two vector bool operands" msgstr "" -#: config/s390/s390.cc:17340 +#: config/s390/s390.cc:17363 msgid "binary operator does not support vector bool operand" msgstr "" -#: config/s390/s390.cc:17348 +#: config/s390/s390.cc:17371 msgid "" "binary operator does not support mixing vector bool with floating point " "vector operands" @@ -22929,7 +22975,7 @@ msgstr "" msgid "aka" msgstr "" -#: c/c-objc-common.cc:385 c/c-typeck.cc:7700 +#: c/c-objc-common.cc:385 c/c-typeck.cc:7714 msgid "({anonymous})" msgstr "" @@ -22954,8 +23000,8 @@ msgstr "" #: c/gimple-parser.cc:2437 c/gimple-parser.cc:2474 c/gimple-parser.cc:2553 #: c/gimple-parser.cc:2580 c/c-parser.cc:4141 c/c-parser.cc:4332 #: c/c-parser.cc:4367 c/c-parser.cc:14591 c/gimple-parser.cc:2244 -#: c/gimple-parser.cc:2256 cp/parser.cc:16475 cp/parser.cc:34630 -#: cp/parser.cc:35269 +#: c/gimple-parser.cc:2256 cp/parser.cc:16475 cp/parser.cc:34635 +#: cp/parser.cc:35274 #, gcc-internal-format msgid "expected %<;%>" msgstr "" @@ -22982,7 +23028,7 @@ msgstr "" #: c/gimple-parser.cc:1691 c/gimple-parser.cc:1721 c/gimple-parser.cc:1747 #: c/gimple-parser.cc:1954 c/gimple-parser.cc:2166 c/gimple-parser.cc:2186 #: c/gimple-parser.cc:2347 c/gimple-parser.cc:2510 c/c-parser.cc:3242 -#: c/c-parser.cc:9409 c/c-parser.cc:20746 cp/parser.cc:35317 cp/parser.cc:43027 +#: c/c-parser.cc:9409 c/c-parser.cc:20746 cp/parser.cc:35322 cp/parser.cc:43032 #, gcc-internal-format msgid "expected %<)%>" msgstr "" @@ -22990,7 +23036,7 @@ msgstr "" #: c/c-parser.cc:5029 c/c-parser.cc:5778 c/c-parser.cc:6138 c/c-parser.cc:6156 #: c/c-parser.cc:6157 c/c-parser.cc:6660 c/c-parser.cc:6704 c/c-parser.cc:9508 #: c/c-parser.cc:11816 c/c-parser.cc:13270 c/c-parser.cc:13642 -#: c/c-parser.cc:16667 c/gimple-parser.cc:1930 cp/parser.cc:35281 +#: c/c-parser.cc:16667 c/gimple-parser.cc:1930 cp/parser.cc:35286 #, gcc-internal-format msgid "expected %<]%>" msgstr "" @@ -23009,13 +23055,13 @@ msgstr "" #: c/gimple-parser.cc:1457 c/gimple-parser.cc:1582 c/gimple-parser.cc:1687 #: c/gimple-parser.cc:1705 c/gimple-parser.cc:1740 c/gimple-parser.cc:2135 #: c/gimple-parser.cc:2146 c/gimple-parser.cc:2152 c/gimple-parser.cc:2335 -#: c/gimple-parser.cc:2507 c/c-parser.cc:17109 cp/parser.cc:35272 +#: c/gimple-parser.cc:2507 c/c-parser.cc:17109 cp/parser.cc:35277 #, gcc-internal-format msgid "expected %<(%>" msgstr "" -#: c/c-parser.cc:6134 c/c-parser.cc:6136 c/c-parser.cc:16572 cp/parser.cc:35284 -#: cp/parser.cc:39174 go/gofrontend/embed.cc:440 +#: c/c-parser.cc:6134 c/c-parser.cc:6136 c/c-parser.cc:16572 cp/parser.cc:35289 +#: cp/parser.cc:39179 go/gofrontend/embed.cc:440 #, gcc-internal-format msgid "expected %<[%>" msgstr "" @@ -23024,7 +23070,7 @@ msgstr "" #: c/c-parser.cc:23012 c/c-parser.cc:23098 c/c-parser.cc:23859 #: c/c-parser.cc:24999 c/c-parser.cc:29820 c/gimple-parser.cc:447 #: c/gimple-parser.cc:2513 c/c-parser.cc:4128 c/c-parser.cc:4356 -#: c/c-parser.cc:14486 cp/parser.cc:22203 cp/parser.cc:35278 +#: c/c-parser.cc:14486 cp/parser.cc:22203 cp/parser.cc:35283 #: go/gofrontend/embed.cc:371 #, gcc-internal-format msgid "expected %<{%>" @@ -23039,13 +23085,13 @@ msgstr "" #: c/c-parser.cc:27881 c/c-parser.cc:27940 c/c-parser.cc:29142 #: c/gimple-parser.cc:630 c/gimple-parser.cc:943 c/gimple-parser.cc:2561 #: c/gimple-parser.cc:2588 c/c-parser.cc:9416 c/c-parser.cc:17253 -#: c/c-parser.cc:18658 cp/parser.cc:35311 cp/parser.cc:37018 cp/parser.cc:40114 -#: cp/parser.cc:41007 go/gofrontend/embed.cc:404 +#: c/c-parser.cc:18658 cp/parser.cc:35316 cp/parser.cc:37023 cp/parser.cc:40119 +#: cp/parser.cc:41012 go/gofrontend/embed.cc:404 #, gcc-internal-format msgid "expected %<:%>" msgstr "" -#: c/c-parser.cc:8910 cp/parser.cc:35198 +#: c/c-parser.cc:8910 cp/parser.cc:35203 #, gcc-internal-format msgid "expected %<while%>" msgstr "" @@ -23055,7 +23101,7 @@ msgstr "" #: c/c-parser.cc:12687 c/c-parser.cc:18174 c/c-parser.cc:19775 #: c/gimple-parser.cc:1172 c/gimple-parser.cc:1198 c/gimple-parser.cc:1326 #: c/gimple-parser.cc:1329 c/gimple-parser.cc:1709 c/gimple-parser.cc:1715 -#: cp/parser.cc:34628 cp/parser.cc:35287 +#: cp/parser.cc:34633 cp/parser.cc:35292 #, gcc-internal-format msgid "expected %<,%>" msgstr "" @@ -23065,18 +23111,18 @@ msgid "expected %<.%>" msgstr "" #: c/c-parser.cc:14157 c/c-parser.cc:14189 c/c-parser.cc:14429 -#: cp/parser.cc:37592 cp/parser.cc:37613 +#: cp/parser.cc:37597 cp/parser.cc:37618 #, gcc-internal-format msgid "expected %<@end%>" msgstr "" -#: c/c-parser.cc:14847 c/gimple-parser.cc:1497 cp/parser.cc:35296 +#: c/c-parser.cc:14847 c/gimple-parser.cc:1497 cp/parser.cc:35301 #, gcc-internal-format msgid "expected %<>%>" msgstr "" #: c/c-parser.cc:18748 c/c-parser.cc:20191 c/c-parser.cc:20617 -#: cp/parser.cc:35320 cp/parser.cc:42878 +#: cp/parser.cc:35325 cp/parser.cc:42883 #, gcc-internal-format msgid "expected %<,%> or %<)%>" msgstr "" @@ -23086,45 +23132,45 @@ msgstr "" #: c/c-parser.cc:23109 c/c-parser.cc:23456 c/c-parser.cc:24168 #: c/c-parser.cc:25374 c/c-parser.cc:26880 c/c-parser.cc:28082 #: c/gimple-parser.cc:798 c/c-parser.cc:6727 c/c-parser.cc:23029 -#: c/c-parser.cc:23252 cp/parser.cc:35299 cp/parser.cc:44573 cp/parser.cc:44746 +#: c/c-parser.cc:23252 cp/parser.cc:35304 cp/parser.cc:44578 cp/parser.cc:44751 #, gcc-internal-format msgid "expected %<=%>" msgstr "" #: c/c-parser.cc:20767 c/c-parser.cc:27145 c/c-parser.cc:27166 #: c/c-parser.cc:16707 c/c-parser.cc:16719 c/c-parser.cc:20747 -#: cp/parser.cc:43028 cp/parser.cc:43055 cp/parser.cc:50595 cp/parser.cc:50606 +#: cp/parser.cc:43033 cp/parser.cc:43060 cp/parser.cc:50600 cp/parser.cc:50611 #, gcc-internal-format msgid "expected %<)%> or %<,%>" msgstr "" #: c/c-parser.cc:23040 c/c-parser.cc:23120 c/c-parser.cc:23473 #: c/c-parser.cc:23928 c/gimple-parser.cc:1763 c/gimple-parser.cc:1795 -#: c/gimple-parser.cc:1805 c/gimple-parser.cc:2598 cp/parser.cc:35275 -#: cp/parser.cc:37802 +#: c/gimple-parser.cc:1805 c/gimple-parser.cc:2598 cp/parser.cc:35280 +#: cp/parser.cc:37807 #, gcc-internal-format msgid "expected %<}%>" msgstr "" -#: c/c-parser.cc:23133 cp/parser.cc:44671 +#: c/c-parser.cc:23133 cp/parser.cc:44676 #, gcc-internal-format msgid "expected %<else%>" msgstr "" -#: c/c-parser.cc:25046 c/c-parser.cc:25035 cp/parser.cc:47601 +#: c/c-parser.cc:25046 c/c-parser.cc:25035 cp/parser.cc:47606 #, gcc-internal-format msgid "expected %<#pragma omp section%> or %<}%>" msgstr "" -#: c/c-parser.cc:28760 cp/parser.cc:52549 +#: c/c-parser.cc:28760 cp/parser.cc:52554 msgid "<message unknown at compile time>" msgstr "" -#: c/c-typeck.cc:9849 +#: c/c-typeck.cc:9863 msgid "(anonymous)" msgstr "" -#: c/gimple-parser.cc:1486 cp/parser.cc:19538 cp/parser.cc:35293 +#: c/gimple-parser.cc:1486 cp/parser.cc:19538 cp/parser.cc:35298 #, gcc-internal-format msgid "expected %<<%>" msgstr "" @@ -23135,7 +23181,7 @@ msgstr "" msgid "expected label" msgstr "" -#: cobol/gcobolspec.cc:641 +#: cobol/gcobolspec.cc:544 #, c-format msgid "Driving: (%ld)\n" msgstr "" @@ -23149,7 +23195,7 @@ msgstr "" msgid " after user-defined conversion:" msgstr "" -#: cp/call.cc:8724 cp/pt.cc:2064 cp/pt.cc:26910 +#: cp/call.cc:8724 cp/pt.cc:2064 cp/pt.cc:26956 msgid "candidate is:" msgid_plural "candidates are:" msgstr[0] "" @@ -23288,105 +23334,7 @@ msgstr "" msgid "At global scope:" msgstr "" -#: cp/error.cc:3791 -msgid " inlined from %qD at %r%s:%d:%d%R" -msgstr "" - -#: cp/error.cc:3796 -msgid " inlined from %qD at %r%s:%d%R" -msgstr "" - -#: cp/error.cc:3802 -msgid " inlined from %qD" -msgstr "" - -#: cp/error.cc:3828 -msgid "In static member function %qD" -msgstr "" - -#: cp/error.cc:3830 -msgid "In copy constructor %qD" -msgstr "" - -#: cp/error.cc:3832 -msgid "In constructor %qD" -msgstr "" - -#: cp/error.cc:3834 -msgid "In destructor %qD" -msgstr "" - -#: cp/error.cc:3836 -msgid "In lambda function" -msgstr "" - -#: cp/error.cc:3838 -msgid "In explicit object member function %qD" -msgstr "" - -#: cp/error.cc:3840 -msgid "In member function %qD" -msgstr "" - -#: cp/error.cc:3843 -msgid "In function %qD" -msgstr "" - -#: cp/error.cc:3870 -#, c-format -msgid "%s%s%sIn substitution of %qS:\n" -msgstr "" - -#: cp/error.cc:3871 -msgid "%s%s%sIn instantiation of %q#D:\n" -msgstr "" - -#: cp/error.cc:3891 -msgid "%r%s:%d:%d:%R " -msgstr "" - -#: cp/error.cc:3894 -msgid "%r%s:%d:%R " -msgstr "" - -#: cp/error.cc:3987 -#, c-format -msgid "recursively required by substitution of %qS\n" -msgstr "" - -#: cp/error.cc:3988 -#, c-format -msgid "required by substitution of %qS\n" -msgstr "" - -#: cp/error.cc:3993 -msgid "recursively required from %q#D\n" -msgstr "" - -#: cp/error.cc:3994 -msgid "required from %q#D\n" -msgstr "" - -#: cp/error.cc:4001 -msgid "recursively required from here\n" -msgstr "" - -#: cp/error.cc:4002 -msgid "required from here\n" -msgstr "" - -#: cp/error.cc:4052 -#, c-format -msgid "" -"[ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to " -"disable ]\n" -msgstr "" - -#: cp/error.cc:4104 -msgid "in %<constexpr%> expansion of %qs" -msgstr "" - -#: cp/pt.cc:2062 cp/semantics.cc:6705 +#: cp/pt.cc:2062 cp/semantics.cc:6719 msgid "candidates are:" msgstr "" @@ -23430,27 +23378,27 @@ msgstr "" msgid "source type is not polymorphic" msgstr "" -#: cp/typeck.cc:7524 c/c-typeck.cc:5289 +#: cp/typeck.cc:7524 c/c-typeck.cc:5303 #, gcc-internal-format msgid "wrong type argument to unary minus" msgstr "" -#: cp/typeck.cc:7525 c/c-typeck.cc:5275 +#: cp/typeck.cc:7525 c/c-typeck.cc:5289 #, gcc-internal-format msgid "wrong type argument to unary plus" msgstr "" -#: cp/typeck.cc:7552 c/c-typeck.cc:5334 +#: cp/typeck.cc:7552 c/c-typeck.cc:5348 #, gcc-internal-format msgid "wrong type argument to bit-complement" msgstr "" -#: cp/typeck.cc:7572 c/c-typeck.cc:5342 +#: cp/typeck.cc:7572 c/c-typeck.cc:5356 #, gcc-internal-format msgid "wrong type argument to abs" msgstr "" -#: cp/typeck.cc:7584 c/c-typeck.cc:5364 +#: cp/typeck.cc:7584 c/c-typeck.cc:5378 #, gcc-internal-format msgid "wrong type argument to conjugation" msgstr "" @@ -23487,63 +23435,63 @@ msgstr "" msgid "BOZ constant truncated at %L" msgstr "" -#: fortran/check.cc:4100 +#: fortran/check.cc:4126 #, c-format msgid "arguments 'a%d' and 'a%d' for intrinsic '%s'" msgstr "" -#: fortran/check.cc:4338 fortran/check.cc:4423 fortran/check.cc:4488 -#: fortran/check.cc:5181 +#: fortran/check.cc:4364 fortran/check.cc:4449 fortran/check.cc:4514 +#: fortran/check.cc:5217 #, c-format msgid "arguments '%s' and '%s' for intrinsic %s" msgstr "" -#: fortran/check.cc:4932 fortran/intrinsic.cc:4984 +#: fortran/check.cc:4968 fortran/intrinsic.cc:4987 #, c-format msgid "arguments '%s' and '%s' for intrinsic '%s'" msgstr "" -#: fortran/check.cc:5787 +#: fortran/check.cc:5823 msgid "NULL() is not interoperable" msgstr "" -#: fortran/check.cc:5793 +#: fortran/check.cc:5829 msgid "BOZ literal constant" msgstr "" -#: fortran/check.cc:5799 +#: fortran/check.cc:5835 msgid "Expression is polymorphic" msgstr "" -#: fortran/check.cc:5806 +#: fortran/check.cc:5842 msgid "Expression is a noninteroperable derived type" msgstr "" -#: fortran/check.cc:5812 +#: fortran/check.cc:5848 msgid "Procedure unexpected as argument" msgstr "" -#: fortran/check.cc:5822 +#: fortran/check.cc:5858 msgid "Extension to use a non-C_Bool-kind LOGICAL" msgstr "" -#: fortran/check.cc:5829 +#: fortran/check.cc:5865 msgid "Extension to use a non-C_CHAR-kind CHARACTER" msgstr "" -#: fortran/check.cc:5850 +#: fortran/check.cc:5886 msgid "Type shall have a character length of 1" msgstr "" -#: fortran/check.cc:5861 +#: fortran/check.cc:5897 msgid "Coarrays are not interoperable" msgstr "" -#: fortran/check.cc:5872 +#: fortran/check.cc:5908 msgid "Assumed-size arrays are not interoperable" msgstr "" -#: fortran/dump-parse-tree.cc:4127 +#: fortran/dump-parse-tree.cc:4162 #, c-format msgid "" "/* Prototypes for external procedures generated from %s\n" @@ -23554,7 +23502,7 @@ msgid "" "\n" msgstr "" -#: fortran/dump-parse-tree.cc:4139 +#: fortran/dump-parse-tree.cc:4174 #, c-format msgid "" "\n" @@ -23609,7 +23557,7 @@ msgstr "" msgid "Unsigned:" msgstr "" -#: fortran/expr.cc:3856 +#: fortran/expr.cc:3862 msgid "array assignment" msgstr "" @@ -23642,51 +23590,51 @@ msgstr "" msgid "Driving:" msgstr "" -#: fortran/interface.cc:3884 fortran/intrinsic.cc:4662 +#: fortran/interface.cc:3905 fortran/intrinsic.cc:4662 msgid "actual argument to INTENT = OUT/INOUT" msgstr "" -#: fortran/intrinsic.cc:5021 +#: fortran/intrinsic.cc:5024 msgid "available since Fortran 77" msgstr "" -#: fortran/intrinsic.cc:5025 +#: fortran/intrinsic.cc:5028 msgid "obsolescent in Fortran 95" msgstr "" -#: fortran/intrinsic.cc:5029 +#: fortran/intrinsic.cc:5032 msgid "deleted in Fortran 95" msgstr "" -#: fortran/intrinsic.cc:5033 +#: fortran/intrinsic.cc:5036 msgid "new in Fortran 95" msgstr "" -#: fortran/intrinsic.cc:5037 +#: fortran/intrinsic.cc:5040 msgid "new in Fortran 2003" msgstr "" -#: fortran/intrinsic.cc:5041 +#: fortran/intrinsic.cc:5044 msgid "new in Fortran 2008" msgstr "" -#: fortran/intrinsic.cc:5045 +#: fortran/intrinsic.cc:5048 msgid "new in Fortran 2018" msgstr "" -#: fortran/intrinsic.cc:5049 +#: fortran/intrinsic.cc:5052 msgid "new in Fortran 2023" msgstr "" -#: fortran/intrinsic.cc:5053 +#: fortran/intrinsic.cc:5056 msgid "a GNU Fortran extension" msgstr "" -#: fortran/intrinsic.cc:5057 +#: fortran/intrinsic.cc:5060 msgid "for backward compatibility" msgstr "" -#: fortran/intrinsic.cc:5061 +#: fortran/intrinsic.cc:5064 msgid "unsigned" msgstr "" @@ -23808,11 +23756,11 @@ msgstr "" msgid "implied END DO" msgstr "" -#: fortran/parse.cc:2523 fortran/resolve.cc:13557 +#: fortran/parse.cc:2523 fortran/resolve.cc:13675 msgid "assignment" msgstr "" -#: fortran/parse.cc:2526 fortran/resolve.cc:13623 fortran/resolve.cc:13626 +#: fortran/parse.cc:2526 fortran/resolve.cc:13741 fortran/resolve.cc:13744 msgid "pointer assignment" msgstr "" @@ -23898,47 +23846,47 @@ msgstr "" msgid "bind(c) procedure" msgstr "" -#: fortran/resolve.cc:7966 +#: fortran/resolve.cc:8002 msgid "Loop variable" msgstr "" -#: fortran/resolve.cc:7970 +#: fortran/resolve.cc:8006 msgid "iterator variable" msgstr "" -#: fortran/resolve.cc:7974 +#: fortran/resolve.cc:8010 msgid "Start expression in DO loop" msgstr "" -#: fortran/resolve.cc:7978 +#: fortran/resolve.cc:8014 msgid "End expression in DO loop" msgstr "" -#: fortran/resolve.cc:7982 +#: fortran/resolve.cc:8018 msgid "Step expression in DO loop" msgstr "" -#: fortran/resolve.cc:8607 fortran/resolve.cc:8610 +#: fortran/resolve.cc:8636 fortran/resolve.cc:8639 msgid "DEALLOCATE object" msgstr "" -#: fortran/resolve.cc:9034 fortran/resolve.cc:9037 +#: fortran/resolve.cc:9063 fortran/resolve.cc:9066 msgid "ALLOCATE object" msgstr "" -#: fortran/resolve.cc:9274 fortran/resolve.cc:11421 fortran/resolve.cc:11542 +#: fortran/resolve.cc:9303 fortran/resolve.cc:11450 fortran/resolve.cc:11676 msgid "STAT variable" msgstr "" -#: fortran/resolve.cc:9325 fortran/resolve.cc:11433 fortran/resolve.cc:11554 +#: fortran/resolve.cc:9354 fortran/resolve.cc:11462 fortran/resolve.cc:11688 msgid "ERRMSG variable" msgstr "" -#: fortran/resolve.cc:11229 +#: fortran/resolve.cc:11258 msgid "item in READ" msgstr "" -#: fortran/resolve.cc:11445 +#: fortran/resolve.cc:11474 msgid "ACQUIRED_LOCK variable" msgstr "" @@ -23958,26 +23906,26 @@ msgid "" "dummy declaration" msgstr "" -#: fortran/trans-decl.cc:6546 +#: fortran/trans-decl.cc:6540 #, c-format msgid "" "Actual string length does not match the declared one for dummy argument " "'%s' (%ld/%ld)" msgstr "" -#: fortran/trans-decl.cc:6554 +#: fortran/trans-decl.cc:6548 #, c-format msgid "" "Actual string length is shorter than the declared one for dummy argument " "'%s' (%ld/%ld)" msgstr "" -#: fortran/trans-expr.cc:11391 +#: fortran/trans-expr.cc:11376 #, c-format msgid "Target of rank remapping is too small (%ld < %ld)" msgstr "" -#: fortran/trans-expr.cc:13086 +#: fortran/trans-expr.cc:13071 msgid "Assignment of scalar to unallocated array" msgstr "" @@ -23986,81 +23934,81 @@ msgstr "" msgid "Unequal character lengths (%ld/%ld) in %s" msgstr "" -#: fortran/trans-intrinsic.cc:6380 +#: fortran/trans-intrinsic.cc:6386 #, c-format msgid "POS argument (%ld) out of range 0:%ld in intrinsic BTEST" msgstr "" -#: fortran/trans-intrinsic.cc:6667 +#: fortran/trans-intrinsic.cc:6673 #, c-format msgid "POS argument (%ld) out of range 0:%ld in intrinsic %s" msgstr "" -#: fortran/trans-intrinsic.cc:6715 +#: fortran/trans-intrinsic.cc:6721 #, c-format msgid "POS argument (%ld) out of range 0:%ld in intrinsic IBITS" msgstr "" -#: fortran/trans-intrinsic.cc:6725 +#: fortran/trans-intrinsic.cc:6731 #, c-format msgid "LEN argument (%ld) out of range 0:%ld in intrinsic IBITS" msgstr "" -#: fortran/trans-intrinsic.cc:6732 +#: fortran/trans-intrinsic.cc:6738 #, c-format msgid "POS(%ld)+LEN(%ld)>BIT_SIZE(%ld) in intrinsic IBITS" msgstr "" -#: fortran/trans-intrinsic.cc:6824 +#: fortran/trans-intrinsic.cc:6830 #, c-format msgid "SHIFT argument (%ld) out of range 0:%ld in intrinsic %s" msgstr "" -#: fortran/trans-intrinsic.cc:6892 +#: fortran/trans-intrinsic.cc:6898 #, c-format msgid "SHIFT argument (%ld) out of range -%ld:%ld in intrinsic ISHFT" msgstr "" -#: fortran/trans-intrinsic.cc:6972 +#: fortran/trans-intrinsic.cc:6978 #, c-format msgid "SIZE argument (%ld) out of range 1:%ld in intrinsic ISHFTC" msgstr "" -#: fortran/trans-intrinsic.cc:6980 fortran/trans-intrinsic.cc:7025 +#: fortran/trans-intrinsic.cc:6986 fortran/trans-intrinsic.cc:7031 #, c-format msgid "SHIFT argument (%ld) out of range -%ld:%ld in intrinsic ISHFTC" msgstr "" -#: fortran/trans-intrinsic.cc:9376 +#: fortran/trans-intrinsic.cc:9382 #, c-format msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %ld)" msgstr "" -#: fortran/trans-intrinsic.cc:9408 +#: fortran/trans-intrinsic.cc:9414 msgid "Argument NCOPIES of REPEAT intrinsic is too large" msgstr "" -#: fortran/trans-intrinsic.cc:12875 +#: fortran/trans-intrinsic.cc:12882 #, c-format msgid "FROMPOS argument (%ld) out of range 0:%d in intrinsic MVBITS" msgstr "" -#: fortran/trans-intrinsic.cc:12887 +#: fortran/trans-intrinsic.cc:12894 #, c-format msgid "LEN argument (%ld) out of range 0:%d in intrinsic MVBITS" msgstr "" -#: fortran/trans-intrinsic.cc:12899 +#: fortran/trans-intrinsic.cc:12906 #, c-format msgid "TOPOS argument (%ld) out of range 0:%d in intrinsic MVBITS" msgstr "" -#: fortran/trans-intrinsic.cc:12911 +#: fortran/trans-intrinsic.cc:12918 #, c-format msgid "FROMPOS(%ld)+LEN(%ld)>BIT_SIZE(%d) in intrinsic MVBITS" msgstr "" -#: fortran/trans-intrinsic.cc:12919 +#: fortran/trans-intrinsic.cc:12926 #, c-format msgid "TOPOS(%ld)+LEN(%ld)>BIT_SIZE(%d) in intrinsic MVBITS" msgstr "" @@ -24077,20 +24025,20 @@ msgstr "" msgid "Assigned label is not a target label" msgstr "" -#: fortran/trans-stmt.cc:1294 +#: fortran/trans-stmt.cc:1350 #, c-format msgid "Invalid image number %d in SYNC IMAGES" msgstr "" -#: fortran/trans-stmt.cc:2612 +#: fortran/trans-stmt.cc:2706 msgid "Loop iterates infinitely" msgstr "" -#: fortran/trans-stmt.cc:2632 fortran/trans-stmt.cc:2888 +#: fortran/trans-stmt.cc:2726 fortran/trans-stmt.cc:2982 msgid "Loop variable has been modified" msgstr "" -#: fortran/trans-stmt.cc:2741 +#: fortran/trans-stmt.cc:2835 msgid "DO step value is zero" msgstr "" @@ -24119,12 +24067,12 @@ msgstr "" msgid "Attempting to allocate already allocated variable" msgstr "" -#: fortran/trans.cc:1878 fortran/trans.cc:2056 +#: fortran/trans.cc:1878 fortran/trans.cc:2057 #, c-format msgid "Attempt to DEALLOCATE unallocated '%s'" msgstr "" -#: fortran/trans.cc:2224 +#: fortran/trans.cc:2232 #, c-format msgid "Error reallocating to %lu bytes" msgstr "" @@ -24173,7 +24121,7 @@ msgid "expected boolean type" msgstr "" #: go/gofrontend/expressions.cc:5610 c/c-parser.cc:19534 c/c-parser.cc:19541 -#: cp/parser.cc:41859 cp/parser.cc:41866 +#: cp/parser.cc:41864 cp/parser.cc:41871 #, gcc-internal-format msgid "expected integer" msgstr "" @@ -24604,12 +24552,12 @@ msgstr "" msgid "degree of %<poly_int%> exceeds %<NUM_POLY_INT_COEFFS%> (%d)" msgstr "" -#: lto-streamer.h:1039 +#: lto-streamer.h:1040 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: expected tag %s instead of %s" msgstr "" -#: lto-streamer.h:1049 +#: lto-streamer.h:1050 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: tag %s is not in the expected range [%s, %s]" msgstr "" @@ -24619,7 +24567,7 @@ msgstr "" #. coalesced sections. Weak aliases (or any other kind of aliases) are #. not supported. Weak symbols that aren't visible outside the .s file #. are not supported. -#: config/darwin.h:723 +#: config/darwin.h:724 #, gcc-internal-format msgid "alias definitions not supported in Mach-O; ignored" msgstr "" @@ -24875,7 +24823,7 @@ msgstr "" msgid "Global declarative %s for %s" msgstr "" -#: cobol/parse_ante.h:2456 cobol/genapi.cc:5776 +#: cobol/parse_ante.h:2456 cobol/genapi.cc:5784 #, gcc-internal-format, gfc-internal-format msgid "%s:%d: invalid symbol_type_t %d" msgstr "" @@ -24901,7 +24849,7 @@ msgid "scan.o: %s" msgstr "" #. A general purpose syntax error. -#: fortran/gfortran.h:3560 fortran/io.cc:3727 fortran/io.cc:4413 +#: fortran/gfortran.h:3568 fortran/io.cc:3727 fortran/io.cc:4413 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in %s statement at %C" msgstr "" @@ -24989,17 +24937,17 @@ msgstr "" #: c-family/c.opt:70 c-family/c.opt:80 c-family/c.opt:83 c-family/c.opt:86 #: c-family/c.opt:89 c-family/c.opt:185 c-family/c.opt:188 c-family/c.opt:230 -#: c-family/c.opt:234 c-family/c.opt:246 c-family/c.opt:2481 -#: c-family/c.opt:2489 config/darwin.opt:30 common.opt:329 common.opt:332 -#: common.opt:429 common.opt:3793 +#: c-family/c.opt:234 c-family/c.opt:246 c-family/c.opt:2482 +#: c-family/c.opt:2490 config/darwin.opt:30 common.opt:329 common.opt:332 +#: common.opt:429 common.opt:3801 #, gcc-internal-format msgid "missing filename after %qs" msgstr "" #: c-family/c.opt:74 c-family/c.opt:77 c-family/c.opt:95 c-family/c.opt:98 #: c-family/c.opt:101 c-family/c.opt:104 c-family/c.opt:210 c-family/c.opt:222 -#: c-family/c.opt:278 c-family/c.opt:2477 c-family/c.opt:2497 -#: c-family/c.opt:2501 c-family/c.opt:2505 +#: c-family/c.opt:278 c-family/c.opt:2478 c-family/c.opt:2498 +#: c-family/c.opt:2502 c-family/c.opt:2506 #, gcc-internal-format msgid "missing path after %qs" msgstr "" @@ -25019,69 +24967,69 @@ msgstr "" msgid "missing output path after %qs" msgstr "" -#: c-family/c.opt:321 +#: c-family/c.opt:322 #, gcc-internal-format msgid "argument %qs to %<-Waligned-new%> not recognized" msgstr "" -#: c-family/c.opt:416 +#: c-family/c.opt:417 #, gcc-internal-format msgid "argument %qs to %<-Wbidi-chars%> not recognized" msgstr "" -#: c-family/c.opt:944 +#: c-family/c.opt:945 #, gcc-internal-format msgid "argument %qs to %<-Wleading-whitespace=%> not recognized" msgstr "" -#: c-family/c.opt:1133 +#: c-family/c.opt:1134 #, gcc-internal-format msgid "argument %qs to %<-Wnormalized%> not recognized" msgstr "" -#: c-family/c.opt:1505 +#: c-family/c.opt:1506 #, gcc-internal-format msgid "argument %qs to %<-Wtrailing-whitespace=%> not recognized" msgstr "" -#: c-family/c.opt:1833 +#: c-family/c.opt:1834 #, gcc-internal-format msgid "no class name specified with %qs" msgstr "" -#: c-family/c.opt:1861 +#: c-family/c.opt:1862 #, gcc-internal-format msgid "argument %qs must be either %<on%> or %<off%>" msgstr "" -#: c-family/c.opt:2005 +#: c-family/c.opt:2006 #, gcc-internal-format msgid "" "%<-fhandle-exceptions%> has been renamed %<-fexceptions%> (and is now on by " "default)" msgstr "" -#: c-family/c.opt:2080 +#: c-family/c.opt:2081 #, gcc-internal-format msgid "missing mapper" msgstr "" -#: c-family/c.opt:2108 +#: c-family/c.opt:2109 #, gcc-internal-format msgid "missing header name" msgstr "" -#: c-family/c.opt:2116 +#: c-family/c.opt:2117 #, gcc-internal-format msgid "missing module name" msgstr "" -#: c-family/c.opt:2163 +#: c-family/c.opt:2164 #, gcc-internal-format msgid "unrecognized ivar visibility value %qs" msgstr "" -#: c-family/c.opt:2341 +#: c-family/c.opt:2342 #, gcc-internal-format msgid "unrecognized scalar storage order value %qs" msgstr "" @@ -25247,107 +25195,107 @@ msgstr "" msgid "unavailable stringop for inlining %qs" msgstr "" -#: common.opt:2065 +#: common.opt:2066 #, gcc-internal-format msgid "unknown Control-Flow Protection Level %qs" msgstr "" -#: common.opt:2175 +#: common.opt:2180 #, gcc-internal-format msgid "unknown IRA algorithm %qs" msgstr "" -#: common.opt:2188 +#: common.opt:2193 #, gcc-internal-format msgid "unknown IRA region %qs" msgstr "" -#: common.opt:2274 +#: common.opt:2279 params.opt:469 #, gcc-internal-format msgid "unknown LTO partitioning model %qs" msgstr "" -#: common.opt:2398 +#: common.opt:2406 #, gcc-internal-format msgid "targets missing after %qs" msgstr "" -#: common.opt:2401 +#: common.opt:2409 #, gcc-internal-format msgid "options or targets=options missing after %qs" msgstr "" -#: common.opt:2409 +#: common.opt:2417 #, gcc-internal-format msgid "unknown offload ABI %qs" msgstr "" -#: common.opt:2418 +#: common.opt:2426 #, gcc-internal-format msgid "option missing after %qs" msgstr "" -#: common.opt:2595 +#: common.opt:2603 #, gcc-internal-format msgid "unknown profile reproducibility method %qs" msgstr "" -#: common.opt:2611 +#: common.opt:2619 #, gcc-internal-format msgid "unknown profile update method %qs" msgstr "" -#: common.opt:2720 +#: common.opt:2728 #, gcc-internal-format msgid "unknown Live-Patching Level %qs" msgstr "" -#: common.opt:2753 +#: common.opt:2761 #, gcc-internal-format msgid "unknown basic block reordering algorithm %qs" msgstr "" -#: common.opt:3089 +#: common.opt:3097 #, gcc-internal-format msgid "unknown TLS model %qs" msgstr "" -#: common.opt:3122 +#: common.opt:3130 #, gcc-internal-format msgid "unknown trampoline implementation %qs" msgstr "" -#: common.opt:3444 +#: common.opt:3452 #, gcc-internal-format msgid "unknown vectorizer cost model %qs" msgstr "" -#: common.opt:3475 +#: common.opt:3483 #, gcc-internal-format msgid "unrecognized automatic variable initialization type %qs" msgstr "" -#: common.opt:3501 +#: common.opt:3509 #, gcc-internal-format msgid "unrecognized visibility value %qs" msgstr "" -#: common.opt:3520 +#: common.opt:3528 #, gcc-internal-format msgid "unknown vtable verify initialization priority %qs" msgstr "" -#: common.opt:3576 +#: common.opt:3584 #, gcc-internal-format msgid "unrecognized zero init padding bits kind %qs" msgstr "" -#: params.opt:909 +#: params.opt:936 #, gcc-internal-format msgid "unknown ranger debug mode %qs" msgstr "" -#: params.opt:1100 +#: params.opt:1127 #, gcc-internal-format msgid "unknown threader debug mode %qs" msgstr "" @@ -25376,7 +25324,7 @@ msgstr "" #: attribs.cc:538 c-family/c-attribs.cc:1053 c-family/c-attribs.cc:2762 #: c-family/c-attribs.cc:3318 c-family/c-attribs.cc:5282 -#: c-family/c-attribs.cc:5375 cp/decl.cc:17061 cp/decl.cc:17112 +#: c-family/c-attribs.cc:5375 cp/decl.cc:17063 cp/decl.cc:17114 #: cp/friend.cc:319 cp/tree.cc:5394 #, gcc-internal-format msgid "previous declaration here" @@ -25394,7 +25342,7 @@ msgstr "" msgid "%<%E::%E%> scoped attribute directive ignored" msgstr "" -#: attribs.cc:761 c/c-parser.cc:2144 cp/cp-gimplify.cc:3699 +#: attribs.cc:761 c/c-parser.cc:2144 cp/cp-gimplify.cc:3704 #, gcc-internal-format msgid "wrong number of arguments specified for %qE attribute" msgstr "" @@ -25404,7 +25352,7 @@ msgstr "" msgid "expected %i or more, found %i" msgstr "" -#: attribs.cc:767 c/c-parser.cc:2147 cp/cp-gimplify.cc:3701 +#: attribs.cc:767 c/c-parser.cc:2147 cp/cp-gimplify.cc:3706 #, gcc-internal-format, gfc-internal-format msgid "expected %i, found %i" msgstr "" @@ -25478,15 +25426,15 @@ msgstr "" #: config/i386/i386-options.cc:3774 config/i386/i386-options.cc:3932 #: config/i386/i386-options.cc:4164 config/i386/i386-options.cc:4194 #: config/ia64/ia64.cc:799 config/loongarch/loongarch.cc:8197 -#: config/rs6000/rs6000.cc:20745 ada/gcc-interface/utils.cc:6885 -#: ada/gcc-interface/utils.cc:6901 ada/gcc-interface/utils.cc:6998 -#: ada/gcc-interface/utils.cc:7015 ada/gcc-interface/utils.cc:7032 -#: ada/gcc-interface/utils.cc:7047 ada/gcc-interface/utils.cc:7063 -#: ada/gcc-interface/utils.cc:7089 ada/gcc-interface/utils.cc:7158 -#: ada/gcc-interface/utils.cc:7185 ada/gcc-interface/utils.cc:7230 -#: ada/gcc-interface/utils.cc:7251 ada/gcc-interface/utils.cc:7299 -#: ada/gcc-interface/utils.cc:7315 ada/gcc-interface/utils.cc:7349 -#: c/c-decl.cc:4951 c/c-decl.cc:4954 c/c-decl.cc:4981 c/c-parser.cc:6097 +#: config/rs6000/rs6000.cc:20745 ada/gcc-interface/utils.cc:6900 +#: ada/gcc-interface/utils.cc:6916 ada/gcc-interface/utils.cc:7013 +#: ada/gcc-interface/utils.cc:7030 ada/gcc-interface/utils.cc:7047 +#: ada/gcc-interface/utils.cc:7062 ada/gcc-interface/utils.cc:7078 +#: ada/gcc-interface/utils.cc:7104 ada/gcc-interface/utils.cc:7173 +#: ada/gcc-interface/utils.cc:7200 ada/gcc-interface/utils.cc:7245 +#: ada/gcc-interface/utils.cc:7266 ada/gcc-interface/utils.cc:7314 +#: ada/gcc-interface/utils.cc:7330 ada/gcc-interface/utils.cc:7364 +#: c/c-decl.cc:4952 c/c-decl.cc:4955 c/c-decl.cc:4982 c/c-parser.cc:6097 #: cp/tree.cc:5062 cp/tree.cc:5561 d/d-attribs.cc:483 d/d-attribs.cc:702 #: d/d-attribs.cc:723 d/d-attribs.cc:739 d/d-attribs.cc:756 d/d-attribs.cc:788 #: d/d-attribs.cc:917 d/d-attribs.cc:976 d/d-attribs.cc:992 d/d-attribs.cc:1008 @@ -25622,7 +25570,7 @@ msgstr "" msgid "offset %qwi outside bounds of constant string" msgstr "" -#: builtins.cc:707 cp/name-lookup.cc:6936 +#: builtins.cc:707 cp/name-lookup.cc:6939 #, gcc-internal-format msgid "%qE declared here" msgstr "" @@ -25647,13 +25595,13 @@ msgstr "" msgid "invalid third argument to %<__builtin_prefetch%>; using zero" msgstr "" -#: builtins.cc:4081 gimple-fold.cc:2678 gimple-ssa-warn-access.cc:2587 +#: builtins.cc:4081 gimple-fold.cc:2712 gimple-ssa-warn-access.cc:2587 #: tree-ssa-strlen.cc:3177 #, gcc-internal-format msgid "%qD specified bound %E equals destination size" msgstr "" -#: builtins.cc:5330 gimplify.cc:4664 +#: builtins.cc:5330 gimplify.cc:4668 #, gcc-internal-format msgid "too few arguments to function %<va_start%>" msgstr "" @@ -25791,17 +25739,17 @@ msgstr "" msgid "last argument of %qD is not integer constant between 0 and 3" msgstr "" -#: calls.cc:1279 tree-tailcall.cc:487 +#: calls.cc:1286 tree-tailcall.cc:492 #, gcc-internal-format, gfc-internal-format msgid "cannot tail-call: %s" msgstr "" -#: calls.cc:2814 +#: calls.cc:2818 #, gcc-internal-format msgid "function call has aggregate value" msgstr "" -#: calls.cc:3557 +#: calls.cc:3561 #, gcc-internal-format msgid "passing too large argument on stack" msgstr "" @@ -26855,12 +26803,12 @@ msgstr "" #. include_self= #. TODO: Add OPT_Wundefined-inline. -#: cgraphunit.cc:1112 c/c-decl.cc:13592 +#: cgraphunit.cc:1112 c/c-decl.cc:13593 #, gcc-internal-format msgid "%q+F used but never defined" msgstr "" -#: cgraphunit.cc:1114 c/c-decl.cc:13602 +#: cgraphunit.cc:1114 c/c-decl.cc:13603 #, gcc-internal-format msgid "%q+F declared %<static%> but never defined" msgstr "" @@ -26970,13 +26918,13 @@ msgstr "" msgid "cannot find %qs" msgstr "" -#: collect-utils.cc:225 collect2.cc:2391 collect2.cc:2561 gcc.cc:3427 -#: gcc.cc:7860 +#: collect-utils.cc:225 collect2.cc:2391 collect2.cc:2561 gcc.cc:3430 +#: gcc.cc:7866 #, gcc-internal-format msgid "%<pex_init%> failed: %m" msgstr "" -#: collect-utils.cc:234 collect2.cc:2400 collect2.cc:2569 gcc.cc:2711 +#: collect-utils.cc:234 collect2.cc:2400 collect2.cc:2569 gcc.cc:2714 #, gcc-internal-format msgid "%s: %m" msgstr "" @@ -26991,7 +26939,7 @@ msgstr "" msgid "ld returned %d exit status" msgstr "" -#: collect2.cc:916 gcc.cc:8368 config/nvptx/mkoffload.cc:640 +#: collect2.cc:916 gcc.cc:8378 config/nvptx/mkoffload.cc:640 #, gcc-internal-format msgid "atexit failed" msgstr "" @@ -27001,7 +26949,7 @@ msgstr "" msgid "no arguments" msgstr "" -#: collect2.cc:1289 opts.cc:1204 +#: collect2.cc:1289 opts.cc:1223 #, gcc-internal-format msgid "LTO support has not been enabled in this configuration" msgstr "" @@ -27418,57 +27366,57 @@ msgstr "" msgid "abort in %s, at %s:%d" msgstr "" -#: except.cc:2172 +#: except.cc:2186 #, gcc-internal-format msgid "argument of %<__builtin_eh_return_regno%> must be constant" msgstr "" -#: except.cc:2318 +#: except.cc:2332 #, gcc-internal-format msgid "%<__builtin_eh_return%> not supported on this target" msgstr "" -#: except.cc:3454 except.cc:3479 +#: except.cc:3475 except.cc:3500 #, gcc-internal-format msgid "%<region_array%> is corrupted for region %i" msgstr "" -#: except.cc:3467 except.cc:3498 +#: except.cc:3488 except.cc:3519 #, gcc-internal-format msgid "%<lp_array%> is corrupted for lp %i" msgstr "" -#: except.cc:3484 +#: except.cc:3505 #, gcc-internal-format, gfc-internal-format msgid "outer block of region %i is wrong" msgstr "" -#: except.cc:3489 +#: except.cc:3510 #, gcc-internal-format, gfc-internal-format msgid "negative nesting depth of region %i" msgstr "" -#: except.cc:3503 +#: except.cc:3524 #, gcc-internal-format, gfc-internal-format msgid "region of lp %i is wrong" msgstr "" -#: except.cc:3530 +#: except.cc:3551 #, gcc-internal-format, gfc-internal-format msgid "tree list ends on depth %i" msgstr "" -#: except.cc:3535 +#: except.cc:3556 #, gcc-internal-format msgid "%<region_array%> does not match %<region_tree%>" msgstr "" -#: except.cc:3540 +#: except.cc:3561 #, gcc-internal-format msgid "%<lp_array%> does not match %<region_tree%>" msgstr "" -#: except.cc:3547 tree.cc:14621 value-prof.cc:529 +#: except.cc:3568 tree.cc:14621 value-prof.cc:529 #, gcc-internal-format msgid "%qs failed" msgstr "" @@ -27549,30 +27497,30 @@ msgstr "" msgid "large fixed-point constant implicitly truncated to fixed-point type" msgstr "" -#: fold-const.cc:4984 fold-const.cc:4994 +#: fold-const.cc:4991 fold-const.cc:5001 #, gcc-internal-format, gfc-internal-format msgid "comparison is always %d due to width of bit-field" msgstr "" -#: fold-const.cc:6252 tree-ssa-reassoc.cc:2886 tree-ssa-reassoc.cc:3971 +#: fold-const.cc:6259 tree-ssa-reassoc.cc:2886 tree-ssa-reassoc.cc:3971 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying range test" msgstr "" -#: fold-const.cc:9823 +#: fold-const.cc:9836 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when reducing constant in comparison" msgstr "" -#: fold-const.cc:10230 +#: fold-const.cc:10243 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when combining constants around a " "comparison" msgstr "" -#: fold-const.cc:13664 +#: fold-const.cc:13677 #, gcc-internal-format msgid "fold check: original tree changed by fold" msgstr "" @@ -27592,7 +27540,7 @@ msgstr "" msgid "total size of local objects exceeds maximum %wu" msgstr "" -#: function.cc:1789 gimplify.cc:7884 gimplify.cc:8055 varasm.cc:1833 +#: function.cc:1789 gimplify.cc:7888 gimplify.cc:8059 varasm.cc:1833 #, gcc-internal-format msgid "impossible constraint in %<asm%>" msgstr "" @@ -27612,197 +27560,197 @@ msgstr "" msgid "function returns an aggregate" msgstr "" -#: gcc.cc:2221 +#: gcc.cc:2224 #, gcc-internal-format msgid "cannot open nested response file" msgstr "" -#: gcc.cc:2258 +#: gcc.cc:2261 #, gcc-internal-format msgid "cannot close nonexistent response file" msgstr "" -#: gcc.cc:2281 +#: gcc.cc:2284 #, gcc-internal-format, gfc-internal-format msgid "could not open temporary response file %s" msgstr "" -#: gcc.cc:2288 +#: gcc.cc:2291 #, gcc-internal-format, gfc-internal-format msgid "could not write to temporary response file %s" msgstr "" -#: gcc.cc:2294 +#: gcc.cc:2297 #, gcc-internal-format, gfc-internal-format msgid "could not close temporary response file %s" msgstr "" #. This leaves DESC open, but the OS will save us. -#: gcc.cc:2326 +#: gcc.cc:2329 #, gcc-internal-format msgid "cannot read spec file %qs: %m" msgstr "" -#: gcc.cc:2420 gcc.cc:2440 +#: gcc.cc:2423 gcc.cc:2443 msgid "specs %%include syntax malformed after %td characters" msgstr "" -#: gcc.cc:2466 gcc.cc:2475 gcc.cc:2485 gcc.cc:2495 +#: gcc.cc:2469 gcc.cc:2478 gcc.cc:2488 gcc.cc:2498 msgid "specs %%rename syntax malformed after %td characters" msgstr "" -#: gcc.cc:2505 +#: gcc.cc:2508 #, gcc-internal-format, gfc-internal-format msgid "specs %s spec was not found to be renamed" msgstr "" -#: gcc.cc:2513 +#: gcc.cc:2516 #, gcc-internal-format msgid "%s: attempt to rename spec %qs to already defined spec %qs" msgstr "" -#: gcc.cc:2535 +#: gcc.cc:2538 msgid "specs unknown %% command after %td characters" msgstr "" -#: gcc.cc:2547 gcc.cc:2561 +#: gcc.cc:2550 gcc.cc:2564 msgid "specs file malformed after %td characters" msgstr "" -#: gcc.cc:2616 +#: gcc.cc:2619 #, gcc-internal-format msgid "spec file has no spec for linking" msgstr "" -#: gcc.cc:3180 gcc.cc:3217 +#: gcc.cc:3183 gcc.cc:3220 #, gcc-internal-format msgid "system path %qs is not absolute" msgstr "" -#: gcc.cc:3306 +#: gcc.cc:3309 #, gcc-internal-format msgid "%<-pipe%> not supported" msgstr "" -#: gcc.cc:3444 gcc.cc:7869 +#: gcc.cc:3447 gcc.cc:7875 #, gcc-internal-format msgid "cannot execute %qs: %s: %m" msgstr "" -#: gcc.cc:3445 gcc.cc:7870 +#: gcc.cc:3448 gcc.cc:7876 #, gcc-internal-format msgid "cannot execute %qs: %s" msgstr "" -#: gcc.cc:3464 +#: gcc.cc:3467 #, gcc-internal-format msgid "failed to get exit status: %m" msgstr "" -#: gcc.cc:3470 +#: gcc.cc:3473 #, gcc-internal-format msgid "failed to get process times: %m" msgstr "" #. The inferior failed to catch the signal. -#: gcc.cc:3496 gcc.cc:3520 +#: gcc.cc:3499 gcc.cc:3523 #, gcc-internal-format, gfc-internal-format msgid "%s signal terminated program %s" msgstr "" -#: gcc.cc:3964 opts-common.cc:1618 opts-common.cc:1650 +#: gcc.cc:3967 opts-common.cc:1618 opts-common.cc:1650 #, gcc-internal-format msgid "unrecognized command-line option %qs" msgstr "" -#: gcc.cc:4006 +#: gcc.cc:4009 #, gcc-internal-format msgid "GCC is not configured to support %qs as %<-foffload=%> argument" msgstr "" -#: gcc.cc:4013 +#: gcc.cc:4016 #, gcc-internal-format msgid "valid %<-foffload=%> arguments are: %s; did you mean %qs?" msgstr "" -#: gcc.cc:4016 +#: gcc.cc:4019 #, gcc-internal-format msgid "valid %<-foffload=%> arguments are: %s" msgstr "" -#: gcc.cc:4036 +#: gcc.cc:4039 #, gcc-internal-format msgid "%<=%>options missing after %<-foffload-options=%>target" msgstr "" -#: gcc.cc:4507 +#: gcc.cc:4510 #, gcc-internal-format msgid "%qs is an unknown %<-save-temps%> option" msgstr "" -#: gcc.cc:5059 +#: gcc.cc:5062 #, gcc-internal-format msgid "" "linker hardening options not enabled by %<-fhardened%> because other link " "options were specified on the command line" msgstr "" -#: gcc.cc:5083 toplev.cc:717 +#: gcc.cc:5086 toplev.cc:717 #, gcc-internal-format msgid "input file %qs is the same as output file" msgstr "" -#: gcc.cc:5088 +#: gcc.cc:5091 #, gcc-internal-format msgid "output filename may not be empty" msgstr "" -#: gcc.cc:5473 +#: gcc.cc:5476 #, gcc-internal-format msgid "%<-pipe%> ignored because %<-save-temps%> specified" msgstr "" -#: gcc.cc:5561 +#: gcc.cc:5564 #, gcc-internal-format msgid "%<-x %s%> after last input file has no effect" msgstr "" -#: gcc.cc:5764 +#: gcc.cc:5767 #, gcc-internal-format msgid "unable to locate default linker script %qs in the library search paths" msgstr "" -#: gcc.cc:5971 +#: gcc.cc:5974 #, gcc-internal-format msgid "switch %qs does not start with %<-%>" msgstr "" -#: gcc.cc:5975 +#: gcc.cc:5978 #, gcc-internal-format msgid "spec-generated switch is just %<-%>" msgstr "" -#: gcc.cc:6207 +#: gcc.cc:6210 #, gcc-internal-format msgid "spec %qs invalid" msgstr "" -#: gcc.cc:6384 +#: gcc.cc:6387 #, gcc-internal-format msgid "spec %qs has invalid %<%%0%c%>" msgstr "" -#: gcc.cc:6676 +#: gcc.cc:6679 #, gcc-internal-format msgid "spec %qs has invalid %<%%W%c%>" msgstr "" -#: gcc.cc:6692 +#: gcc.cc:6695 #, gcc-internal-format msgid "spec %qs has invalid %<%%@%c%>" msgstr "" -#: gcc.cc:6711 +#: gcc.cc:6714 #, gcc-internal-format msgid "spec %qs has invalid %<%%x%c%>" msgstr "" @@ -27810,138 +27758,138 @@ msgstr "" #. Catch the case where a spec string contains something like #. '%{foo:%*}'. i.e. there is no * in the pattern on the left #. hand side of the :. -#: gcc.cc:6922 +#: gcc.cc:6925 #, gcc-internal-format msgid "spec failure: %<%%*%> has not been initialized by pattern match" msgstr "" -#: gcc.cc:6973 +#: gcc.cc:6976 #, gcc-internal-format msgid "spec failure: unrecognized spec option %qc" msgstr "" -#: gcc.cc:7039 +#: gcc.cc:7042 #, gcc-internal-format msgid "unknown spec function %qs" msgstr "" -#: gcc.cc:7069 +#: gcc.cc:7072 #, gcc-internal-format msgid "error in arguments to spec function %qs" msgstr "" -#: gcc.cc:7128 +#: gcc.cc:7131 #, gcc-internal-format msgid "malformed spec function name" msgstr "" #. ) -#: gcc.cc:7131 +#: gcc.cc:7134 #, gcc-internal-format msgid "no arguments for spec function" msgstr "" -#: gcc.cc:7150 +#: gcc.cc:7153 #, gcc-internal-format msgid "malformed spec function arguments" msgstr "" -#: gcc.cc:7329 +#: gcc.cc:7332 #, gcc-internal-format msgid "braced spec %qs ends in escape" msgstr "" -#: gcc.cc:7464 +#: gcc.cc:7467 #, gcc-internal-format msgid "braced spec %qs is invalid at %qc" msgstr "" -#: gcc.cc:7559 +#: gcc.cc:7562 #, gcc-internal-format msgid "braced spec body %qs is invalid" msgstr "" -#: gcc.cc:8156 +#: gcc.cc:8166 #, gcc-internal-format, gfc-internal-format msgid "%s: could not determine length of compare-debug file %s" msgstr "" -#: gcc.cc:8167 +#: gcc.cc:8177 #, gcc-internal-format msgid "%s: %<-fcompare-debug%> failure (length)" msgstr "" -#: gcc.cc:8177 gcc.cc:8218 +#: gcc.cc:8187 gcc.cc:8228 #, gcc-internal-format, gfc-internal-format msgid "%s: could not open compare-debug file %s" msgstr "" -#: gcc.cc:8197 gcc.cc:8234 +#: gcc.cc:8207 gcc.cc:8244 #, gcc-internal-format msgid "%s: %<-fcompare-debug%> failure" msgstr "" -#: gcc.cc:8538 +#: gcc.cc:8548 #, gcc-internal-format msgid "spec failure: more than one argument to %<SYSROOT_SUFFIX_SPEC%>" msgstr "" -#: gcc.cc:8563 +#: gcc.cc:8573 #, gcc-internal-format msgid "spec failure: more than one argument to %<SYSROOT_HEADERS_SUFFIX_SPEC%>" msgstr "" -#: gcc.cc:8770 +#: gcc.cc:8780 #, gcc-internal-format msgid "unrecognized command-line option %<-%s%>; did you mean %<-%s%>?" msgstr "" -#: gcc.cc:8774 +#: gcc.cc:8784 #, gcc-internal-format msgid "unrecognized command-line option %<-%s%>" msgstr "" -#: gcc.cc:8900 +#: gcc.cc:8910 #, gcc-internal-format msgid "not configured with sysroot headers suffix" msgstr "" -#: gcc.cc:8961 cobol/gcobolspec.cc:451 +#: gcc.cc:8971 cobol/gcobolspec.cc:375 #, gcc-internal-format msgid "no input files" msgstr "" -#: gcc.cc:9012 +#: gcc.cc:9022 #, gcc-internal-format msgid "cannot specify %<-o%> with %<-c%>, %<-S%> or %<-E%> with multiple files" msgstr "" -#: gcc.cc:9054 +#: gcc.cc:9064 #, gcc-internal-format, gfc-internal-format msgid "%s: %s compiler not installed on this system" msgstr "" -#: gcc.cc:9079 +#: gcc.cc:9089 #, gcc-internal-format msgid "recompiling with %<-fcompare-debug%>" msgstr "" -#: gcc.cc:9095 +#: gcc.cc:9105 #, gcc-internal-format msgid "during %<-fcompare-debug%> recompilation" msgstr "" -#: gcc.cc:9104 +#: gcc.cc:9114 #, gcc-internal-format msgid "comparing final insns dumps" msgstr "" -#: gcc.cc:9257 +#: gcc.cc:9267 #, gcc-internal-format msgid "%<-fuse-linker-plugin%>, but %s not found" msgstr "" -#: gcc.cc:9291 +#: gcc.cc:9301 #, gcc-internal-format, gfc-internal-format msgid "%s: linker input file unused because linking not done" msgstr "" @@ -27949,92 +27897,92 @@ msgstr "" #. This is can be an indication the user specifed an errorneous #. separated option value, (or used the wrong prefix for an #. option). -#: gcc.cc:9297 +#: gcc.cc:9307 #, gcc-internal-format msgid "%s: linker input file not found: %m" msgstr "" -#: gcc.cc:9369 c-family/c-opts.cc:852 +#: gcc.cc:9379 c-family/c-opts.cc:852 #, gcc-internal-format msgid "cannot use %<-%> as input filename for a precompiled header" msgstr "" -#: gcc.cc:9375 +#: gcc.cc:9385 #, gcc-internal-format, gfc-internal-format msgid "language %s not recognized" msgstr "" -#: gcc.cc:9618 +#: gcc.cc:9628 #, gcc-internal-format msgid "multilib spec %qs is invalid" msgstr "" -#: gcc.cc:9820 +#: gcc.cc:9830 #, gcc-internal-format msgid "multilib exclusions %qs is invalid" msgstr "" -#: gcc.cc:9884 common/config/riscv/riscv-common.cc:2366 +#: gcc.cc:9894 common/config/riscv/riscv-common.cc:2366 #, gcc-internal-format msgid "multilib select %qs %qs is invalid" msgstr "" -#: gcc.cc:10058 +#: gcc.cc:10068 #, gcc-internal-format msgid "multilib select %qs is invalid" msgstr "" -#: gcc.cc:10098 +#: gcc.cc:10108 #, gcc-internal-format msgid "multilib exclusion %qs is invalid" msgstr "" -#: gcc.cc:10349 +#: gcc.cc:10359 #, gcc-internal-format msgid "environment variable %qs not defined" msgstr "" -#: gcc.cc:10517 gcc.cc:10522 +#: gcc.cc:10527 gcc.cc:10532 #, gcc-internal-format msgid "invalid version number %qs" msgstr "" -#: gcc.cc:10565 +#: gcc.cc:10575 #, gcc-internal-format, gfc-internal-format msgid "too few arguments to %%:version-compare" msgstr "" -#: gcc.cc:10571 +#: gcc.cc:10581 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:version-compare" msgstr "" -#: gcc.cc:10613 +#: gcc.cc:10623 #, gcc-internal-format msgid "unknown operator %qs in %%:version-compare" msgstr "" -#: gcc.cc:10737 +#: gcc.cc:10747 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-dump-opt" msgstr "" -#: gcc.cc:10805 +#: gcc.cc:10815 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-self-opt" msgstr "" -#: gcc.cc:10892 +#: gcc.cc:10902 #, gcc-internal-format, gfc-internal-format msgid "too many arguments for %%:dumps" msgstr "" -#: gcc.cc:10996 +#: gcc.cc:11006 #, gcc-internal-format, gfc-internal-format msgid "wrong number of arguments to %%:debug-level-gt" msgstr "" -#: gcc.cc:11017 +#: gcc.cc:11027 #, gcc-internal-format, gfc-internal-format msgid "wrong number of arguments to %%:dwarf-version-gt" msgstr "" @@ -28253,54 +28201,54 @@ msgstr "" msgid "array subscript %wu is above array bounds of %qT" msgstr "" -#: gimple-fold.cc:2226 gimple-fold.cc:3285 gimple-ssa-warn-restrict.cc:2080 +#: gimple-fold.cc:2260 gimple-fold.cc:3319 gimple-ssa-warn-restrict.cc:2080 #, gcc-internal-format msgid "%qD source argument is the same as destination" msgstr "" -#: gimple-fold.cc:2292 +#: gimple-fold.cc:2326 #, gcc-internal-format msgid "" "%qD destination unchanged after copying no bytes from a string of length %E" msgstr "" -#: gimple-fold.cc:2297 +#: gimple-fold.cc:2331 #, gcc-internal-format msgid "%qD destination unchanged after copying no bytes" msgstr "" -#: gimple-fold.cc:2680 gimple-ssa-warn-access.cc:866 +#: gimple-fold.cc:2714 gimple-ssa-warn-access.cc:866 #, gcc-internal-format msgid "%qD specified bound %E exceeds destination size %E" msgstr "" -#: gimple-fold.cc:2699 +#: gimple-fold.cc:2733 #, gcc-internal-format msgid "%qD specified bound %E equals source length" msgstr "" -#: gimple-fold.cc:4734 gimple-fold.cc:5021 +#: gimple-fold.cc:4768 gimple-fold.cc:5055 #, gcc-internal-format msgid "" "flexible array member %qD does not have well defined padding bits for %qs" msgstr "" -#: gimple-fold.cc:4970 cp/constexpr.cc:5081 +#: gimple-fold.cc:5004 cp/constexpr.cc:5109 #, gcc-internal-format msgid "PDP11 bit-field handling unsupported in %qs" msgstr "" -#: gimple-fold.cc:5252 +#: gimple-fold.cc:5286 #, gcc-internal-format, gfc-internal-format msgid "%s not supported for variable length aggregates" msgstr "" -#: gimple-fold.cc:5258 +#: gimple-fold.cc:5292 #, gcc-internal-format, gfc-internal-format msgid "%s not supported on this target" msgstr "" -#: gimple-fold.cc:8578 gimple-fold.cc:8607 +#: gimple-fold.cc:8612 gimple-fold.cc:8641 #, gcc-internal-format, gfc-internal-format msgid "comparison is always %d" msgstr "" @@ -28333,7 +28281,7 @@ msgid "" "from outside of the attribute" msgstr "" -#: gimple-low.cc:112 cp/name-lookup.cc:9306 +#: gimple-low.cc:112 cp/name-lookup.cc:9309 #, gcc-internal-format msgid "%qD defined here" msgstr "" @@ -28353,22 +28301,22 @@ msgstr "" msgid "function may return address of local variable" msgstr "" -#: gimple-ssa-isolate-paths.cc:422 c/c-typeck.cc:12865 +#: gimple-ssa-isolate-paths.cc:422 c/c-typeck.cc:12879 #, gcc-internal-format msgid "function returns address of local variable" msgstr "" #: gimple-ssa-isolate-paths.cc:425 gimple-ssa-warn-access.cc:2075 #: gimple-ssa-warn-access.cc:3729 tree.cc:12615 tree.cc:12652 tree.cc:12693 -#: tree.cc:12726 c/c-decl.cc:10780 c/c-parser.cc:22345 c/c-parser.cc:22486 -#: c/c-typeck.cc:3659 c/c-typeck.cc:3755 c/c-typeck.cc:3767 c/c-typeck.cc:6498 -#: c/c-typeck.cc:12766 c/c-typeck.cc:12783 c/gimple-parser.cc:2660 +#: tree.cc:12726 c/c-decl.cc:10781 c/c-parser.cc:22345 c/c-parser.cc:22486 +#: c/c-typeck.cc:3673 c/c-typeck.cc:3769 c/c-typeck.cc:3781 c/c-typeck.cc:6512 +#: c/c-typeck.cc:12780 c/c-typeck.cc:12797 c/gimple-parser.cc:2660 #: c/gimple-parser.cc:2668 cp/call.cc:8391 cp/call.cc:8474 cp/call.cc:8493 -#: cp/call.cc:10729 cp/class.cc:9468 cp/constexpr.cc:889 cp/constexpr.cc:1340 -#: cp/constexpr.cc:4489 cp/constexpr.cc:6183 cp/constexpr.cc:6562 -#: cp/cvt.cc:1110 cp/cvt.cc:1150 cp/decl.cc:9605 cp/decl2.cc:6351 +#: cp/call.cc:10729 cp/class.cc:9468 cp/constexpr.cc:896 cp/constexpr.cc:1355 +#: cp/constexpr.cc:4517 cp/constexpr.cc:6211 cp/constexpr.cc:6590 +#: cp/cvt.cc:1110 cp/cvt.cc:1150 cp/decl.cc:9607 cp/decl2.cc:6351 #: cp/decl2.cc:6400 cp/lambda.cc:639 cp/method.cc:1240 cp/parser.cc:23073 -#: cp/pt.cc:9266 cp/pt.cc:9936 cp/semantics.cc:2753 cp/semantics.cc:5290 +#: cp/pt.cc:9266 cp/pt.cc:9936 cp/semantics.cc:2756 cp/semantics.cc:5304 #: cp/typeck.cc:2164 cp/typeck.cc:2385 cp/typeck.cc:4570 cp/typeck.cc:10793 #: rust/backend/rust-constexpr.cc:4407 rust/backend/rust-tree.cc:621 #: rust/backend/rust-tree.cc:3800 @@ -29576,11 +29524,11 @@ msgstr "" #: gimple-ssa-warn-access.cc:3981 gimple-ssa-warn-access.cc:4629 #: gimple-ssa-warn-access.cc:4632 gimple-ssa-warn-restrict.cc:1830 -#: tree-ssa-uninit.cc:924 tree-ssa-uninit.cc:1123 c/c-decl.cc:4100 -#: c/c-decl.cc:4390 c/c-typeck.cc:10363 c/c-typeck.cc:13583 cp/call.cc:8808 -#: cp/call.cc:8819 cp/class.cc:1722 cp/class.cc:3543 cp/constexpr.cc:1065 -#: cp/decl.cc:4687 cp/decl.cc:13468 cp/decl.cc:14071 cp/decl.cc:14081 -#: cp/decl.cc:15081 cp/friend.cc:407 cp/friend.cc:417 cp/init.cc:2948 +#: tree-ssa-uninit.cc:924 tree-ssa-uninit.cc:1123 c/c-decl.cc:4101 +#: c/c-decl.cc:4391 c/c-typeck.cc:10377 c/c-typeck.cc:13597 cp/call.cc:8808 +#: cp/call.cc:8819 cp/class.cc:1722 cp/class.cc:3543 cp/constexpr.cc:1078 +#: cp/decl.cc:4687 cp/decl.cc:13470 cp/decl.cc:14073 cp/decl.cc:14083 +#: cp/decl.cc:15083 cp/friend.cc:407 cp/friend.cc:417 cp/init.cc:2948 #: cp/parser.cc:3860 cp/parser.cc:4006 cp/parser.cc:4058 cp/parser.cc:7428 #: cp/parser.cc:25737 cp/typeck.cc:5069 #, gcc-internal-format @@ -29993,457 +29941,457 @@ msgstr "" msgid "attribute %<fallthrough%> not preceding a case label or default label" msgstr "" -#: gimplify.cc:3943 +#: gimplify.cc:3944 #, gcc-internal-format msgid "" "the %<device%> clause must be present if the %<interop%> clause has more " "than one list item" msgstr "" -#: gimplify.cc:3949 +#: gimplify.cc:3950 #, gcc-internal-format msgid "" "number of list items in %<interop%> clause (%d) exceeds the number of " "%<append_args%> items (%d) for %<declare variant%> candidate %qD" msgstr "" -#: gimplify.cc:3955 +#: gimplify.cc:3956 #, gcc-internal-format msgid "%<declare variant%> candidate %qD declared here" msgstr "" -#: gimplify.cc:4223 +#: gimplify.cc:4227 #, gcc-internal-format msgid "" "%<is_device_ptr%> for %qD does not imply %<has_device_addr%> required for " "%<need_device_addr%>" msgstr "" -#: gimplify.cc:4235 +#: gimplify.cc:4239 #, gcc-internal-format msgid "" "%<has_device_addr%> for %qD does not imply %<is_device_ptr%> required for " "%<need_device_ptr%>" msgstr "" -#: gimplify.cc:4852 +#: gimplify.cc:4856 #, gcc-internal-format msgid "using result of function returning %<void%>" msgstr "" -#: gimplify.cc:7885 +#: gimplify.cc:7889 #, gcc-internal-format, gfc-internal-format msgid "non-memory output %d must stay in memory" msgstr "" -#: gimplify.cc:7900 +#: gimplify.cc:7904 #, gcc-internal-format msgid "invalid lvalue in %<asm%> output %d" msgstr "" -#: gimplify.cc:8056 +#: gimplify.cc:8060 #, gcc-internal-format, gfc-internal-format msgid "non-memory input %d must stay in memory" msgstr "" -#: gimplify.cc:8097 gimplify.cc:8107 +#: gimplify.cc:8101 gimplify.cc:8111 #, gcc-internal-format, gfc-internal-format msgid "memory input %d is not directly addressable" msgstr "" -#: gimplify.cc:8730 +#: gimplify.cc:8734 #, gcc-internal-format msgid "" "threadprivate variable %qE used in a region with %<order(concurrent)%> clause" msgstr "" -#: gimplify.cc:8732 +#: gimplify.cc:8736 #, gcc-internal-format msgid "enclosing region" msgstr "" -#: gimplify.cc:8736 +#: gimplify.cc:8740 #, gcc-internal-format msgid "threadprivate variable %qE used in target region" msgstr "" -#: gimplify.cc:8738 +#: gimplify.cc:8742 #, gcc-internal-format msgid "enclosing target region" msgstr "" -#: gimplify.cc:8751 +#: gimplify.cc:8755 #, gcc-internal-format msgid "threadprivate variable %qE used in untied task" msgstr "" -#: gimplify.cc:8753 +#: gimplify.cc:8757 #, gcc-internal-format msgid "enclosing task" msgstr "" -#: gimplify.cc:8850 +#: gimplify.cc:8854 #, gcc-internal-format msgid "%qE not specified in enclosing %qs" msgstr "" -#: gimplify.cc:8852 +#: gimplify.cc:8856 #, gcc-internal-format msgid "enclosing %qs" msgstr "" -#: gimplify.cc:9026 +#: gimplify.cc:9030 #, gcc-internal-format msgid "%qE not specified in enclosing OpenACC %qs construct" msgstr "" -#: gimplify.cc:9030 +#: gimplify.cc:9034 #, gcc-internal-format msgid "enclosing OpenACC %qs construct and" msgstr "" -#: gimplify.cc:9033 +#: gimplify.cc:9037 #, gcc-internal-format msgid "enclosing OpenACC %qs construct with %qs clause" msgstr "" -#: gimplify.cc:9103 +#: gimplify.cc:9107 #, gcc-internal-format msgid "%qE with %<link%> clause used in %<routine%> function" msgstr "" -#: gimplify.cc:9111 +#: gimplify.cc:9115 #, gcc-internal-format msgid "%qE requires a %<declare%> directive for use in a %<routine%> function" msgstr "" -#: gimplify.cc:9173 +#: gimplify.cc:9177 #, gcc-internal-format msgid "%qE not specified in enclosing %<target%>" msgstr "" -#: gimplify.cc:9175 +#: gimplify.cc:9179 #, gcc-internal-format msgid "enclosing %<target%>" msgstr "" -#: gimplify.cc:9210 gimplify.cc:13304 +#: gimplify.cc:9214 gimplify.cc:13346 #, gcc-internal-format msgid "variable %qE declared in enclosing %<host_data%> region" msgstr "" -#: gimplify.cc:9231 +#: gimplify.cc:9242 #, gcc-internal-format msgid "%qD referenced in target region does not have a mappable type" msgstr "" -#: gimplify.cc:9375 +#: gimplify.cc:9385 #, gcc-internal-format msgid "iteration variable %qE is predetermined linear" msgstr "" -#: gimplify.cc:9378 +#: gimplify.cc:9388 #, gcc-internal-format msgid "iteration variable %qE should be private" msgstr "" -#: gimplify.cc:9392 +#: gimplify.cc:9402 #, gcc-internal-format msgid "iteration variable %qE should not be firstprivate" msgstr "" -#: gimplify.cc:9395 +#: gimplify.cc:9405 #, gcc-internal-format msgid "iteration variable %qE should not be reduction" msgstr "" -#: gimplify.cc:9398 +#: gimplify.cc:9408 #, gcc-internal-format msgid "iteration variable %qE should not be linear" msgstr "" -#: gimplify.cc:10402 gimplify.cc:10413 gimplify.cc:10425 gimplify.cc:10441 -#: gimplify.cc:10646 gimplify.cc:10669 gimplify.cc:10680 gimplify.cc:10698 +#: gimplify.cc:10412 gimplify.cc:10423 gimplify.cc:10435 gimplify.cc:10451 +#: gimplify.cc:10656 gimplify.cc:10679 gimplify.cc:10690 gimplify.cc:10708 #, gcc-internal-format msgid "unexpected mapping node" msgstr "" -#: gimplify.cc:10735 +#: gimplify.cc:10745 #, gcc-internal-format msgid "unexpected pointer mapping node" msgstr "" -#: gimplify.cc:10948 +#: gimplify.cc:10958 #, gcc-internal-format msgid "base pointer cycle detected" msgstr "" -#: gimplify.cc:11455 +#: gimplify.cc:11465 #, gcc-internal-format msgid "" "data movement for component %qE is not compatible with movement for struct " "%qE" msgstr "" -#: gimplify.cc:11771 +#: gimplify.cc:11781 #, gcc-internal-format msgid "%qE appears more than once in map clauses" msgstr "" -#: gimplify.cc:12727 +#: gimplify.cc:12737 #, gcc-internal-format msgid "mapping field %qE of variable length structure" msgstr "" -#: gimplify.cc:12997 gimplify.cc:13003 +#: gimplify.cc:13039 gimplify.cc:13045 #, gcc-internal-format msgid "conditional %<lastprivate%> clause on %qs construct" msgstr "" -#: gimplify.cc:13020 +#: gimplify.cc:13062 #, gcc-internal-format msgid "non-scalar variable %qD in conditional %<lastprivate%> clause" msgstr "" -#: gimplify.cc:13042 +#: gimplify.cc:13084 #, gcc-internal-format msgid "%<task%> reduction modifier on a construct with a %<nowait%> clause" msgstr "" -#: gimplify.cc:13050 +#: gimplify.cc:13092 #, gcc-internal-format msgid "" "invalid %<task%> reduction modifier on construct other than %<parallel%>, " "%qs, %<sections%> or %<scope%>" msgstr "" -#: gimplify.cc:13061 gimplify.cc:13067 gimplify.cc:13073 gimplify.cc:13079 -#: gimplify.cc:13085 gimplify.cc:17471 +#: gimplify.cc:13103 gimplify.cc:13109 gimplify.cc:13115 gimplify.cc:13121 +#: gimplify.cc:13127 gimplify.cc:17513 #, gcc-internal-format msgid "%<inscan%> %<reduction%> clause on %qs construct" msgstr "" -#: gimplify.cc:13179 +#: gimplify.cc:13221 #, gcc-internal-format msgid "" "%<linear%> clause for variable other than loop iterator specified on " "construct combined with %<distribute%>" msgstr "" -#: gimplify.cc:13804 +#: gimplify.cc:13846 #, gcc-internal-format msgid "" "copyprivate variable %qE is not threadprivate or private in outer context" msgstr "" -#: gimplify.cc:13861 +#: gimplify.cc:13903 #, gcc-internal-format msgid "%s variable %qE is private in outer context" msgstr "" -#: gimplify.cc:13893 +#: gimplify.cc:13935 #, gcc-internal-format msgid "expected %qs %<if%> clause modifier rather than %qs" msgstr "" -#: gimplify.cc:13932 +#: gimplify.cc:13974 #, gcc-internal-format msgid "" "%<device%> clause with %<ancestor%> is only allowed on %<target%> construct" msgstr "" -#: gimplify.cc:13948 +#: gimplify.cc:13990 #, gcc-internal-format msgid "" "with %<ancestor%>, only the %<device%>, %<firstprivate%>, %<private%>, " "%<defaultmap%>, and %<map%> clauses may appear on the construct" msgstr "" -#: gimplify.cc:14153 +#: gimplify.cc:14195 #, gcc-internal-format msgid "" "allocator with access trait set to %<thread%> results in undefined behavior " "for %qs directive" msgstr "" -#: gimplify.cc:14194 +#: gimplify.cc:14236 #, gcc-internal-format msgid "" "%qD specified in %qs clause but not in %<inscan%> %<reduction%> clause on " "the containing construct" msgstr "" -#: gimplify.cc:14414 +#: gimplify.cc:14456 #, gcc-internal-format msgid "%<_Atomic%> %qD in implicit %<map%> clause" msgstr "" -#: gimplify.cc:14468 +#: gimplify.cc:14510 #, gcc-internal-format msgid "" "%<_Atomic%> %qD in implicit %<firstprivate%> clause on %<target%> construct" msgstr "" -#: gimplify.cc:14806 +#: gimplify.cc:14848 #, gcc-internal-format msgid "%<_Atomic%> %qD in %<firstprivate%> clause on %<target%> construct" msgstr "" -#: gimplify.cc:14879 +#: gimplify.cc:14921 #, gcc-internal-format msgid "" "same variable used in %<firstprivate%> and %<lastprivate%> clauses on " "%<distribute%> construct" msgstr "" -#: gimplify.cc:15056 +#: gimplify.cc:15098 #, gcc-internal-format msgid "" "incompatible data clause with reduction on %qE; promoting to " "%<present_or_copy%>" msgstr "" -#: gimplify.cc:15354 +#: gimplify.cc:15396 #, gcc-internal-format msgid "" "%qD specified in %<inscan%> %<reduction%> clause but not in %<scan%> " "directive clause" msgstr "" -#: gimplify.cc:15373 +#: gimplify.cc:15415 #, gcc-internal-format msgid "invalid private reduction on %qE" msgstr "" -#: gimplify.cc:15540 +#: gimplify.cc:15582 #, gcc-internal-format msgid "" "%<inscan%> %<reduction%> clause used together with %<linear%> clause for a " "variable other than loop iterator" msgstr "" -#: gimplify.cc:15856 +#: gimplify.cc:15898 #, gcc-internal-format msgid "%<mutexinoutset%> kind in %<depend%> clause on a %<taskwait%> construct" msgstr "" -#: gimplify.cc:15866 +#: gimplify.cc:15908 #, gcc-internal-format msgid "%<taskwait%> construct with %<nowait%> clause but no %<depend%> clauses" msgstr "" -#: gimplify.cc:16304 gimplify.cc:16308 gimplify.cc:16317 gimplify.cc:16329 -#: gimplify.cc:16334 +#: gimplify.cc:16346 gimplify.cc:16350 gimplify.cc:16359 gimplify.cc:16371 +#: gimplify.cc:16376 #, gcc-internal-format msgid "%qs clause may not appear on non-rectangular %qs" msgstr "" -#: gimplify.cc:16499 +#: gimplify.cc:16541 #, gcc-internal-format msgid "" "%<linear%> clause may not be specified together with %<ordered%> clause if " "stand-alone %<ordered%> construct is nested in it" msgstr "" -#: gimplify.cc:16564 +#: gimplify.cc:16606 #, gcc-internal-format msgid "threadprivate iteration variable %qD" msgstr "" -#: gimplify.cc:16595 gimplify.cc:16703 +#: gimplify.cc:16637 gimplify.cc:16745 #, gcc-internal-format msgid "conditional %<lastprivate%> on loop iterator %qD ignored" msgstr "" -#: gimplify.cc:17409 +#: gimplify.cc:17451 #, gcc-internal-format msgid "" "%<bind%> clause not specified on a %<loop%> construct not nested inside " "another OpenMP construct" msgstr "" -#: gimplify.cc:17433 +#: gimplify.cc:17475 #, gcc-internal-format msgid "" "%<bind(parallel)%> on a %<loop%> construct nested inside %<simd%> construct" msgstr "" -#: gimplify.cc:17453 +#: gimplify.cc:17495 #, gcc-internal-format msgid "" "%<bind(teams)%> on a %<loop%> region not strictly nested inside of a " "%<teams%> region" msgstr "" -#: gimplify.cc:17478 +#: gimplify.cc:17520 #, gcc-internal-format msgid "" "invalid %<task%> reduction modifier on construct other than %<parallel%>, " "%qs or %<sections%>" msgstr "" -#: gimplify.cc:17506 +#: gimplify.cc:17548 #, gcc-internal-format msgid "" "%<lastprivate%> clause on a %<loop%> construct refers to a variable %qD " "which is not the loop iterator" msgstr "" -#: gimplify.cc:18588 +#: gimplify.cc:18630 #, gcc-internal-format msgid "" "%<ordered%> construct with %qs clause must be closely nested inside a loop " "with %<ordered%> clause" msgstr "" -#: gimplify.cc:18609 +#: gimplify.cc:18651 #, gcc-internal-format msgid "variable %qE is not an iteration of outermost loop %d, expected %qE" msgstr "" -#: gimplify.cc:18622 +#: gimplify.cc:18664 #, gcc-internal-format msgid "" "number of variables in %qs clause with %<sink%> modifier does not match " "number of iteration variables" msgstr "" -#: gimplify.cc:18636 +#: gimplify.cc:18678 #, gcc-internal-format msgid "" "more than one %qs clause with %<source%> modifier on an %<ordered%> construct" msgstr "" -#: gimplify.cc:18649 +#: gimplify.cc:18691 #, gcc-internal-format msgid "" "%qs clause with %<source%> modifier specified together with %qs clauses with " "%<sink%> modifier on the same construct" msgstr "" -#: gimplify.cc:18816 +#: gimplify.cc:18858 #, gcc-internal-format msgid "" "%qD is a virtual function but only a direct call is allowed in a dispatch " "construct" msgstr "" -#: gimplify.cc:20558 +#: gimplify.cc:20600 #, gcc-internal-format msgid "gimplification failed" msgstr "" -#: gimplify.cc:21173 +#: gimplify.cc:21215 #, gcc-internal-format msgid "%qT is promoted to %qT when passed through %<...%>" msgstr "" -#: gimplify.cc:21178 +#: gimplify.cc:21220 #, gcc-internal-format msgid "(so you should pass %qT not %qT to %<va_arg%>)" msgstr "" -#: gimplify.cc:21185 +#: gimplify.cc:21227 #, gcc-internal-format msgid "if this code is reached, the program will abort" msgstr "" @@ -30895,7 +30843,7 @@ msgstr "" msgid "IPA modref summary is missing in input file" msgstr "" -#: ipa-prop.cc:4954 ipa-prop.cc:4996 ipa-prop.cc:5073 ipa-prop.cc:5121 +#: ipa-prop.cc:4991 ipa-prop.cc:5035 ipa-prop.cc:5115 ipa-prop.cc:5167 #, gcc-internal-format msgid "invalid jump function in LTO stream" msgstr "" @@ -31160,95 +31108,95 @@ msgid "" "%<asm%> operand has impossible constraints or there are not enough registers" msgstr "" -#: lto-cgraph.cc:1175 +#: lto-cgraph.cc:1177 #, gcc-internal-format msgid "" "function %qs has been referenced in offloaded code but hasn%'t been marked " "to be included in the offloaded code" msgstr "" -#: lto-cgraph.cc:1181 +#: lto-cgraph.cc:1183 #, gcc-internal-format msgid "" "variable %qs has been referenced in offloaded code but hasn%'t been marked " "to be included in the offloaded code" msgstr "" -#: lto-cgraph.cc:1349 +#: lto-cgraph.cc:1351 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: found multiple instances of cgraph node with uid %d" msgstr "" -#: lto-cgraph.cc:1514 +#: lto-cgraph.cc:1516 #, gcc-internal-format msgid "bytecode stream: no caller found while reading edge" msgstr "" -#: lto-cgraph.cc:1520 +#: lto-cgraph.cc:1522 #, gcc-internal-format msgid "bytecode stream: no callee found while reading edge" msgstr "" -#: lto-cgraph.cc:1597 +#: lto-cgraph.cc:1599 #, gcc-internal-format msgid "bytecode stream: found empty cgraph node" msgstr "" -#: lto-cgraph.cc:1713 +#: lto-cgraph.cc:1715 #, gcc-internal-format, gfc-internal-format msgid "At most %i profile runs is supported. Perhaps corrupted profile?" msgstr "" -#: lto-cgraph.cc:1738 +#: lto-cgraph.cc:1740 #, gcc-internal-format, gfc-internal-format msgid "Profile information in %s corrupted" msgstr "" -#: lto-cgraph.cc:1776 +#: lto-cgraph.cc:1778 #, gcc-internal-format, gfc-internal-format msgid "cannot find LTO cgraph in %s" msgstr "" -#: lto-cgraph.cc:1786 +#: lto-cgraph.cc:1788 #, gcc-internal-format, gfc-internal-format msgid "cannot find LTO section refs in %s" msgstr "" -#: lto-cgraph.cc:1947 +#: lto-cgraph.cc:1949 #, gcc-internal-format msgid "" "OpenMP %<requires%> directive with non-identical clauses in multiple " "compilation units: %qs vs. %qs" msgstr "" -#: lto-cgraph.cc:1950 lto-cgraph.cc:1951 lto-cgraph.cc:1957 +#: lto-cgraph.cc:1952 lto-cgraph.cc:1953 lto-cgraph.cc:1959 #, gcc-internal-format msgid "%qs has %qs" msgstr "" -#: lto-cgraph.cc:1955 +#: lto-cgraph.cc:1957 #, gcc-internal-format msgid "" "OpenMP %<requires%> directive with %qs specified only in some compilation " "units" msgstr "" -#: lto-cgraph.cc:1960 +#: lto-cgraph.cc:1962 #, gcc-internal-format msgid "but %qs has not" msgstr "" -#: lto-cgraph.cc:1968 +#: lto-cgraph.cc:1970 #, gcc-internal-format, gfc-internal-format msgid "invalid offload table in %s" msgstr "" -#: lto-cgraph.cc:1979 +#: lto-cgraph.cc:1981 #, gcc-internal-format msgid "GCC_OFFLOAD_OMP_REQUIRES_FILE unset" msgstr "" -#: lto-cgraph.cc:1982 +#: lto-cgraph.cc:1984 #, gcc-internal-format msgid "Cannot open omp_requires file %qs" msgstr "" @@ -32172,7 +32120,7 @@ msgstr "" msgid "command-line option %qs is not supported by this configuration" msgstr "" -#: opts-common.cc:1463 opts.cc:2589 +#: opts-common.cc:1463 opts.cc:2612 #, gcc-internal-format msgid "missing argument to %qs" msgstr "" @@ -32366,302 +32314,308 @@ msgstr "" msgid "%<-fsanitize=%s%> is incompatible with %<-fsanitize=%s%>" msgstr "" -#: opts.cc:1073 +#: opts.cc:1053 +#, gcc-internal-format +msgid "" +"%<-fipa-reorder-for-locality%> is incompatible with an explicit %qs option" +msgstr "" + +#: opts.cc:1092 #, gcc-internal-format msgid "section anchors must be disabled when unit-at-a-time is disabled" msgstr "" -#: opts.cc:1077 +#: opts.cc:1096 #, gcc-internal-format msgid "toplevel reorder must be disabled when unit-at-a-time is disabled" msgstr "" -#: opts.cc:1091 +#: opts.cc:1110 #, gcc-internal-format msgid "transactional memory is not supported with non-call exceptions" msgstr "" -#: opts.cc:1106 +#: opts.cc:1125 #, gcc-internal-format msgid "section anchors must be disabled when toplevel reorder is disabled" msgstr "" -#: opts.cc:1117 +#: opts.cc:1136 #, gcc-internal-format msgid "" "%<-ftrivial-auto-var-init=zero%> is not enabled by %<-fhardened%> because it " "was specified on the command line" msgstr "" -#: opts.cc:1167 +#: opts.cc:1186 #, gcc-internal-format msgid "" "%<-fstack-protector-strong%> is not enabled by %<-fhardened%> because it was " "specified on the command line" msgstr "" -#: opts.cc:1212 +#: opts.cc:1231 #, gcc-internal-format msgid "%<-fno-fat-lto-objects%> are supported only with linker plugin" msgstr "" -#: opts.cc:1220 +#: opts.cc:1239 #, gcc-internal-format msgid "%<-gsplit-dwarf%> is not supported with LTO, disabling" msgstr "" -#: opts.cc:1234 +#: opts.cc:1253 #, gcc-internal-format msgid "%<-fsplit-stack%> is not supported by this compiler configuration" msgstr "" -#: opts.cc:1261 +#: opts.cc:1284 #, gcc-internal-format msgid "" "%<-fsanitize=pointer-compare%> must be combined with %<-fsanitize=address%> " "or %<-fsanitize=kernel-address%>" msgstr "" -#: opts.cc:1265 +#: opts.cc:1288 #, gcc-internal-format msgid "" "%<-fsanitize=pointer-subtract%> must be combined with %<-fsanitize=address%> " "or %<-fsanitize=kernel-address%>" msgstr "" -#: opts.cc:1292 +#: opts.cc:1315 #, gcc-internal-format msgid "%<-fsanitize-recover=%s%> is not supported" msgstr "" -#: opts.cc:1304 opts.cc:2301 +#: opts.cc:1327 opts.cc:2324 #, gcc-internal-format msgid "%<-fsanitize-trap=%s%> is not supported" msgstr "" -#: opts.cc:1331 +#: opts.cc:1354 #, gcc-internal-format msgid "" "%<-fsanitize-address-use-after-scope%> requires %<-fstack-reuse=none%> option" msgstr "" -#: opts.cc:1338 +#: opts.cc:1361 #, gcc-internal-format msgid "transactional memory is not supported with %<-fsanitize=address%>" msgstr "" -#: opts.cc:1341 +#: opts.cc:1364 #, gcc-internal-format msgid "" "transactional memory is not supported with %<-fsanitize=kernel-address%>" msgstr "" -#: opts.cc:1346 +#: opts.cc:1369 #, gcc-internal-format msgid "live patching (with %qs) is not supported with LTO" msgstr "" -#: opts.cc:1351 +#: opts.cc:1374 #, gcc-internal-format msgid "vtable verification is not supported with LTO" msgstr "" -#: opts.cc:1426 +#: opts.cc:1449 #, gcc-internal-format msgid "variable tracking requested, but useless unless producing debug info" msgstr "" -#: opts.cc:1430 +#: opts.cc:1453 #, gcc-internal-format msgid "variable tracking requested, but not supported by this debug format" msgstr "" -#: opts.cc:1459 +#: opts.cc:1482 #, gcc-internal-format msgid "var-tracking-assignments changes selective scheduling" msgstr "" -#: opts.cc:1472 +#: opts.cc:1495 #, gcc-internal-format msgid "" "%<-Wstrict-flex-arrays%> is ignored when %<-fstrict-flex-arrays%> is not " "present" msgstr "" -#: opts.cc:1502 config/darwin.cc:3484 +#: opts.cc:1525 config/darwin.cc:3484 #, gcc-internal-format msgid "" "%<-freorder-blocks-and-partition%> does not work with exceptions on this " "architecture" msgstr "" -#: opts.cc:1518 +#: opts.cc:1541 #, gcc-internal-format msgid "" "%<-freorder-blocks-and-partition%> does not support unwind info on this " "architecture" msgstr "" -#: opts.cc:1536 config/pa/pa.cc:580 +#: opts.cc:1559 config/pa/pa.cc:580 #, gcc-internal-format msgid "%<-freorder-blocks-and-partition%> does not work on this architecture" msgstr "" -#: opts.cc:2045 +#: opts.cc:2068 #, gcc-internal-format msgid "unrecognized %<include_flags 0x%x%> passed to %<print_specific_help%>" msgstr "" -#: opts.cc:2280 +#: opts.cc:2303 #, gcc-internal-format msgid "%<-fsanitize=all%> option is not valid" msgstr "" -#: opts.cc:2335 +#: opts.cc:2358 #, gcc-internal-format msgid "" "unrecognized argument to %<-f%ssanitize%s=%> option: %q.*s; did you mean %qs?" msgstr "" -#: opts.cc:2341 +#: opts.cc:2364 #, gcc-internal-format msgid "unrecognized argument to %<-f%ssanitize%s=%> option: %q.*s" msgstr "" -#: opts.cc:2376 +#: opts.cc:2399 #, gcc-internal-format msgid "%qs attribute directive ignored" msgstr "" -#: opts.cc:2400 +#: opts.cc:2423 #, gcc-internal-format msgid "unrecognized argument to %<-fzero-call-used-regs=%>: %qs" msgstr "" -#: opts.cc:2424 +#: opts.cc:2447 #, gcc-internal-format msgid "invalid arguments for %<-falign-%s%> option: %qs" msgstr "" -#: opts.cc:2439 +#: opts.cc:2462 #, gcc-internal-format msgid "invalid number of arguments for %<-falign-%s%> option: %qs" msgstr "" -#: opts.cc:2448 +#: opts.cc:2471 #, gcc-internal-format msgid "%<-falign-%s%> is not between 0 and %d" msgstr "" -#: opts.cc:2507 +#: opts.cc:2530 #, gcc-internal-format msgid "invalid arguments for %<-fpatchable-function-entry%>" msgstr "" -#: opts.cc:2644 +#: opts.cc:2667 #, gcc-internal-format msgid "%<--help%> argument %q.*s is ambiguous, please be more specific" msgstr "" -#: opts.cc:2655 +#: opts.cc:2678 #, gcc-internal-format msgid "unrecognized argument to %<--help=%> option: %q.*s" msgstr "" -#: opts.cc:2835 +#: opts.cc:2858 #, gcc-internal-format msgid "" "arguments ignored for %<-Wattributes=%>; use %<-Wno-attributes=%> instead" msgstr "" -#: opts.cc:2841 +#: opts.cc:2864 #, gcc-internal-format msgid "trailing %<,%> in arguments for %<-Wno-attributes=%>" msgstr "" -#: opts.cc:3087 +#: opts.cc:3110 #, gcc-internal-format msgid "%qs option can be specified only for offload compiler" msgstr "" -#: opts.cc:3096 +#: opts.cc:3119 #, gcc-internal-format msgid "structure alignment must be a small power of two, not %wu" msgstr "" -#: opts.cc:3217 +#: opts.cc:3240 #, gcc-internal-format msgid "unknown stack check parameter %qs" msgstr "" -#: opts.cc:3269 +#: opts.cc:3292 #, gcc-internal-format msgid "" "%<-gdwarf%s%> is ambiguous; use %<-gdwarf-%s%> for DWARF version or %<-" "gdwarf%> %<-g%s%> for debug level" msgstr "" -#: opts.cc:3280 +#: opts.cc:3303 #, gcc-internal-format msgid "dwarf version %wu is not supported" msgstr "" -#: opts.cc:3317 +#: opts.cc:3340 #, gcc-internal-format msgid "unrecognized argument to %<-flto=%> option: %qs" msgstr "" -#: opts.cc:3517 +#: opts.cc:3540 #, gcc-internal-format msgid "target system does not support debug output" msgstr "" -#: opts.cc:3556 +#: opts.cc:3579 #, gcc-internal-format msgid "debug format %qs conflicts with prior selection" msgstr "" -#: opts.cc:3580 +#: opts.cc:3603 #, gcc-internal-format msgid "unrecognized debug output level %qs" msgstr "" -#: opts.cc:3582 +#: opts.cc:3605 #, gcc-internal-format msgid "debug output level %qs is too high" msgstr "" -#: opts.cc:3594 +#: opts.cc:3617 #, gcc-internal-format msgid "unrecognized btf debug output level %qs" msgstr "" -#: opts.cc:3611 +#: opts.cc:3634 #, gcc-internal-format msgid "getting core file size maximum limit: %m" msgstr "" -#: opts.cc:3615 +#: opts.cc:3638 #, gcc-internal-format msgid "setting core file size limit to maximum: %m" msgstr "" -#: opts.cc:3660 +#: opts.cc:3683 #, gcc-internal-format, gfc-internal-format msgid "unrecognized gcc debugging option: %c" msgstr "" -#: opts.cc:3689 +#: opts.cc:3712 #, gcc-internal-format msgid "%<-W%serror=%s%>: no option %<-%s%>; did you mean %<-%s%>?" msgstr "" -#: opts.cc:3693 +#: opts.cc:3716 #, gcc-internal-format msgid "%<-W%serror=%s%>: no option %<-%s%>" msgstr "" -#: opts.cc:3697 +#: opts.cc:3720 #, gcc-internal-format msgid "%<-Werror=%s%>: %<-%s%> is not an option that controls warnings" msgstr "" @@ -34725,95 +34679,95 @@ msgstr "" msgid "BB %i has incorrect fallthru edge" msgstr "" -#: tree-inline.cc:3961 +#: tree-inline.cc:3964 #, gcc-internal-format msgid "function %q+F can never be copied because it receives a non-local goto" msgstr "" -#: tree-inline.cc:3968 +#: tree-inline.cc:3971 #, gcc-internal-format msgid "" "function %q+F can never be copied because it saves address of local label in " "a static variable" msgstr "" -#: tree-inline.cc:4008 +#: tree-inline.cc:4011 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses alloca (override using " "the always_inline attribute)" msgstr "" -#: tree-inline.cc:4022 +#: tree-inline.cc:4025 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses setjmp" msgstr "" -#: tree-inline.cc:4036 +#: tree-inline.cc:4039 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses variable argument lists" msgstr "" -#: tree-inline.cc:4048 +#: tree-inline.cc:4051 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses setjmp-longjmp exception " "handling" msgstr "" -#: tree-inline.cc:4056 +#: tree-inline.cc:4059 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses non-local goto" msgstr "" -#: tree-inline.cc:4068 +#: tree-inline.cc:4071 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses %<__builtin_return%> or " "%<__builtin_apply_args%>" msgstr "" -#: tree-inline.cc:4088 +#: tree-inline.cc:4091 #, gcc-internal-format msgid "function %q+F can never be inlined because it contains a computed goto" msgstr "" -#: tree-inline.cc:4134 +#: tree-inline.cc:4137 #, gcc-internal-format msgid "function %q+F can never be inlined because it has a VLA argument" msgstr "" -#: tree-inline.cc:4201 +#: tree-inline.cc:4204 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it is suppressed using %<-fno-" "inline%>" msgstr "" -#: tree-inline.cc:4209 +#: tree-inline.cc:4212 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses attributes conflicting " "with inlining" msgstr "" -#: tree-inline.cc:4892 +#: tree-inline.cc:4895 #, gcc-internal-format msgid "inlining failed in call to %<always_inline%> %q+F: %s" msgstr "" -#: tree-inline.cc:4895 tree-inline.cc:4916 +#: tree-inline.cc:4898 tree-inline.cc:4919 #, gcc-internal-format msgid "called from here" msgstr "" -#: tree-inline.cc:4898 tree-inline.cc:4919 +#: tree-inline.cc:4901 tree-inline.cc:4922 #, gcc-internal-format msgid "called from this function" msgstr "" -#: tree-inline.cc:4912 +#: tree-inline.cc:4915 #, gcc-internal-format msgid "inlining failed in call to %q+F: %s" msgstr "" @@ -34828,7 +34782,7 @@ msgstr "" msgid "cannot update SSA form" msgstr "" -#: tree-into-ssa.cc:3517 tree-outof-ssa.cc:907 tree-ssa-coalesce.cc:1012 +#: tree-into-ssa.cc:3517 tree-outof-ssa.cc:907 tree-ssa-coalesce.cc:1014 #, gcc-internal-format msgid "SSA corruption" msgstr "" @@ -34858,12 +34812,12 @@ msgstr "" msgid "target does not support atomic profile update, single mode is selected" msgstr "" -#: tree-ssa-alias.cc:4124 +#: tree-ssa-alias.cc:4125 #, gcc-internal-format, gfc-internal-format msgid "invalid fn spec attribute \"%s\"" msgstr "" -#: tree-ssa-alias.cc:4163 +#: tree-ssa-alias.cc:4164 #, gcc-internal-format, gfc-internal-format msgid "invalid fn spec attribute \"%s\" arg %i" msgstr "" @@ -35338,37 +35292,37 @@ msgid "" "%<--param=switch-lower-slow-alg-max-cases=%d%> limit." msgstr "" -#: tree-tailcall.cc:220 +#: tree-tailcall.cc:225 #, gcc-internal-format msgid "address of label passed to %<musttail%> call argument" msgstr "" -#: tree-tailcall.cc:224 +#: tree-tailcall.cc:229 #, gcc-internal-format msgid "address of parameter %qD passed to %<musttail%> call argument" msgstr "" -#: tree-tailcall.cc:228 +#: tree-tailcall.cc:233 #, gcc-internal-format msgid "address of automatic variable %qD passed to %<musttail%> call argument" msgstr "" -#: tree-tailcall.cc:232 +#: tree-tailcall.cc:237 #, gcc-internal-format msgid "address of local variable passed to %<musttail%> call argument" msgstr "" -#: tree-tailcall.cc:849 tree-tailcall.cc:879 +#: tree-tailcall.cc:885 tree-tailcall.cc:914 #, gcc-internal-format msgid "address of local variable can escape to %<musttail%> call" msgstr "" -#: tree-tailcall.cc:874 +#: tree-tailcall.cc:909 #, gcc-internal-format msgid "address of automatic variable %qD can escape to %<musttail%> call" msgstr "" -#: tree-tailcall.cc:905 +#: tree-tailcall.cc:939 #, gcc-internal-format msgid "address of parameter %qD can escape to %<musttail%> call" msgstr "" @@ -35398,7 +35352,7 @@ msgstr "" msgid "vector shuffling operation will be expanded piecewise" msgstr "" -#: tree-vect-loop.cc:5109 +#: tree-vect-loop.cc:5115 #, gcc-internal-format msgid "vectorization did not happen for a simd loop" msgstr "" @@ -35981,7 +35935,7 @@ msgid "" "requested alignment for %q+D is greater than implemented alignment of %wu" msgstr "" -#: varasm.cc:2513 c/c-decl.cc:5970 c/c-parser.cc:1969 m2/gm2-gcc/m2type.cc:1248 +#: varasm.cc:2513 c/c-decl.cc:5971 c/c-parser.cc:1969 m2/gm2-gcc/m2type.cc:1248 #, gcc-internal-format msgid "storage size of %q+D isn%'t known" msgstr "" @@ -36058,7 +36012,7 @@ msgstr "" msgid "%qs symbol %q+D must have static linkage" msgstr "" -#: varasm.cc:6609 config/nvptx/nvptx.cc:7740 +#: varasm.cc:6609 config/nvptx/nvptx.cc:7758 #, gcc-internal-format msgid "alias definitions not supported in this configuration" msgstr "" @@ -36245,27 +36199,27 @@ msgid "%qE attribute ignored for field of type %qT" msgstr "" #: c-family/c-attribs.cc:1452 c-family/c-attribs.cc:3650 -#: c-family/c-attribs.cc:6271 ada/gcc-interface/utils.cc:7446 +#: c-family/c-attribs.cc:6271 ada/gcc-interface/utils.cc:7461 #, gcc-internal-format msgid "%qE argument not a string" msgstr "" -#: c-family/c-attribs.cc:1627 ada/gcc-interface/utils.cc:6932 +#: c-family/c-attribs.cc:1627 ada/gcc-interface/utils.cc:6947 #, gcc-internal-format msgid "%qE attribute ignored because of argument %qE" msgstr "" -#: c-family/c-attribs.cc:1648 ada/gcc-interface/utils.cc:6953 +#: c-family/c-attribs.cc:1648 ada/gcc-interface/utils.cc:6968 #, gcc-internal-format msgid "ignoring attribute %qE because of excess arguments starting at %qE" msgstr "" -#: c-family/c-attribs.cc:1662 ada/gcc-interface/utils.cc:6967 +#: c-family/c-attribs.cc:1662 ada/gcc-interface/utils.cc:6982 #, gcc-internal-format msgid "attribute %qE does not apply to elements of non-scalar type %qT" msgstr "" -#: c-family/c-attribs.cc:1667 ada/gcc-interface/utils.cc:6972 +#: c-family/c-attribs.cc:1667 ada/gcc-interface/utils.cc:6987 #, gcc-internal-format msgid "attribute %qE does not apply to fields of aggregate type %qT" msgstr "" @@ -36281,12 +36235,12 @@ msgid "%qE attribute has no effect on unit local functions" msgstr "" #: c-family/c-attribs.cc:1993 c-family/c-attribs.cc:3633 -#: ada/gcc-interface/utils.cc:7202 +#: ada/gcc-interface/utils.cc:7217 #, gcc-internal-format msgid "%qE attribute ignored because %qD is not a variable" msgstr "" -#: c-family/c-attribs.cc:1999 ada/gcc-interface/utils.cc:7208 +#: c-family/c-attribs.cc:1999 ada/gcc-interface/utils.cc:7223 #, gcc-internal-format msgid "%qE attribute ignored because %qD is not a local variable" msgstr "" @@ -36571,7 +36525,7 @@ msgid "weak %q+D cannot be defined %qE" msgstr "" #: c-family/c-attribs.cc:3209 c-family/c-attribs.cc:4198 -#: ada/gcc-interface/utils.cc:7273 jit/dummy-frontend.cc:883 +#: ada/gcc-interface/utils.cc:7288 jit/dummy-frontend.cc:883 #, gcc-internal-format msgid "attribute %qE argument not a string" msgstr "" @@ -36681,7 +36635,7 @@ msgstr "" #: c-family/c-attribs.cc:3685 c-family/c-attribs.cc:4281 #: c-family/c-attribs.cc:6236 c-family/c-attribs.cc:6263 -#: config/m32c/m32c.cc:2942 ada/gcc-interface/utils.cc:7432 +#: config/m32c/m32c.cc:2942 ada/gcc-interface/utils.cc:7447 #, gcc-internal-format msgid "%qE attribute applies only to functions" msgstr "" @@ -36781,7 +36735,7 @@ msgstr "" msgid "%qE attribute argument %E is not in the range [0, %wu]" msgstr "" -#: c-family/c-attribs.cc:4211 ada/gcc-interface/utils.cc:7286 +#: c-family/c-attribs.cc:4211 ada/gcc-interface/utils.cc:7301 #, gcc-internal-format msgid "" "only %<inbranch%> and %<notinbranch%> flags are allowed for %<__simd__%> " @@ -36835,7 +36789,7 @@ msgstr "" msgid "%qE argument is not a function" msgstr "" -#: c-family/c-attribs.cc:4635 cp/name-lookup.cc:6571 +#: c-family/c-attribs.cc:4635 cp/name-lookup.cc:6574 #, gcc-internal-format msgid "deprecated message is not a string" msgstr "" @@ -37055,17 +37009,17 @@ msgstr "" msgid "%qE attribute only applies to variadic functions" msgstr "" -#: c-family/c-attribs.cc:6031 ada/gcc-interface/utils.cc:6833 +#: c-family/c-attribs.cc:6031 ada/gcc-interface/utils.cc:6848 #, gcc-internal-format msgid "requested position is not an integer constant" msgstr "" -#: c-family/c-attribs.cc:6039 ada/gcc-interface/utils.cc:6840 +#: c-family/c-attribs.cc:6039 ada/gcc-interface/utils.cc:6855 #, gcc-internal-format msgid "requested position is less than zero" msgstr "" -#: c-family/c-attribs.cc:6088 ada/gcc-interface/utils.cc:7329 +#: c-family/c-attribs.cc:6088 ada/gcc-interface/utils.cc:7344 #: d/d-attribs.cc:771 jit/dummy-frontend.cc:799 #, gcc-internal-format msgid "empty string in attribute %<target%>" @@ -37079,7 +37033,7 @@ msgstr "" msgid "%qE attribute argument not a string constant" msgstr "" -#: c-family/c-attribs.cc:6288 ada/gcc-interface/utils.cc:7463 +#: c-family/c-attribs.cc:6288 ada/gcc-interface/utils.cc:7478 #, gcc-internal-format msgid "unrecognized %qE attribute argument %qs" msgstr "" @@ -37363,8 +37317,8 @@ msgstr "" msgid "suggest parentheses around assignment used as truth value" msgstr "" -#: c-family/c-common.cc:3882 c/c-decl.cc:5027 c/c-decl.cc:7693 -#: c/c-parser.cc:4001 c/c-typeck.cc:17894 +#: c-family/c-common.cc:3882 c/c-decl.cc:5028 c/c-decl.cc:7694 +#: c/c-parser.cc:4001 c/c-typeck.cc:17908 #, gcc-internal-format msgid "invalid use of %<restrict%>" msgstr "" @@ -38452,7 +38406,7 @@ msgstr "" msgid "integer constant is too large for %<_BitInt(%d)%> type" msgstr "" -#: c-family/c-lex.cc:1093 c/c-decl.cc:12948 +#: c-family/c-lex.cc:1093 c/c-decl.cc:12949 #, gcc-internal-format msgid "%<_BitInt(%d)%> is not supported on this target" msgstr "" @@ -38536,7 +38490,7 @@ msgstr "" msgid "traditional C rejects string constant concatenation" msgstr "" -#: c-family/c-omp.cc:131 cp/pt.cc:19579 +#: c-family/c-omp.cc:131 cp/pt.cc:19623 #, gcc-internal-format msgid "" "%<#pragma omp critical%> with %<hint%> clause requires a name, except when " @@ -38596,7 +38550,7 @@ msgstr "" msgid "%<iterator%> modifier may not be specified on %<depobj%> construct" msgstr "" -#: c-family/c-omp.cc:1002 cp/semantics.cc:11597 +#: c-family/c-omp.cc:1002 cp/semantics.cc:11611 #, gcc-internal-format msgid "invalid type for iteration variable %qE" msgstr "" @@ -38611,17 +38565,17 @@ msgstr "" msgid "%qE is not initialized" msgstr "" -#: c-family/c-omp.cc:1044 cp/semantics.cc:11481 +#: c-family/c-omp.cc:1044 cp/semantics.cc:11495 #, gcc-internal-format msgid "missing controlling predicate" msgstr "" -#: c-family/c-omp.cc:1150 cp/semantics.cc:11072 +#: c-family/c-omp.cc:1150 cp/semantics.cc:11086 #, gcc-internal-format msgid "invalid controlling predicate" msgstr "" -#: c-family/c-omp.cc:1157 cp/semantics.cc:11487 +#: c-family/c-omp.cc:1157 cp/semantics.cc:11501 #, gcc-internal-format msgid "missing increment expression" msgstr "" @@ -38631,7 +38585,7 @@ msgstr "" msgid "increment is not constant 1 or -1 for %<!=%> condition" msgstr "" -#: c-family/c-omp.cc:1289 cp/semantics.cc:11189 +#: c-family/c-omp.cc:1289 cp/semantics.cc:11203 #, gcc-internal-format msgid "invalid increment expression" msgstr "" @@ -38737,7 +38691,7 @@ msgid "" "%<for simd%>, %<parallel for%>, %<parallel for simd%>" msgstr "" -#: c-family/c-omp.cc:3072 c/c-typeck.cc:17677 cp/semantics.cc:10162 +#: c-family/c-omp.cc:3072 c/c-typeck.cc:17691 cp/semantics.cc:10176 #, gcc-internal-format msgid "" "%qD specified in %<allocate%> clause but not in an explicit privatization " @@ -38745,12 +38699,12 @@ msgid "" msgstr "" #: c-family/c-omp.cc:3164 c-family/c-omp.cc:3179 c/c-parser.cc:27067 -#: cp/parser.cc:50498 +#: cp/parser.cc:50503 #, gcc-internal-format msgid "%qD is not a function argument" msgstr "" -#: c-family/c-omp.cc:3460 c/c-typeck.cc:16764 cp/semantics.cc:8752 +#: c-family/c-omp.cc:3460 c/c-typeck.cc:16778 cp/semantics.cc:8766 #, gcc-internal-format msgid "bit-field %qE in %qs clause" msgstr "" @@ -38760,8 +38714,8 @@ msgstr "" msgid "%qE does not have a mappable type in %qs clause" msgstr "" -#: c-family/c-omp.cc:3476 c/c-typeck.cc:15164 c/c-typeck.cc:16853 -#: c/c-typeck.cc:17041 +#: c-family/c-omp.cc:3476 c/c-typeck.cc:15178 c/c-typeck.cc:16867 +#: c/c-typeck.cc:17055 #, gcc-internal-format msgid "%<_Atomic%> %qE in %qs clause" msgstr "" @@ -39381,8 +39335,8 @@ msgstr "" msgid "wrong type argument to %s" msgstr "" -#: c-family/c-warn.cc:60 c-family/c-warn.cc:73 cp/constexpr.cc:3693 -#: cp/constexpr.cc:7687 m2/gm2-gcc/m2expr.cc:965 +#: c-family/c-warn.cc:60 c-family/c-warn.cc:73 cp/constexpr.cc:3721 +#: cp/constexpr.cc:7715 m2/gm2-gcc/m2expr.cc:965 #: rust/backend/rust-constexpr.cc:1908 rust/backend/rust-constexpr.cc:4331 #, gcc-internal-format msgid "overflow in constant expression" @@ -39907,19 +39861,19 @@ msgstr "" msgid "function %qD used as %<asm%> output" msgstr "" -#: c-family/c-warn.cc:1914 c/c-typeck.cc:5827 +#: c-family/c-warn.cc:1914 c/c-typeck.cc:5841 #: rust/checks/errors/rust-readonly-check.cc:103 #, gcc-internal-format msgid "assignment of read-only location %qE" msgstr "" -#: c-family/c-warn.cc:1915 c/c-typeck.cc:5830 +#: c-family/c-warn.cc:1915 c/c-typeck.cc:5844 #: rust/checks/errors/rust-readonly-check.cc:104 #, gcc-internal-format msgid "increment of read-only location %qE" msgstr "" -#: c-family/c-warn.cc:1916 c/c-typeck.cc:5833 +#: c-family/c-warn.cc:1916 c/c-typeck.cc:5847 #: rust/checks/errors/rust-readonly-check.cc:105 #, gcc-internal-format msgid "decrement of read-only location %qE" @@ -40205,7 +40159,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:2934 c/c-typeck.cc:6451 cp/call.cc:6527 +#: c-family/c-warn.cc:2934 c/c-typeck.cc:6465 cp/call.cc:6527 #, gcc-internal-format msgid "this condition has identical branches" msgstr "" @@ -41238,12 +41192,12 @@ msgstr "" msgid "expected 64-bit address but argument 2 is %d-bit" msgstr "" -#: config/aarch64/aarch64-c.cc:374 +#: config/aarch64/aarch64-c.cc:375 #, gcc-internal-format msgid "%<#pragma GCC aarch64%> requires a string parameter" msgstr "" -#: config/aarch64/aarch64-c.cc:390 +#: config/aarch64/aarch64-c.cc:391 #, gcc-internal-format msgid "unknown %<#pragma GCC aarch64%> option %qs" msgstr "" @@ -41628,7 +41582,7 @@ msgstr "" #: config/aarch64/aarch64-sve-builtins.cc:4830 #: config/arm/arm-mve-builtins.cc:522 config/arm/arm-mve-builtins.cc:547 -#: config/riscv/riscv-vector-builtins.cc:4836 +#: config/riscv/riscv-vector-builtins.cc:4868 #, gcc-internal-format msgid "duplicate definition of %qs" msgstr "" @@ -41663,62 +41617,88 @@ msgstr "" msgid "unsupported SVE vector size" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5185 +#: config/aarch64/aarch64-sve-builtins.cc:5189 #, gcc-internal-format msgid "SVE type %qT does not have a fixed size" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5190 +#: config/aarch64/aarch64-sve-builtins.cc:5194 #, gcc-internal-format msgid "SVE type %qT does not have a defined alignment" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5195 -#: config/riscv/riscv-vector-builtins.cc:4748 +#: config/aarch64/aarch64-sve-builtins.cc:5199 +#: config/riscv/riscv-vector-builtins.cc:4752 #, gcc-internal-format msgid "variables of type %qT cannot have thread-local storage duration" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5201 +#: config/aarch64/aarch64-sve-builtins.cc:5205 #, gcc-internal-format msgid "arithmetic on pointer to SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5208 +#: config/aarch64/aarch64-sve-builtins.cc:5212 #, gcc-internal-format msgid "member variables cannot have SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5210 +#: config/aarch64/aarch64-sve-builtins.cc:5214 #, gcc-internal-format msgid "fields cannot have SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5215 +#: config/aarch64/aarch64-sve-builtins.cc:5219 #, gcc-internal-format msgid "array elements cannot have SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5220 +#: config/aarch64/aarch64-sve-builtins.cc:5224 #, gcc-internal-format msgid "cannot allocate objects with SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5225 +#: config/aarch64/aarch64-sve-builtins.cc:5229 #, gcc-internal-format msgid "cannot delete objects with SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5230 +#: config/aarch64/aarch64-sve-builtins.cc:5234 #, gcc-internal-format msgid "cannot throw or catch SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5235 +#: config/aarch64/aarch64-sve-builtins.cc:5239 #, gcc-internal-format msgid "capture by copy of SVE type %qT" msgstr "" +#: config/aarch64/aarch64-sve-builtins.cc:5244 +#, gcc-internal-format +msgid "SVE type %qT not allowed in %<map%> clause" +msgstr "" + +#: config/aarch64/aarch64-sve-builtins.cc:5249 +#: config/riscv/riscv-vector-builtins.cc:4811 +#, gcc-internal-format +msgid "cannot reference %qT object types in %<target%> region" +msgstr "" + +#: config/aarch64/aarch64-sve-builtins.cc:5254 +#, gcc-internal-format +msgid "SVE type %qT not allowed in %<target%> %<private%> clause" +msgstr "" + +#: config/aarch64/aarch64-sve-builtins.cc:5260 +#, gcc-internal-format +msgid "SVE type %qT not allowed in %<target%> %<firstprivate%> clause" +msgstr "" + +#: config/aarch64/aarch64-sve-builtins.cc:5266 +#, gcc-internal-format +msgid "SVE type %qT not allowed in %<target%> device clauses" +msgstr "" + #: config/aarch64/aarch64.cc:649 #, gcc-internal-format msgid "the arguments to %qE must be constant strings" @@ -42067,8 +42047,8 @@ msgstr "" #: config/aarch64/aarch64.cc:19834 config/arm/arm.cc:33836 #: config/loongarch/loongarch-target-attr.cc:297 -#: config/riscv/riscv-target-attr.cc:431 config/rs6000/rs6000.cc:24714 -#: config/s390/s390.cc:16638 +#: config/riscv/riscv-target-attr.cc:427 config/rs6000/rs6000.cc:24714 +#: config/s390/s390.cc:16661 #, gcc-internal-format msgid "attribute %<target%> argument not a string" msgstr "" @@ -42096,12 +42076,12 @@ msgid "" "likely to change" msgstr "" -#: config/aarch64/aarch64.cc:20110 config/riscv/riscv-target-attr.cc:497 +#: config/aarch64/aarch64.cc:20110 config/riscv/riscv-target-attr.cc:493 #, gcc-internal-format msgid "attribute %<target_version%> has multiple values" msgstr "" -#: config/aarch64/aarch64.cc:20118 config/riscv/riscv-target-attr.cc:505 +#: config/aarch64/aarch64.cc:20118 config/riscv/riscv-target-attr.cc:501 #, gcc-internal-format msgid "attribute %<target_version%> argument not a string" msgstr "" @@ -42124,13 +42104,13 @@ msgid "" msgstr "" #: config/aarch64/aarch64.cc:20736 config/i386/i386-features.cc:3911 -#: config/i386/i386-features.cc:4180 config/riscv/riscv.cc:13694 +#: config/i386/i386-features.cc:4180 config/riscv/riscv.cc:13691 #, gcc-internal-format msgid "virtual function multiversioning not supported" msgstr "" #: config/aarch64/aarch64.cc:20857 config/i386/i386-features.cc:4044 -#: config/riscv/riscv.cc:13819 config/rs6000/rs6000.cc:25404 +#: config/riscv/riscv.cc:13816 config/rs6000/rs6000.cc:25404 #, gcc-internal-format msgid "multiversioning needs %<ifunc%> which is not supported on this target" msgstr "" @@ -42158,8 +42138,8 @@ msgstr "" msgid "lane %wd out of range %wd - %wd" msgstr "" -#: config/aarch64/aarch64.cc:29341 config/i386/i386.cc:25607 -#: config/i386/i386.cc:25738 +#: config/aarch64/aarch64.cc:29341 config/i386/i386.cc:25767 +#: config/i386/i386.cc:25898 #, gcc-internal-format msgid "unsupported simdlen %wd" msgstr "" @@ -42169,7 +42149,7 @@ msgstr "" msgid "GCC does not currently support return type %qT for simd" msgstr "" -#: config/aarch64/aarch64.cc:29359 config/i386/i386.cc:25629 +#: config/aarch64/aarch64.cc:29359 config/i386/i386.cc:25789 #, gcc-internal-format msgid "unsupported return type %qT for simd" msgstr "" @@ -42179,7 +42159,7 @@ msgstr "" msgid "GCC does not currently support argument type %qT for simd" msgstr "" -#: config/aarch64/aarch64.cc:29397 config/i386/i386.cc:25660 +#: config/aarch64/aarch64.cc:29397 config/i386/i386.cc:25820 #, gcc-internal-format msgid "unsupported argument type %qT for simd" msgstr "" @@ -42216,18 +42196,18 @@ msgstr "" msgid "catching non-call exceptions in functions with SME state" msgstr "" -#: config/aarch64/aarch64.cc:31111 config/arm/arm-mve-builtins.cc:634 +#: config/aarch64/aarch64.cc:31107 config/arm/arm-mve-builtins.cc:634 #: config/riscv/riscv-vector-builtins.cc:4493 #, gcc-internal-format msgid "argument %d of %qE must be an integer constant expression" msgstr "" -#: config/aarch64/aarch64.cc:31124 +#: config/aarch64/aarch64.cc:31120 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects the value %wd" msgstr "" -#: config/aarch64/aarch64.cc:31127 config/arm/arm-mve-builtins.cc:646 +#: config/aarch64/aarch64.cc:31123 config/arm/arm-mve-builtins.cc:646 #: config/riscv/riscv-vector-builtins.cc:4507 #, gcc-internal-format msgid "" @@ -42235,17 +42215,17 @@ msgid "" "%wd]" msgstr "" -#: config/aarch64/aarch64.cc:31140 +#: config/aarch64/aarch64.cc:31136 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects either %wd or %wd" msgstr "" -#: config/aarch64/aarch64.cc:31154 config/arm/arm-mve-builtins.cc:685 +#: config/aarch64/aarch64.cc:31150 config/arm/arm-mve-builtins.cc:685 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects %wd, %wd, %wd or %wd" msgstr "" -#: config/aarch64/aarch64.cc:31166 config/arm/arm-mve-builtins.cc:672 +#: config/aarch64/aarch64.cc:31162 config/arm/arm-mve-builtins.cc:672 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects a valid %qT value" msgstr "" @@ -42305,7 +42285,7 @@ msgstr "" msgid "bad value %qs for %<-mmemory-latency%>" msgstr "" -#: config/alpha/alpha.cc:7360 config/alpha/alpha.cc:7363 config/arc/arc.cc:6981 +#: config/alpha/alpha.cc:7357 config/alpha/alpha.cc:7360 config/arc/arc.cc:6981 #: config/arc/arc.cc:7255 config/s390/s390.cc:942 #, gcc-internal-format msgid "bad builtin fcode" @@ -42436,7 +42416,7 @@ msgstr "" #: config/i386/i386-options.cc:3906 config/i386/i386-options.cc:3962 #: config/i386/i386-options.cc:4013 config/i386/i386-options.cc:4050 #: config/m68k/m68k.cc:804 config/mcore/mcore.cc:3070 -#: config/nvptx/nvptx.cc:5877 config/riscv/riscv.cc:6533 +#: config/nvptx/nvptx.cc:5895 config/riscv/riscv.cc:6533 #: config/rl78/rl78.cc:821 config/rl78/rl78.cc:890 #: config/rs6000/rs6000.cc:20642 config/rx/rx.cc:2727 config/rx/rx.cc:2753 #: config/s390/s390.cc:1157 config/s390/s390.cc:1247 config/sh/sh.cc:8442 @@ -42576,22 +42556,22 @@ msgid "argument of %qE attribute ignored" msgstr "" #: config/arc/arc.cc:11004 config/avr/avr.cc:11384 config/bfin/bfin.cc:4818 -#: config/mingw/winnt.cc:63 config/nvptx/nvptx.cc:5900 +#: config/mingw/winnt.cc:63 config/nvptx/nvptx.cc:5918 #, gcc-internal-format msgid "%qE attribute only applies to variables" msgstr "" -#: config/arm/aarch-common.cc:553 config/i386/i386.cc:24274 +#: config/arm/aarch-common.cc:553 config/i386/i386.cc:24309 #, gcc-internal-format msgid "alternatives not allowed in %<asm%> flag output" msgstr "" -#: config/arm/aarch-common.cc:614 config/i386/i386.cc:24338 +#: config/arm/aarch-common.cc:614 config/i386/i386.cc:24373 #, gcc-internal-format msgid "unknown %<asm%> flag output %qs" msgstr "" -#: config/arm/aarch-common.cc:624 config/i386/i386.cc:24367 +#: config/arm/aarch-common.cc:624 config/i386/i386.cc:24402 #, gcc-internal-format msgid "invalid type for %<asm%> flag output" msgstr "" @@ -43900,7 +43880,7 @@ msgstr "" msgid "using %<vector_length (64)%>, ignoring runtime setting" msgstr "" -#: config/gcn/gcn.cc:6351 config/nvptx/nvptx.cc:6730 +#: config/gcn/gcn.cc:6351 config/nvptx/nvptx.cc:6748 #, gcc-internal-format msgid "using %<num_workers (%d)%>, ignoring %d" msgstr "" @@ -43980,22 +43960,22 @@ msgstr "" msgid "unhandled architecture" msgstr "" -#: config/gcn/mkoffload.cc:1186 config/gcn/mkoffload.cc:1338 +#: config/gcn/mkoffload.cc:1189 config/gcn/mkoffload.cc:1341 #, gcc-internal-format msgid "cannot open %qs" msgstr "" -#: config/gcn/mkoffload.cc:1324 config/nvptx/mkoffload.cc:847 +#: config/gcn/mkoffload.cc:1327 config/nvptx/mkoffload.cc:850 #, gcc-internal-format msgid "cannot open omp_requires file %qs" msgstr "" -#: config/gcn/mkoffload.cc:1328 config/nvptx/mkoffload.cc:851 +#: config/gcn/mkoffload.cc:1331 config/nvptx/mkoffload.cc:854 #, gcc-internal-format msgid "cannot read omp_requires file %qs" msgstr "" -#: config/gcn/mkoffload.cc:1334 +#: config/gcn/mkoffload.cc:1337 #, gcc-internal-format msgid "cannot open intermediate gcn asm file" msgstr "" @@ -44068,170 +44048,170 @@ msgstr "" msgid "parameter to builtin not valid: %s" msgstr "" -#: config/i386/i386-expand.cc:10110 +#: config/i386/i386-expand.cc:10116 #, gcc-internal-format msgid "interrupt service routine cannot be called directly" msgstr "" -#: config/i386/i386-expand.cc:10583 config/i386/i386-expand.cc:12249 +#: config/i386/i386-expand.cc:10589 config/i386/i386-expand.cc:12255 #, gcc-internal-format msgid "the last argument must be a 2-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11083 +#: config/i386/i386-expand.cc:11089 #, gcc-internal-format msgid "the fifth argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11178 +#: config/i386/i386-expand.cc:11184 #, gcc-internal-format msgid "the third argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12178 +#: config/i386/i386-expand.cc:12184 #, gcc-internal-format msgid "the last argument must be an 1-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12193 +#: config/i386/i386-expand.cc:12199 #, gcc-internal-format msgid "the last argument must be a 3-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12228 +#: config/i386/i386-expand.cc:12234 #, gcc-internal-format msgid "the last argument must be a 4-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12268 +#: config/i386/i386-expand.cc:12274 #, gcc-internal-format msgid "the last argument must be a 1-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12277 +#: config/i386/i386-expand.cc:12283 #, gcc-internal-format, gfc-internal-format msgid "'%s' needs isa option %s" msgstr "" -#: config/i386/i386-expand.cc:12290 +#: config/i386/i386-expand.cc:12296 #, gcc-internal-format msgid "the last argument must be a 5-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12300 +#: config/i386/i386-expand.cc:12306 #, gcc-internal-format msgid "the next to last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12305 +#: config/i386/i386-expand.cc:12311 #, gcc-internal-format msgid "the last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12444 +#: config/i386/i386-expand.cc:12450 #, gcc-internal-format msgid "the third argument must be comparison constant" msgstr "" -#: config/i386/i386-expand.cc:12449 +#: config/i386/i386-expand.cc:12455 #, gcc-internal-format msgid "incorrect comparison mode" msgstr "" -#: config/i386/i386-expand.cc:12455 config/i386/i386-expand.cc:12878 +#: config/i386/i386-expand.cc:12461 config/i386/i386-expand.cc:12884 #, gcc-internal-format msgid "incorrect rounding operand" msgstr "" -#: config/i386/i386-expand.cc:12858 +#: config/i386/i386-expand.cc:12864 #, gcc-internal-format msgid "the immediate argument must be a 4-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12866 +#: config/i386/i386-expand.cc:12872 #, gcc-internal-format msgid "the immediate argument must be a 5-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12869 +#: config/i386/i386-expand.cc:12875 #, gcc-internal-format msgid "the immediate argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:13349 +#: config/i386/i386-expand.cc:13355 #, gcc-internal-format msgid "the fourth argument must be one of enum %qs" msgstr "" -#: config/i386/i386-expand.cc:13419 +#: config/i386/i386-expand.cc:13425 #, gcc-internal-format msgid "selector must be an integer constant in the range [0, %wi]" msgstr "" -#: config/i386/i386-expand.cc:13676 +#: config/i386/i386-expand.cc:13682 #, gcc-internal-format msgid "%qE needs unknown isa option" msgstr "" -#: config/i386/i386-expand.cc:13680 +#: config/i386/i386-expand.cc:13686 #, gcc-internal-format msgid "%qE needs isa option %s" msgstr "" -#: config/i386/i386-expand.cc:14180 +#: config/i386/i386-expand.cc:14186 #, gcc-internal-format msgid "second, third and fourth argument must be a const" msgstr "" -#: config/i386/i386-expand.cc:14186 +#: config/i386/i386-expand.cc:14192 #, gcc-internal-format msgid "invalid second argument to %<__builtin_ia32_prefetch%>; using zero" msgstr "" -#: config/i386/i386-expand.cc:14195 +#: config/i386/i386-expand.cc:14201 #, gcc-internal-format msgid "invalid third argument" msgstr "" #. Ignore the hint. -#: config/i386/i386-expand.cc:14204 config/i386/i386-expand.cc:14265 +#: config/i386/i386-expand.cc:14210 config/i386/i386-expand.cc:14271 #, gcc-internal-format msgid "" "instruction prefetch applies when in 64-bit mode with RIP-relative " "addressing and option %<-mprefetchi%>; they stay NOPs otherwise" msgstr "" -#: config/i386/i386-expand.cc:14214 +#: config/i386/i386-expand.cc:14220 #, gcc-internal-format msgid "invalid forth argument to %<__builtin_ia32_prefetch%>; using zero" msgstr "" -#: config/i386/i386-expand.cc:14225 +#: config/i386/i386-expand.cc:14231 #, gcc-internal-format msgid "invalid third argument to %<__builtin_ia32_prefetch%>; using zero" msgstr "" -#: config/i386/i386-expand.cc:14253 +#: config/i386/i386-expand.cc:14259 #, gcc-internal-format msgid "second argument must be a const" msgstr "" -#: config/i386/i386-expand.cc:14799 +#: config/i386/i386-expand.cc:14805 #, gcc-internal-format msgid "the last argument must be a 32-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:14832 +#: config/i386/i386-expand.cc:14838 #, gcc-internal-format msgid "last argument must be an immediate" msgstr "" -#: config/i386/i386-expand.cc:15570 config/i386/i386-expand.cc:15782 +#: config/i386/i386-expand.cc:15576 config/i386/i386-expand.cc:15788 #, gcc-internal-format msgid "the last argument must be scale 1, 2, 4, 8" msgstr "" -#: config/i386/i386-expand.cc:15800 +#: config/i386/i386-expand.cc:15806 #, gcc-internal-format msgid "the argument to %<xabort%> intrinsic must be an 8-bit immediate" msgstr "" @@ -44591,7 +44571,7 @@ msgstr "" #: config/i386/i386-options.cc:2832 #, gcc-internal-format -msgid "%<-mnop-mcount%> is not implemented for %<-fPIC%>" +msgid "%<-mnop-mcount%> is not implemented for %<-fno-plt%>" msgstr "" #: config/i386/i386-options.cc:2838 @@ -44846,145 +44826,145 @@ msgstr "" msgid "interrupt service routine must return %<void%>" msgstr "" -#: config/i386/i386.cc:1309 +#: config/i386/i386.cc:1316 #, gcc-internal-format msgid "calling %qD with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.cc:1312 +#: config/i386/i386.cc:1319 #, gcc-internal-format msgid "calling %qT with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.cc:1616 +#: config/i386/i386.cc:1623 #, gcc-internal-format msgid "X32 does not support %<ms_abi%> attribute" msgstr "" -#: config/i386/i386.cc:1650 +#: config/i386/i386.cc:1657 #, gcc-internal-format msgid "%<ms_hook_prologue%> attribute is not compatible with nested function" msgstr "" -#: config/i386/i386.cc:2002 +#: config/i386/i386.cc:2009 #, gcc-internal-format msgid "AVX512F vector argument without AVX512F enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2008 +#: config/i386/i386.cc:2015 #, gcc-internal-format msgid "AVX512F vector return without AVX512F enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2022 +#: config/i386/i386.cc:2029 #, gcc-internal-format msgid "AVX vector argument without AVX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2028 +#: config/i386/i386.cc:2035 #, gcc-internal-format msgid "AVX vector return without AVX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2044 +#: config/i386/i386.cc:2051 #, gcc-internal-format msgid "SSE vector argument without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2050 +#: config/i386/i386.cc:2057 #, gcc-internal-format msgid "SSE vector return without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2066 +#: config/i386/i386.cc:2073 #, gcc-internal-format msgid "MMX vector argument without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2072 +#: config/i386/i386.cc:2079 #, gcc-internal-format msgid "MMX vector return without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2271 +#: config/i386/i386.cc:2278 #, gcc-internal-format msgid "" "the ABI of passing struct with a flexible array member has changed in GCC 4.4" msgstr "" -#: config/i386/i386.cc:2400 +#: config/i386/i386.cc:2407 #, gcc-internal-format msgid "the ABI of passing union with %<long double%> has changed in GCC 4.4" msgstr "" -#: config/i386/i386.cc:2535 +#: config/i386/i386.cc:2542 #, gcc-internal-format msgid "" "the ABI of passing structure with %<complex float%> member has changed in " "GCC 4.4" msgstr "" -#: config/i386/i386.cc:2656 +#: config/i386/i386.cc:2663 msgid "" "the ABI of passing C structures with zero-width bit-fields has changed in " "GCC %{12.1%}" msgstr "" -#: config/i386/i386.cc:2753 config/i386/i386.cc:4122 config/i386/i386.cc:4132 +#: config/i386/i386.cc:2760 config/i386/i386.cc:4129 config/i386/i386.cc:4139 #, gcc-internal-format msgid "SSE register return with SSE2 disabled" msgstr "" -#: config/i386/i386.cc:2755 +#: config/i386/i386.cc:2762 #, gcc-internal-format msgid "SSE register return with SSE disabled" msgstr "" -#: config/i386/i386.cc:2762 +#: config/i386/i386.cc:2769 #, gcc-internal-format msgid "SSE register argument with SSE2 disabled" msgstr "" -#: config/i386/i386.cc:2764 +#: config/i386/i386.cc:2771 #, gcc-internal-format msgid "SSE register argument with SSE disabled" msgstr "" -#: config/i386/i386.cc:2784 +#: config/i386/i386.cc:2791 #, gcc-internal-format msgid "x87 register return with x87 disabled" msgstr "" -#: config/i386/i386.cc:3112 config/i386/i386.cc:3357 config/i386/i386.cc:4150 +#: config/i386/i386.cc:3119 config/i386/i386.cc:3364 config/i386/i386.cc:4157 #, gcc-internal-format msgid "calling %qD with SSE calling convention without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.cc:3114 config/i386/i386.cc:3359 config/i386/i386.cc:4152 +#: config/i386/i386.cc:3121 config/i386/i386.cc:3366 config/i386/i386.cc:4159 #, gcc-internal-format msgid "" "this is a GCC bug that can be worked around by adding attribute used to " "function called" msgstr "" -#: config/i386/i386.cc:3762 +#: config/i386/i386.cc:3769 #, gcc-internal-format, gfc-internal-format msgid "" "the ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" msgstr "" -#: config/i386/i386.cc:6834 +#: config/i386/i386.cc:6841 #, gcc-internal-format msgid "%<-mcall-ms2sysv-xlogues%> is not compatible with %s" msgstr "" -#: config/i386/i386.cc:8854 +#: config/i386/i386.cc:8861 #, gcc-internal-format msgid "" "%<ms_hook_prologue%> attribute is not compatible with %<-mfentry%> for 32-bit" msgstr "" -#: config/i386/i386.cc:8944 +#: config/i386/i386.cc:8951 #, gcc-internal-format msgid "" "Dynamic Realign Argument Pointer (DRAP) not supported in interrupt service " @@ -44992,22 +44972,22 @@ msgid "" "return." msgstr "" -#: config/i386/i386.cc:10001 +#: config/i386/i386.cc:10008 #, gcc-internal-format msgid "Stack realignment not supported with %<__builtin_eh_return%>" msgstr "" -#: config/i386/i386.cc:10006 +#: config/i386/i386.cc:10013 #, gcc-internal-format msgid "regparm nested function not supported with %<__builtin_eh_return%>" msgstr "" -#: config/i386/i386.cc:10397 +#: config/i386/i386.cc:10404 #, gcc-internal-format msgid "%<-fsplit-stack%> does not support fastcall with nested function" msgstr "" -#: config/i386/i386.cc:10417 +#: config/i386/i386.cc:10424 #, gcc-internal-format msgid "" "%<-fsplit-stack%> does not support 2 register parameters for a nested " @@ -45016,57 +44996,57 @@ msgstr "" #. FIXME: We could make this work by pushing a register #. around the addition and comparison. -#: config/i386/i386.cc:10428 +#: config/i386/i386.cc:10435 #, gcc-internal-format msgid "%<-fsplit-stack%> does not support 3 register parameters" msgstr "" -#: config/i386/i386.cc:13431 +#: config/i386/i386.cc:13438 #, gcc-internal-format msgid "%<V%> modifier on non-integer register" msgstr "" -#: config/i386/i386.cc:13442 config/i386/i386.cc:13456 +#: config/i386/i386.cc:13449 config/i386/i386.cc:13463 #, gcc-internal-format msgid "unsupported size for integer register" msgstr "" -#: config/i386/i386.cc:13488 +#: config/i386/i386.cc:13495 #, gcc-internal-format msgid "extended registers have no high halves" msgstr "" -#: config/i386/i386.cc:13503 +#: config/i386/i386.cc:13510 #, gcc-internal-format msgid "unsupported operand size for extended register" msgstr "" -#: config/i386/i386.cc:13701 config/i386/i386.cc:13703 +#: config/i386/i386.cc:13708 config/i386/i386.cc:13710 #, gcc-internal-format msgid "non-integer operand used with operand code %<z%>" msgstr "" -#: config/i386/i386.cc:17911 +#: config/i386/i386.cc:17918 #, gcc-internal-format msgid "" "empty class %qT parameter passing ABI changes in %<-fabi-version=12%> (GCC 8)" msgstr "" -#: config/i386/i386.cc:23142 +#: config/i386/i386.cc:23169 msgid "the alignment of %<_Atomic %T%> fields changed in %{GCC 11.1%}" msgstr "" -#: config/i386/i386.cc:23223 +#: config/i386/i386.cc:23256 #, gcc-internal-format msgid "no register available for profiling %<-mcmodel=large%s%>" msgstr "" -#: config/i386/i386.cc:23319 +#: config/i386/i386.cc:23352 #, gcc-internal-format msgid "profiling %<-mcmodel=large%> with PIC is not supported" msgstr "" -#: config/i386/i386.cc:24032 +#: config/i386/i386.cc:24067 #, gcc-internal-format msgid "" "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since " @@ -45074,22 +45054,22 @@ msgid "" "%<short%>; an explicit bitcast may be needed here" msgstr "" -#: config/i386/i386.cc:25566 +#: config/i386/i386.cc:25726 #, gcc-internal-format msgid "unknown architecture specific memory model" msgstr "" -#: config/i386/i386.cc:25573 +#: config/i386/i386.cc:25733 #, gcc-internal-format msgid "%<HLE_ACQUIRE%> not used with %<ACQUIRE%> or stronger memory model" msgstr "" -#: config/i386/i386.cc:25580 +#: config/i386/i386.cc:25740 #, gcc-internal-format msgid "%<HLE_RELEASE%> not used with %<RELEASE%> or stronger memory model" msgstr "" -#: config/i386/i386.cc:26267 +#: config/i386/i386.cc:26427 #, gcc-internal-format msgid "%<-fexcess-precision=16%> is not compatible with %<-mfpmath=387%>" msgstr "" @@ -45302,8 +45282,8 @@ msgstr "" msgid "%qs cannot be used for compiling a shared library" msgstr "" -#: config/loongarch/loongarch-target-attr.cc:246 config/s390/s390.cc:16704 -#: config/s390/s390.cc:16754 config/s390/s390.cc:16771 +#: config/loongarch/loongarch-target-attr.cc:246 config/s390/s390.cc:16727 +#: config/s390/s390.cc:16777 config/s390/s390.cc:16794 #, gcc-internal-format msgid "attribute %<target%> argument %qs is unknown" msgstr "" @@ -45424,7 +45404,7 @@ msgstr "" msgid "stack limit expression is not supported" msgstr "" -#: config/m68k/m68k.cc:7175 config/s390/s390.cc:17394 +#: config/m68k/m68k.cc:7175 config/s390/s390.cc:17417 #, gcc-internal-format msgid "%<-fexcess-precision=16%> is not supported on this target" msgstr "" @@ -45598,7 +45578,8 @@ msgstr "" #: config/mips/mips.cc:20427 config/mips/mips.cc:20432 #: config/mips/mips.cc:20522 config/mips/mips.cc:20524 #: config/mips/mips.cc:20554 config/mips/mips.cc:20562 -#: config/mips/mips.cc:20668 config/mips/mips.cc:20692 +#: config/mips/mips.cc:20668 config/mips/mips.cc:20682 +#: config/mips/mips.cc:20695 #, gcc-internal-format, gfc-internal-format msgid "unsupported combination: %s" msgstr "" @@ -45687,92 +45668,92 @@ msgstr "" msgid "unsupported combination: %qs%s %s" msgstr "" -#: config/mips/mips.cc:20685 +#: config/mips/mips.cc:20688 #, gcc-internal-format msgid "unsupported combination: %qs %s" msgstr "" -#: config/mips/mips.cc:20700 +#: config/mips/mips.cc:20703 #, gcc-internal-format msgid "cannot generate position-independent code for %qs" msgstr "" -#: config/mips/mips.cc:20703 +#: config/mips/mips.cc:20706 #, gcc-internal-format msgid "position-independent code requires %qs" msgstr "" -#: config/mips/mips.cc:20736 +#: config/mips/mips.cc:20739 #, gcc-internal-format msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" msgstr "" -#: config/mips/mips.cc:20744 config/mips/mips.cc:20747 +#: config/mips/mips.cc:20747 config/mips/mips.cc:20750 #, gcc-internal-format msgid "cannot use small-data accesses for %qs" msgstr "" -#: config/mips/mips.cc:20764 +#: config/mips/mips.cc:20767 #, gcc-internal-format msgid "the %qs architecture does not support %<-m%s=legacy%>" msgstr "" -#: config/mips/mips.cc:20771 +#: config/mips/mips.cc:20774 #, gcc-internal-format msgid "the %qs architecture does not support %<-m%s=2008%>" msgstr "" -#: config/mips/mips.cc:20789 +#: config/mips/mips.cc:20792 #, gcc-internal-format msgid "%<-mips3d%> requires %<-mpaired-single%>" msgstr "" -#: config/mips/mips.cc:20799 +#: config/mips/mips.cc:20802 #, gcc-internal-format msgid "%qs must be used with %qs" msgstr "" -#: config/mips/mips.cc:20809 +#: config/mips/mips.cc:20812 #, gcc-internal-format msgid "%<-mmsa%> must be used with %<-mfp64%> and %<-mhard-float%>" msgstr "" -#: config/mips/mips.cc:20816 +#: config/mips/mips.cc:20819 #, gcc-internal-format msgid "the %qs architecture does not support paired-single instructions" msgstr "" -#: config/mips/mips.cc:20825 +#: config/mips/mips.cc:20828 #, gcc-internal-format msgid "%qs requires a target that provides the %qs instruction" msgstr "" -#: config/mips/mips.cc:20836 +#: config/mips/mips.cc:20839 #, gcc-internal-format msgid "the %qs architecture does not support DSP instructions" msgstr "" -#: config/mips/mips.cc:20846 +#: config/mips/mips.cc:20849 #, gcc-internal-format msgid "%<-mloongson-mmi%> must be used with %<-mhard-float%>" msgstr "" -#: config/mips/mips.cc:20856 +#: config/mips/mips.cc:20859 #, gcc-internal-format msgid "%<-mloongson-ext2%> must be used with %<-mloongson-ext%>" msgstr "" -#: config/mips/mips.cc:20951 +#: config/mips/mips.cc:20954 #, gcc-internal-format msgid "%qs requires branch-likely instructions" msgstr "" -#: config/mips/mips.cc:20955 +#: config/mips/mips.cc:20958 #, gcc-internal-format msgid "the %qs architecture does not support the synci instruction" msgstr "" -#: config/mips/mips.cc:21791 +#: config/mips/mips.cc:21794 #, gcc-internal-format msgid "mips16 function profiling" msgstr "" @@ -46311,12 +46292,12 @@ msgstr "" msgid "unrecognizable argument of option " msgstr "" -#: config/nvptx/mkoffload.cc:801 +#: config/nvptx/mkoffload.cc:804 #, gcc-internal-format, gfc-internal-format msgid "cannot open '%s'" msgstr "" -#: config/nvptx/mkoffload.cc:857 +#: config/nvptx/mkoffload.cc:860 #, gcc-internal-format msgid "cannot open intermediate ptx file" msgstr "" @@ -46349,64 +46330,64 @@ msgid "" "static initialization of variable %q+D in %<.shared%> memory is not supported" msgstr "" -#: config/nvptx/nvptx.cc:2391 +#: config/nvptx/nvptx.cc:2409 #, gcc-internal-format msgid "cannot emit unaligned pointers in ptx assembly" msgstr "" -#: config/nvptx/nvptx.cc:2641 +#: config/nvptx/nvptx.cc:2659 #, gcc-internal-format msgid "PTX does not support weak declarations (only weak definitions)" msgstr "" -#: config/nvptx/nvptx.cc:5882 +#: config/nvptx/nvptx.cc:5900 #, gcc-internal-format msgid "%qE attribute requires a void return type" msgstr "" -#: config/nvptx/nvptx.cc:5905 +#: config/nvptx/nvptx.cc:5923 #, gcc-internal-format msgid "%qE attribute not allowed with auto storage class" msgstr "" -#: config/nvptx/nvptx.cc:6350 +#: config/nvptx/nvptx.cc:6368 #, gcc-internal-format msgid "barrier value must be within [0,15]" msgstr "" -#: config/nvptx/nvptx.cc:6363 +#: config/nvptx/nvptx.cc:6381 #, gcc-internal-format msgid "complement argument must be constant" msgstr "" -#: config/nvptx/nvptx.cc:6703 +#: config/nvptx/nvptx.cc:6721 #, gcc-internal-format msgid "" "using %<vector_length (%d)%> due to call to vector-partitionable routine, " "ignoring %d" msgstr "" -#: config/nvptx/nvptx.cc:6711 +#: config/nvptx/nvptx.cc:6729 #, gcc-internal-format msgid "using %<vector_length (%d)%>, ignoring runtime setting" msgstr "" -#: config/nvptx/nvptx.cc:6725 +#: config/nvptx/nvptx.cc:6743 #, gcc-internal-format msgid "using %<vector_length (%d)%>, ignoring %d" msgstr "" -#: config/nvptx/nvptx.cc:7611 +#: config/nvptx/nvptx.cc:7629 #, gcc-internal-format msgid "variable %qD adjusted for OpenACC privatization level: %qs" msgstr "" -#: config/nvptx/nvptx.cc:7750 +#: config/nvptx/nvptx.cc:7768 #, gcc-internal-format msgid "weak alias definitions not supported in this configuration" msgstr "" -#: config/nvptx/nvptx.cc:7763 +#: config/nvptx/nvptx.cc:7781 #, gcc-internal-format msgid "non-function alias definitions not supported in this configuration" msgstr "" @@ -46595,22 +46576,22 @@ msgstr "" msgid "%<target()%> attribute: invalid priority %qs" msgstr "" -#: config/riscv/riscv-target-attr.cc:297 +#: config/riscv/riscv-target-attr.cc:293 #, gcc-internal-format msgid "malformed %<target()%> attribute" msgstr "" -#: config/riscv/riscv-target-attr.cc:311 +#: config/riscv/riscv-target-attr.cc:307 #, gcc-internal-format msgid "attribute %<target(\"%s\")%> does not accept an argument" msgstr "" -#: config/riscv/riscv-target-attr.cc:331 +#: config/riscv/riscv-target-attr.cc:327 #, gcc-internal-format msgid "Got unknown attribute %<target(\"%s\")%>" msgstr "" -#: config/riscv/riscv-target-attr.cc:394 +#: config/riscv/riscv-target-attr.cc:390 #, gcc-internal-format msgid "malformed %<target(\"%s\")%> attribute" msgstr "" @@ -46632,89 +46613,109 @@ msgid "" "%wd] or %wd" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4735 +#: config/riscv/riscv-vector-builtins.cc:4739 #, gcc-internal-format msgid "RVV type %qT does not have a fixed size" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4741 +#: config/riscv/riscv-vector-builtins.cc:4745 #, gcc-internal-format msgid "RVV type %qT does not have a defined alignment" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4756 +#: config/riscv/riscv-vector-builtins.cc:4760 #, gcc-internal-format msgid "arithmetic on pointer to RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4764 +#: config/riscv/riscv-vector-builtins.cc:4768 #, gcc-internal-format msgid "member variables cannot have RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4766 +#: config/riscv/riscv-vector-builtins.cc:4770 #, gcc-internal-format msgid "fields cannot have RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4772 +#: config/riscv/riscv-vector-builtins.cc:4776 #, gcc-internal-format msgid "array elements cannot have RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4778 +#: config/riscv/riscv-vector-builtins.cc:4782 #, gcc-internal-format msgid "cannot allocate objects with RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4784 +#: config/riscv/riscv-vector-builtins.cc:4788 #, gcc-internal-format msgid "cannot delete objects with RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4790 +#: config/riscv/riscv-vector-builtins.cc:4794 #, gcc-internal-format msgid "cannot throw or catch RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4796 +#: config/riscv/riscv-vector-builtins.cc:4800 #, gcc-internal-format msgid "capture by copy of RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4890 +#: config/riscv/riscv-vector-builtins.cc:4806 +#, gcc-internal-format +msgid "RVV type %qT not allowed in %<map%> clause" +msgstr "" + +#: config/riscv/riscv-vector-builtins.cc:4816 +#, gcc-internal-format +msgid "RVV type %qT not allowed in %<target%> %<private%> clause" +msgstr "" + +#: config/riscv/riscv-vector-builtins.cc:4822 +#, gcc-internal-format +msgid "RVV type %qT not allowed in %<target%> %<firstprivate%> clause" +msgstr "" + +#: config/riscv/riscv-vector-builtins.cc:4828 +#, gcc-internal-format +msgid "RVV type %qT not allowed in %<target%> device clauses" +msgstr "" + +#: config/riscv/riscv-vector-builtins.cc:4922 #, gcc-internal-format msgid "built-in function %qE requires the zvfbfmin or zvfbfwma ISA extension" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4900 +#: config/riscv/riscv-vector-builtins.cc:4932 #, gcc-internal-format msgid "built-in function %qE requires the zvfhmin or zvfh ISA extension" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4910 +#: config/riscv/riscv-vector-builtins.cc:4942 #, gcc-internal-format msgid "" "built-in function %qE requires the zve32f, zve64f, zve64d or v ISA extension" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4920 +#: config/riscv/riscv-vector-builtins.cc:4952 #, gcc-internal-format msgid "built-in function %qE requires the zve64d or v ISA extension" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4929 +#: config/riscv/riscv-vector-builtins.cc:4961 #, gcc-internal-format msgid "" "built-in function %qE requires the zve64x, zve64f, zve64d or v ISA extension" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4949 +#: config/riscv/riscv-vector-builtins.cc:4981 #, gcc-internal-format msgid "built-in function %qE requires the %qs ISA extension" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:5002 +#: config/riscv/riscv-vector-builtins.cc:5034 #, gcc-internal-format msgid "no matching function call to %qE with empty arguments" msgstr "" @@ -47498,19 +47499,19 @@ msgstr "" msgid "Virtual function multiversioning not supported" msgstr "" -#: config/rs6000/rs6000.cc:28798 +#: config/rs6000/rs6000.cc:28801 #, gcc-internal-format msgid "" "the result for the xxspltidp instruction is undefined for subnormal input " "values" msgstr "" -#: config/rs6000/rs6000.cc:29276 +#: config/rs6000/rs6000.cc:29279 #, gcc-internal-format msgid "type %<__vector_quad%> requires the %qs option" msgstr "" -#: config/rs6000/rs6000.cc:29281 +#: config/rs6000/rs6000.cc:29284 #, gcc-internal-format msgid "type %<__vector_pair%> requires the %qs option" msgstr "" @@ -47595,7 +47596,7 @@ msgstr "" #: config/s390/s390-c.cc:965 #, gcc-internal-format -msgid "%qF requires arch15 or higher" +msgid "%qF requires z17 or higher" msgstr "" #: config/s390/s390-c.cc:979 @@ -47625,7 +47626,7 @@ msgstr "" #: config/s390/s390-c.cc:1059 #, gcc-internal-format -msgid "%qs matching variant requires arch15 or higher" +msgid "%qs matching variant requires z17 or higher" msgstr "" #: config/s390/s390-c.cc:1065 @@ -47677,7 +47678,7 @@ msgstr "" #: config/s390/s390.cc:919 #, gcc-internal-format -msgid "Builtin %qF requires arch15 or higher" +msgid "Builtin %qF requires z17 or higher" msgstr "" #: config/s390/s390.cc:938 @@ -47749,128 +47750,128 @@ msgstr "" msgid "nested functions cannot be profiled with %<-mfentry%> on s390" msgstr "" -#: config/s390/s390.cc:16273 +#: config/s390/s390.cc:16296 #, gcc-internal-format msgid "64-bit ABI not supported in ESA/390 mode" msgstr "" -#: config/s390/s390.cc:16280 +#: config/s390/s390.cc:16303 #, gcc-internal-format msgid "thunk-inline is only supported with %<-mindirect-branch-jump%>" msgstr "" -#: config/s390/s390.cc:16315 +#: config/s390/s390.cc:16338 #, gcc-internal-format, gfc-internal-format msgid "hardware vector support not available on %s" msgstr "" -#: config/s390/s390.cc:16318 +#: config/s390/s390.cc:16341 #, gcc-internal-format msgid "hardware vector support not available with %<-msoft-float%>" msgstr "" -#: config/s390/s390.cc:16347 +#: config/s390/s390.cc:16370 #, gcc-internal-format, gfc-internal-format msgid "hardware decimal floating-point instructions not available on %s" msgstr "" -#: config/s390/s390.cc:16351 +#: config/s390/s390.cc:16374 #, gcc-internal-format msgid "" "hardware decimal floating-point instructions not available in ESA/390 mode" msgstr "" -#: config/s390/s390.cc:16363 +#: config/s390/s390.cc:16386 #, gcc-internal-format msgid "%<-mhard-dfp%> cannot be used in conjunction with %<-msoft-float%>" msgstr "" -#: config/s390/s390.cc:16372 +#: config/s390/s390.cc:16395 #, gcc-internal-format msgid "" "%<-mbackchain%> %<-mpacked-stack%> %<-mhard-float%> are not supported in " "combination" msgstr "" -#: config/s390/s390.cc:16378 +#: config/s390/s390.cc:16401 #, gcc-internal-format msgid "stack size must be greater than the stack guard value" msgstr "" -#: config/s390/s390.cc:16380 +#: config/s390/s390.cc:16403 #, gcc-internal-format msgid "stack size must not be greater than 64k" msgstr "" -#: config/s390/s390.cc:16383 +#: config/s390/s390.cc:16406 #, gcc-internal-format msgid "%<-mstack-guard%> implies use of %<-mstack-size%>" msgstr "" -#: config/s390/s390.cc:16396 +#: config/s390/s390.cc:16419 #, gcc-internal-format msgid "%<-mtpf-trace-hook-prologue-check%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16399 +#: config/s390/s390.cc:16422 #, gcc-internal-format msgid "%<-mtpf-trace-hook-prologue-target%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16402 +#: config/s390/s390.cc:16425 #, gcc-internal-format msgid "%<-mtpf-trace-hook-epilogue-check%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16405 +#: config/s390/s390.cc:16428 #, gcc-internal-format msgid "%<-mtpf-trace-hook-epilogue-target%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16469 +#: config/s390/s390.cc:16492 #, gcc-internal-format msgid "%<-mfentry%> is supported only for 64-bit CPUs" msgstr "" #. argument is not a plain number -#: config/s390/s390.cc:16505 +#: config/s390/s390.cc:16528 #, gcc-internal-format msgid "arguments to %qs should be non-negative integers" msgstr "" -#: config/s390/s390.cc:16512 +#: config/s390/s390.cc:16535 #, gcc-internal-format msgid "argument to %qs is too large (max. %d)" msgstr "" -#: config/s390/s390.cc:16543 +#: config/s390/s390.cc:16566 #, gcc-internal-format msgid "" "%<-mno-pic-data-is-text-relative%> cannot be used without %<-fpic%>/%<-fPIC%>" msgstr "" #. Value is not allowed for the target attribute. -#: config/s390/s390.cc:16710 +#: config/s390/s390.cc:16733 #, gcc-internal-format msgid "value %qs is not supported by attribute %<target%>" msgstr "" -#: config/s390/s390.cc:17769 +#: config/s390/s390.cc:17792 #, gcc-internal-format msgid "invalid cc output constraint: %qs" msgstr "" -#: config/s390/s390.cc:17774 +#: config/s390/s390.cc:17797 #, gcc-internal-format msgid "multiple cc output constraints not supported" msgstr "" -#: config/s390/s390.cc:17779 +#: config/s390/s390.cc:17802 #, gcc-internal-format msgid "%<asm%> specifier for cc output conflicts with %<asm%> clobber list" msgstr "" -#: config/s390/s390.cc:17785 +#: config/s390/s390.cc:17808 #, gcc-internal-format msgid "invalid type for cc output constraint" msgstr "" @@ -48247,55 +48248,55 @@ msgstr "" msgid "number of components of vector not a power of two" msgstr "" -#: ada/gcc-interface/utils.cc:6690 ada/gcc-interface/utils.cc:6868 -#: ada/gcc-interface/utils.cc:7108 +#: ada/gcc-interface/utils.cc:6705 ada/gcc-interface/utils.cc:6883 +#: ada/gcc-interface/utils.cc:7123 #, gcc-internal-format msgid "%qs attribute ignored" msgstr "" -#: ada/gcc-interface/utils.cc:6745 +#: ada/gcc-interface/utils.cc:6760 #, gcc-internal-format msgid "%qs attribute without arguments on a non-prototype" msgstr "" -#: ada/gcc-interface/utils.cc:6760 +#: ada/gcc-interface/utils.cc:6775 #, gcc-internal-format msgid "%qs argument has invalid operand number (argument %lu)" msgstr "" -#: ada/gcc-interface/utils.cc:6782 +#: ada/gcc-interface/utils.cc:6797 #, gcc-internal-format msgid "" "%qs argument with out-of-range operand number (argument %lu, operand %lu)" msgstr "" -#: ada/gcc-interface/utils.cc:6791 +#: ada/gcc-interface/utils.cc:6806 #, gcc-internal-format msgid "%qs argument references non-pointer operand (argument %lu, operand %lu)" msgstr "" -#: ada/gcc-interface/utils.cc:6812 +#: ada/gcc-interface/utils.cc:6827 #, gcc-internal-format msgid "%qs attribute requires prototypes with named arguments" msgstr "" -#: ada/gcc-interface/utils.cc:6821 +#: ada/gcc-interface/utils.cc:6836 #, gcc-internal-format msgid "%qs attribute only applies to variadic functions" msgstr "" -#: ada/gcc-interface/utils.cc:7068 d/d-attribs.cc:362 d/d-attribs.cc:488 +#: ada/gcc-interface/utils.cc:7083 d/d-attribs.cc:362 d/d-attribs.cc:488 #: rust/rust-attribs.cc:176 #, gcc-internal-format msgid "%qE attribute has no effect" msgstr "" -#: ada/gcc-interface/utils.cc:7403 +#: ada/gcc-interface/utils.cc:7418 #, gcc-internal-format msgid "attribute %qs applies to array types only" msgstr "" -#: c/c-convert.cc:104 c/c-typeck.cc:2720 c/c-typeck.cc:14846 cp/typeck.cc:2520 +#: c/c-convert.cc:104 c/c-typeck.cc:2730 c/c-typeck.cc:14860 cp/typeck.cc:2520 #: cp/typeck.cc:9603 cp/typeck.cc:10396 d/d-convert.cc:262 #, gcc-internal-format msgid "void value not ignored as it ought to be" @@ -48316,476 +48317,476 @@ msgstr "" msgid "conversion to non-scalar type requested" msgstr "" -#: c/c-decl.cc:913 +#: c/c-decl.cc:914 #, gcc-internal-format msgid "array %q+D assumed to have one element" msgstr "" -#: c/c-decl.cc:954 +#: c/c-decl.cc:955 #, gcc-internal-format msgid "%qD is static but used in inline function %qD which is not static" msgstr "" -#: c/c-decl.cc:959 +#: c/c-decl.cc:960 #, gcc-internal-format msgid "%q+D is static but declared in inline function %qD which is not static" msgstr "" -#: c/c-decl.cc:1155 +#: c/c-decl.cc:1156 #, gcc-internal-format, gfc-internal-format msgid "GCC supports only %u nested scopes" msgstr "" -#: c/c-decl.cc:1297 cp/decl.cc:382 +#: c/c-decl.cc:1298 cp/decl.cc:382 #, gcc-internal-format msgid "label %q+D used but not defined" msgstr "" -#: c/c-decl.cc:1342 +#: c/c-decl.cc:1343 #, gcc-internal-format msgid "nested function %q+D declared but never defined" msgstr "" -#: c/c-decl.cc:1356 +#: c/c-decl.cc:1357 #, gcc-internal-format msgid "inline function %q+D declared but never defined" msgstr "" -#: c/c-decl.cc:1374 +#: c/c-decl.cc:1375 #, gcc-internal-format msgid "unused variable %q+D" msgstr "" -#: c/c-decl.cc:1380 cp/decl.cc:755 +#: c/c-decl.cc:1381 cp/decl.cc:755 #, gcc-internal-format msgid "variable %qD set but not used" msgstr "" -#: c/c-decl.cc:1385 +#: c/c-decl.cc:1386 #, gcc-internal-format msgid "type of array %q+D completed incompatibly with implicit initialization" msgstr "" -#: c/c-decl.cc:1560 +#: c/c-decl.cc:1561 #, gcc-internal-format msgid "" "underspecified declaration of %qE, which is already declared in this scope" msgstr "" -#: c/c-decl.cc:1731 c/c-decl.cc:7924 c/c-decl.cc:8923 c/c-decl.cc:9858 -#: c/c-decl.cc:9864 c/c-decl.cc:10091 +#: c/c-decl.cc:1732 c/c-decl.cc:7925 c/c-decl.cc:8924 c/c-decl.cc:9859 +#: c/c-decl.cc:9865 c/c-decl.cc:10092 #, gcc-internal-format msgid "originally defined here" msgstr "" -#: c/c-decl.cc:1954 +#: c/c-decl.cc:1955 #, gcc-internal-format msgid "" "a parameter list with an ellipsis cannot match an empty parameter name list " "declaration" msgstr "" -#: c/c-decl.cc:1962 +#: c/c-decl.cc:1963 #, gcc-internal-format msgid "" "an argument type that has a default promotion cannot match an empty " "parameter name list declaration" msgstr "" -#: c/c-decl.cc:2010 +#: c/c-decl.cc:2011 #, gcc-internal-format msgid "" "prototype for %q+D declares more arguments than previous old-style definition" msgstr "" -#: c/c-decl.cc:2016 +#: c/c-decl.cc:2017 #, gcc-internal-format msgid "" "prototype for %q+D declares fewer arguments than previous old-style " "definition" msgstr "" -#: c/c-decl.cc:2025 +#: c/c-decl.cc:2026 #, gcc-internal-format msgid "prototype for %q+D declares argument %d with incompatible type" msgstr "" #. If we get here, no errors were found, but do issue a warning #. for this poor-style construct. -#: c/c-decl.cc:2038 +#: c/c-decl.cc:2039 #, gcc-internal-format msgid "prototype for %q+D follows non-prototype definition" msgstr "" -#: c/c-decl.cc:2056 +#: c/c-decl.cc:2057 #, gcc-internal-format msgid "previous definition of %q+D with type %qT" msgstr "" -#: c/c-decl.cc:2060 +#: c/c-decl.cc:2061 #, gcc-internal-format msgid "previous implicit declaration of %q+D with type %qT" msgstr "" -#: c/c-decl.cc:2064 +#: c/c-decl.cc:2065 #, gcc-internal-format msgid "previous declaration of %q+D with type %qT" msgstr "" -#: c/c-decl.cc:2126 +#: c/c-decl.cc:2127 #, gcc-internal-format msgid "%q+D redeclared as different kind of symbol" msgstr "" -#: c/c-decl.cc:2131 +#: c/c-decl.cc:2132 #, gcc-internal-format msgid "built-in function %q+D declared as non-function" msgstr "" -#: c/c-decl.cc:2134 c/c-decl.cc:3274 +#: c/c-decl.cc:2135 c/c-decl.cc:3275 #, gcc-internal-format msgid "declaration of %q+D shadows a built-in function" msgstr "" -#: c/c-decl.cc:2151 +#: c/c-decl.cc:2152 #, gcc-internal-format msgid "conflicting redeclaration of enumerator %q+D" msgstr "" -#: c/c-decl.cc:2158 +#: c/c-decl.cc:2159 #, gcc-internal-format msgid "redeclaration of enumerator %q+D" msgstr "" -#: c/c-decl.cc:2198 +#: c/c-decl.cc:2199 #, gcc-internal-format msgid "conflicting types for built-in function %q+D; expected %qT" msgstr "" -#: c/c-decl.cc:2208 c/c-decl.cc:2233 +#: c/c-decl.cc:2209 c/c-decl.cc:2234 #, gcc-internal-format msgid "%qD is declared in header %qs" msgstr "" -#: c/c-decl.cc:2219 +#: c/c-decl.cc:2220 #, gcc-internal-format msgid "mismatch in argument %u type of built-in function %qD; expected %qT" msgstr "" -#: c/c-decl.cc:2224 +#: c/c-decl.cc:2225 #, gcc-internal-format msgid "mismatch in return type of built-in function %qD; expected %qT" msgstr "" -#: c/c-decl.cc:2257 +#: c/c-decl.cc:2258 #, gcc-internal-format msgid "conflicting types for %q+D" msgstr "" -#: c/c-decl.cc:2270 c/c-decl.cc:2307 +#: c/c-decl.cc:2271 c/c-decl.cc:2308 #, gcc-internal-format msgid "conflicting types for %q+D; have %qT" msgstr "" -#: c/c-decl.cc:2287 +#: c/c-decl.cc:2288 #, gcc-internal-format msgid "conflicting named address spaces (generic vs %s) for %q+D" msgstr "" -#: c/c-decl.cc:2291 +#: c/c-decl.cc:2292 #, gcc-internal-format msgid "conflicting named address spaces (%s vs generic) for %q+D" msgstr "" -#: c/c-decl.cc:2295 +#: c/c-decl.cc:2296 #, gcc-internal-format msgid "conflicting named address spaces (%s vs %s) for %q+D" msgstr "" -#: c/c-decl.cc:2304 +#: c/c-decl.cc:2305 #, gcc-internal-format msgid "conflicting type qualifiers for %q+D" msgstr "" -#: c/c-decl.cc:2325 +#: c/c-decl.cc:2326 #, gcc-internal-format msgid "conflicting types for %q+D due to enum/integer mismatch; have %qT" msgstr "" -#: c/c-decl.cc:2342 +#: c/c-decl.cc:2343 #, gcc-internal-format msgid "redefinition of typedef %q+D with different type" msgstr "" -#: c/c-decl.cc:2355 +#: c/c-decl.cc:2356 #, gcc-internal-format msgid "redefinition of typedef %q+D with variably modified type" msgstr "" -#: c/c-decl.cc:2360 +#: c/c-decl.cc:2361 #, gcc-internal-format msgid "redefinition of typedef %q+D" msgstr "" -#: c/c-decl.cc:2388 +#: c/c-decl.cc:2389 #, gcc-internal-format msgid "declaration of %qD shadows a built-in function" msgstr "" -#: c/c-decl.cc:2404 +#: c/c-decl.cc:2405 #, gcc-internal-format msgid "declaration of built-in function %qD without a prototype; expected %qT" msgstr "" -#: c/c-decl.cc:2428 c/c-decl.cc:2551 +#: c/c-decl.cc:2429 c/c-decl.cc:2552 #, gcc-internal-format msgid "redefinition of %q+D" msgstr "" -#: c/c-decl.cc:2467 c/c-decl.cc:2591 +#: c/c-decl.cc:2468 c/c-decl.cc:2592 #, gcc-internal-format msgid "static declaration of %q+D follows non-static declaration" msgstr "" -#: c/c-decl.cc:2478 c/c-decl.cc:2486 c/c-decl.cc:2580 c/c-decl.cc:2588 +#: c/c-decl.cc:2479 c/c-decl.cc:2487 c/c-decl.cc:2581 c/c-decl.cc:2589 #, gcc-internal-format msgid "non-static declaration of %q+D follows static declaration" msgstr "" -#: c/c-decl.cc:2503 +#: c/c-decl.cc:2504 #, gcc-internal-format msgid "%<gnu_inline%> attribute present on %q+D" msgstr "" -#: c/c-decl.cc:2506 +#: c/c-decl.cc:2507 #, gcc-internal-format msgid "but not here" msgstr "" -#: c/c-decl.cc:2525 +#: c/c-decl.cc:2526 #, gcc-internal-format msgid "thread-local declaration of %q+D follows non-thread-local declaration" msgstr "" -#: c/c-decl.cc:2528 +#: c/c-decl.cc:2529 #, gcc-internal-format msgid "non-thread-local declaration of %q+D follows thread-local declaration" msgstr "" -#: c/c-decl.cc:2572 +#: c/c-decl.cc:2573 #, gcc-internal-format msgid "extern declaration of %q+D follows declaration with no linkage" msgstr "" -#: c/c-decl.cc:2610 +#: c/c-decl.cc:2611 #, gcc-internal-format msgid "declaration of %q+D with no linkage follows extern declaration" msgstr "" -#: c/c-decl.cc:2617 +#: c/c-decl.cc:2618 #, gcc-internal-format msgid "redeclaration of %q+D with no linkage" msgstr "" -#: c/c-decl.cc:2643 +#: c/c-decl.cc:2644 #, gcc-internal-format msgid "" "redeclaration of %q+D with different visibility (old visibility preserved)" msgstr "" -#: c/c-decl.cc:2664 +#: c/c-decl.cc:2665 #, gcc-internal-format msgid "redefinition of parameter %q+D" msgstr "" -#: c/c-decl.cc:2691 +#: c/c-decl.cc:2692 #, gcc-internal-format msgid "redundant redeclaration of %q+D" msgstr "" -#: c/c-decl.cc:3232 +#: c/c-decl.cc:3233 #, gcc-internal-format msgid "declaration of %q+D shadows previous non-variable" msgstr "" -#: c/c-decl.cc:3254 +#: c/c-decl.cc:3255 #, gcc-internal-format msgid "declaration of %qD shadows a parameter" msgstr "" -#: c/c-decl.cc:3267 cp/name-lookup.cc:3569 +#: c/c-decl.cc:3268 cp/name-lookup.cc:3569 #, gcc-internal-format msgid "declaration of %qD shadows a global declaration" msgstr "" -#: c/c-decl.cc:3293 +#: c/c-decl.cc:3294 #, gcc-internal-format msgid "declaration of %qD shadows a previous local" msgstr "" -#: c/c-decl.cc:3299 cp/name-lookup.cc:3286 +#: c/c-decl.cc:3300 cp/name-lookup.cc:3286 #, gcc-internal-format msgid "shadowed declaration is here" msgstr "" -#: c/c-decl.cc:3432 +#: c/c-decl.cc:3433 #, gcc-internal-format msgid "nested extern declaration of %qD" msgstr "" -#: c/c-decl.cc:3588 c/c-decl.cc:3602 +#: c/c-decl.cc:3589 c/c-decl.cc:3603 #, gcc-internal-format msgid "implicit declaration of function %qE; did you mean %qs?" msgstr "" -#: c/c-decl.cc:3594 c/c-decl.cc:3607 +#: c/c-decl.cc:3595 c/c-decl.cc:3608 #, gcc-internal-format msgid "implicit declaration of function %qE" msgstr "" -#: c/c-decl.cc:3626 +#: c/c-decl.cc:3627 #, gcc-internal-format msgid "include %qs or provide a declaration of %qE" msgstr "" -#: c/c-decl.cc:3897 +#: c/c-decl.cc:3898 #, gcc-internal-format msgid "incompatible implicit declaration of built-in function %qD" msgstr "" -#: c/c-decl.cc:3907 +#: c/c-decl.cc:3908 #, gcc-internal-format msgid "include %qs or provide a declaration of %qD" msgstr "" -#: c/c-decl.cc:3918 +#: c/c-decl.cc:3919 #, gcc-internal-format msgid "incompatible implicit declaration of function %qD" msgstr "" -#: c/c-decl.cc:3979 +#: c/c-decl.cc:3980 #, gcc-internal-format msgid "%qE undeclared here (not in a function); did you mean %qs?" msgstr "" -#: c/c-decl.cc:3984 +#: c/c-decl.cc:3985 #, gcc-internal-format msgid "%qE undeclared here (not in a function)" msgstr "" -#: c/c-decl.cc:3997 +#: c/c-decl.cc:3998 #, gcc-internal-format msgid "%qE undeclared (first use in this function); did you mean %qs?" msgstr "" -#: c/c-decl.cc:4002 +#: c/c-decl.cc:4003 #, gcc-internal-format msgid "%qE undeclared (first use in this function)" msgstr "" -#: c/c-decl.cc:4006 +#: c/c-decl.cc:4007 #, gcc-internal-format msgid "" "each undeclared identifier is reported only once for each function it " "appears in" msgstr "" -#: c/c-decl.cc:4054 cp/decl.cc:3632 +#: c/c-decl.cc:4055 cp/decl.cc:3632 #, gcc-internal-format msgid "label %qE referenced outside of any function" msgstr "" -#: c/c-decl.cc:4091 +#: c/c-decl.cc:4092 #, gcc-internal-format msgid "jump into scope of identifier with variably modified type" msgstr "" -#: c/c-decl.cc:4094 +#: c/c-decl.cc:4095 #, gcc-internal-format msgid "jump skips OpenMP %<allocate%> allocation" msgstr "" -#: c/c-decl.cc:4097 +#: c/c-decl.cc:4098 #, gcc-internal-format msgid "jump skips variable initialization" msgstr "" -#: c/c-decl.cc:4099 c/c-decl.cc:4155 c/c-decl.cc:4246 +#: c/c-decl.cc:4100 c/c-decl.cc:4156 c/c-decl.cc:4247 #, gcc-internal-format msgid "label %qD defined here" msgstr "" -#: c/c-decl.cc:4154 c/c-decl.cc:4245 +#: c/c-decl.cc:4155 c/c-decl.cc:4246 #, gcc-internal-format msgid "jump into statement expression" msgstr "" -#: c/c-decl.cc:4177 +#: c/c-decl.cc:4178 #, gcc-internal-format msgid "duplicate label declaration %qE" msgstr "" -#: c/c-decl.cc:4277 cp/decl.cc:4135 +#: c/c-decl.cc:4278 cp/decl.cc:4135 #, gcc-internal-format msgid "duplicate label %qD" msgstr "" -#: c/c-decl.cc:4308 +#: c/c-decl.cc:4309 #, gcc-internal-format msgid "" "traditional C lacks a separate namespace for labels, identifier %qE conflicts" msgstr "" -#: c/c-decl.cc:4380 +#: c/c-decl.cc:4381 #, gcc-internal-format msgid "switch jumps over OpenMP %<allocate%> allocation" msgstr "" -#: c/c-decl.cc:4386 +#: c/c-decl.cc:4387 #, gcc-internal-format msgid "switch jumps over variable initialization" msgstr "" -#: c/c-decl.cc:4389 c/c-decl.cc:4402 +#: c/c-decl.cc:4390 c/c-decl.cc:4403 #, gcc-internal-format msgid "switch starts here" msgstr "" -#: c/c-decl.cc:4401 +#: c/c-decl.cc:4402 #, gcc-internal-format msgid "switch jumps into statement expression" msgstr "" -#: c/c-decl.cc:4484 +#: c/c-decl.cc:4485 #, gcc-internal-format msgid "%qE defined as wrong kind of tag" msgstr "" -#: c/c-decl.cc:4681 cp/tree.cc:5085 +#: c/c-decl.cc:4682 cp/tree.cc:5085 #, gcc-internal-format msgid "%qE attribute applied to %qD with void return type" msgstr "" -#: c/c-decl.cc:4690 +#: c/c-decl.cc:4691 #, gcc-internal-format msgid "" "%qE attribute can only be applied to functions or to structure, union or " "enumeration types" msgstr "" -#: c/c-decl.cc:4710 +#: c/c-decl.cc:4711 #, gcc-internal-format msgid "standard %qE attribute can only be applied to functions" msgstr "" -#: c/c-decl.cc:4730 +#: c/c-decl.cc:4731 #, gcc-internal-format msgid "" "standard %qE attribute can only be applied to function declarators or type " "specifiers with function type" msgstr "" -#: c/c-decl.cc:4732 +#: c/c-decl.cc:4733 #, gcc-internal-format msgid "did you mean to specify it after %<)%> following function parameters?" msgstr "" @@ -48794,125 +48795,125 @@ msgstr "" #. expressions, but is still appropriate as an error to #. avoid types declared in such a context escaping to #. the type of an auto variable. -#: c/c-decl.cc:5037 c/c-decl.cc:8862 +#: c/c-decl.cc:5038 c/c-decl.cc:8863 #, gcc-internal-format msgid "%qT declared in underspecified object initializer" msgstr "" -#: c/c-decl.cc:5048 +#: c/c-decl.cc:5049 #, gcc-internal-format msgid "unnamed struct/union that defines no instances" msgstr "" -#: c/c-decl.cc:5059 +#: c/c-decl.cc:5060 #, gcc-internal-format msgid "empty declaration with storage class specifier does not redeclare tag" msgstr "" -#: c/c-decl.cc:5075 +#: c/c-decl.cc:5076 #, gcc-internal-format msgid "empty declaration with type qualifier does not redeclare tag" msgstr "" -#: c/c-decl.cc:5087 +#: c/c-decl.cc:5088 #, gcc-internal-format msgid "empty declaration with %<_Alignas%> does not redeclare tag" msgstr "" -#: c/c-decl.cc:5101 +#: c/c-decl.cc:5102 #, gcc-internal-format msgid "empty declaration of %<enum%> type does not redeclare tag" msgstr "" -#: c/c-decl.cc:5126 c/c-decl.cc:5134 +#: c/c-decl.cc:5127 c/c-decl.cc:5135 #, gcc-internal-format msgid "useless type name in empty declaration" msgstr "" -#: c/c-decl.cc:5142 +#: c/c-decl.cc:5143 #, gcc-internal-format msgid "%<inline%> in empty declaration" msgstr "" -#: c/c-decl.cc:5148 +#: c/c-decl.cc:5149 #, gcc-internal-format msgid "%<_Noreturn%> in empty declaration" msgstr "" -#: c/c-decl.cc:5154 +#: c/c-decl.cc:5155 #, gcc-internal-format msgid "%<constexpr%> in empty declaration" msgstr "" -#: c/c-decl.cc:5160 +#: c/c-decl.cc:5161 #, gcc-internal-format msgid "%<auto%> in file-scope empty declaration" msgstr "" -#: c/c-decl.cc:5166 +#: c/c-decl.cc:5167 #, gcc-internal-format msgid "%<register%> in file-scope empty declaration" msgstr "" -#: c/c-decl.cc:5174 +#: c/c-decl.cc:5175 #, gcc-internal-format msgid "" "storage class specifier in empty declaration with %<enum%> underlying type" msgstr "" -#: c/c-decl.cc:5180 +#: c/c-decl.cc:5181 #, gcc-internal-format msgid "%qs in empty declaration with %<enum%> underlying type" msgstr "" -#: c/c-decl.cc:5190 +#: c/c-decl.cc:5191 #, gcc-internal-format msgid "type qualifier in empty declaration with %<enum%> underlying type" msgstr "" -#: c/c-decl.cc:5196 +#: c/c-decl.cc:5197 #, gcc-internal-format msgid "%<alignas%> in empty declaration with %<enum%> underlying type" msgstr "" -#: c/c-decl.cc:5205 +#: c/c-decl.cc:5206 #, gcc-internal-format msgid "useless storage class specifier in empty declaration" msgstr "" -#: c/c-decl.cc:5211 +#: c/c-decl.cc:5212 #, gcc-internal-format msgid "useless %qs in empty declaration" msgstr "" -#: c/c-decl.cc:5224 +#: c/c-decl.cc:5225 #, gcc-internal-format msgid "useless type qualifier in empty declaration" msgstr "" -#: c/c-decl.cc:5231 +#: c/c-decl.cc:5232 #, gcc-internal-format msgid "useless %<_Alignas%> in empty declaration" msgstr "" -#: c/c-decl.cc:5249 +#: c/c-decl.cc:5250 #, gcc-internal-format msgid "invalid use of attributes in empty declaration" msgstr "" -#: c/c-decl.cc:5263 c/c-parser.cc:2513 +#: c/c-decl.cc:5264 c/c-parser.cc:2513 #, gcc-internal-format msgid "empty declaration" msgstr "" -#: c/c-decl.cc:5335 +#: c/c-decl.cc:5336 #, gcc-internal-format msgid "" "ISO C90 does not support %<static%> or type qualifiers in parameter array " "declarators" msgstr "" -#: c/c-decl.cc:5339 +#: c/c-decl.cc:5340 #, gcc-internal-format msgid "ISO C90 does not support %<[*]%> array declarators" msgstr "" @@ -48920,318 +48921,318 @@ msgstr "" #. C99 6.7.5.2p4 #. A function definition isn't function prototype scope C99 6.2.1p4. #. C99 6.7.5.2p4 -#: c/c-decl.cc:5345 c/c-decl.cc:8447 c/c-decl.cc:10985 +#: c/c-decl.cc:5346 c/c-decl.cc:8448 c/c-decl.cc:10986 #, gcc-internal-format msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "" -#: c/c-decl.cc:5538 cp/decl2.cc:1960 cp/name-lookup.cc:8991 +#: c/c-decl.cc:5539 cp/decl2.cc:1960 cp/name-lookup.cc:8994 #, gcc-internal-format msgid "%<omp::%s%> not allowed to be specified in this context" msgstr "" -#: c/c-decl.cc:5621 +#: c/c-decl.cc:5622 #, gcc-internal-format msgid "%q+D is usually a function" msgstr "" -#: c/c-decl.cc:5626 c/c-decl.cc:10815 cp/decl.cc:18580 +#: c/c-decl.cc:5627 c/c-decl.cc:10816 cp/decl.cc:18582 #, gcc-internal-format msgid "no previous declaration for %qD" msgstr "" -#: c/c-decl.cc:5635 +#: c/c-decl.cc:5636 #, gcc-internal-format msgid "typedef %qD is initialized (use %<__typeof__%> instead)" msgstr "" -#: c/c-decl.cc:5640 +#: c/c-decl.cc:5641 #, gcc-internal-format msgid "function %qD is initialized like a variable" msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. -#: c/c-decl.cc:5646 +#: c/c-decl.cc:5647 #, gcc-internal-format msgid "parameter %qD is initialized" msgstr "" -#: c/c-decl.cc:5666 +#: c/c-decl.cc:5667 #, gcc-internal-format msgid "variable %qD has initializer but incomplete type" msgstr "" -#: c/c-decl.cc:5748 +#: c/c-decl.cc:5749 #, gcc-internal-format msgid "inline function %q+D given attribute %qs" msgstr "" -#: c/c-decl.cc:5805 +#: c/c-decl.cc:5806 #, gcc-internal-format msgid "uninitialized const member in %qT is invalid in C++" msgstr "" -#: c/c-decl.cc:5807 +#: c/c-decl.cc:5808 #, gcc-internal-format msgid "%qD should be initialized" msgstr "" -#: c/c-decl.cc:5888 +#: c/c-decl.cc:5889 #, gcc-internal-format msgid "initializer fails to determine size of %q+D" msgstr "" -#: c/c-decl.cc:5893 +#: c/c-decl.cc:5894 #, gcc-internal-format msgid "array size missing in %q+D" msgstr "" -#: c/c-decl.cc:5897 +#: c/c-decl.cc:5898 #, gcc-internal-format msgid "zero or negative size array %q+D" msgstr "" -#: c/c-decl.cc:5988 m2/gm2-gcc/m2type.cc:1258 +#: c/c-decl.cc:5989 m2/gm2-gcc/m2type.cc:1258 #, gcc-internal-format msgid "storage size of %q+D isn%'t constant" msgstr "" -#: c/c-decl.cc:6038 +#: c/c-decl.cc:6039 #, gcc-internal-format msgid "ignoring %<asm%> specifier for non-static local variable %q+D" msgstr "" -#: c/c-decl.cc:6076 +#: c/c-decl.cc:6077 #, gcc-internal-format msgid "cannot put object with volatile field into register" msgstr "" -#: c/c-decl.cc:6162 +#: c/c-decl.cc:6163 #, gcc-internal-format msgid "uninitialized %<const %D%> is invalid in C++" msgstr "" -#: c/c-decl.cc:6177 cp/decl.cc:9535 +#: c/c-decl.cc:6178 cp/decl.cc:9537 #, gcc-internal-format msgid "%q+D in declare target directive does not have mappable type" msgstr "" -#: c/c-decl.cc:6440 +#: c/c-decl.cc:6441 #, gcc-internal-format msgid "ISO C forbids forward parameter declarations" msgstr "" -#: c/c-decl.cc:6480 +#: c/c-decl.cc:6481 #, gcc-internal-format msgid "file-scope compound literal specifies %<register%>" msgstr "" -#: c/c-decl.cc:6486 +#: c/c-decl.cc:6487 #, gcc-internal-format msgid "compound literal implicitly auto and declared %qs" msgstr "" -#: c/c-decl.cc:6537 +#: c/c-decl.cc:6538 #, gcc-internal-format msgid "array of unknown size with empty initializer" msgstr "" -#: c/c-decl.cc:6591 +#: c/c-decl.cc:6592 #, gcc-internal-format msgid "defining a type in a compound literal is invalid in C++" msgstr "" -#: c/c-decl.cc:6612 c/c-decl.cc:6627 +#: c/c-decl.cc:6613 c/c-decl.cc:6628 #, gcc-internal-format msgid "bit-field %qs width not an integer constant" msgstr "" -#: c/c-decl.cc:6622 +#: c/c-decl.cc:6623 #, gcc-internal-format msgid "bit-field %qs width not an integer constant expression" msgstr "" -#: c/c-decl.cc:6633 +#: c/c-decl.cc:6634 #, gcc-internal-format msgid "negative width in bit-field %qs" msgstr "" -#: c/c-decl.cc:6638 +#: c/c-decl.cc:6639 #, gcc-internal-format msgid "zero width for bit-field %qs" msgstr "" -#: c/c-decl.cc:6649 +#: c/c-decl.cc:6650 #, gcc-internal-format msgid "bit-field %qs has invalid type" msgstr "" -#: c/c-decl.cc:6655 +#: c/c-decl.cc:6656 #, gcc-internal-format msgid "cannot declare bit-field %qs with %<warn_if_not_aligned%> type" msgstr "" -#: c/c-decl.cc:6666 +#: c/c-decl.cc:6667 #, gcc-internal-format msgid "type of bit-field %qs is a GCC extension" msgstr "" -#: c/c-decl.cc:6672 +#: c/c-decl.cc:6673 #, gcc-internal-format msgid "width of %qs exceeds its type" msgstr "" -#: c/c-decl.cc:6691 +#: c/c-decl.cc:6692 #, gcc-internal-format msgid "%qs is narrower than values of its type" msgstr "" -#: c/c-decl.cc:6706 +#: c/c-decl.cc:6707 #, gcc-internal-format msgid "ISO C90 forbids array %qE whose size cannot be evaluated" msgstr "" -#: c/c-decl.cc:6709 +#: c/c-decl.cc:6710 #, gcc-internal-format msgid "ISO C90 forbids array whose size cannot be evaluated" msgstr "" -#: c/c-decl.cc:6716 +#: c/c-decl.cc:6717 #, gcc-internal-format msgid "ISO C90 forbids variable length array %qE" msgstr "" -#: c/c-decl.cc:6718 +#: c/c-decl.cc:6719 #, gcc-internal-format msgid "ISO C90 forbids variable length array" msgstr "" -#: c/c-decl.cc:6961 +#: c/c-decl.cc:6962 #, gcc-internal-format msgid "%<enum%> underlying type may not be specified here" msgstr "" -#: c/c-decl.cc:6989 c/c-decl.cc:7396 c/c-decl.cc:7406 +#: c/c-decl.cc:6990 c/c-decl.cc:7397 c/c-decl.cc:7407 #, gcc-internal-format msgid "variably modified %qE at file scope" msgstr "" -#: c/c-decl.cc:6991 +#: c/c-decl.cc:6992 #, gcc-internal-format msgid "variably modified field at file scope" msgstr "" -#: c/c-decl.cc:7011 +#: c/c-decl.cc:7012 #, gcc-internal-format msgid "type defaults to %<int%> in declaration of %qE" msgstr "" -#: c/c-decl.cc:7015 +#: c/c-decl.cc:7016 #, gcc-internal-format msgid "type defaults to %<int%> in type name" msgstr "" -#: c/c-decl.cc:7047 +#: c/c-decl.cc:7048 #, gcc-internal-format msgid "duplicate %<const%>" msgstr "" -#: c/c-decl.cc:7049 +#: c/c-decl.cc:7050 #, gcc-internal-format msgid "duplicate %<restrict%>" msgstr "" -#: c/c-decl.cc:7051 +#: c/c-decl.cc:7052 #, gcc-internal-format msgid "duplicate %<volatile%>" msgstr "" -#: c/c-decl.cc:7053 +#: c/c-decl.cc:7054 #, gcc-internal-format msgid "duplicate %<_Atomic%>" msgstr "" -#: c/c-decl.cc:7056 +#: c/c-decl.cc:7057 #, gcc-internal-format, gfc-internal-format msgid "conflicting named address spaces (%s vs %s)" msgstr "" -#: c/c-decl.cc:7079 c/c-parser.cc:3794 +#: c/c-decl.cc:7080 c/c-parser.cc:3794 #, gcc-internal-format msgid "%<_Atomic%>-qualified array type" msgstr "" -#: c/c-decl.cc:7094 +#: c/c-decl.cc:7095 #, gcc-internal-format msgid "function definition declared %<auto%>" msgstr "" -#: c/c-decl.cc:7096 +#: c/c-decl.cc:7097 #, gcc-internal-format msgid "function definition declared %<register%>" msgstr "" -#: c/c-decl.cc:7098 +#: c/c-decl.cc:7099 #, gcc-internal-format msgid "function definition declared %<typedef%>" msgstr "" -#: c/c-decl.cc:7100 +#: c/c-decl.cc:7101 #, gcc-internal-format msgid "function definition declared %qs" msgstr "" -#: c/c-decl.cc:7127 +#: c/c-decl.cc:7128 #, gcc-internal-format msgid "storage class specified for structure field %qE" msgstr "" -#: c/c-decl.cc:7130 +#: c/c-decl.cc:7131 #, gcc-internal-format msgid "storage class specified for structure field" msgstr "" -#: c/c-decl.cc:7134 +#: c/c-decl.cc:7135 #, gcc-internal-format msgid "storage class specified for parameter %qE" msgstr "" -#: c/c-decl.cc:7137 +#: c/c-decl.cc:7138 #, gcc-internal-format msgid "storage class specified for unnamed parameter" msgstr "" -#: c/c-decl.cc:7140 cp/decl.cc:13709 +#: c/c-decl.cc:7141 cp/decl.cc:13711 #, gcc-internal-format msgid "storage class specified for typename" msgstr "" -#: c/c-decl.cc:7158 +#: c/c-decl.cc:7159 #, gcc-internal-format msgid "%qE initialized and declared %<extern%>" msgstr "" -#: c/c-decl.cc:7162 +#: c/c-decl.cc:7163 #, gcc-internal-format msgid "%qE has both %<extern%> and initializer" msgstr "" -#: c/c-decl.cc:7167 +#: c/c-decl.cc:7168 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<auto%>" msgstr "" -#: c/c-decl.cc:7171 +#: c/c-decl.cc:7172 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<register%>" msgstr "" -#: c/c-decl.cc:7176 +#: c/c-decl.cc:7177 #, gcc-internal-format msgid "nested function %qE declared %<extern%>" msgstr "" -#: c/c-decl.cc:7179 +#: c/c-decl.cc:7180 #, gcc-internal-format msgid "function-scope %qE implicitly auto and declared %qs" msgstr "" @@ -49239,1170 +49240,1170 @@ msgstr "" #. Only the innermost declarator (making a parameter be of #. array type which is converted to pointer type) #. may have static or type qualifiers. -#: c/c-decl.cc:7226 c/c-decl.cc:7586 +#: c/c-decl.cc:7227 c/c-decl.cc:7587 #, gcc-internal-format msgid "static or type qualifiers in non-parameter array declarator" msgstr "" -#: c/c-decl.cc:7287 +#: c/c-decl.cc:7288 #, gcc-internal-format msgid "declaration of %qE as array of voids" msgstr "" -#: c/c-decl.cc:7289 +#: c/c-decl.cc:7290 #, gcc-internal-format msgid "declaration of type name as array of voids" msgstr "" -#: c/c-decl.cc:7296 +#: c/c-decl.cc:7297 #, gcc-internal-format msgid "declaration of %qE as array of functions" msgstr "" -#: c/c-decl.cc:7299 +#: c/c-decl.cc:7300 #, gcc-internal-format msgid "declaration of type name as array of functions" msgstr "" -#: c/c-decl.cc:7307 c/c-decl.cc:9661 +#: c/c-decl.cc:7308 c/c-decl.cc:9662 #, gcc-internal-format msgid "invalid use of structure with flexible array member" msgstr "" -#: c/c-decl.cc:7339 +#: c/c-decl.cc:7340 #, gcc-internal-format msgid "size of array %qE has non-integer type" msgstr "" -#: c/c-decl.cc:7343 +#: c/c-decl.cc:7344 #, gcc-internal-format msgid "size of unnamed array has non-integer type" msgstr "" -#: c/c-decl.cc:7351 +#: c/c-decl.cc:7352 #, gcc-internal-format msgid "size of array %qE has incomplete type" msgstr "" -#: c/c-decl.cc:7354 +#: c/c-decl.cc:7355 #, gcc-internal-format msgid "size of unnamed array has incomplete type" msgstr "" -#: c/c-decl.cc:7366 +#: c/c-decl.cc:7367 #, gcc-internal-format msgid "ISO C forbids zero-size array %qE" msgstr "" -#: c/c-decl.cc:7369 +#: c/c-decl.cc:7370 #, gcc-internal-format msgid "ISO C forbids zero-size array" msgstr "" -#: c/c-decl.cc:7378 +#: c/c-decl.cc:7379 #, gcc-internal-format msgid "size of array %qE is negative" msgstr "" -#: c/c-decl.cc:7380 +#: c/c-decl.cc:7381 #, gcc-internal-format msgid "size of unnamed array is negative" msgstr "" -#: c/c-decl.cc:7466 +#: c/c-decl.cc:7467 #, gcc-internal-format msgid "size of array %qE is too large" msgstr "" -#: c/c-decl.cc:7469 +#: c/c-decl.cc:7470 #, gcc-internal-format msgid "size of unnamed array is too large" msgstr "" -#: c/c-decl.cc:7508 c/c-decl.cc:8104 +#: c/c-decl.cc:7509 c/c-decl.cc:8105 #, gcc-internal-format msgid "ISO C90 does not support flexible array members" msgstr "" -#: c/c-decl.cc:7521 +#: c/c-decl.cc:7522 #, gcc-internal-format msgid "%<[*]%> not in a declaration" msgstr "" -#: c/c-decl.cc:7529 +#: c/c-decl.cc:7530 #, gcc-internal-format msgid "array type has incomplete element type %qT" msgstr "" -#: c/c-decl.cc:7535 +#: c/c-decl.cc:7536 #, gcc-internal-format msgid "" "declaration of %qE as multidimensional array must have bounds for all " "dimensions except the first" msgstr "" -#: c/c-decl.cc:7539 +#: c/c-decl.cc:7540 #, gcc-internal-format msgid "" "declaration of multidimensional array must have bounds for all dimensions " "except the first" msgstr "" -#: c/c-decl.cc:7622 +#: c/c-decl.cc:7623 #, gcc-internal-format msgid "%qE declared as function returning a function" msgstr "" -#: c/c-decl.cc:7625 +#: c/c-decl.cc:7626 #, gcc-internal-format msgid "type name declared as function returning a function" msgstr "" -#: c/c-decl.cc:7632 +#: c/c-decl.cc:7633 #, gcc-internal-format msgid "%qE declared as function returning an array" msgstr "" -#: c/c-decl.cc:7635 +#: c/c-decl.cc:7636 #, gcc-internal-format msgid "type name declared as function returning an array" msgstr "" -#: c/c-decl.cc:7679 +#: c/c-decl.cc:7680 #, gcc-internal-format msgid "function definition has qualified void return type" msgstr "" -#: c/c-decl.cc:7683 cp/decl.cc:14134 +#: c/c-decl.cc:7684 cp/decl.cc:14136 #, gcc-internal-format msgid "type qualifiers ignored on function return type" msgstr "" -#: c/c-decl.cc:7722 c/c-decl.cc:7890 c/c-decl.cc:7944 c/c-decl.cc:8038 -#: c/c-decl.cc:8160 c/c-parser.cc:3796 +#: c/c-decl.cc:7723 c/c-decl.cc:7891 c/c-decl.cc:7945 c/c-decl.cc:8039 +#: c/c-decl.cc:8161 c/c-parser.cc:3796 #, gcc-internal-format msgid "%<_Atomic%>-qualified function type" msgstr "" -#: c/c-decl.cc:7728 c/c-decl.cc:7896 c/c-decl.cc:8043 c/c-decl.cc:8165 +#: c/c-decl.cc:7729 c/c-decl.cc:7897 c/c-decl.cc:8044 c/c-decl.cc:8166 #, gcc-internal-format msgid "ISO C forbids qualified function types" msgstr "" -#: c/c-decl.cc:7781 +#: c/c-decl.cc:7782 #, gcc-internal-format msgid "%qs combined with %<auto%> qualifier for %qE" msgstr "" -#: c/c-decl.cc:7785 +#: c/c-decl.cc:7786 #, gcc-internal-format msgid "%qs combined with %<register%> qualifier for %qE" msgstr "" -#: c/c-decl.cc:7791 +#: c/c-decl.cc:7792 #, gcc-internal-format msgid "%qs specified for auto variable %qE" msgstr "" -#: c/c-decl.cc:7807 +#: c/c-decl.cc:7808 #, gcc-internal-format msgid "%qs specified for parameter %qE" msgstr "" -#: c/c-decl.cc:7810 +#: c/c-decl.cc:7811 #, gcc-internal-format msgid "%qs specified for unnamed parameter" msgstr "" -#: c/c-decl.cc:7816 +#: c/c-decl.cc:7817 #, gcc-internal-format msgid "%qs specified for structure field %qE" msgstr "" -#: c/c-decl.cc:7819 +#: c/c-decl.cc:7820 #, gcc-internal-format msgid "%qs specified for structure field" msgstr "" -#: c/c-decl.cc:7834 +#: c/c-decl.cc:7835 #, gcc-internal-format msgid "bit-field %qE has atomic type" msgstr "" -#: c/c-decl.cc:7836 +#: c/c-decl.cc:7837 #, gcc-internal-format msgid "bit-field has atomic type" msgstr "" -#: c/c-decl.cc:7845 +#: c/c-decl.cc:7846 #, gcc-internal-format msgid "alignment specified for typedef %qE" msgstr "" -#: c/c-decl.cc:7847 +#: c/c-decl.cc:7848 #, gcc-internal-format msgid "alignment specified for %<register%> object %qE" msgstr "" -#: c/c-decl.cc:7852 +#: c/c-decl.cc:7853 #, gcc-internal-format msgid "alignment specified for parameter %qE" msgstr "" -#: c/c-decl.cc:7854 +#: c/c-decl.cc:7855 #, gcc-internal-format msgid "alignment specified for unnamed parameter" msgstr "" -#: c/c-decl.cc:7859 +#: c/c-decl.cc:7860 #, gcc-internal-format msgid "alignment specified for bit-field %qE" msgstr "" -#: c/c-decl.cc:7861 +#: c/c-decl.cc:7862 #, gcc-internal-format msgid "alignment specified for unnamed bit-field" msgstr "" -#: c/c-decl.cc:7864 +#: c/c-decl.cc:7865 #, gcc-internal-format msgid "alignment specified for function %qE" msgstr "" -#: c/c-decl.cc:7871 +#: c/c-decl.cc:7872 #, gcc-internal-format msgid "%<_Alignas%> specifiers cannot reduce alignment of %qE" msgstr "" -#: c/c-decl.cc:7874 +#: c/c-decl.cc:7875 #, gcc-internal-format msgid "%<_Alignas%> specifiers cannot reduce alignment of unnamed field" msgstr "" -#: c/c-decl.cc:7905 +#: c/c-decl.cc:7906 #, gcc-internal-format msgid "typedef %q+D declared %<inline%>" msgstr "" -#: c/c-decl.cc:7907 +#: c/c-decl.cc:7908 #, gcc-internal-format msgid "typedef %q+D declared %<_Noreturn%>" msgstr "" -#: c/c-decl.cc:7950 +#: c/c-decl.cc:7951 #, gcc-internal-format msgid "ISO C forbids const or volatile function types" msgstr "" #. C99 6.7.2.1p8 -#: c/c-decl.cc:7961 +#: c/c-decl.cc:7962 #, gcc-internal-format msgid "a member of a structure or union cannot have a variably modified type" msgstr "" -#: c/c-decl.cc:7978 cp/decl.cc:12576 +#: c/c-decl.cc:7979 cp/decl.cc:12578 #, gcc-internal-format msgid "variable or field %qE declared void" msgstr "" -#: c/c-decl.cc:8028 +#: c/c-decl.cc:8029 #, gcc-internal-format msgid "attributes in parameter array declarator ignored" msgstr "" -#: c/c-decl.cc:8070 +#: c/c-decl.cc:8071 #, gcc-internal-format msgid "parameter %q+D declared %<inline%>" msgstr "" -#: c/c-decl.cc:8072 +#: c/c-decl.cc:8073 #, gcc-internal-format msgid "parameter %q+D declared %<_Noreturn%>" msgstr "" -#: c/c-decl.cc:8085 +#: c/c-decl.cc:8086 #, gcc-internal-format msgid "field %qE declared as a function" msgstr "" -#: c/c-decl.cc:8092 +#: c/c-decl.cc:8093 #, gcc-internal-format msgid "field %qE has incomplete type" msgstr "" -#: c/c-decl.cc:8094 +#: c/c-decl.cc:8095 #, gcc-internal-format msgid "unnamed field has incomplete type" msgstr "" -#: c/c-decl.cc:8131 c/c-decl.cc:8142 c/c-decl.cc:8145 +#: c/c-decl.cc:8132 c/c-decl.cc:8143 c/c-decl.cc:8146 #, gcc-internal-format msgid "invalid storage class for function %qE" msgstr "" -#: c/c-decl.cc:8202 +#: c/c-decl.cc:8203 #, gcc-internal-format msgid "cannot inline function %<main%>" msgstr "" -#: c/c-decl.cc:8204 +#: c/c-decl.cc:8205 #, gcc-internal-format msgid "%<main%> declared %<_Noreturn%>" msgstr "" -#: c/c-decl.cc:8215 +#: c/c-decl.cc:8216 #, gcc-internal-format msgid "ISO C99 does not support %<_Noreturn%>" msgstr "" -#: c/c-decl.cc:8218 +#: c/c-decl.cc:8219 #, gcc-internal-format msgid "ISO C90 does not support %<_Noreturn%>" msgstr "" -#: c/c-decl.cc:8240 +#: c/c-decl.cc:8241 #, gcc-internal-format msgid "function previously declared %<static%> redeclared %<extern%>" msgstr "" -#: c/c-decl.cc:8258 +#: c/c-decl.cc:8259 #, gcc-internal-format msgid "%<constexpr%> object has variably modified type" msgstr "" -#: c/c-decl.cc:8262 c/c-parser.cc:13368 +#: c/c-decl.cc:8263 c/c-parser.cc:13368 #, gcc-internal-format msgid "invalid qualifiers for %<constexpr%> object" msgstr "" -#: c/c-decl.cc:8268 c/c-parser.cc:13371 +#: c/c-decl.cc:8269 c/c-parser.cc:13371 #, gcc-internal-format msgid "invalid qualifiers for field of %<constexpr%> object" msgstr "" -#: c/c-decl.cc:8294 +#: c/c-decl.cc:8295 #, gcc-internal-format msgid "variable previously declared %<static%> redeclared %<extern%>" msgstr "" -#: c/c-decl.cc:8306 +#: c/c-decl.cc:8307 #, gcc-internal-format msgid "variable %q+D declared %<inline%>" msgstr "" -#: c/c-decl.cc:8308 +#: c/c-decl.cc:8309 #, gcc-internal-format msgid "variable %q+D declared %<_Noreturn%>" msgstr "" -#: c/c-decl.cc:8343 +#: c/c-decl.cc:8344 #, gcc-internal-format msgid "non-nested function with variably modified type" msgstr "" -#: c/c-decl.cc:8345 +#: c/c-decl.cc:8346 #, gcc-internal-format msgid "object with variably modified type must have no linkage" msgstr "" -#: c/c-decl.cc:8453 c/c-decl.cc:10789 +#: c/c-decl.cc:8454 c/c-decl.cc:10790 #, gcc-internal-format msgid "function declaration isn%'t a prototype" msgstr "" -#: c/c-decl.cc:8465 +#: c/c-decl.cc:8466 #, gcc-internal-format msgid "parameter names (without types) in function declaration" msgstr "" -#: c/c-decl.cc:8513 +#: c/c-decl.cc:8514 #, gcc-internal-format msgid "parameter %u (%q+D) has incomplete type" msgstr "" -#: c/c-decl.cc:8517 +#: c/c-decl.cc:8518 #, gcc-internal-format, gfc-internal-format msgid "parameter %u has incomplete type" msgstr "" -#: c/c-decl.cc:8597 +#: c/c-decl.cc:8598 #, gcc-internal-format msgid "%<void%> as only parameter may not be qualified" msgstr "" -#: c/c-decl.cc:8601 +#: c/c-decl.cc:8602 #, gcc-internal-format msgid "%<void%> must be the only parameter" msgstr "" -#: c/c-decl.cc:8631 +#: c/c-decl.cc:8632 #, gcc-internal-format msgid "parameter %q+D has just a forward declaration" msgstr "" -#: c/c-decl.cc:8639 +#: c/c-decl.cc:8640 #, gcc-internal-format msgid "%<void%> must be the only parameter and unnamed" msgstr "" -#: c/c-decl.cc:8681 +#: c/c-decl.cc:8682 #, gcc-internal-format msgid "" "%<%s %E%> declared inside parameter list will not be visible outside of this " "definition or declaration" msgstr "" -#: c/c-decl.cc:8688 +#: c/c-decl.cc:8689 #, gcc-internal-format, gfc-internal-format msgid "" "anonymous %s declared inside parameter list will not be visible outside of " "this definition or declaration" msgstr "" -#: c/c-decl.cc:8814 +#: c/c-decl.cc:8815 #, gcc-internal-format msgid "enum type defined here" msgstr "" -#: c/c-decl.cc:8820 +#: c/c-decl.cc:8821 #, gcc-internal-format msgid "struct defined here" msgstr "" -#: c/c-decl.cc:8826 +#: c/c-decl.cc:8827 #, gcc-internal-format msgid "union defined here" msgstr "" -#: c/c-decl.cc:8919 +#: c/c-decl.cc:8920 #, gcc-internal-format msgid "redefinition of %<union %E%>" msgstr "" -#: c/c-decl.cc:8921 +#: c/c-decl.cc:8922 #, gcc-internal-format msgid "redefinition of %<struct %E%>" msgstr "" -#: c/c-decl.cc:8930 +#: c/c-decl.cc:8931 #, gcc-internal-format msgid "nested redefinition of %<union %E%>" msgstr "" -#: c/c-decl.cc:8932 +#: c/c-decl.cc:8933 #, gcc-internal-format msgid "nested redefinition of %<struct %E%>" msgstr "" -#: c/c-decl.cc:8965 c/c-decl.cc:10119 +#: c/c-decl.cc:8966 c/c-decl.cc:10120 #, gcc-internal-format msgid "defining type in %qs expression is invalid in C++" msgstr "" -#: c/c-decl.cc:8971 c/c-decl.cc:10125 +#: c/c-decl.cc:8972 c/c-decl.cc:10126 #, gcc-internal-format msgid "%qT defined in underspecified object initializer" msgstr "" -#: c/c-decl.cc:9035 cp/decl.cc:5719 cp/parser.cc:28813 +#: c/c-decl.cc:9036 cp/decl.cc:5721 cp/parser.cc:28813 #, gcc-internal-format msgid "declaration does not declare anything" msgstr "" -#: c/c-decl.cc:9040 +#: c/c-decl.cc:9041 #, gcc-internal-format msgid "ISO C99 doesn%'t support unnamed structs/unions" msgstr "" -#: c/c-decl.cc:9043 +#: c/c-decl.cc:9044 #, gcc-internal-format msgid "ISO C90 doesn%'t support unnamed structs/unions" msgstr "" -#: c/c-decl.cc:9136 c/c-decl.cc:9154 c/c-decl.cc:9215 +#: c/c-decl.cc:9137 c/c-decl.cc:9155 c/c-decl.cc:9216 #, gcc-internal-format msgid "duplicate member %q+D" msgstr "" -#: c/c-decl.cc:9241 +#: c/c-decl.cc:9242 #, gcc-internal-format msgid "empty struct has size 0 in C, size 1 in C++" msgstr "" -#: c/c-decl.cc:9244 +#: c/c-decl.cc:9245 #, gcc-internal-format msgid "empty union has size 0 in C, size 1 in C++" msgstr "" -#: c/c-decl.cc:9478 +#: c/c-decl.cc:9479 #, gcc-internal-format msgid "" "argument %qE to the %<counted_by%> attribute is not a field declaration in " "the same structure as %qD" msgstr "" -#: c/c-decl.cc:9494 +#: c/c-decl.cc:9495 #, gcc-internal-format msgid "" "argument %qE to the %<counted_by%> attribute is not a field declaration with " "an integer type" msgstr "" -#: c/c-decl.cc:9552 +#: c/c-decl.cc:9553 #, gcc-internal-format msgid "union has no named members" msgstr "" -#: c/c-decl.cc:9554 +#: c/c-decl.cc:9555 #, gcc-internal-format msgid "union has no members" msgstr "" -#: c/c-decl.cc:9559 +#: c/c-decl.cc:9560 #, gcc-internal-format msgid "struct has no named members" msgstr "" -#: c/c-decl.cc:9561 +#: c/c-decl.cc:9562 #, gcc-internal-format msgid "struct has no members" msgstr "" -#: c/c-decl.cc:9639 cp/decl.cc:15166 +#: c/c-decl.cc:9640 cp/decl.cc:15168 #, gcc-internal-format msgid "flexible array member in union is a GCC extension" msgstr "" -#: c/c-decl.cc:9643 +#: c/c-decl.cc:9644 #, gcc-internal-format msgid "flexible array member not at end of struct" msgstr "" -#: c/c-decl.cc:9648 +#: c/c-decl.cc:9649 #, gcc-internal-format msgid "" "flexible array member in a struct with no named members is a GCC extension" msgstr "" -#: c/c-decl.cc:9683 +#: c/c-decl.cc:9684 #, gcc-internal-format msgid "" "structure containing a flexible array member is not at the end of another " "structure" msgstr "" -#: c/c-decl.cc:9710 +#: c/c-decl.cc:9711 #, gcc-internal-format msgid "type %qT is too large" msgstr "" -#: c/c-decl.cc:9774 +#: c/c-decl.cc:9775 #, gcc-internal-format msgid "type punning toggles scalar storage order" msgstr "" -#: c/c-decl.cc:9841 +#: c/c-decl.cc:9842 #, gcc-internal-format msgid "union cannot be made transparent" msgstr "" -#: c/c-decl.cc:9855 +#: c/c-decl.cc:9856 #, gcc-internal-format msgid "redefinition of struct or union %qT with variably modified type" msgstr "" -#: c/c-decl.cc:9862 +#: c/c-decl.cc:9863 #, gcc-internal-format msgid "redefinition of struct or union %qT" msgstr "" -#: c/c-decl.cc:10041 +#: c/c-decl.cc:10042 #, gcc-internal-format msgid "nested redefinition of %<enum %E%>" msgstr "" -#: c/c-decl.cc:10089 +#: c/c-decl.cc:10090 #, gcc-internal-format msgid "redeclaration of %<enum %E%>" msgstr "" -#: c/c-decl.cc:10101 +#: c/c-decl.cc:10102 #, gcc-internal-format msgid "%<enum%> declared with but defined without fixed underlying type" msgstr "" -#: c/c-decl.cc:10188 cp/decl.cc:17838 m2/gm2-gcc/m2type.cc:2088 +#: c/c-decl.cc:10189 cp/decl.cc:17840 m2/gm2-gcc/m2type.cc:2088 #, gcc-internal-format msgid "specified mode too small for enumerated values" msgstr "" -#: c/c-decl.cc:10207 +#: c/c-decl.cc:10208 #, gcc-internal-format msgid "enumeration values exceed range of largest integer" msgstr "" -#: c/c-decl.cc:10216 +#: c/c-decl.cc:10217 #, gcc-internal-format msgid "enumeration values exceed range of %qs" msgstr "" -#: c/c-decl.cc:10329 +#: c/c-decl.cc:10330 #, gcc-internal-format msgid "conflicting redefinition of enum %qT" msgstr "" -#: c/c-decl.cc:10362 c/c-decl.cc:10378 +#: c/c-decl.cc:10363 c/c-decl.cc:10379 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant" msgstr "" -#: c/c-decl.cc:10373 +#: c/c-decl.cc:10374 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant expression" msgstr "" -#: c/c-decl.cc:10397 +#: c/c-decl.cc:10398 #, gcc-internal-format msgid "overflow in enumeration values" msgstr "" -#: c/c-decl.cc:10404 +#: c/c-decl.cc:10405 #, gcc-internal-format msgid "enumerator value outside the range of underlying type" msgstr "" -#: c/c-decl.cc:10421 +#: c/c-decl.cc:10422 #, gcc-internal-format msgid "value of redeclared enumerator outside the range of %qT" msgstr "" -#: c/c-decl.cc:10449 +#: c/c-decl.cc:10450 #, gcc-internal-format msgid "enumerator value outside the range of %qs" msgstr "" -#: c/c-decl.cc:10455 +#: c/c-decl.cc:10456 #, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%> before C23" msgstr "" -#: c/c-decl.cc:10663 cp/decl.cc:6053 cp/decl.cc:18438 +#: c/c-decl.cc:10664 cp/decl.cc:6055 cp/decl.cc:18440 #, gcc-internal-format msgid "inline function %qD given attribute %qs" msgstr "" -#: c/c-decl.cc:10682 +#: c/c-decl.cc:10683 #, gcc-internal-format msgid "return type is an incomplete type" msgstr "" -#: c/c-decl.cc:10694 +#: c/c-decl.cc:10695 #, gcc-internal-format msgid "return type defaults to %<int%>" msgstr "" -#: c/c-decl.cc:10722 +#: c/c-decl.cc:10723 #, gcc-internal-format msgid "%q+D defined as variadic function without prototype" msgstr "" -#: c/c-decl.cc:10775 +#: c/c-decl.cc:10776 #, gcc-internal-format msgid "" "ISO C23 does not allow defining parameters for function %qE declared without " "parameters" msgstr "" -#: c/c-decl.cc:10798 +#: c/c-decl.cc:10799 #, gcc-internal-format msgid "no previous prototype for %qD" msgstr "" -#: c/c-decl.cc:10807 +#: c/c-decl.cc:10808 #, gcc-internal-format msgid "%qD was used with no prototype before its definition" msgstr "" -#: c/c-decl.cc:10825 +#: c/c-decl.cc:10826 #, gcc-internal-format msgid "%qD was used with no declaration before its definition" msgstr "" -#: c/c-decl.cc:10844 +#: c/c-decl.cc:10845 #, gcc-internal-format msgid "return type of %qD is not %<int%>" msgstr "" -#: c/c-decl.cc:10846 +#: c/c-decl.cc:10847 #, gcc-internal-format msgid "%<_Atomic%>-qualified return type of %qD" msgstr "" -#: c/c-decl.cc:10853 +#: c/c-decl.cc:10854 #, gcc-internal-format msgid "%qD is normally a non-static function" msgstr "" -#: c/c-decl.cc:10904 +#: c/c-decl.cc:10905 #, gcc-internal-format msgid "old-style parameter declarations in prototyped function definition" msgstr "" -#: c/c-decl.cc:10920 +#: c/c-decl.cc:10921 #, gcc-internal-format msgid "traditional C rejects ISO C style function definitions" msgstr "" -#: c/c-decl.cc:10937 +#: c/c-decl.cc:10938 #, gcc-internal-format msgid "" "ISO C does not support omitting parameter names in function definitions " "before C23" msgstr "" -#: c/c-decl.cc:10977 c/c-decl.cc:10981 +#: c/c-decl.cc:10978 c/c-decl.cc:10982 #, gcc-internal-format msgid "old-style function definition" msgstr "" -#: c/c-decl.cc:10994 +#: c/c-decl.cc:10995 #, gcc-internal-format msgid "parameter name missing from parameter list" msgstr "" -#: c/c-decl.cc:11010 +#: c/c-decl.cc:11011 #, gcc-internal-format msgid "%qD declared as a non-parameter" msgstr "" -#: c/c-decl.cc:11018 +#: c/c-decl.cc:11019 #, gcc-internal-format msgid "multiple parameters named %qD" msgstr "" -#: c/c-decl.cc:11027 +#: c/c-decl.cc:11028 #, gcc-internal-format msgid "parameter %qD declared with void type" msgstr "" -#: c/c-decl.cc:11056 c/c-decl.cc:11061 +#: c/c-decl.cc:11057 c/c-decl.cc:11062 #, gcc-internal-format msgid "type of %qD defaults to %<int%>" msgstr "" -#: c/c-decl.cc:11081 +#: c/c-decl.cc:11082 #, gcc-internal-format msgid "parameter %qD has incomplete type" msgstr "" -#: c/c-decl.cc:11088 +#: c/c-decl.cc:11089 #, gcc-internal-format msgid "declaration for parameter %qD but no such parameter" msgstr "" -#: c/c-decl.cc:11141 +#: c/c-decl.cc:11142 #, gcc-internal-format msgid "number of arguments doesn%'t match built-in prototype" msgstr "" -#: c/c-decl.cc:11152 +#: c/c-decl.cc:11153 #, gcc-internal-format msgid "number of arguments doesn%'t match prototype" msgstr "" -#: c/c-decl.cc:11155 c/c-decl.cc:11202 c/c-decl.cc:11216 +#: c/c-decl.cc:11156 c/c-decl.cc:11203 c/c-decl.cc:11217 #, gcc-internal-format msgid "prototype declaration" msgstr "" -#: c/c-decl.cc:11194 +#: c/c-decl.cc:11195 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match built-in prototype" msgstr "" -#: c/c-decl.cc:11199 +#: c/c-decl.cc:11200 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match prototype" msgstr "" -#: c/c-decl.cc:11209 +#: c/c-decl.cc:11210 #, gcc-internal-format msgid "argument %qD doesn%'t match built-in prototype" msgstr "" -#: c/c-decl.cc:11214 +#: c/c-decl.cc:11215 #, gcc-internal-format msgid "argument %qD doesn%'t match prototype" msgstr "" -#: c/c-decl.cc:11472 cp/decl.cc:19361 +#: c/c-decl.cc:11473 cp/decl.cc:19363 #, gcc-internal-format msgid "no return statement in function returning non-void" msgstr "" -#: c/c-decl.cc:11491 cp/decl.cc:19432 +#: c/c-decl.cc:11492 cp/decl.cc:19434 #, gcc-internal-format msgid "parameter %qD set but not used" msgstr "" -#: c/c-decl.cc:11588 +#: c/c-decl.cc:11589 #, gcc-internal-format msgid "%<for%> loop initial declarations are only allowed in C99 or C11 mode" msgstr "" -#: c/c-decl.cc:11593 +#: c/c-decl.cc:11594 #, gcc-internal-format msgid "" "use option %<-std=c99%>, %<-std=gnu99%>, %<-std=c11%> or %<-std=gnu11%> to " "compile your code" msgstr "" -#: c/c-decl.cc:11600 +#: c/c-decl.cc:11601 #, gcc-internal-format msgid "ISO C90 does not support %<for%> loop initial declarations" msgstr "" -#: c/c-decl.cc:11634 +#: c/c-decl.cc:11635 #, gcc-internal-format msgid "declaration of static variable %qD in %<for%> loop initial declaration" msgstr "" -#: c/c-decl.cc:11638 +#: c/c-decl.cc:11639 #, gcc-internal-format msgid "" "declaration of %<extern%> variable %qD in %<for%> loop initial declaration" msgstr "" -#: c/c-decl.cc:11645 +#: c/c-decl.cc:11646 #, gcc-internal-format msgid "%<struct %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c/c-decl.cc:11650 +#: c/c-decl.cc:11651 #, gcc-internal-format msgid "%<union %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c/c-decl.cc:11656 +#: c/c-decl.cc:11657 #, gcc-internal-format msgid "%<enum %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c/c-decl.cc:11660 +#: c/c-decl.cc:11661 #, gcc-internal-format msgid "declaration of non-variable %qD in %<for%> loop initial declaration" msgstr "" -#: c/c-decl.cc:11960 +#: c/c-decl.cc:11961 #, gcc-internal-format msgid "incompatible address space qualifiers %qs and %qs" msgstr "" -#: c/c-decl.cc:12019 c/c-decl.cc:12026 +#: c/c-decl.cc:12020 c/c-decl.cc:12027 #, gcc-internal-format msgid "duplicate %qE declaration specifier" msgstr "" -#: c/c-decl.cc:12054 c/c-decl.cc:13175 +#: c/c-decl.cc:12055 c/c-decl.cc:13176 #, gcc-internal-format msgid "multiple storage classes in declaration specifiers" msgstr "" -#: c/c-decl.cc:12056 +#: c/c-decl.cc:12057 #, gcc-internal-format msgid "%qs used with %<auto%>" msgstr "" #. auto may only be used with another storage class specifier, #. such as constexpr, if the type is inferred. -#: c/c-decl.cc:12061 +#: c/c-decl.cc:12062 #, gcc-internal-format msgid "%<auto%> used with %<constexpr%>" msgstr "" -#: c/c-decl.cc:12074 c/c-decl.cc:12512 c/c-decl.cc:12970 +#: c/c-decl.cc:12075 c/c-decl.cc:12513 c/c-decl.cc:12971 #, gcc-internal-format msgid "two or more data types in declaration specifiers" msgstr "" -#: c/c-decl.cc:12086 cp/parser.cc:35086 +#: c/c-decl.cc:12087 cp/parser.cc:35091 #, gcc-internal-format msgid "%<long long long%> is too long for GCC" msgstr "" -#: c/c-decl.cc:12099 +#: c/c-decl.cc:12100 #, gcc-internal-format msgid "ISO C90 does not support %<long long%>" msgstr "" -#: c/c-decl.cc:12352 c/c-parser.cc:12542 +#: c/c-decl.cc:12353 c/c-parser.cc:12542 #, gcc-internal-format msgid "ISO C90 does not support complex types" msgstr "" -#: c/c-decl.cc:12406 +#: c/c-decl.cc:12407 #, gcc-internal-format msgid "ISO C does not support saturating types" msgstr "" -#: c/c-decl.cc:12485 c/c-decl.cc:13110 c/c-decl.cc:13169 +#: c/c-decl.cc:12486 c/c-decl.cc:13111 c/c-decl.cc:13170 #, gcc-internal-format msgid "duplicate %qE" msgstr "" -#: c/c-decl.cc:12502 +#: c/c-decl.cc:12503 #, gcc-internal-format msgid "%qs cannot be defined via %<typedef%>" msgstr "" -#: c/c-decl.cc:12506 +#: c/c-decl.cc:12507 #, gcc-internal-format msgid "%qs cannot be used here" msgstr "" -#: c/c-decl.cc:12559 +#: c/c-decl.cc:12560 #, gcc-internal-format msgid "ISO C does not support %<__int%d%> types" msgstr "" -#: c/c-decl.cc:12581 +#: c/c-decl.cc:12582 #, gcc-internal-format msgid "%<__int%d%> is not supported on this target" msgstr "" -#: c/c-decl.cc:12624 +#: c/c-decl.cc:12625 #, gcc-internal-format msgid "ISO C90 does not support boolean types" msgstr "" -#: c/c-decl.cc:12743 +#: c/c-decl.cc:12744 #, gcc-internal-format msgid "ISO C does not support the %<_Float%d%s%> type before C23" msgstr "" -#: c/c-decl.cc:12794 cp/parser.cc:20889 +#: c/c-decl.cc:12795 cp/parser.cc:20889 #, gcc-internal-format msgid "%<_Float%d%s%> is not supported on this target" msgstr "" -#: c/c-decl.cc:12870 +#: c/c-decl.cc:12871 #, gcc-internal-format msgid "ISO C does not support decimal floating-point before C23" msgstr "" -#: c/c-decl.cc:12894 c/c-decl.cc:13271 c/c-parser.cc:11443 +#: c/c-decl.cc:12895 c/c-decl.cc:13272 c/c-parser.cc:11443 #, gcc-internal-format msgid "fixed-point types not supported for this target" msgstr "" -#: c/c-decl.cc:12896 +#: c/c-decl.cc:12897 #, gcc-internal-format msgid "ISO C does not support fixed-point types" msgstr "" -#: c/c-decl.cc:12925 +#: c/c-decl.cc:12926 #, gcc-internal-format msgid "%<_BitInt%> argument is not an integer constant expression" msgstr "" -#: c/c-decl.cc:12931 +#: c/c-decl.cc:12932 #, gcc-internal-format msgid "%<_BitInt%> argument %qE is not a positive integer constant expression" msgstr "" -#: c/c-decl.cc:12938 +#: c/c-decl.cc:12939 #, gcc-internal-format msgid "%<_BitInt%> argument %qE is larger than %<BITINT_MAXWIDTH%> %qd" msgstr "" -#: c/c-decl.cc:12986 +#: c/c-decl.cc:12987 #, gcc-internal-format msgid "C++ lookup of %qD would return a field, not a type" msgstr "" -#: c/c-decl.cc:12999 +#: c/c-decl.cc:13000 #, gcc-internal-format msgid "%qE fails to be a typedef or built in type" msgstr "" -#: c/c-decl.cc:13054 +#: c/c-decl.cc:13055 #, gcc-internal-format msgid "%qE is not at beginning of declaration" msgstr "" #. auto may only be used with another storage class specifier, #. such as constexpr, if the type is inferred. -#: c/c-decl.cc:13075 c/c-decl.cc:13152 +#: c/c-decl.cc:13076 c/c-decl.cc:13153 #, gcc-internal-format msgid "%qE used with %<auto%>" msgstr "" -#: c/c-decl.cc:13077 +#: c/c-decl.cc:13078 #, gcc-internal-format msgid "%qE used with %<register%>" msgstr "" -#: c/c-decl.cc:13079 c/c-decl.cc:13148 +#: c/c-decl.cc:13080 c/c-decl.cc:13149 #, gcc-internal-format msgid "%qE used with %<typedef%>" msgstr "" -#: c/c-decl.cc:13081 c/c-decl.cc:13118 +#: c/c-decl.cc:13082 c/c-decl.cc:13119 #, gcc-internal-format msgid "%qE used with %<constexpr%>" msgstr "" -#: c/c-decl.cc:13095 c/c-parser.cc:3320 c/c-parser.cc:4691 c/c-parser.cc:10707 +#: c/c-decl.cc:13096 c/c-parser.cc:3320 c/c-parser.cc:4691 c/c-parser.cc:10707 #, gcc-internal-format msgid "ISO C99 does not support %qE" msgstr "" -#: c/c-decl.cc:13098 c/c-parser.cc:3323 c/c-parser.cc:4694 c/c-parser.cc:10710 +#: c/c-decl.cc:13099 c/c-parser.cc:3323 c/c-parser.cc:4694 c/c-parser.cc:10710 #, gcc-internal-format msgid "ISO C90 does not support %qE" msgstr "" -#: c/c-decl.cc:13124 +#: c/c-decl.cc:13125 #, gcc-internal-format msgid "%<__thread%> before %<extern%>" msgstr "" -#: c/c-decl.cc:13133 +#: c/c-decl.cc:13134 #, gcc-internal-format msgid "%<__thread%> before %<static%>" msgstr "" -#: c/c-decl.cc:13139 +#: c/c-decl.cc:13140 #, gcc-internal-format msgid "%<typedef%> used with %<auto%>" msgstr "" -#: c/c-decl.cc:13146 +#: c/c-decl.cc:13147 #, gcc-internal-format msgid "%qE used with %<extern%>" msgstr "" -#: c/c-decl.cc:13154 +#: c/c-decl.cc:13155 #, gcc-internal-format msgid "%qE used with %qs" msgstr "" -#: c/c-decl.cc:13167 +#: c/c-decl.cc:13168 #, gcc-internal-format msgid "duplicate %<_Thread_local%> or %<__thread%>" msgstr "" -#: c/c-decl.cc:13183 +#: c/c-decl.cc:13184 #, gcc-internal-format msgid "%qs used with %qE" msgstr "" -#: c/c-decl.cc:13191 +#: c/c-decl.cc:13192 #, gcc-internal-format msgid "%<constexpr%> used with %qE" msgstr "" -#: c/c-decl.cc:13268 +#: c/c-decl.cc:13269 #, gcc-internal-format msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>" msgstr "" -#: c/c-decl.cc:13283 +#: c/c-decl.cc:13284 #, gcc-internal-format msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" msgstr "" -#: c/c-decl.cc:13294 +#: c/c-decl.cc:13295 #, gcc-internal-format msgid "ISO C does not support %<auto%> type deduction before C23" msgstr "" -#: c/c-decl.cc:13323 +#: c/c-decl.cc:13324 #, gcc-internal-format msgid "%<__auto_type%> followed by %<[[]]%> attributes" msgstr "" -#: c/c-decl.cc:13349 c/c-decl.cc:13365 c/c-decl.cc:13391 +#: c/c-decl.cc:13350 c/c-decl.cc:13366 c/c-decl.cc:13392 #, gcc-internal-format msgid "ISO C does not support complex integer types" msgstr "" -#: c/c-decl.cc:13537 +#: c/c-decl.cc:13538 #, gcc-internal-format msgid "%<signed _BitInt%> argument must be at least 2" msgstr "" -#: c/c-decl.cc:13546 +#: c/c-decl.cc:13547 #, gcc-internal-format msgid "ISO C does not support %<%s_BitInt(%d)%> before C23" msgstr "" -#: c/c-decl.cc:13846 cp/semantics.cc:6784 +#: c/c-decl.cc:13847 cp/semantics.cc:6798 #, gcc-internal-format msgid "" "%<#pragma omp declare reduction%> combiner refers to variable %qD which is " "not %<omp_out%> nor %<omp_in%>" msgstr "" -#: c/c-decl.cc:13850 cp/semantics.cc:6788 +#: c/c-decl.cc:13851 cp/semantics.cc:6802 #, gcc-internal-format msgid "" "%<#pragma omp declare reduction%> initializer refers to variable %qD which " "is not %<omp_priv%> nor %<omp_orig%>" msgstr "" -#: c/c-decl.cc:13974 +#: c/c-decl.cc:13975 #, gcc-internal-format msgid "" "ISO C does not support %qs statement with an identifier operand before C2Y" msgstr "" -#: c/c-decl.cc:14026 +#: c/c-decl.cc:14027 #, gcc-internal-format msgid "" "%<break%> statement operand %qE does not refer to a named loop or " "%<switch%>; did you mean %qs?" msgstr "" -#: c/c-decl.cc:14030 +#: c/c-decl.cc:14031 #, gcc-internal-format msgid "" "%<continue%> statement operand %qE does not refer to a named loop; did you " "mean %qs?" msgstr "" -#: c/c-decl.cc:14035 +#: c/c-decl.cc:14036 #, gcc-internal-format msgid "" "%<break%> statement operand %qE does not refer to a named loop or %<switch%>" msgstr "" -#: c/c-decl.cc:14038 +#: c/c-decl.cc:14039 #, gcc-internal-format msgid "%<continue%> statement operand %qE does not refer to a named loop" msgstr "" -#: c/c-decl.cc:14044 +#: c/c-decl.cc:14045 #, gcc-internal-format msgid "%<continue%> statement operand %qE refers to a named %<switch%>" msgstr "" -#: c/c-decl.cc:14046 c/c-decl.cc:14063 +#: c/c-decl.cc:14047 c/c-decl.cc:14064 #, gcc-internal-format msgid "%<switch%> name defined here" msgstr "" -#: c/c-decl.cc:14054 +#: c/c-decl.cc:14055 #, gcc-internal-format msgid "%qs statement operand %qE refers to a loop outside of its body" msgstr "" -#: c/c-decl.cc:14056 +#: c/c-decl.cc:14057 #, gcc-internal-format msgid "loop name defined here" msgstr "" -#: c/c-decl.cc:14060 +#: c/c-decl.cc:14061 #, gcc-internal-format msgid "" "%<break%> statement operand %qE refers to a %<switch%> outside of its body" @@ -50413,37 +50414,37 @@ msgstr "" msgid "%qs is a keyword with %qs onwards" msgstr "" -#: c/c-fold.cc:392 c/c-typeck.cc:14120 cp/typeck.cc:5803 +#: c/c-fold.cc:392 c/c-typeck.cc:14134 cp/typeck.cc:5803 #, gcc-internal-format msgid "left shift of negative value" msgstr "" -#: c/c-fold.cc:405 c/c-typeck.cc:14129 cp/typeck.cc:5811 +#: c/c-fold.cc:405 c/c-typeck.cc:14143 cp/typeck.cc:5811 #, gcc-internal-format msgid "left shift count is negative" msgstr "" -#: c/c-fold.cc:406 c/c-typeck.cc:14056 cp/typeck.cc:5750 +#: c/c-fold.cc:406 c/c-typeck.cc:14070 cp/typeck.cc:5750 #, gcc-internal-format msgid "right shift count is negative" msgstr "" -#: c/c-fold.cc:416 c/c-typeck.cc:14148 cp/typeck.cc:5819 +#: c/c-fold.cc:416 c/c-typeck.cc:14162 cp/typeck.cc:5819 #, gcc-internal-format msgid "left shift count >= width of type" msgstr "" -#: c/c-fold.cc:417 c/c-typeck.cc:14080 cp/typeck.cc:5761 +#: c/c-fold.cc:417 c/c-typeck.cc:14094 cp/typeck.cc:5761 #, gcc-internal-format msgid "right shift count >= width of type" msgstr "" -#: c/c-fold.cc:424 c/c-typeck.cc:14140 +#: c/c-fold.cc:424 c/c-typeck.cc:14154 #, gcc-internal-format msgid "left shift count >= width of vector element" msgstr "" -#: c/c-fold.cc:425 c/c-typeck.cc:14067 +#: c/c-fold.cc:425 c/c-typeck.cc:14081 #, gcc-internal-format msgid "right shift count >= width of vector element" msgstr "" @@ -50463,7 +50464,7 @@ msgstr "" msgid "to match this %qs" msgstr "" -#: c/c-parser.cc:1431 cp/parser.cc:35323 +#: c/c-parser.cc:1431 cp/parser.cc:35328 #, gcc-internal-format msgid "expected end of line" msgstr "" @@ -50473,8 +50474,8 @@ msgstr "" msgid "ISO C forbids an empty translation unit" msgstr "" -#: c/c-parser.cc:1976 c/c-parser.cc:1985 c/c-parser.cc:27770 cp/parser.cc:51245 -#: cp/semantics.cc:4007 cp/semantics.cc:4016 +#: c/c-parser.cc:1976 c/c-parser.cc:1985 c/c-parser.cc:27770 cp/parser.cc:51250 +#: cp/semantics.cc:4011 cp/semantics.cc:4020 #, gcc-internal-format msgid "%qs without corresponding %qs" msgstr "" @@ -50515,8 +50516,8 @@ msgid "unknown type name %qE" msgstr "" #: c/c-parser.cc:2424 c/c-parser.cc:15911 c/c-parser.cc:24927 -#: c/c-parser.cc:25670 c/c-parser.cc:26256 cp/parser.cc:48088 -#: cp/parser.cc:53866 +#: c/c-parser.cc:25670 c/c-parser.cc:26256 cp/parser.cc:48093 +#: cp/parser.cc:53871 #, gcc-internal-format msgid "expected declaration specifiers" msgstr "" @@ -50552,7 +50553,7 @@ msgstr "" msgid "expected %<;%>, identifier or %<(%>" msgstr "" -#: c/c-parser.cc:2575 cp/parser.cc:37581 cp/parser.cc:37653 +#: c/c-parser.cc:2575 cp/parser.cc:37586 cp/parser.cc:37658 #, gcc-internal-format msgid "prefix attributes are ignored for methods" msgstr "" @@ -50572,7 +50573,7 @@ msgstr "" msgid "%<fallthrough%> attribute not followed by %<;%>" msgstr "" -#: c/c-parser.cc:2644 c/c-parser.cc:8283 cp/cp-gimplify.cc:3679 +#: c/c-parser.cc:2644 c/c-parser.cc:8283 cp/cp-gimplify.cc:3684 #, gcc-internal-format msgid "%<assume%> attribute not followed by %<;%>" msgstr "" @@ -50641,7 +50642,7 @@ msgid "ISO C forbids nested functions" msgstr "" #: c/c-parser.cc:3346 c/c-parser.cc:9636 c/c-parser.cc:15984 -#: c/c-parser.cc:20710 cp/parser.cc:42978 +#: c/c-parser.cc:20710 cp/parser.cc:42983 #, gcc-internal-format msgid "expected string literal" msgstr "" @@ -50671,7 +50672,7 @@ msgstr "" msgid "static assertion failed: %E" msgstr "" -#: c/c-parser.cc:3384 cp/semantics.cc:12469 +#: c/c-parser.cc:3384 cp/semantics.cc:12483 #, gcc-internal-format msgid "static assertion failed" msgstr "" @@ -50725,8 +50726,8 @@ msgstr "" #: c/c-parser.cc:19478 c/c-parser.cc:19615 c/c-parser.cc:20481 #: c/c-parser.cc:23540 c/c-parser.cc:26738 c/c-parser.cc:26924 #: c/gimple-parser.cc:1981 c/gimple-parser.cc:2028 cp/parser.cc:9871 -#: cp/parser.cc:35326 cp/parser.cc:38558 cp/parser.cc:41803 cp/parser.cc:41995 -#: cp/parser.cc:49785 cp/parser.cc:53093 +#: cp/parser.cc:35331 cp/parser.cc:38563 cp/parser.cc:41808 cp/parser.cc:42000 +#: cp/parser.cc:49790 cp/parser.cc:53098 #, gcc-internal-format msgid "expected identifier" msgstr "" @@ -50761,7 +50762,7 @@ msgstr "" msgid "comma at end of enumerator list" msgstr "" -#: c/c-parser.cc:4109 c/c-parser.cc:20758 cp/parser.cc:43041 +#: c/c-parser.cc:4109 c/c-parser.cc:20758 cp/parser.cc:43046 #: go/gofrontend/embed.cc:424 #, gcc-internal-format msgid "expected %<,%> or %<}%>" @@ -50868,7 +50869,7 @@ msgstr "" msgid "ISO C does not support %<[[]]%> attributes before C23" msgstr "" -#: c/c-parser.cc:6397 c/c-parser.cc:6463 c/c-typeck.cc:9628 +#: c/c-parser.cc:6397 c/c-parser.cc:6463 c/c-typeck.cc:9642 #, gcc-internal-format msgid "" "variable-sized object may not be initialized except with an empty initializer" @@ -50921,7 +50922,7 @@ msgid "inner loops must be perfectly nested in %<pragma omp tile%>" msgstr "" #: c/c-parser.cc:7084 c/c-parser.cc:7239 cp/parser.cc:12633 cp/parser.cc:12783 -#: cp/parser.cc:50772 +#: cp/parser.cc:50777 #, gcc-internal-format msgid "" "mixing OpenMP directives with attribute and pragma syntax on the same " @@ -50934,7 +50935,7 @@ msgid "OpenMP %<omp::decl%> attribute on a statement" msgstr "" #: c/c-parser.cc:7116 c/c-parser.cc:7337 c/c-parser.cc:27447 cp/parser.cc:12665 -#: cp/parser.cc:50752 cp/parser.cc:50891 +#: cp/parser.cc:50757 cp/parser.cc:50896 #, gcc-internal-format msgid "unknown OpenMP directive name in %qs attribute argument" msgstr "" @@ -51301,7 +51302,7 @@ msgstr "" #: c/c-parser.cc:11517 c/c-parser.cc:13256 c/c-parser.cc:13278 #: c/c-parser.cc:22957 c/gimple-parser.cc:1897 c/gimple-parser.cc:2537 -#: cp/parser.cc:44511 +#: cp/parser.cc:44516 #, gcc-internal-format msgid "expected expression" msgstr "" @@ -51688,12 +51689,12 @@ msgstr "" msgid "no type or storage class may be specified here," msgstr "" -#: c/c-parser.cc:15275 cp/parser.cc:38415 +#: c/c-parser.cc:15275 cp/parser.cc:38420 #, gcc-internal-format msgid "empty property attribute list" msgstr "" -#: c/c-parser.cc:15289 cp/parser.cc:38428 +#: c/c-parser.cc:15289 cp/parser.cc:38433 #, gcc-internal-format msgid "missing property attribute" msgstr "" @@ -51703,61 +51704,61 @@ msgstr "" msgid "unknown property attribute %<%s%s%>" msgstr "" -#: c/c-parser.cc:15331 cp/parser.cc:38465 +#: c/c-parser.cc:15331 cp/parser.cc:38470 #, gcc-internal-format msgid "unknown property attribute" msgstr "" -#: c/c-parser.cc:15340 cp/parser.cc:38474 +#: c/c-parser.cc:15340 cp/parser.cc:38479 #, gcc-internal-format msgid "expected %<=%> after Objective-C %qE" msgstr "" -#: c/c-parser.cc:15351 cp/parser.cc:38488 +#: c/c-parser.cc:15351 cp/parser.cc:38493 #, gcc-internal-format msgid "expected %qE selector name" msgstr "" -#: c/c-parser.cc:15367 cp/parser.cc:38507 +#: c/c-parser.cc:15367 cp/parser.cc:38512 #, gcc-internal-format msgid "setter method names must terminate with %<:%>" msgstr "" -#: c/c-parser.cc:15591 cp/semantics.cc:14071 +#: c/c-parser.cc:15591 cp/semantics.cc:14085 #, gcc-internal-format msgid "" "%<#pragma GCC unroll%> requires an assignment-expression that evaluates to a " "non-negative integral constant less than %u" msgstr "" -#: c/c-parser.cc:15629 cp/parser.cc:53448 +#: c/c-parser.cc:15629 cp/parser.cc:53453 #, gcc-internal-format msgid "intervening code must not contain OpenMP directives" msgstr "" #: c/c-parser.cc:15649 c/c-parser.cc:25667 c/c-parser.cc:25976 -#: c/c-parser.cc:26039 c/c-parser.cc:26149 cp/parser.cc:48085 -#: cp/parser.cc:48433 cp/parser.cc:48548 cp/parser.cc:48647 cp/parser.cc:53480 -#: cp/parser.cc:53496 cp/parser.cc:53512 cp/parser.cc:53528 cp/parser.cc:53545 -#: cp/parser.cc:53562 cp/parser.cc:53579 cp/parser.cc:53606 cp/parser.cc:53620 -#: cp/parser.cc:53645 cp/parser.cc:53659 +#: c/c-parser.cc:26039 c/c-parser.cc:26149 cp/parser.cc:48090 +#: cp/parser.cc:48438 cp/parser.cc:48553 cp/parser.cc:48652 cp/parser.cc:53485 +#: cp/parser.cc:53501 cp/parser.cc:53517 cp/parser.cc:53533 cp/parser.cc:53550 +#: cp/parser.cc:53567 cp/parser.cc:53584 cp/parser.cc:53611 cp/parser.cc:53625 +#: cp/parser.cc:53650 cp/parser.cc:53664 #, gcc-internal-format msgid "%<#pragma %s%> may only be used in compound statements" msgstr "" -#: c/c-parser.cc:15672 cp/parser.cc:53634 +#: c/c-parser.cc:15672 cp/parser.cc:53639 #, gcc-internal-format msgid "%<#pragma acc routine%> must be at file scope" msgstr "" -#: c/c-parser.cc:15771 cp/parser.cc:53764 +#: c/c-parser.cc:15771 cp/parser.cc:53769 #, gcc-internal-format msgid "" "%<#pragma omp scan%> may only be used in a loop construct with %<inscan%> " "%<reduction%> clause" msgstr "" -#: c/c-parser.cc:15778 cp/parser.cc:53770 +#: c/c-parser.cc:15778 cp/parser.cc:53775 #, gcc-internal-format msgid "" "%<#pragma omp section%> may only be used in %<#pragma omp sections%> " @@ -51769,12 +51770,12 @@ msgstr "" msgid "%<#pragma %s%> may only be used at file scope" msgstr "" -#: c/c-parser.cc:15877 cp/parser.cc:53853 +#: c/c-parser.cc:15877 cp/parser.cc:53858 #, gcc-internal-format msgid "for, while or do statement expected" msgstr "" -#: c/c-parser.cc:15893 cp/parser.cc:53470 +#: c/c-parser.cc:15893 cp/parser.cc:53475 #, gcc-internal-format msgid "%<#pragma GCC pch_preprocess%> must be first" msgstr "" @@ -51784,11 +51785,11 @@ msgstr "" #: c/c-parser.cc:22762 c/c-parser.cc:22769 c/c-parser.cc:27120 #: c/c-parser.cc:28325 c/c-parser.cc:28333 c/c-parser.cc:28709 #: c/c-parser.cc:28719 c/c-parser.cc:28813 c/c-parser.cc:28820 -#: c/c-parser.cc:28827 cp/parser.cc:38954 cp/parser.cc:42635 cp/parser.cc:44037 -#: cp/parser.cc:44074 cp/parser.cc:44263 cp/parser.cc:44326 cp/parser.cc:44333 -#: cp/parser.cc:44340 cp/parser.cc:50006 cp/parser.cc:50013 cp/parser.cc:50020 -#: cp/parser.cc:50553 cp/parser.cc:52334 cp/parser.cc:52342 cp/parser.cc:52494 -#: cp/parser.cc:52504 +#: c/c-parser.cc:28827 cp/parser.cc:38959 cp/parser.cc:42640 cp/parser.cc:44042 +#: cp/parser.cc:44079 cp/parser.cc:44268 cp/parser.cc:44331 cp/parser.cc:44338 +#: cp/parser.cc:44345 cp/parser.cc:50011 cp/parser.cc:50018 cp/parser.cc:50025 +#: cp/parser.cc:50558 cp/parser.cc:52339 cp/parser.cc:52347 cp/parser.cc:52499 +#: cp/parser.cc:52509 #, gcc-internal-format msgid "too many %qs clauses" msgstr "" @@ -51803,58 +51804,58 @@ msgstr "" msgid "%qD is not a variable" msgstr "" -#: c/c-parser.cc:16914 cp/semantics.cc:9112 +#: c/c-parser.cc:16914 cp/semantics.cc:9126 #, gcc-internal-format msgid "%qD is not a pointer variable" msgstr "" -#: c/c-parser.cc:16956 cp/parser.cc:39845 +#: c/c-parser.cc:16956 cp/parser.cc:39850 #, gcc-internal-format msgid "collapse argument needs positive constant integer expression" msgstr "" -#: c/c-parser.cc:17051 cp/parser.cc:39923 +#: c/c-parser.cc:17051 cp/parser.cc:39928 #, gcc-internal-format msgid "expected %<none%> or %<present%>" msgstr "" -#: c/c-parser.cc:17053 cp/parser.cc:39925 +#: c/c-parser.cc:17053 cp/parser.cc:39930 #, gcc-internal-format msgid "expected %<none%>, %<shared%>, %<private%> or %<firstprivate%>" msgstr "" -#: c/c-parser.cc:17138 cp/parser.cc:39995 +#: c/c-parser.cc:17138 cp/parser.cc:40000 #, gcc-internal-format msgid "expected constant logical expression" msgstr "" -#: c/c-parser.cc:17215 cp/parser.cc:40077 +#: c/c-parser.cc:17215 cp/parser.cc:40082 #, gcc-internal-format msgid "expected %<data%>, %<update%>, %<enter%> or %<exit%>" msgstr "" #: c/c-parser.cc:17235 c/c-parser.cc:26032 c/c-parser.cc:26142 -#: cp/parser.cc:40095 cp/parser.cc:48425 cp/parser.cc:48540 +#: cp/parser.cc:40100 cp/parser.cc:48430 cp/parser.cc:48545 #, gcc-internal-format msgid "expected %<data%>" msgstr "" -#: c/c-parser.cc:17288 cp/parser.cc:40150 +#: c/c-parser.cc:17288 cp/parser.cc:40155 #, gcc-internal-format msgid "too many %<if%> clauses with %qs modifier" msgstr "" -#: c/c-parser.cc:17295 cp/parser.cc:40157 +#: c/c-parser.cc:17295 cp/parser.cc:40162 #, gcc-internal-format msgid "too many %<if%> clauses" msgstr "" -#: c/c-parser.cc:17297 cp/parser.cc:40159 +#: c/c-parser.cc:17297 cp/parser.cc:40164 #, gcc-internal-format msgid "too many %<if%> clauses without modifier" msgstr "" -#: c/c-parser.cc:17303 cp/parser.cc:40165 +#: c/c-parser.cc:17303 cp/parser.cc:40170 #, gcc-internal-format msgid "" "if any %<if%> clause has modifier, then all %<if%> clauses have to use " @@ -51879,22 +51880,22 @@ msgstr "" msgid "%<num_tasks%> value must be positive" msgstr "" -#: c/c-parser.cc:17542 cp/semantics.cc:9327 +#: c/c-parser.cc:17542 cp/semantics.cc:9341 #, gcc-internal-format msgid "%<grainsize%> value must be positive" msgstr "" -#: c/c-parser.cc:17591 cp/semantics.cc:9357 +#: c/c-parser.cc:17591 cp/semantics.cc:9371 #, gcc-internal-format msgid "%<priority%> value must be non-negative" msgstr "" -#: c/c-parser.cc:17625 cp/parser.cc:40391 +#: c/c-parser.cc:17625 cp/parser.cc:40396 #, gcc-internal-format msgid "expected constant integer expression with valid sync-hint value" msgstr "" -#: c/c-parser.cc:17697 cp/parser.cc:40461 +#: c/c-parser.cc:17697 cp/parser.cc:40466 #, gcc-internal-format msgid "" "expected %<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<none%> " @@ -51906,96 +51907,96 @@ msgstr "" msgid "expected %<scalar%>, %<aggregate%>, %<pointer%> or %<all%>" msgstr "" -#: c/c-parser.cc:17842 cp/parser.cc:40613 +#: c/c-parser.cc:17842 cp/parser.cc:40618 #, gcc-internal-format msgid "too many %<defaultmap%> clauses with %qs category" msgstr "" -#: c/c-parser.cc:17845 cp/parser.cc:40616 +#: c/c-parser.cc:17845 cp/parser.cc:40621 #, gcc-internal-format msgid "too many %<defaultmap%> clauses with unspecified category" msgstr "" -#: c/c-parser.cc:17929 cp/semantics.cc:8181 cp/semantics.cc:8236 +#: c/c-parser.cc:17929 cp/semantics.cc:8195 cp/semantics.cc:8250 #, gcc-internal-format msgid "%qs expression must be integral" msgstr "" -#: c/c-parser.cc:17941 c/c-parser.cc:18064 cp/semantics.cc:8215 -#: cp/semantics.cc:8250 +#: c/c-parser.cc:17941 c/c-parser.cc:18064 cp/semantics.cc:8229 +#: cp/semantics.cc:8264 #, gcc-internal-format msgid "%qs value must be positive" msgstr "" -#: c/c-parser.cc:18003 cp/parser.cc:39608 +#: c/c-parser.cc:18003 cp/parser.cc:39613 #, gcc-internal-format msgid "too many %<static%> arguments" msgstr "" -#: c/c-parser.cc:18037 cp/parser.cc:39641 +#: c/c-parser.cc:18037 cp/parser.cc:39646 #, gcc-internal-format msgid "unexpected argument" msgstr "" -#: c/c-parser.cc:18204 cp/semantics.cc:9543 +#: c/c-parser.cc:18204 cp/semantics.cc:9557 #, gcc-internal-format msgid "%<tile%> argument needs positive integral constant" msgstr "" -#: c/c-parser.cc:18272 cp/parser.cc:43254 +#: c/c-parser.cc:18272 cp/parser.cc:43259 #, gcc-internal-format msgid "too many %<self%> clauses" msgstr "" -#: c/c-parser.cc:18314 cp/parser.cc:40666 +#: c/c-parser.cc:18314 cp/parser.cc:40671 #, gcc-internal-format msgid "expected %<reproducible%> or %<unconstrained%>" msgstr "" -#: c/c-parser.cc:18323 c/c-parser.cc:18329 cp/parser.cc:40675 -#: cp/parser.cc:40685 +#: c/c-parser.cc:18323 c/c-parser.cc:18329 cp/parser.cc:40680 +#: cp/parser.cc:40690 #, gcc-internal-format msgid "expected %<concurrent%>" msgstr "" -#: c/c-parser.cc:18365 cp/parser.cc:40725 +#: c/c-parser.cc:18365 cp/parser.cc:40730 #, gcc-internal-format msgid "expected %<teams%>, %<parallel%> or %<thread%>" msgstr "" -#: c/c-parser.cc:18418 cp/parser.cc:40793 +#: c/c-parser.cc:18418 cp/parser.cc:40798 #, gcc-internal-format msgid "ordered argument needs positive constant integer expression" msgstr "" -#: c/c-parser.cc:18543 c/c-parser.cc:27870 cp/parser.cc:51944 +#: c/c-parser.cc:18543 c/c-parser.cc:27870 cp/parser.cc:51949 #, gcc-internal-format msgid "" "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or " "identifier" msgstr "" -#: c/c-parser.cc:18665 cp/parser.cc:41051 +#: c/c-parser.cc:18665 cp/parser.cc:41056 #, gcc-internal-format msgid "both %<monotonic%> and %<nonmonotonic%> modifiers specified" msgstr "" -#: c/c-parser.cc:18719 cp/parser.cc:41067 +#: c/c-parser.cc:18719 cp/parser.cc:41072 #, gcc-internal-format msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter" msgstr "" -#: c/c-parser.cc:18723 cp/parser.cc:41070 +#: c/c-parser.cc:18723 cp/parser.cc:41075 #, gcc-internal-format msgid "schedule %<auto%> does not take a %<chunk_size%> parameter" msgstr "" -#: c/c-parser.cc:18736 cp/semantics.cc:8297 +#: c/c-parser.cc:18736 cp/semantics.cc:8311 #, gcc-internal-format msgid "chunk size value must be positive" msgstr "" -#: c/c-parser.cc:18759 cp/parser.cc:41090 +#: c/c-parser.cc:18759 cp/parser.cc:41095 #, gcc-internal-format msgid "invalid schedule kind" msgstr "" @@ -52005,24 +52006,24 @@ msgstr "" msgid "%<num_teams%> value must be positive" msgstr "" -#: c/c-parser.cc:18917 cp/semantics.cc:8264 +#: c/c-parser.cc:18917 cp/semantics.cc:8278 #, gcc-internal-format msgid "%<num_teams%> lower bound %qE bigger than upper bound %qE" msgstr "" -#: c/c-parser.cc:18966 cp/semantics.cc:8393 +#: c/c-parser.cc:18966 cp/semantics.cc:8407 #, gcc-internal-format msgid "%<thread_limit%> value must be positive" msgstr "" -#: c/c-parser.cc:19011 cp/semantics.cc:8521 +#: c/c-parser.cc:19011 cp/semantics.cc:8535 #, gcc-internal-format msgid "" "%<aligned%> clause alignment expression must be positive constant integer " "expression" msgstr "" -#: c/c-parser.cc:19123 c/c-parser.cc:22412 cp/parser.cc:44029 +#: c/c-parser.cc:19123 c/c-parser.cc:22412 cp/parser.cc:44034 #, gcc-internal-format msgid "expected %<allocator%> or %<align%>" msgstr "" @@ -52032,26 +52033,26 @@ msgstr "" msgid "duplicate %qs modifier" msgstr "" -#: c/c-parser.cc:19178 cp/semantics.cc:8654 +#: c/c-parser.cc:19178 cp/semantics.cc:8668 #, gcc-internal-format msgid "" "%<allocate%> clause allocator expression has type %qT rather than " "%<omp_allocator_handle_t%>" msgstr "" -#: c/c-parser.cc:19189 cp/semantics.cc:8609 cp/semantics.cc:8625 +#: c/c-parser.cc:19189 cp/semantics.cc:8623 cp/semantics.cc:8639 #, gcc-internal-format msgid "" "%<allocate%> clause %<align%> modifier argument needs to be positive " "constant power of two integer expression" msgstr "" -#: c/c-parser.cc:19308 cp/parser.cc:41629 +#: c/c-parser.cc:19308 cp/parser.cc:41634 #, gcc-internal-format msgid "multiple linear modifiers" msgstr "" -#: c/c-parser.cc:19320 cp/parser.cc:41642 +#: c/c-parser.cc:19320 cp/parser.cc:41647 #, gcc-internal-format msgid "multiple %<step%> modifiers" msgstr "" @@ -52073,66 +52074,66 @@ msgid "" "%<simdlen%> clause expression must be positive constant integer expression" msgstr "" -#: c/c-parser.cc:19807 cp/parser.cc:42189 +#: c/c-parser.cc:19807 cp/parser.cc:42194 #, gcc-internal-format msgid "%<iterator%> modifier incompatible with %qs" msgstr "" -#: c/c-parser.cc:19855 cp/parser.cc:42244 cp/parser.cc:42696 cp/parser.cc:42763 +#: c/c-parser.cc:19855 cp/parser.cc:42249 cp/parser.cc:42701 cp/parser.cc:42768 #, gcc-internal-format msgid "invalid depend kind" msgstr "" -#: c/c-parser.cc:19916 cp/parser.cc:42274 +#: c/c-parser.cc:19916 cp/parser.cc:42279 #, gcc-internal-format msgid "invalid doacross kind" msgstr "" -#: c/c-parser.cc:19985 cp/parser.cc:42417 +#: c/c-parser.cc:19985 cp/parser.cc:42422 #, gcc-internal-format msgid "too many %<always%> modifiers" msgstr "" -#: c/c-parser.cc:19995 cp/parser.cc:42430 +#: c/c-parser.cc:19995 cp/parser.cc:42435 #, gcc-internal-format msgid "too many %<close%> modifiers" msgstr "" -#: c/c-parser.cc:20005 cp/parser.cc:42443 +#: c/c-parser.cc:20005 cp/parser.cc:42448 #, gcc-internal-format msgid "too many %<present%> modifiers" msgstr "" -#: c/c-parser.cc:20013 cp/parser.cc:42454 +#: c/c-parser.cc:20013 cp/parser.cc:42459 #, gcc-internal-format msgid "" "%<map%> clause with map-type modifier other than %<always%>, %<close%> or " "%<present%>" msgstr "" -#: c/c-parser.cc:20051 cp/parser.cc:42494 +#: c/c-parser.cc:20051 cp/parser.cc:42499 #, gcc-internal-format msgid "invalid map kind" msgstr "" -#: c/c-parser.cc:20103 cp/parser.cc:42558 +#: c/c-parser.cc:20103 cp/parser.cc:42563 #, gcc-internal-format msgid "" "%<ancestor%> device modifier not preceded by %<requires%> directive with " "%<reverse_offload%> clause" msgstr "" -#: c/c-parser.cc:20115 cp/parser.cc:42569 +#: c/c-parser.cc:20115 cp/parser.cc:42574 #, gcc-internal-format msgid "expected %<ancestor%> or %<device_num%>" msgstr "" -#: c/c-parser.cc:20138 cp/semantics.cc:8418 +#: c/c-parser.cc:20138 cp/semantics.cc:8432 #, gcc-internal-format msgid "the %<device%> clause expression must evaluate to %<1%>" msgstr "" -#: c/c-parser.cc:20171 cp/parser.cc:42640 +#: c/c-parser.cc:20171 cp/parser.cc:42645 #, gcc-internal-format msgid "invalid dist_schedule kind" msgstr "" @@ -52147,171 +52148,171 @@ msgstr "" msgid "expected %<host%>, %<nohost%> or %<any%>" msgstr "" -#: c/c-parser.cc:20400 cp/semantics.cc:9665 cp/semantics.cc:9683 +#: c/c-parser.cc:20400 cp/semantics.cc:9679 cp/semantics.cc:9697 #, gcc-internal-format msgid "%<partial%> argument needs positive constant integer expression" msgstr "" -#: c/c-parser.cc:20501 cp/semantics.cc:8837 +#: c/c-parser.cc:20501 cp/semantics.cc:8851 #, gcc-internal-format msgid "" "%<detach%> clause event handle has type %qT rather than " "%<omp_event_handle_t%>" msgstr "" -#: c/c-parser.cc:20572 c/c-parser.cc:20666 cp/parser.cc:42823 -#: cp/parser.cc:42935 +#: c/c-parser.cc:20572 c/c-parser.cc:20666 cp/parser.cc:42828 +#: cp/parser.cc:42940 #, gcc-internal-format msgid "string literal must not contain %<\\0%>" msgstr "" -#: c/c-parser.cc:20581 c/c-parser.cc:20702 cp/parser.cc:42830 -#: cp/parser.cc:42970 +#: c/c-parser.cc:20581 c/c-parser.cc:20702 cp/parser.cc:42835 +#: cp/parser.cc:42975 #, gcc-internal-format msgid "unknown foreign runtime identifier %qs" msgstr "" -#: c/c-parser.cc:20596 c/c-parser.cc:20725 cp/parser.cc:42845 -#: cp/parser.cc:42992 +#: c/c-parser.cc:20596 c/c-parser.cc:20725 cp/parser.cc:42850 +#: cp/parser.cc:42997 #, gcc-internal-format msgid "expected string literal or constant integer expression" msgstr "" -#: c/c-parser.cc:20604 c/c-parser.cc:20733 cp/parser.cc:42853 -#: cp/parser.cc:43000 cp/semantics.cc:7513 +#: c/c-parser.cc:20604 c/c-parser.cc:20733 cp/parser.cc:42858 +#: cp/parser.cc:43005 cp/semantics.cc:7527 #, gcc-internal-format msgid "unknown foreign runtime identifier %qwd" msgstr "" -#: c/c-parser.cc:20642 cp/parser.cc:42912 +#: c/c-parser.cc:20642 cp/parser.cc:42917 #, gcc-internal-format msgid "expected %<fr%> or %<attr%> preference selector" msgstr "" -#: c/c-parser.cc:20650 cp/parser.cc:42920 +#: c/c-parser.cc:20650 cp/parser.cc:42925 #, gcc-internal-format msgid "duplicated %<fr%> preference selector" msgstr "" -#: c/c-parser.cc:20676 cp/parser.cc:42944 +#: c/c-parser.cc:20676 cp/parser.cc:42949 #, gcc-internal-format msgid "%<attr%> string literal must start with %<ompx_%>" msgstr "" -#: c/c-parser.cc:20684 cp/parser.cc:42951 +#: c/c-parser.cc:20684 cp/parser.cc:42956 #, gcc-internal-format msgid "%<attr%> string literal must not contain a comma" msgstr "" -#: c/c-parser.cc:20696 cp/parser.cc:42963 +#: c/c-parser.cc:20696 cp/parser.cc:42968 #, gcc-internal-format msgid "non-empty string literal expected" msgstr "" -#: c/c-parser.cc:20806 cp/parser.cc:43103 +#: c/c-parser.cc:20806 cp/parser.cc:43108 #, gcc-internal-format msgid "duplicate %<targetsync%> modifier" msgstr "" -#: c/c-parser.cc:20813 cp/parser.cc:43110 +#: c/c-parser.cc:20813 cp/parser.cc:43115 #, gcc-internal-format msgid "duplicate %<target%> modifier" msgstr "" -#: c/c-parser.cc:20820 cp/parser.cc:43117 +#: c/c-parser.cc:20820 cp/parser.cc:43122 #, gcc-internal-format msgid "duplicate %<prefer_type%> modifier" msgstr "" -#: c/c-parser.cc:20841 cp/parser.cc:43138 +#: c/c-parser.cc:20841 cp/parser.cc:43143 #, gcc-internal-format msgid "expected %<prefer_type%>, %<target%>, or %<targetsync%>" msgstr "" -#: c/c-parser.cc:20877 c/c-parser.cc:27149 cp/parser.cc:43175 -#: cp/parser.cc:50578 +#: c/c-parser.cc:20877 c/c-parser.cc:27149 cp/parser.cc:43180 +#: cp/parser.cc:50583 #, gcc-internal-format msgid "missing required %<target%> and/or %<targetsync%> modifier" msgstr "" -#: c/c-parser.cc:21118 cp/parser.cc:43470 +#: c/c-parser.cc:21118 cp/parser.cc:43475 #, gcc-internal-format msgid "expected an OpenACC clause" msgstr "" #: c/c-parser.cc:21129 c/c-parser.cc:21526 c/c-parser.cc:29112 -#: cp/parser.cc:43481 cp/parser.cc:43934 cp/parser.cc:51422 +#: cp/parser.cc:43486 cp/parser.cc:43939 cp/parser.cc:51427 #, gcc-internal-format msgid "%qs is not valid for %qs" msgstr "" -#: c/c-parser.cc:21174 cp/parser.cc:43529 +#: c/c-parser.cc:21174 cp/parser.cc:43534 #, gcc-internal-format msgid "clauses in %<simd%> trait should be separated by %<,%>" msgstr "" -#: c/c-parser.cc:21327 cp/parser.cc:43722 +#: c/c-parser.cc:21327 cp/parser.cc:43727 #, gcc-internal-format msgid "%qs must be the first clause of %qs" msgstr "" -#: c/c-parser.cc:21515 cp/parser.cc:43923 +#: c/c-parser.cc:21515 cp/parser.cc:43928 #, gcc-internal-format msgid "expected an OpenMP clause" msgstr "" -#: c/c-parser.cc:21676 cp/parser.cc:49110 +#: c/c-parser.cc:21676 cp/parser.cc:49115 #, gcc-internal-format msgid "no valid clauses specified in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:21686 cp/parser.cc:49120 +#: c/c-parser.cc:21686 cp/parser.cc:49125 #, gcc-internal-format msgid "array section in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:21706 cp/parser.cc:49140 +#: c/c-parser.cc:21706 cp/parser.cc:49145 #, gcc-internal-format msgid "%qD must be a global variable in %<#pragma acc declare link%>" msgstr "" -#: c/c-parser.cc:21717 cp/parser.cc:49151 +#: c/c-parser.cc:21717 cp/parser.cc:49156 #, gcc-internal-format msgid "invalid OpenACC clause at file scope" msgstr "" -#: c/c-parser.cc:21724 cp/parser.cc:49158 +#: c/c-parser.cc:21724 cp/parser.cc:49163 #, gcc-internal-format msgid "invalid use of %<extern%> variable %qD in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:21732 cp/parser.cc:49166 +#: c/c-parser.cc:21732 cp/parser.cc:49171 #, gcc-internal-format msgid "invalid use of %<global%> variable %qD in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:21743 cp/parser.cc:49188 +#: c/c-parser.cc:21743 cp/parser.cc:49193 #, gcc-internal-format msgid "" "%qD must be a variable declared in the same scope as %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:21753 cp/parser.cc:49211 +#: c/c-parser.cc:21753 cp/parser.cc:49216 #, gcc-internal-format msgid "variable %qD used more than once with %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:21846 cp/parser.cc:49295 +#: c/c-parser.cc:21846 cp/parser.cc:49300 #, gcc-internal-format msgid "expected %<data%> after %<#pragma acc %s%>" msgstr "" -#: c/c-parser.cc:21862 cp/parser.cc:49312 +#: c/c-parser.cc:21862 cp/parser.cc:49317 #, gcc-internal-format msgid "%<#pragma acc %s data%> has no data movement clause" msgstr "" -#: c/c-parser.cc:21894 cp/parser.cc:49070 +#: c/c-parser.cc:21894 cp/parser.cc:49075 #, gcc-internal-format msgid "%<host_data%> construct requires %<use_device%> clause" msgstr "" @@ -52326,7 +52327,7 @@ msgstr "" msgid "expected function name" msgstr "" -#: c/c-parser.cc:22145 cp/parser.cc:52761 +#: c/c-parser.cc:22145 cp/parser.cc:52766 #, gcc-internal-format msgid "%qD does not refer to a function" msgstr "" @@ -52338,24 +52339,24 @@ msgid "" "definition" msgstr "" -#: c/c-parser.cc:22208 cp/parser.cc:52812 cp/parser.cc:52859 +#: c/c-parser.cc:22208 cp/parser.cc:52817 cp/parser.cc:52864 #, gcc-internal-format msgid "" "%<#pragma acc routine%> not immediately followed by a single function " "declaration or definition" msgstr "" -#: c/c-parser.cc:22239 cp/parser.cc:52887 +#: c/c-parser.cc:22239 cp/parser.cc:52892 #, gcc-internal-format msgid "%<#pragma acc routine%> must be applied before use" msgstr "" -#: c/c-parser.cc:22240 cp/parser.cc:52889 +#: c/c-parser.cc:22240 cp/parser.cc:52894 #, gcc-internal-format msgid "%<#pragma acc routine%> must be applied before definition" msgstr "" -#: c/c-parser.cc:22285 cp/parser.cc:49528 +#: c/c-parser.cc:22285 cp/parser.cc:49533 #, gcc-internal-format msgid "" "%<#pragma acc update%> must contain at least one %<device%> or %<host%> or " @@ -52385,7 +52386,7 @@ msgstr "" msgid "modified here" msgstr "" -#: c/c-parser.cc:22436 cp/parser.cc:44049 cp/parser.cc:44064 +#: c/c-parser.cc:22436 cp/parser.cc:44054 cp/parser.cc:44069 #, gcc-internal-format msgid "" "%<align%> clause argument needs to be positive constant power of two integer " @@ -52426,17 +52427,17 @@ msgstr "" msgid "%<allocator%> clause requires a predefined allocator as %qD is static" msgstr "" -#: c/c-parser.cc:22663 cp/parser.cc:44229 +#: c/c-parser.cc:22663 cp/parser.cc:44234 #, gcc-internal-format msgid "expected %<read%>, %<write%>, %<update%>, or %<capture%> clause" msgstr "" -#: c/c-parser.cc:22702 cp/parser.cc:44268 +#: c/c-parser.cc:22702 cp/parser.cc:44273 #, gcc-internal-format msgid "expected %<seq_cst%>, %<acquire%> or %<relaxed%>" msgstr "" -#: c/c-parser.cc:22726 cp/parser.cc:44297 +#: c/c-parser.cc:22726 cp/parser.cc:44302 #, gcc-internal-format msgid "" "expected %<read%>, %<write%>, %<update%>, %<capture%>, %<compare%>, " @@ -52444,100 +52445,100 @@ msgid "" "%<hint%> clause" msgstr "" -#: c/c-parser.cc:22741 cp/parser.cc:44312 +#: c/c-parser.cc:22741 cp/parser.cc:44317 #, gcc-internal-format msgid "too many atomic clauses" msgstr "" -#: c/c-parser.cc:22748 cp/parser.cc:44319 +#: c/c-parser.cc:22748 cp/parser.cc:44324 #, gcc-internal-format msgid "too many memory order clauses" msgstr "" -#: c/c-parser.cc:22786 c/c-parser.cc:22793 cp/parser.cc:44357 -#: cp/parser.cc:44364 +#: c/c-parser.cc:22786 c/c-parser.cc:22793 cp/parser.cc:44362 +#: cp/parser.cc:44369 #, gcc-internal-format msgid "%qs clause is incompatible with %<read%> or %<write%> clauses" msgstr "" -#: c/c-parser.cc:22799 c/c-parser.cc:22804 cp/parser.cc:44370 -#: cp/parser.cc:44375 +#: c/c-parser.cc:22799 c/c-parser.cc:22804 cp/parser.cc:44375 +#: cp/parser.cc:44380 #, gcc-internal-format msgid "%qs clause requires %qs clause" msgstr "" -#: c/c-parser.cc:22827 cp/parser.cc:44398 +#: c/c-parser.cc:22827 cp/parser.cc:44403 #, gcc-internal-format msgid "" "%<#pragma omp atomic write%> incompatible with %<acquire%> clause implicitly " "provided by a %<requires%> directive" msgstr "" -#: c/c-parser.cc:22838 cp/parser.cc:44409 +#: c/c-parser.cc:22838 cp/parser.cc:44414 #, gcc-internal-format msgid "" "%<#pragma omp atomic read%> incompatible with %<release%> clause implicitly " "provided by a %<requires%> directive" msgstr "" -#: c/c-parser.cc:22870 cp/parser.cc:44441 +#: c/c-parser.cc:22870 cp/parser.cc:44446 #, gcc-internal-format msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause" msgstr "" -#: c/c-parser.cc:22880 cp/parser.cc:44451 +#: c/c-parser.cc:22880 cp/parser.cc:44456 #, gcc-internal-format msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause" msgstr "" -#: c/c-parser.cc:23001 cp/parser.cc:44551 +#: c/c-parser.cc:23001 cp/parser.cc:44556 #, gcc-internal-format msgid "expected %<==%> comparison in %<if%> condition" msgstr "" -#: c/c-parser.cc:23008 cp/parser.cc:44558 +#: c/c-parser.cc:23008 cp/parser.cc:44563 #, gcc-internal-format msgid "expected %<==%>, %<<%> or %<>%> comparison in %<if%> condition" msgstr "" -#: c/c-parser.cc:23081 cp/parser.cc:44623 cp/parser.cc:44906 cp/parser.cc:45000 -#: cp/parser.cc:45018 +#: c/c-parser.cc:23081 cp/parser.cc:44628 cp/parser.cc:44911 cp/parser.cc:45005 +#: cp/parser.cc:45023 #, gcc-internal-format msgid "invalid form of %<#pragma omp atomic compare%>" msgstr "" -#: c/c-parser.cc:23092 cp/parser.cc:44634 +#: c/c-parser.cc:23092 cp/parser.cc:44639 #, gcc-internal-format msgid "unexpected %<else%>" msgstr "" -#: c/c-parser.cc:23152 cp/parser.cc:45073 +#: c/c-parser.cc:23152 cp/parser.cc:45078 #, gcc-internal-format msgid "invalid form of %<pragma omp atomic compare%>" msgstr "" -#: c/c-parser.cc:23423 cp/parser.cc:44927 cp/parser.cc:44953 +#: c/c-parser.cc:23423 cp/parser.cc:44932 cp/parser.cc:44958 #, gcc-internal-format msgid "invalid form of %<#pragma omp atomic%>" msgstr "" -#: c/c-parser.cc:23427 cp/parser.cc:44993 cp/parser.cc:45027 +#: c/c-parser.cc:23427 cp/parser.cc:44998 cp/parser.cc:45032 #, gcc-internal-format msgid "invalid operator for %<#pragma omp atomic%>" msgstr "" -#: c/c-parser.cc:23478 cp/parser.cc:45062 +#: c/c-parser.cc:23478 cp/parser.cc:45067 #, gcc-internal-format msgid "%<weak%> clause requires atomic equality comparison" msgstr "" -#: c/c-parser.cc:23484 cp/semantics.cc:11909 cp/semantics.cc:11919 +#: c/c-parser.cc:23484 cp/semantics.cc:11923 cp/semantics.cc:11933 #, gcc-internal-format msgid "" "%<#pragma omp atomic capture%> uses two different expressions for memory" msgstr "" -#: c/c-parser.cc:23587 cp/semantics.cc:11996 +#: c/c-parser.cc:23587 cp/semantics.cc:12010 #, gcc-internal-format msgid "%<depobj%> expression is not lvalue expression" msgstr "" @@ -52547,29 +52548,29 @@ msgstr "" msgid "%<destroy%> expression is not lvalue expression" msgstr "" -#: c/c-parser.cc:23636 cp/parser.cc:45215 +#: c/c-parser.cc:23636 cp/parser.cc:45220 #, gcc-internal-format msgid "" "the %<destroy%> expression %qE should be the same as the %<depobj%> argument " "%qE" msgstr "" -#: c/c-parser.cc:23667 cp/parser.cc:45251 +#: c/c-parser.cc:23667 cp/parser.cc:45256 #, gcc-internal-format msgid "expected %<in%>, %<out%>, %<inout%>, %<mutexinoutset%> or %<inoutset%>" msgstr "" -#: c/c-parser.cc:23679 cp/parser.cc:45267 +#: c/c-parser.cc:23679 cp/parser.cc:45272 #, gcc-internal-format msgid "expected %<depend%>, %<destroy%> or %<update%> clause" msgstr "" -#: c/c-parser.cc:23720 cp/parser.cc:45305 +#: c/c-parser.cc:23720 cp/parser.cc:45310 #, gcc-internal-format msgid "expected %<seq_cst%>, %<acq_rel%>, %<release%> or %<acquire%>" msgstr "" -#: c/c-parser.cc:23728 cp/parser.cc:45313 +#: c/c-parser.cc:23728 cp/parser.cc:45318 #, gcc-internal-format msgid "%<flush%> list specified together with memory order clause" msgstr "" @@ -52579,34 +52580,34 @@ msgstr "" msgid "expected %<(%> or end of line" msgstr "" -#: c/c-parser.cc:23804 cp/parser.cc:46034 +#: c/c-parser.cc:23804 cp/parser.cc:46039 #, gcc-internal-format msgid "" "%<[[omp::directive(%s)]]%> must be the only specified attribute on a " "statement" msgstr "" -#: c/c-parser.cc:23871 cp/parser.cc:46103 +#: c/c-parser.cc:23871 cp/parser.cc:46108 #, gcc-internal-format msgid "%<#pragma omp scan%> with zero preceding executable statements" msgstr "" -#: c/c-parser.cc:23905 cp/parser.cc:46136 +#: c/c-parser.cc:23905 cp/parser.cc:46141 #, gcc-internal-format msgid "expected %<inclusive%> or %<exclusive%> clause" msgstr "" -#: c/c-parser.cc:23910 cp/parser.cc:46142 +#: c/c-parser.cc:23910 cp/parser.cc:46147 #, gcc-internal-format msgid "expected %<#pragma omp scan%>" msgstr "" -#: c/c-parser.cc:23919 cp/parser.cc:46151 +#: c/c-parser.cc:23919 cp/parser.cc:46156 #, gcc-internal-format msgid "%<#pragma omp scan%> with zero succeeding executable statements" msgstr "" -#: c/c-parser.cc:23944 cp/parser.cc:46174 +#: c/c-parser.cc:23944 cp/parser.cc:46179 #, gcc-internal-format msgid "for statement expected" msgstr "" @@ -52614,73 +52615,73 @@ msgstr "" #. Don't call cp_parser_error here since it overrides the #. provided message with a more confusing one if there was #. a bad pragma or attribute directive. -#: c/c-parser.cc:23973 cp/parser.cc:46196 cp/parser.cc:46198 cp/parser.cc:46383 +#: c/c-parser.cc:23973 cp/parser.cc:46201 cp/parser.cc:46203 cp/parser.cc:46388 #, gcc-internal-format msgid "loop nest expected" msgstr "" -#: c/c-parser.cc:24025 cp/parser.cc:46271 +#: c/c-parser.cc:24025 cp/parser.cc:46276 #, gcc-internal-format msgid "" "attributes other than OpenMP directives are not allowed on %<for%> in loop " "nest" msgstr "" -#: c/c-parser.cc:24054 cp/parser.cc:46302 +#: c/c-parser.cc:24054 cp/parser.cc:46307 #, gcc-internal-format msgid "" "%<unroll%> construct with %<partial%> clause generates just one loop with " "canonical form but %d loops are needed" msgstr "" -#: c/c-parser.cc:24065 cp/parser.cc:46313 +#: c/c-parser.cc:24065 cp/parser.cc:46318 #, gcc-internal-format msgid "" "generated loop of %<unroll%> construct without %<partial%> clause does not " "have canonical form" msgstr "" -#: c/c-parser.cc:24088 cp/parser.cc:46339 +#: c/c-parser.cc:24088 cp/parser.cc:46344 #, gcc-internal-format msgid "" "%<tile%> construct generates %d loops with canonical form but %d loops are " "needed" msgstr "" -#: c/c-parser.cc:24099 cp/parser.cc:46350 +#: c/c-parser.cc:24099 cp/parser.cc:46355 #, gcc-internal-format msgid "expected %<for%> loop or OpenMP loop transformation construct" msgstr "" -#: c/c-parser.cc:24187 cp/semantics.cc:11471 cp/semantics.cc:11564 +#: c/c-parser.cc:24187 cp/semantics.cc:11485 cp/semantics.cc:11578 #, gcc-internal-format msgid "expected iteration declaration or initialization" msgstr "" -#: c/c-parser.cc:24276 c/c-parser.cc:24291 cp/parser.cc:46677 -#: cp/parser.cc:46692 +#: c/c-parser.cc:24276 c/c-parser.cc:24291 cp/parser.cc:46682 +#: cp/parser.cc:46697 #, gcc-internal-format msgid "not enough nested loops" msgstr "" -#: c/c-parser.cc:24394 cp/parser.cc:46977 +#: c/c-parser.cc:24394 cp/parser.cc:46982 #, gcc-internal-format msgid "%<ordered%> clause parameter is less than %<collapse%>" msgstr "" -#: c/c-parser.cc:24517 cp/parser.cc:46512 cp/parser.cc:46555 cp/pt.cc:18542 +#: c/c-parser.cc:24517 cp/parser.cc:46517 cp/parser.cc:46560 cp/pt.cc:18586 #, gcc-internal-format msgid "iteration variable %qD should not be firstprivate" msgstr "" -#: c/c-parser.cc:24951 cp/parser.cc:47523 +#: c/c-parser.cc:24951 cp/parser.cc:47528 #, gcc-internal-format msgid "" "%<#pragma omp ordered%> with %qs clause may only be used in compound " "statements" msgstr "" -#: c/c-parser.cc:25167 cp/parser.cc:47729 +#: c/c-parser.cc:25167 cp/parser.cc:47734 #, gcc-internal-format msgid "expected %<for%> after %qs" msgstr "" @@ -52690,7 +52691,7 @@ msgstr "" msgid "expected a function name" msgstr "" -#: c/c-parser.cc:25401 cp/parser.cc:50212 +#: c/c-parser.cc:25401 cp/parser.cc:50217 #, gcc-internal-format msgid "expected target-function call" msgstr "" @@ -52702,59 +52703,59 @@ msgid "" "assignment" msgstr "" -#: c/c-parser.cc:25658 cp/parser.cc:48076 +#: c/c-parser.cc:25658 cp/parser.cc:48081 #, gcc-internal-format msgid "expected %<point%>" msgstr "" -#: c/c-parser.cc:25925 cp/parser.cc:48363 +#: c/c-parser.cc:25925 cp/parser.cc:48368 #, gcc-internal-format msgid "" "%<#pragma omp target data%> with map-type other than %<to%>, %<from%>, " "%<tofrom%> or %<alloc%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:25941 cp/parser.cc:48379 +#: c/c-parser.cc:25941 cp/parser.cc:48384 #, gcc-internal-format msgid "" "%<#pragma omp target data%> must contain at least one %<map%>, " "%<use_device_ptr%> or %<use_device_addr%> clause" msgstr "" -#: c/c-parser.cc:25989 cp/parser.cc:48660 +#: c/c-parser.cc:25989 cp/parser.cc:48665 #, gcc-internal-format msgid "" "%<#pragma omp target update%> must contain at least one %<from%> or %<to%> " "clauses" msgstr "" -#: c/c-parser.cc:26091 cp/parser.cc:48486 +#: c/c-parser.cc:26091 cp/parser.cc:48491 #, gcc-internal-format msgid "" "%<#pragma omp target enter data%> with map-type other than %<to%>, " "%<tofrom%> or %<alloc%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:26103 cp/parser.cc:48498 +#: c/c-parser.cc:26103 cp/parser.cc:48503 #, gcc-internal-format msgid "" "%<#pragma omp target enter data%> must contain at least one %<map%> clause" msgstr "" -#: c/c-parser.cc:26202 cp/parser.cc:48603 +#: c/c-parser.cc:26202 cp/parser.cc:48608 #, gcc-internal-format msgid "" "%<#pragma omp target exit data%> with map-type other than %<from%>, " "%<tofrom%>, %<release%> or %<delete%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:26215 cp/parser.cc:48616 +#: c/c-parser.cc:26215 cp/parser.cc:48621 #, gcc-internal-format msgid "" "%<#pragma omp target exit data%> must contain at least one %<map%> clause" msgstr "" -#: c/c-parser.cc:26460 cp/semantics.cc:10974 +#: c/c-parser.cc:26460 cp/semantics.cc:10988 #, gcc-internal-format msgid "" "%<#pragma omp target%> with map-type other than %<to%>, %<from%>, %<tofrom%> " @@ -52775,68 +52776,68 @@ msgid "" "definition" msgstr "" -#: c/c-parser.cc:26643 cp/parser.cc:49672 +#: c/c-parser.cc:26643 cp/parser.cc:49677 #, gcc-internal-format msgid "expected trait selector name" msgstr "" -#: c/c-parser.cc:26655 cp/parser.cc:49686 +#: c/c-parser.cc:26655 cp/parser.cc:49691 #, gcc-internal-format msgid "unknown selector %qs for context selector set %qs" msgstr "" -#: c/c-parser.cc:26683 cp/parser.cc:49715 +#: c/c-parser.cc:26683 cp/parser.cc:49720 #, gcc-internal-format msgid "selector %qs does not accept any properties" msgstr "" -#: c/c-parser.cc:26705 cp/parser.cc:49747 +#: c/c-parser.cc:26705 cp/parser.cc:49752 #, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set" msgstr "" -#: c/c-parser.cc:26714 cp/parser.cc:49757 cp/pt.cc:18210 +#: c/c-parser.cc:26714 cp/parser.cc:49762 cp/pt.cc:18254 #, gcc-internal-format msgid "%<score%> argument must be constant integer expression" msgstr "" -#: c/c-parser.cc:26717 cp/parser.cc:49760 cp/pt.cc:18217 +#: c/c-parser.cc:26717 cp/parser.cc:49765 cp/pt.cc:18261 #, gcc-internal-format msgid "%<score%> argument must be non-negative" msgstr "" -#: c/c-parser.cc:26758 cp/parser.cc:49806 +#: c/c-parser.cc:26758 cp/parser.cc:49811 #, gcc-internal-format msgid "expected identifier or string literal" msgstr "" -#: c/c-parser.cc:26781 cp/parser.cc:49836 cp/pt.cc:18234 +#: c/c-parser.cc:26781 cp/parser.cc:49841 cp/pt.cc:18278 #, gcc-internal-format msgid "property must be integer expression" msgstr "" -#: c/c-parser.cc:26794 cp/parser.cc:49847 +#: c/c-parser.cc:26794 cp/parser.cc:49852 #, gcc-internal-format msgid "" "properties for %<simd%> selector may not be specified in %<metadirective%>" msgstr "" -#: c/c-parser.cc:26815 cp/parser.cc:49863 fortran/openmp.cc:6534 +#: c/c-parser.cc:26815 cp/parser.cc:49868 fortran/openmp.cc:6534 #, gcc-internal-format msgid "%<requires%> selector is not supported yet" msgstr "" -#: c/c-parser.cc:26874 cp/parser.cc:49926 +#: c/c-parser.cc:26874 cp/parser.cc:49931 #, gcc-internal-format msgid "expected context selector set name" msgstr "" -#: c/c-parser.cc:26986 cp/parser.cc:50430 +#: c/c-parser.cc:26986 cp/parser.cc:50435 #, gcc-internal-format msgid "expected %<match%>, %<adjust_args%> or %<append_args%> clause" msgstr "" -#: c/c-parser.cc:27002 cp/parser.cc:50443 +#: c/c-parser.cc:27002 cp/parser.cc:50448 #, gcc-internal-format msgid "too many %<match%> clauses" msgstr "" @@ -52846,12 +52847,12 @@ msgstr "" msgid "variant %qD is not a function" msgstr "" -#: c/c-parser.cc:27028 cp/decl.cc:8621 +#: c/c-parser.cc:27028 cp/decl.cc:8623 #, gcc-internal-format msgid "variant %qD is a built-in" msgstr "" -#: c/c-parser.cc:27074 cp/parser.cc:50505 +#: c/c-parser.cc:27074 cp/parser.cc:50510 #, gcc-internal-format msgid "%qD is specified more than once" msgstr "" @@ -52861,7 +52862,7 @@ msgstr "" msgid "%qD is not of pointer type" msgstr "" -#: c/c-parser.cc:27101 cp/parser.cc:50538 +#: c/c-parser.cc:27101 cp/parser.cc:50543 #, gcc-internal-format msgid "expected %<nothing%> or %<need_device_ptr%>" msgstr "" @@ -52871,32 +52872,32 @@ msgstr "" msgid "%<need_device_addr%> is not valid for C" msgstr "" -#: c/c-parser.cc:27111 cp/parser.cc:50545 +#: c/c-parser.cc:27111 cp/parser.cc:50550 #, gcc-internal-format msgid "expected %<nothing%> or %<need_device_ptr%> followed by %<:%>" msgstr "" -#: c/c-parser.cc:27131 cp/parser.cc:50562 +#: c/c-parser.cc:27131 cp/parser.cc:50567 #, gcc-internal-format msgid "expected %<interop%>" msgstr "" -#: c/c-parser.cc:27229 cp/decl.cc:8603 +#: c/c-parser.cc:27229 cp/decl.cc:8605 #, gcc-internal-format msgid "argument %d of %qD must be of %<omp_interop_t%>" msgstr "" -#: c/c-parser.cc:27231 cp/decl.cc:8500 cp/decl.cc:8606 +#: c/c-parser.cc:27231 cp/decl.cc:8502 cp/decl.cc:8608 #, gcc-internal-format msgid "%<append_args%> specified here" msgstr "" -#: c/c-parser.cc:27277 cp/decl.cc:8612 +#: c/c-parser.cc:27277 cp/decl.cc:8614 #, gcc-internal-format msgid "variant %qD and base %qD have incompatible types" msgstr "" -#: c/c-parser.cc:27302 cp/parser.cc:50630 +#: c/c-parser.cc:27302 cp/parser.cc:50635 #, gcc-internal-format msgid "an %qs clause requires a %<match%> clause" msgstr "" @@ -52915,67 +52916,67 @@ msgid "" "declaration or definition" msgstr "" -#: c/c-parser.cc:27366 cp/parser.cc:50675 +#: c/c-parser.cc:27366 cp/parser.cc:50680 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> not immediately followed by a single function " "declaration or definition" msgstr "" -#: c/c-parser.cc:27573 cp/parser.cc:50964 +#: c/c-parser.cc:27573 cp/parser.cc:50969 #, gcc-internal-format msgid "%qD specified both in declare target %<link%> and %qs clauses" msgstr "" -#: c/c-parser.cc:27577 cp/parser.cc:50968 +#: c/c-parser.cc:27577 cp/parser.cc:50973 #, gcc-internal-format msgid "" "%qD specified both in declare target %<link%> and %<to%> or %<enter%> clauses" msgstr "" -#: c/c-parser.cc:27637 cp/parser.cc:51101 +#: c/c-parser.cc:27637 cp/parser.cc:51106 #, gcc-internal-format msgid "directive with only %<device_type%> or %<indirect%> clauses" msgstr "" -#: c/c-parser.cc:27640 cp/parser.cc:51104 +#: c/c-parser.cc:27640 cp/parser.cc:51109 #, gcc-internal-format msgid "" "%<device_type%> clause must specify 'any' when used with an %<indirect%> " "clause" msgstr "" -#: c/c-parser.cc:27689 c/c-parser.cc:27731 cp/parser.cc:51159 -#: cp/parser.cc:51206 +#: c/c-parser.cc:27689 c/c-parser.cc:27731 cp/parser.cc:51164 +#: cp/parser.cc:51211 #, gcc-internal-format msgid "expected %<target%>" msgstr "" -#: c/c-parser.cc:27703 cp/parser.cc:51172 +#: c/c-parser.cc:27703 cp/parser.cc:51177 #, gcc-internal-format msgid "expected %<declare target%> or %<assumes%>" msgstr "" -#: c/c-parser.cc:27738 cp/parser.cc:51213 +#: c/c-parser.cc:27738 cp/parser.cc:51218 #, gcc-internal-format msgid "" "%<#pragma omp end declare target%> without corresponding %<#pragma omp " "declare target%> or %<#pragma omp begin declare target%>" msgstr "" -#: c/c-parser.cc:27749 c/c-parser.cc:27780 cp/parser.cc:51224 -#: cp/parser.cc:51255 +#: c/c-parser.cc:27749 c/c-parser.cc:27780 cp/parser.cc:51229 +#: cp/parser.cc:51260 #, gcc-internal-format msgid "%qs in attribute syntax terminated with %qs in pragma syntax" msgstr "" -#: c/c-parser.cc:27756 c/c-parser.cc:27785 cp/parser.cc:51231 -#: cp/parser.cc:51260 +#: c/c-parser.cc:27756 c/c-parser.cc:27785 cp/parser.cc:51236 +#: cp/parser.cc:51265 #, gcc-internal-format msgid "%qs in pragma syntax terminated with %qs in attribute syntax" msgstr "" -#: c/c-parser.cc:27793 cp/parser.cc:51268 +#: c/c-parser.cc:27793 cp/parser.cc:51273 #, gcc-internal-format msgid "expected %<declare%> or %<assumes%>" msgstr "" @@ -53032,18 +53033,18 @@ msgstr "" msgid "one of the initializer call arguments should be %<&omp_priv%>" msgstr "" -#: c/c-parser.cc:28209 cp/parser.cc:52190 +#: c/c-parser.cc:28209 cp/parser.cc:52195 #, gcc-internal-format msgid "expected %<simd%>, %<reduction%>, %<target%> or %<variant%>" msgstr "" -#: c/c-parser.cc:28280 cp/parser.cc:52283 +#: c/c-parser.cc:28280 cp/parser.cc:52288 #, gcc-internal-format msgid "" "expected %<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> or %<seq_cst%>" msgstr "" -#: c/c-parser.cc:28309 cp/parser.cc:52318 +#: c/c-parser.cc:28309 cp/parser.cc:52323 #, gcc-internal-format msgid "" "expected %<unified_address%>, %<unified_shared_memory%>, %<self_maps%>, " @@ -53051,27 +53052,27 @@ msgid "" "clause" msgstr "" -#: c/c-parser.cc:28328 cp/parser.cc:52337 +#: c/c-parser.cc:28328 cp/parser.cc:52342 #, gcc-internal-format msgid "" "%qs clause used lexically after first target construct or offloading API" msgstr "" -#: c/c-parser.cc:28340 cp/parser.cc:52349 +#: c/c-parser.cc:28340 cp/parser.cc:52354 #, gcc-internal-format msgid "" "more than one %<atomic_default_mem_order%> clause in a single compilation " "unit" msgstr "" -#: c/c-parser.cc:28349 cp/parser.cc:52358 +#: c/c-parser.cc:28349 cp/parser.cc:52363 #, gcc-internal-format msgid "" "%<atomic_default_mem_order%> clause used lexically after first %<atomic%> " "construct without memory order clause" msgstr "" -#: c/c-parser.cc:28363 cp/parser.cc:52372 +#: c/c-parser.cc:28363 cp/parser.cc:52377 #, gcc-internal-format msgid "%<pragma omp requires%> requires at least one clause" msgstr "" @@ -53086,140 +53087,140 @@ msgstr "" msgid "variable sized type %qT in %<reduction%> clause" msgstr "" -#: c/c-parser.cc:28506 cp/parser.cc:48879 +#: c/c-parser.cc:28506 cp/parser.cc:48884 #, gcc-internal-format msgid "expected %<sizes%>" msgstr "" -#: c/c-parser.cc:28535 cp/semantics.cc:9567 cp/semantics.cc:9584 +#: c/c-parser.cc:28535 cp/semantics.cc:9581 cp/semantics.cc:9598 #, gcc-internal-format msgid "%<sizes%> argument needs positive integral constant" msgstr "" -#: c/c-parser.cc:28651 cp/parser.cc:52429 +#: c/c-parser.cc:28651 cp/parser.cc:52434 #, gcc-internal-format msgid "expected %<at%>, %<severity%> or %<message%> clause" msgstr "" -#: c/c-parser.cc:28684 cp/parser.cc:52464 +#: c/c-parser.cc:28684 cp/parser.cc:52469 #, gcc-internal-format msgid "expected %qs or %qs" msgstr "" -#: c/c-parser.cc:28741 cp/parser.cc:52526 +#: c/c-parser.cc:28741 cp/parser.cc:52531 #, gcc-internal-format msgid "" "%<#pragma omp error%> with %<at(execution)%> clause may only be used in " "compound statements" msgstr "" -#: c/c-parser.cc:28764 cp/parser.cc:52553 +#: c/c-parser.cc:28764 cp/parser.cc:52558 #, gcc-internal-format msgid "%<pragma omp error%> encountered: %s" msgstr "" -#: c/c-parser.cc:28767 cp/parser.cc:52556 +#: c/c-parser.cc:28767 cp/parser.cc:52561 #, gcc-internal-format msgid "%<pragma omp error%> encountered" msgstr "" -#: c/c-parser.cc:28794 cp/parser.cc:49987 +#: c/c-parser.cc:28794 cp/parser.cc:49992 #, gcc-internal-format msgid "expected at least one assumption clause" msgstr "" -#: c/c-parser.cc:28880 c/c-parser.cc:29181 cp/parser.cc:50073 -#: cp/parser.cc:51492 cp/parser.cc:51520 +#: c/c-parser.cc:28880 c/c-parser.cc:29181 cp/parser.cc:50078 +#: cp/parser.cc:51497 cp/parser.cc:51525 #, gcc-internal-format msgid "expected directive name" msgstr "" -#: c/c-parser.cc:28891 cp/parser.cc:50084 +#: c/c-parser.cc:28891 cp/parser.cc:50089 #, gcc-internal-format msgid "" "invalid OpenMP directive name in %qs clause argument: declarative, " "informational, and meta directives not permitted" msgstr "" -#: c/c-parser.cc:28899 cp/parser.cc:50092 +#: c/c-parser.cc:28899 cp/parser.cc:50097 #, gcc-internal-format msgid "unknown OpenMP directive name in %qs clause argument" msgstr "" -#: c/c-parser.cc:28906 cp/parser.cc:50099 +#: c/c-parser.cc:28906 cp/parser.cc:50104 #, gcc-internal-format msgid "" "%<%s%s%s%s%s%> directive mentioned in both %<absent%> and %<contains%> " "clauses" msgstr "" -#: c/c-parser.cc:28917 cp/parser.cc:50110 +#: c/c-parser.cc:28917 cp/parser.cc:50115 #, gcc-internal-format msgid "%<%s%s%s%s%s%> directive mentioned multiple times in %qs clauses" msgstr "" -#: c/c-parser.cc:28940 cp/parser.cc:50137 +#: c/c-parser.cc:28940 cp/parser.cc:50142 #, gcc-internal-format msgid "unknown assumption clause %qs" msgstr "" -#: c/c-parser.cc:28953 cp/parser.cc:50147 +#: c/c-parser.cc:28953 cp/parser.cc:50152 #, gcc-internal-format msgid "expected assumption clause" msgstr "" -#: c/c-parser.cc:29082 cp/parser.cc:51390 +#: c/c-parser.cc:29082 cp/parser.cc:51395 #, gcc-internal-format msgid "expected %<when%>, %<otherwise%>, or %<default%> clause" msgstr "" -#: c/c-parser.cc:29096 cp/parser.cc:51405 +#: c/c-parser.cc:29096 cp/parser.cc:51410 #, gcc-internal-format msgid "too many %<otherwise%> or %<default%> clauses in %<metadirective%>" msgstr "" -#: c/c-parser.cc:29105 cp/parser.cc:51415 +#: c/c-parser.cc:29105 cp/parser.cc:51420 #, gcc-internal-format msgid "" "%<otherwise%> or %<default%> clause must appear last in %<metadirective%>" msgstr "" -#: c/c-parser.cc:29195 cp/parser.cc:51506 +#: c/c-parser.cc:29195 cp/parser.cc:51511 #, gcc-internal-format msgid "unknown directive name" msgstr "" -#: c/c-parser.cc:29210 cp/parser.cc:51526 +#: c/c-parser.cc:29210 cp/parser.cc:51531 #, gcc-internal-format msgid "metadirectives cannot be used as variants of a %<metadirective%>" msgstr "" -#: c/c-parser.cc:29216 cp/parser.cc:51532 +#: c/c-parser.cc:29216 cp/parser.cc:51537 #, gcc-internal-format msgid "declarative directive variants of a %<metadirective%> are not supported" msgstr "" -#: c/c-parser.cc:29541 cp/semantics.cc:10340 +#: c/c-parser.cc:29541 cp/semantics.cc:10354 #, gcc-internal-format msgid "%qE declared %<threadprivate%> after first use" msgstr "" -#: c/c-parser.cc:29543 cp/semantics.cc:10342 +#: c/c-parser.cc:29543 cp/semantics.cc:10356 #, gcc-internal-format msgid "automatic variable %qE cannot be %<threadprivate%>" msgstr "" -#: c/c-parser.cc:29547 cp/semantics.cc:10344 +#: c/c-parser.cc:29547 cp/semantics.cc:10358 #, gcc-internal-format msgid "%<threadprivate%> %qE has incomplete type" msgstr "" -#: c/c-parser.cc:29727 cp/parser.cc:53315 +#: c/c-parser.cc:29727 cp/parser.cc:53320 #, gcc-internal-format msgid "%<__transaction_cancel%> without transactional memory support enabled" msgstr "" -#: c/c-parser.cc:29733 cp/parser.cc:53321 +#: c/c-parser.cc:29733 cp/parser.cc:53326 #, gcc-internal-format msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>" msgstr "" @@ -53231,7 +53232,7 @@ msgid "" "a %<transaction_may_cancel_outer%> function" msgstr "" -#: c/c-parser.cc:29750 cp/parser.cc:53339 +#: c/c-parser.cc:29750 cp/parser.cc:53344 #, gcc-internal-format msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>" msgstr "" @@ -53246,7 +53247,7 @@ msgstr "" msgid "%qD has an incomplete type %qT" msgstr "" -#: c/c-typeck.cc:252 c/c-typeck.cc:12528 c/c-typeck.cc:12603 cp/call.cc:5062 +#: c/c-typeck.cc:252 c/c-typeck.cc:12542 c/c-typeck.cc:12617 cp/call.cc:5062 #, gcc-internal-format msgid "invalid use of void expression" msgstr "" @@ -53282,153 +53283,153 @@ msgstr "" msgid "%qs attribute can only be applied to variadic functions" msgstr "" -#: c/c-typeck.cc:938 c/c-typeck.cc:961 +#: c/c-typeck.cc:958 c/c-typeck.cc:981 #, gcc-internal-format msgid "function types not truly compatible in ISO C" msgstr "" -#: c/c-typeck.cc:1117 +#: c/c-typeck.cc:1137 #, gcc-internal-format msgid "cannot mix operands of decimal floating and vector types" msgstr "" -#: c/c-typeck.cc:1122 +#: c/c-typeck.cc:1142 #, gcc-internal-format msgid "cannot mix operands of decimal floating and complex types" msgstr "" -#: c/c-typeck.cc:1127 +#: c/c-typeck.cc:1147 #, gcc-internal-format msgid "cannot mix operands of decimal floating and other floating types" msgstr "" -#: c/c-typeck.cc:1157 +#: c/c-typeck.cc:1177 #, gcc-internal-format msgid "%<_Complex _BitInt(%d)%> unsupported" msgstr "" -#: c/c-typeck.cc:1785 +#: c/c-typeck.cc:1805 #, gcc-internal-format msgid "" "invalid use of pointers to arrays with different qualifiers in ISO C before " "C23" msgstr "" -#: c/c-typeck.cc:1789 +#: c/c-typeck.cc:1809 #, gcc-internal-format msgid "types are not quite compatible" msgstr "" -#: c/c-typeck.cc:1793 +#: c/c-typeck.cc:1813 #, gcc-internal-format msgid "pointer target types incompatible in C++" msgstr "" -#: c/c-typeck.cc:2024 +#: c/c-typeck.cc:2034 #, gcc-internal-format msgid "function return types not compatible due to %<volatile%>" msgstr "" -#: c/c-typeck.cc:2274 +#: c/c-typeck.cc:2284 #, gcc-internal-format msgid "" "converting an array compound literal to a pointer leads to a dangling " "pointer in C++" msgstr "" -#: c/c-typeck.cc:3095 c/c-typeck.cc:10679 +#: c/c-typeck.cc:3109 c/c-typeck.cc:10693 #, gcc-internal-format msgid "%qT has no member named %qE; did you mean %qE?" msgstr "" -#: c/c-typeck.cc:3099 c/c-typeck.cc:10683 +#: c/c-typeck.cc:3113 c/c-typeck.cc:10697 #, gcc-internal-format msgid "%qT has no member named %qE" msgstr "" -#: c/c-typeck.cc:3108 +#: c/c-typeck.cc:3122 #, gcc-internal-format msgid "accessing a member %qE of an atomic structure %qE" msgstr "" -#: c/c-typeck.cc:3111 +#: c/c-typeck.cc:3125 #, gcc-internal-format msgid "accessing a member %qE of an atomic union %qE" msgstr "" -#: c/c-typeck.cc:3181 +#: c/c-typeck.cc:3195 #, gcc-internal-format msgid "" "%qE is a pointer to pointer; did you mean to dereference it before applying " "%<->%> to it?" msgstr "" -#: c/c-typeck.cc:3190 +#: c/c-typeck.cc:3204 #, gcc-internal-format msgid "%qE is a pointer; did you mean to use %<->%>?" msgstr "" -#: c/c-typeck.cc:3197 +#: c/c-typeck.cc:3211 #, gcc-internal-format msgid "request for member %qE in something not a structure or union" msgstr "" -#: c/c-typeck.cc:3245 +#: c/c-typeck.cc:3259 #, gcc-internal-format msgid "dereferencing %<void *%> pointer" msgstr "" -#: c/c-typeck.cc:3300 +#: c/c-typeck.cc:3314 #, gcc-internal-format msgid "subscripted value is neither array nor pointer nor vector" msgstr "" -#: c/c-typeck.cc:3310 cp/typeck.cc:4035 cp/typeck.cc:4130 +#: c/c-typeck.cc:3324 cp/typeck.cc:4035 cp/typeck.cc:4130 #, gcc-internal-format msgid "array subscript is not an integer" msgstr "" -#: c/c-typeck.cc:3316 +#: c/c-typeck.cc:3330 #, gcc-internal-format msgid "subscripted value is pointer to function" msgstr "" -#: c/c-typeck.cc:3371 +#: c/c-typeck.cc:3385 #, gcc-internal-format msgid "ISO C forbids subscripting %<register%> array" msgstr "" -#: c/c-typeck.cc:3374 +#: c/c-typeck.cc:3388 #, gcc-internal-format msgid "ISO C90 forbids subscripting non-lvalue array" msgstr "" -#: c/c-typeck.cc:3493 +#: c/c-typeck.cc:3507 #, gcc-internal-format msgid "underspecified %qD referenced in its initializer" msgstr "" -#: c/c-typeck.cc:3548 +#: c/c-typeck.cc:3562 #, gcc-internal-format msgid "enum constant defined here" msgstr "" -#: c/c-typeck.cc:3656 cp/typeck.cc:2162 +#: c/c-typeck.cc:3670 cp/typeck.cc:2162 #, gcc-internal-format msgid "%<sizeof%> on array function parameter %qE will return size of %qT" msgstr "" -#: c/c-typeck.cc:3841 +#: c/c-typeck.cc:3855 #, gcc-internal-format msgid "called object %qE is not a function or function pointer" msgstr "" -#: c/c-typeck.cc:3847 +#: c/c-typeck.cc:3861 #, gcc-internal-format msgid "called object %qD is not a function or function pointer" msgstr "" -#: c/c-typeck.cc:3853 +#: c/c-typeck.cc:3867 #, gcc-internal-format msgid "called object is not a function or function pointer" msgstr "" @@ -53436,1882 +53437,1882 @@ msgstr "" #. This situation leads to run-time undefined behavior. We can't, #. therefore, simply error unless we can prove that all possible #. executions of the program must execute the code. -#: c/c-typeck.cc:3882 +#: c/c-typeck.cc:3896 #, gcc-internal-format msgid "function called through a non-compatible type" msgstr "" -#: c/c-typeck.cc:3887 c/c-typeck.cc:3943 +#: c/c-typeck.cc:3901 c/c-typeck.cc:3957 #, gcc-internal-format msgid "function with qualified void return type called" msgstr "" -#: c/c-typeck.cc:3998 +#: c/c-typeck.cc:4012 #, gcc-internal-format, gfc-internal-format msgid "type of formal parameter %d is incomplete" msgstr "" -#: c/c-typeck.cc:4010 +#: c/c-typeck.cc:4024 #, gcc-internal-format msgid "" "passing argument %d of %qE as integer rather than floating due to prototype" msgstr "" -#: c/c-typeck.cc:4016 +#: c/c-typeck.cc:4030 #, gcc-internal-format msgid "" "passing argument %d of %qE as integer rather than complex due to prototype" msgstr "" -#: c/c-typeck.cc:4022 +#: c/c-typeck.cc:4036 #, gcc-internal-format msgid "" "passing argument %d of %qE as complex rather than floating due to prototype" msgstr "" -#: c/c-typeck.cc:4028 +#: c/c-typeck.cc:4042 #, gcc-internal-format msgid "" "passing argument %d of %qE as floating rather than integer due to prototype" msgstr "" -#: c/c-typeck.cc:4034 +#: c/c-typeck.cc:4048 #, gcc-internal-format msgid "" "passing argument %d of %qE as complex rather than integer due to prototype" msgstr "" -#: c/c-typeck.cc:4040 +#: c/c-typeck.cc:4054 #, gcc-internal-format msgid "" "passing argument %d of %qE as floating rather than complex due to prototype" msgstr "" -#: c/c-typeck.cc:4056 +#: c/c-typeck.cc:4070 #, gcc-internal-format msgid "" "passing argument %d of %qE as %<float%> rather than %<double%> due to " "prototype" msgstr "" -#: c/c-typeck.cc:4082 +#: c/c-typeck.cc:4096 #, gcc-internal-format msgid "passing argument %d of %qE as %qT rather than %qT due to prototype" msgstr "" -#: c/c-typeck.cc:4108 +#: c/c-typeck.cc:4122 #, gcc-internal-format msgid "passing argument %d of %qE with different width due to prototype" msgstr "" -#: c/c-typeck.cc:4132 +#: c/c-typeck.cc:4146 #, gcc-internal-format msgid "passing argument %d of %qE as unsigned due to prototype" msgstr "" -#: c/c-typeck.cc:4137 +#: c/c-typeck.cc:4151 #, gcc-internal-format msgid "passing argument %d of %qE as signed due to prototype" msgstr "" -#: c/c-typeck.cc:4311 +#: c/c-typeck.cc:4325 #, gcc-internal-format msgid "too many arguments to method %qE; expected %i, have %i" msgstr "" -#: c/c-typeck.cc:4315 +#: c/c-typeck.cc:4329 #, gcc-internal-format msgid "too many arguments to function %qE; expected %i, have %i" msgstr "" -#: c/c-typeck.cc:4325 +#: c/c-typeck.cc:4339 #, gcc-internal-format msgid "too many arguments to built-in function %qE expecting %d" msgstr "" -#: c/c-typeck.cc:4337 +#: c/c-typeck.cc:4351 #, gcc-internal-format msgid "" "ISO C23 does not allow arguments for method %qE declared without parameters" msgstr "" -#: c/c-typeck.cc:4342 +#: c/c-typeck.cc:4356 #, gcc-internal-format msgid "" "ISO C23 does not allow arguments for function %qE declared without parameters" msgstr "" -#: c/c-typeck.cc:4418 +#: c/c-typeck.cc:4432 #, gcc-internal-format msgid "implicit conversion from %qT to %qT when passing argument to function" msgstr "" -#: c/c-typeck.cc:4499 +#: c/c-typeck.cc:4513 #, gcc-internal-format msgid "too few arguments to function %qE; expected at least %i, have %i" msgstr "" -#: c/c-typeck.cc:4500 +#: c/c-typeck.cc:4514 #, gcc-internal-format msgid "too few arguments to function %qE; expected %i, have %i" msgstr "" -#: c/c-typeck.cc:4514 +#: c/c-typeck.cc:4528 #, gcc-internal-format msgid "too few arguments to built-in function %qE expecting %u" msgstr "" -#: c/c-typeck.cc:4692 c/c-typeck.cc:4720 cp/typeck.cc:5849 cp/typeck.cc:6137 +#: c/c-typeck.cc:4706 c/c-typeck.cc:4734 cp/typeck.cc:5849 cp/typeck.cc:6137 #, gcc-internal-format msgid "comparison with string literal results in unspecified behavior" msgstr "" -#: c/c-typeck.cc:4700 c/c-typeck.cc:4711 cp/typeck.cc:5886 cp/typeck.cc:5910 +#: c/c-typeck.cc:4714 c/c-typeck.cc:4725 cp/typeck.cc:5886 cp/typeck.cc:5910 #, gcc-internal-format msgid "comparison between pointer and zero character constant" msgstr "" -#: c/c-typeck.cc:4703 c/c-typeck.cc:4714 cp/typeck.cc:5889 cp/typeck.cc:5913 +#: c/c-typeck.cc:4717 c/c-typeck.cc:4728 cp/typeck.cc:5889 cp/typeck.cc:5913 #, gcc-internal-format msgid "did you mean to dereference the pointer?" msgstr "" -#: c/c-typeck.cc:4732 c/c-typeck.cc:4739 c/c-typeck.cc:6116 c/c-typeck.cc:6121 -#: c/c-typeck.cc:8669 cp/tree.cc:6464 +#: c/c-typeck.cc:4746 c/c-typeck.cc:4753 c/c-typeck.cc:6130 c/c-typeck.cc:6135 +#: c/c-typeck.cc:8683 cp/tree.cc:6464 #, gcc-internal-format msgid "zero as null pointer constant" msgstr "" -#: c/c-typeck.cc:4760 +#: c/c-typeck.cc:4774 #, gcc-internal-format msgid "comparison between %qT and %qT" msgstr "" -#: c/c-typeck.cc:4819 +#: c/c-typeck.cc:4833 #, gcc-internal-format msgid "pointer of type %<void *%> used in subtraction" msgstr "" -#: c/c-typeck.cc:4822 +#: c/c-typeck.cc:4836 #, gcc-internal-format msgid "pointer to a function used in subtraction" msgstr "" -#: c/c-typeck.cc:4856 +#: c/c-typeck.cc:4870 #, gcc-internal-format msgid "arithmetic on pointer to an incomplete type" msgstr "" -#: c/c-typeck.cc:4865 cp/typeck.cc:6937 +#: c/c-typeck.cc:4879 cp/typeck.cc:6937 #, gcc-internal-format msgid "arithmetic on pointer to an empty aggregate" msgstr "" -#: c/c-typeck.cc:5314 +#: c/c-typeck.cc:5328 #, gcc-internal-format msgid "%<~%> on a boolean expression" msgstr "" -#: c/c-typeck.cc:5318 +#: c/c-typeck.cc:5332 #, gcc-internal-format msgid "did you mean to use logical not?" msgstr "" -#: c/c-typeck.cc:5328 +#: c/c-typeck.cc:5342 #, gcc-internal-format msgid "ISO C does not support %<~%> for complex conjugation" msgstr "" -#: c/c-typeck.cc:5352 +#: c/c-typeck.cc:5366 #, gcc-internal-format msgid "wrong type argument to absu" msgstr "" -#: c/c-typeck.cc:5378 +#: c/c-typeck.cc:5392 #, gcc-internal-format msgid "wrong type argument to unary exclamation mark" msgstr "" -#: c/c-typeck.cc:5436 +#: c/c-typeck.cc:5450 #, gcc-internal-format msgid "increment of enumeration value is invalid in C++" msgstr "" -#: c/c-typeck.cc:5439 +#: c/c-typeck.cc:5453 #, gcc-internal-format msgid "decrement of enumeration value is invalid in C++" msgstr "" -#: c/c-typeck.cc:5446 +#: c/c-typeck.cc:5460 #, gcc-internal-format msgid "increment of a boolean expression" msgstr "" -#: c/c-typeck.cc:5449 +#: c/c-typeck.cc:5463 #, gcc-internal-format msgid "decrement of a boolean expression" msgstr "" -#: c/c-typeck.cc:5465 +#: c/c-typeck.cc:5479 #, gcc-internal-format msgid "ISO C does not support %<++%> and %<--%> on complex types before C2Y" msgstr "" -#: c/c-typeck.cc:5492 c/c-typeck.cc:5526 +#: c/c-typeck.cc:5506 c/c-typeck.cc:5540 #, gcc-internal-format msgid "wrong type argument to increment" msgstr "" -#: c/c-typeck.cc:5494 c/c-typeck.cc:5529 +#: c/c-typeck.cc:5508 c/c-typeck.cc:5543 #, gcc-internal-format msgid "wrong type argument to decrement" msgstr "" -#: c/c-typeck.cc:5514 +#: c/c-typeck.cc:5528 #, gcc-internal-format msgid "increment of pointer to an incomplete type %qT" msgstr "" -#: c/c-typeck.cc:5518 +#: c/c-typeck.cc:5532 #, gcc-internal-format msgid "decrement of pointer to an incomplete type %qT" msgstr "" -#: c/c-typeck.cc:5626 +#: c/c-typeck.cc:5640 #, gcc-internal-format msgid "taking address of expression of type %<void%>" msgstr "" -#: c/c-typeck.cc:5689 c/c-typeck.cc:5885 +#: c/c-typeck.cc:5703 c/c-typeck.cc:5899 #, gcc-internal-format msgid "cannot take address of bit-field %qD" msgstr "" -#: c/c-typeck.cc:5703 +#: c/c-typeck.cc:5717 #, gcc-internal-format msgid "cannot take address of scalar with reverse storage order" msgstr "" -#: c/c-typeck.cc:5711 +#: c/c-typeck.cc:5725 #, gcc-internal-format msgid "address of array with reverse scalar storage order requested" msgstr "" -#: c/c-typeck.cc:5900 +#: c/c-typeck.cc:5914 #, gcc-internal-format msgid "address of register compound literal requested" msgstr "" -#: c/c-typeck.cc:5921 +#: c/c-typeck.cc:5935 #, gcc-internal-format msgid "global register variable %qD used in nested function" msgstr "" -#: c/c-typeck.cc:5924 +#: c/c-typeck.cc:5938 #, gcc-internal-format msgid "register variable %qD used in nested function" msgstr "" -#: c/c-typeck.cc:5929 +#: c/c-typeck.cc:5943 #, gcc-internal-format msgid "address of global register variable %qD requested" msgstr "" -#: c/c-typeck.cc:5931 d/d-codegen.cc:761 +#: c/c-typeck.cc:5945 d/d-codegen.cc:761 #, gcc-internal-format msgid "address of register variable %qD requested" msgstr "" -#: c/c-typeck.cc:6070 +#: c/c-typeck.cc:6084 #, gcc-internal-format msgid "non-lvalue array in conditional expression" msgstr "" -#: c/c-typeck.cc:6166 +#: c/c-typeck.cc:6180 #, gcc-internal-format msgid "" "implicit conversion from %qT to %qT to match other result of conditional" msgstr "" -#: c/c-typeck.cc:6225 c/c-typeck.cc:6231 +#: c/c-typeck.cc:6239 c/c-typeck.cc:6245 #, gcc-internal-format msgid "" "operand of %<?:%> changes signedness from %qT to %qT due to unsignedness of " "other operand" msgstr "" -#: c/c-typeck.cc:6248 +#: c/c-typeck.cc:6262 #, gcc-internal-format msgid "ISO C forbids conditional expr with only one void side" msgstr "" -#: c/c-typeck.cc:6265 +#: c/c-typeck.cc:6279 #, gcc-internal-format msgid "pointers to disjoint address spaces used in conditional expression" msgstr "" -#: c/c-typeck.cc:6289 +#: c/c-typeck.cc:6303 #, gcc-internal-format msgid "pointer to array loses qualifier in conditional expression" msgstr "" -#: c/c-typeck.cc:6293 +#: c/c-typeck.cc:6307 #, gcc-internal-format msgid "" "pointer to array loses qualifier in conditional expression in ISO C before " "C23" msgstr "" -#: c/c-typeck.cc:6298 +#: c/c-typeck.cc:6312 #, gcc-internal-format msgid "ISO C forbids conditional expr between %<void *%> and function pointer" msgstr "" -#: c/c-typeck.cc:6320 +#: c/c-typeck.cc:6334 #, gcc-internal-format msgid "pointer type mismatch in conditional expression" msgstr "" -#: c/c-typeck.cc:6323 +#: c/c-typeck.cc:6337 #, gcc-internal-format msgid "first expression has type %qT" msgstr "" -#: c/c-typeck.cc:6324 +#: c/c-typeck.cc:6338 #, gcc-internal-format msgid "second expression has type %qT" msgstr "" -#: c/c-typeck.cc:6335 c/c-typeck.cc:6348 +#: c/c-typeck.cc:6349 c/c-typeck.cc:6362 #, gcc-internal-format msgid "pointer/integer type mismatch in conditional expression" msgstr "" -#: c/c-typeck.cc:6375 +#: c/c-typeck.cc:6389 #, gcc-internal-format msgid "type mismatch in conditional expression" msgstr "" -#: c/c-typeck.cc:6491 +#: c/c-typeck.cc:6505 #, gcc-internal-format msgid "ignoring return value of %qD, declared with attribute %<nodiscard%>: %E" msgstr "" -#: c/c-typeck.cc:6495 +#: c/c-typeck.cc:6509 #, gcc-internal-format msgid "ignoring return value of %qD, declared with attribute %<nodiscard%>" msgstr "" -#: c/c-typeck.cc:6514 +#: c/c-typeck.cc:6528 #, gcc-internal-format msgid "" "ignoring return value of type %qT, declared with attribute %<nodiscard%>: %E" msgstr "" -#: c/c-typeck.cc:6519 +#: c/c-typeck.cc:6533 #, gcc-internal-format msgid "" "ignoring return value of type %qT, declared with attribute %<nodiscard%>" msgstr "" -#: c/c-typeck.cc:6528 cp/cvt.cc:1132 rust/backend/rust-tree.cc:640 +#: c/c-typeck.cc:6542 cp/cvt.cc:1132 rust/backend/rust-tree.cc:640 #, gcc-internal-format msgid "in call to %qD, declared here" msgstr "" -#: c/c-typeck.cc:6577 +#: c/c-typeck.cc:6591 #, gcc-internal-format msgid "left-hand operand of comma expression has no effect" msgstr "" -#: c/c-typeck.cc:6595 c/c-typeck.cc:13195 +#: c/c-typeck.cc:6609 c/c-typeck.cc:13209 #, gcc-internal-format msgid "right-hand operand of comma expression has no effect" msgstr "" -#: c/c-typeck.cc:6666 +#: c/c-typeck.cc:6680 msgid "cast adds %q#v qualifier to function type" msgstr "" -#: c/c-typeck.cc:6672 +#: c/c-typeck.cc:6686 msgid "cast discards %qv qualifier from pointer target type" msgstr "" -#: c/c-typeck.cc:6707 +#: c/c-typeck.cc:6721 #, gcc-internal-format msgid "" "to be safe all intermediate pointers in cast from %qT to %qT must be " "%<const%> qualified" msgstr "" -#: c/c-typeck.cc:6804 +#: c/c-typeck.cc:6818 #, gcc-internal-format msgid "cast specifies array type" msgstr "" -#: c/c-typeck.cc:6810 +#: c/c-typeck.cc:6824 #, gcc-internal-format msgid "cast specifies function type" msgstr "" -#: c/c-typeck.cc:6825 +#: c/c-typeck.cc:6839 #, gcc-internal-format msgid "ISO C forbids casting nonscalar to the same type" msgstr "" -#: c/c-typeck.cc:6829 +#: c/c-typeck.cc:6843 #, gcc-internal-format msgid "useless cast to type %qT" msgstr "" -#: c/c-typeck.cc:6849 +#: c/c-typeck.cc:6863 #, gcc-internal-format msgid "ISO C forbids casts to union type" msgstr "" -#: c/c-typeck.cc:6859 +#: c/c-typeck.cc:6873 #, gcc-internal-format msgid "cast to union type from type not present in union" msgstr "" -#: c/c-typeck.cc:6894 +#: c/c-typeck.cc:6908 #, gcc-internal-format msgid "" "cast to %qs address space pointer from disjoint generic address space pointer" msgstr "" -#: c/c-typeck.cc:6899 +#: c/c-typeck.cc:6913 #, gcc-internal-format msgid "" "cast to generic address space pointer from disjoint %qs address space pointer" msgstr "" -#: c/c-typeck.cc:6904 +#: c/c-typeck.cc:6918 #, gcc-internal-format msgid "" "cast to %qs address space pointer from disjoint %qs address space pointer" msgstr "" -#: c/c-typeck.cc:6937 +#: c/c-typeck.cc:6951 #, gcc-internal-format msgid "cast increases required alignment of target type" msgstr "" -#: c/c-typeck.cc:6949 +#: c/c-typeck.cc:6963 #, gcc-internal-format msgid "cast from pointer to integer of different size" msgstr "" -#: c/c-typeck.cc:6954 +#: c/c-typeck.cc:6968 #, gcc-internal-format msgid "cast from function call of type %qT to non-matching type %qT" msgstr "" -#: c/c-typeck.cc:6964 cp/typeck.cc:9383 +#: c/c-typeck.cc:6978 cp/typeck.cc:9383 #, gcc-internal-format msgid "cast to pointer from integer of different size" msgstr "" -#: c/c-typeck.cc:6978 +#: c/c-typeck.cc:6992 #, gcc-internal-format msgid "ISO C forbids conversion of function pointer to object pointer type" msgstr "" -#: c/c-typeck.cc:6987 +#: c/c-typeck.cc:7001 #, gcc-internal-format msgid "ISO C forbids conversion of object pointer to function pointer type" msgstr "" -#: c/c-typeck.cc:6997 +#: c/c-typeck.cc:7011 #, gcc-internal-format msgid "cast between incompatible function types from %qT to %qT" msgstr "" -#: c/c-typeck.cc:7112 +#: c/c-typeck.cc:7126 #, gcc-internal-format msgid "defining a type in a cast is invalid in C++" msgstr "" -#: c/c-typeck.cc:7154 +#: c/c-typeck.cc:7168 #, gcc-internal-format msgid "assignment to expression with array type" msgstr "" -#: c/c-typeck.cc:7280 +#: c/c-typeck.cc:7294 #, gcc-internal-format msgid "enum conversion in assignment is invalid in C++" msgstr "" -#: c/c-typeck.cc:7482 c/c-typeck.cc:7501 c/c-typeck.cc:7558 +#: c/c-typeck.cc:7496 c/c-typeck.cc:7515 c/c-typeck.cc:7572 #, gcc-internal-format msgid "(near initialization for %qs)" msgstr "" -#: c/c-typeck.cc:7574 +#: c/c-typeck.cc:7588 #, gcc-internal-format msgid "array initialized from parenthesized string constant" msgstr "" -#: c/c-typeck.cc:7624 +#: c/c-typeck.cc:7638 msgid "expected %e but argument is of type %e" msgstr "" -#: c/c-typeck.cc:7658 +#: c/c-typeck.cc:7672 #, gcc-internal-format msgid "" "%qD argument %d type is %qT where %qT is expected in a call to built-in " "function declared without prototype" msgstr "" -#: c/c-typeck.cc:7661 +#: c/c-typeck.cc:7675 #, gcc-internal-format msgid "" "%qD argument %d promotes to %qT where %qT is expected in a call to built-in " "function declared without prototype" msgstr "" -#: c/c-typeck.cc:7666 +#: c/c-typeck.cc:7680 #, gcc-internal-format msgid "built-in %qD declared here" msgstr "" -#: c/c-typeck.cc:7723 c/c-typeck.cc:8631 +#: c/c-typeck.cc:7737 c/c-typeck.cc:8645 msgid "%e declared here" msgstr "" -#: c/c-typeck.cc:7916 +#: c/c-typeck.cc:7930 #, gcc-internal-format msgid "enum conversion when passing argument %d of %qE is invalid in C++" msgstr "" -#: c/c-typeck.cc:7921 +#: c/c-typeck.cc:7935 #, gcc-internal-format msgid "expected %qT but argument is of type %qT" msgstr "" -#: c/c-typeck.cc:7925 +#: c/c-typeck.cc:7939 #, gcc-internal-format msgid "enum conversion from %qT to %qT in assignment is invalid in C++" msgstr "" -#: c/c-typeck.cc:7930 +#: c/c-typeck.cc:7944 #, gcc-internal-format msgid "enum conversion from %qT to %qT in initialization is invalid in C++" msgstr "" -#: c/c-typeck.cc:7935 +#: c/c-typeck.cc:7949 #, gcc-internal-format msgid "enum conversion from %qT to %qT in return is invalid in C++" msgstr "" -#: c/c-typeck.cc:7953 +#: c/c-typeck.cc:7967 #, gcc-internal-format msgid "implicit conversion from %qT to %qT" msgstr "" -#: c/c-typeck.cc:8135 c/c-typeck.cc:8534 +#: c/c-typeck.cc:8149 c/c-typeck.cc:8548 msgid "" "passing argument %d of %qE makes %q#v qualified function pointer from " "unqualified" msgstr "" -#: c/c-typeck.cc:8138 c/c-typeck.cc:8537 +#: c/c-typeck.cc:8152 c/c-typeck.cc:8551 msgid "assignment makes %q#v qualified function pointer from unqualified" msgstr "" -#: c/c-typeck.cc:8141 c/c-typeck.cc:8539 +#: c/c-typeck.cc:8155 c/c-typeck.cc:8553 msgid "initialization makes %q#v qualified function pointer from unqualified" msgstr "" -#: c/c-typeck.cc:8144 c/c-typeck.cc:8541 +#: c/c-typeck.cc:8158 c/c-typeck.cc:8555 msgid "return makes %q#v qualified function pointer from unqualified" msgstr "" -#: c/c-typeck.cc:8152 c/c-typeck.cc:8424 c/c-typeck.cc:8467 +#: c/c-typeck.cc:8166 c/c-typeck.cc:8438 c/c-typeck.cc:8481 msgid "" "passing argument %d of %qE discards %qv qualifier from pointer target type" msgstr "" -#: c/c-typeck.cc:8154 c/c-typeck.cc:8426 c/c-typeck.cc:8469 +#: c/c-typeck.cc:8168 c/c-typeck.cc:8440 c/c-typeck.cc:8483 msgid "assignment discards %qv qualifier from pointer target type" msgstr "" -#: c/c-typeck.cc:8156 c/c-typeck.cc:8428 c/c-typeck.cc:8471 +#: c/c-typeck.cc:8170 c/c-typeck.cc:8442 c/c-typeck.cc:8485 msgid "initialization discards %qv qualifier from pointer target type" msgstr "" -#: c/c-typeck.cc:8158 c/c-typeck.cc:8430 c/c-typeck.cc:8473 +#: c/c-typeck.cc:8172 c/c-typeck.cc:8444 c/c-typeck.cc:8487 msgid "return discards %qv qualifier from pointer target type" msgstr "" -#: c/c-typeck.cc:8167 +#: c/c-typeck.cc:8181 #, gcc-internal-format msgid "ISO C prohibits argument conversion to union type" msgstr "" -#: c/c-typeck.cc:8235 +#: c/c-typeck.cc:8249 #, gcc-internal-format msgid "request for implicit conversion from %qT to %qT not permitted in C++" msgstr "" -#: c/c-typeck.cc:8262 +#: c/c-typeck.cc:8276 #, gcc-internal-format msgid "passing argument %d of %qE from pointer to non-enclosed address space" msgstr "" -#: c/c-typeck.cc:8273 +#: c/c-typeck.cc:8287 #, gcc-internal-format msgid "assignment from pointer to non-enclosed address space" msgstr "" -#: c/c-typeck.cc:8284 +#: c/c-typeck.cc:8298 #, gcc-internal-format msgid "initialization from pointer to non-enclosed address space" msgstr "" -#: c/c-typeck.cc:8294 +#: c/c-typeck.cc:8308 #, gcc-internal-format msgid "return from pointer to non-enclosed address space" msgstr "" -#: c/c-typeck.cc:8310 +#: c/c-typeck.cc:8324 #, gcc-internal-format msgid "expected %qT but pointer is of type %qT" msgstr "" -#: c/c-typeck.cc:8325 +#: c/c-typeck.cc:8339 #, gcc-internal-format msgid "argument %d of %qE might be a candidate for a format attribute" msgstr "" -#: c/c-typeck.cc:8331 +#: c/c-typeck.cc:8345 #, gcc-internal-format msgid "assignment left-hand side might be a candidate for a format attribute" msgstr "" -#: c/c-typeck.cc:8337 +#: c/c-typeck.cc:8351 #, gcc-internal-format msgid "" "initialization left-hand side might be a candidate for a format attribute" msgstr "" -#: c/c-typeck.cc:8342 cp/typeck.cc:10559 +#: c/c-typeck.cc:8356 cp/typeck.cc:10559 #, gcc-internal-format msgid "return type might be a candidate for a format attribute" msgstr "" -#: c/c-typeck.cc:8366 +#: c/c-typeck.cc:8380 #, gcc-internal-format msgid "passing argument %d of %qE from incompatible scalar storage order" msgstr "" -#: c/c-typeck.cc:8376 +#: c/c-typeck.cc:8390 #, gcc-internal-format msgid "" "assignment to %qT from pointer type %qT with incompatible scalar storage " "order" msgstr "" -#: c/c-typeck.cc:8386 +#: c/c-typeck.cc:8400 #, gcc-internal-format msgid "" "initialization of %qT from pointer type %qT with incompatible scalar storage " "order" msgstr "" -#: c/c-typeck.cc:8391 +#: c/c-typeck.cc:8405 #, gcc-internal-format msgid "" "returning %qT from pointer type with incompatible scalar storage order %qT" msgstr "" -#: c/c-typeck.cc:8441 +#: c/c-typeck.cc:8455 #, gcc-internal-format msgid "" "ISO C forbids passing argument %d of %qE between function pointer and %<void " "*%>" msgstr "" -#: c/c-typeck.cc:8444 +#: c/c-typeck.cc:8458 #, gcc-internal-format msgid "ISO C forbids assignment between function pointer and %<void *%>" msgstr "" -#: c/c-typeck.cc:8446 +#: c/c-typeck.cc:8460 #, gcc-internal-format msgid "ISO C forbids initialization between function pointer and %<void *%>" msgstr "" -#: c/c-typeck.cc:8448 +#: c/c-typeck.cc:8462 #, gcc-internal-format msgid "ISO C forbids return between function pointer and %<void *%>" msgstr "" -#: c/c-typeck.cc:8478 +#: c/c-typeck.cc:8492 #, gcc-internal-format msgid "array with qualifier on the element is not qualified before C23" msgstr "" -#: c/c-typeck.cc:8496 +#: c/c-typeck.cc:8510 #, gcc-internal-format msgid "pointer targets in passing argument %d of %qE differ in signedness" msgstr "" -#: c/c-typeck.cc:8504 +#: c/c-typeck.cc:8518 #, gcc-internal-format msgid "pointer targets in assignment from %qT to %qT differ in signedness" msgstr "" -#: c/c-typeck.cc:8510 +#: c/c-typeck.cc:8524 #, gcc-internal-format msgid "pointer targets in initialization of %qT from %qT differ in signedness" msgstr "" -#: c/c-typeck.cc:8515 +#: c/c-typeck.cc:8529 #, gcc-internal-format msgid "" "pointer targets in returning %qT from a function with return type %qT differ " "in signedness" msgstr "" -#: c/c-typeck.cc:8562 +#: c/c-typeck.cc:8576 #, gcc-internal-format msgid "passing argument %d of %qE from incompatible pointer type" msgstr "" -#: c/c-typeck.cc:8573 +#: c/c-typeck.cc:8587 msgid "assignment to %e from pointer to %qD with incompatible type %e" msgstr "" -#: c/c-typeck.cc:8579 +#: c/c-typeck.cc:8593 msgid "assignment to %e from incompatible pointer type %e" msgstr "" -#: c/c-typeck.cc:8588 +#: c/c-typeck.cc:8602 msgid "initialization of %e from pointer to %qD with incompatible type %e" msgstr "" -#: c/c-typeck.cc:8594 +#: c/c-typeck.cc:8608 msgid "initialization of %e from incompatible pointer type %e" msgstr "" -#: c/c-typeck.cc:8602 +#: c/c-typeck.cc:8616 msgid "" "returning pointer to %qD of type %e from a function with incompatible type %e" msgstr "" -#: c/c-typeck.cc:8608 +#: c/c-typeck.cc:8622 msgid "returning %e from a function with incompatible return type %e" msgstr "" -#: c/c-typeck.cc:8684 +#: c/c-typeck.cc:8698 #, gcc-internal-format msgid "passing argument %d of %qE makes pointer from integer without a cast" msgstr "" -#: c/c-typeck.cc:8694 +#: c/c-typeck.cc:8708 #, gcc-internal-format msgid "assignment to %qT from %qT makes pointer from integer without a cast" msgstr "" -#: c/c-typeck.cc:8700 +#: c/c-typeck.cc:8714 #, gcc-internal-format msgid "" "initialization of %qT from %qT makes pointer from integer without a cast" msgstr "" -#: c/c-typeck.cc:8705 +#: c/c-typeck.cc:8719 #, gcc-internal-format msgid "" "returning %qT from a function with return type %qT makes pointer from " "integer without a cast" msgstr "" -#: c/c-typeck.cc:8727 +#: c/c-typeck.cc:8741 #, gcc-internal-format msgid "passing argument %d of %qE makes integer from pointer without a cast" msgstr "" -#: c/c-typeck.cc:8737 +#: c/c-typeck.cc:8751 #, gcc-internal-format msgid "assignment to %qT from %qT makes integer from pointer without a cast" msgstr "" -#: c/c-typeck.cc:8743 +#: c/c-typeck.cc:8757 #, gcc-internal-format msgid "" "initialization of %qT from %qT makes integer from pointer without a cast" msgstr "" -#: c/c-typeck.cc:8747 +#: c/c-typeck.cc:8761 #, gcc-internal-format msgid "" "returning %qT from a function with return type %qT makes integer from " "pointer without a cast" msgstr "" -#: c/c-typeck.cc:8780 +#: c/c-typeck.cc:8794 #, gcc-internal-format msgid "incompatible type for argument %d of %qE" msgstr "" -#: c/c-typeck.cc:8791 +#: c/c-typeck.cc:8805 #, gcc-internal-format msgid "incompatible types when assigning to type %qT from type %qT" msgstr "" -#: c/c-typeck.cc:8802 +#: c/c-typeck.cc:8816 #, gcc-internal-format msgid "incompatible types when initializing type %qT using type %qT" msgstr "" -#: c/c-typeck.cc:8812 +#: c/c-typeck.cc:8826 #, gcc-internal-format msgid "incompatible types when returning type %qT but %qT was expected" msgstr "" -#: c/c-typeck.cc:8892 +#: c/c-typeck.cc:8906 #, gcc-internal-format msgid "traditional C rejects automatic aggregate initialization" msgstr "" -#: c/c-typeck.cc:9134 +#: c/c-typeck.cc:9148 #, gcc-internal-format msgid "%<constexpr%> pointer initializer is not null" msgstr "" -#: c/c-typeck.cc:9142 +#: c/c-typeck.cc:9156 #, gcc-internal-format msgid "%<constexpr%> integer initializer is not an integer constant expression" msgstr "" -#: c/c-typeck.cc:9145 c/c-typeck.cc:9207 c/c-typeck.cc:9360 +#: c/c-typeck.cc:9159 c/c-typeck.cc:9221 c/c-typeck.cc:9374 #, gcc-internal-format msgid "%<constexpr%> initializer not representable in type of object" msgstr "" -#: c/c-typeck.cc:9155 +#: c/c-typeck.cc:9169 #, gcc-internal-format msgid "%<constexpr%> initializer is not an arithmetic constant expression" msgstr "" -#: c/c-typeck.cc:9172 +#: c/c-typeck.cc:9186 #, gcc-internal-format msgid "%<constexpr%> initializer for a real type is of complex type" msgstr "" -#: c/c-typeck.cc:9181 +#: c/c-typeck.cc:9195 #, gcc-internal-format msgid "" "%<constexpr%> initializer for a binary floating-point type is of decimal type" msgstr "" -#: c/c-typeck.cc:9325 c/c-typeck.cc:10293 cp/typeck2.cc:1241 +#: c/c-typeck.cc:9339 c/c-typeck.cc:10307 cp/typeck2.cc:1241 #, gcc-internal-format msgid "initialization of a flexible array member" msgstr "" -#: c/c-typeck.cc:9341 cp/typeck2.cc:1258 +#: c/c-typeck.cc:9355 cp/typeck2.cc:1258 #, gcc-internal-format msgid "" "cannot initialize array of %qT from a string literal with type array of %qT" msgstr "" -#: c/c-typeck.cc:9387 +#: c/c-typeck.cc:9401 #, gcc-internal-format msgid "" "initializer-string for array of %qT is too long (%wu chars into %wu " "available)" msgstr "" -#: c/c-typeck.cc:9392 +#: c/c-typeck.cc:9406 #, gcc-internal-format msgid "" "initializer-string for array of %qT is too long for C++ (%wu chars into %wu " "available)" msgstr "" -#: c/c-typeck.cc:9399 +#: c/c-typeck.cc:9413 #, gcc-internal-format msgid "" "initializer-string for array of %qT truncates NUL terminator but destination " "lacks %qs attribute (%wu chars into %wu available)" msgstr "" -#: c/c-typeck.cc:9411 +#: c/c-typeck.cc:9425 #, gcc-internal-format msgid "array of inappropriate type initialized from string constant" msgstr "" -#: c/c-typeck.cc:9479 cp/typeck.cc:2556 +#: c/c-typeck.cc:9493 cp/typeck.cc:2556 #, gcc-internal-format msgid "invalid use of non-lvalue array" msgstr "" -#: c/c-typeck.cc:9493 c/c-typeck.cc:9633 c/c-typeck.cc:10387 +#: c/c-typeck.cc:9507 c/c-typeck.cc:9647 c/c-typeck.cc:10401 #, gcc-internal-format msgid "invalid initializer" msgstr "" -#: c/c-typeck.cc:9505 c/c-typeck.cc:9529 c/c-typeck.cc:9532 c/c-typeck.cc:9540 -#: c/c-typeck.cc:9602 c/c-typeck.cc:11370 c/c-typeck.cc:11454 +#: c/c-typeck.cc:9519 c/c-typeck.cc:9543 c/c-typeck.cc:9546 c/c-typeck.cc:9554 +#: c/c-typeck.cc:9616 c/c-typeck.cc:11384 c/c-typeck.cc:11468 #, gcc-internal-format msgid "initializer element is not constant" msgstr "" -#: c/c-typeck.cc:9514 +#: c/c-typeck.cc:9528 #, gcc-internal-format msgid "array initialized from non-constant array expression" msgstr "" -#: c/c-typeck.cc:9545 c/c-typeck.cc:9615 c/c-typeck.cc:11464 +#: c/c-typeck.cc:9559 c/c-typeck.cc:9629 c/c-typeck.cc:11478 #, gcc-internal-format msgid "initializer element is not a constant expression" msgstr "" -#: c/c-typeck.cc:9567 cp/typeck2.cc:1340 +#: c/c-typeck.cc:9581 cp/typeck2.cc:1340 #, gcc-internal-format msgid "conversion from %qT to %qT changes value from %qd to %qd" msgstr "" -#: c/c-typeck.cc:9609 c/c-typeck.cc:11459 +#: c/c-typeck.cc:9623 c/c-typeck.cc:11473 #, gcc-internal-format msgid "initializer element is not computable at load time" msgstr "" -#: c/c-typeck.cc:9915 cp/decl.cc:7906 +#: c/c-typeck.cc:9929 cp/decl.cc:7908 #, gcc-internal-format msgid "opaque vector types cannot be initialized" msgstr "" -#: c/c-typeck.cc:10141 +#: c/c-typeck.cc:10155 #, gcc-internal-format msgid "extra brace group at end of initializer" msgstr "" -#: c/c-typeck.cc:10225 +#: c/c-typeck.cc:10239 #, gcc-internal-format msgid "braces around scalar initializer" msgstr "" -#: c/c-typeck.cc:10295 c/c-typeck.cc:10299 c/c-typeck.cc:12062 -#: c/c-typeck.cc:12187 cp/typeck2.cc:1268 cp/typeck2.cc:1621 +#: c/c-typeck.cc:10309 c/c-typeck.cc:10313 c/c-typeck.cc:12076 +#: c/c-typeck.cc:12201 cp/typeck2.cc:1268 cp/typeck2.cc:1621 #, gcc-internal-format msgid "initialization of flexible array member in a nested context" msgstr "" -#: c/c-typeck.cc:10336 +#: c/c-typeck.cc:10350 #, gcc-internal-format msgid "missing braces around initializer" msgstr "" -#: c/c-typeck.cc:10359 +#: c/c-typeck.cc:10373 #, gcc-internal-format msgid "missing initializer for field %qD of %qT" msgstr "" -#: c/c-typeck.cc:10399 +#: c/c-typeck.cc:10413 #, gcc-internal-format msgid "extra elements in scalar initializer" msgstr "" -#: c/c-typeck.cc:10521 c/c-typeck.cc:10603 +#: c/c-typeck.cc:10535 c/c-typeck.cc:10617 #, gcc-internal-format msgid "array index in non-array initializer" msgstr "" -#: c/c-typeck.cc:10526 c/c-typeck.cc:10665 +#: c/c-typeck.cc:10540 c/c-typeck.cc:10679 #, gcc-internal-format msgid "field name not in record or union initializer" msgstr "" -#: c/c-typeck.cc:10576 +#: c/c-typeck.cc:10590 #, gcc-internal-format msgid "array index in initializer not of integer type" msgstr "" -#: c/c-typeck.cc:10585 c/c-typeck.cc:10594 +#: c/c-typeck.cc:10599 c/c-typeck.cc:10608 #, gcc-internal-format msgid "array index in initializer is not an integer constant expression" msgstr "" -#: c/c-typeck.cc:10599 c/c-typeck.cc:10601 +#: c/c-typeck.cc:10613 c/c-typeck.cc:10615 #, gcc-internal-format msgid "nonconstant array index in initializer" msgstr "" -#: c/c-typeck.cc:10605 c/c-typeck.cc:10608 +#: c/c-typeck.cc:10619 c/c-typeck.cc:10622 #, gcc-internal-format msgid "array index in initializer exceeds array bounds" msgstr "" -#: c/c-typeck.cc:10627 +#: c/c-typeck.cc:10641 #, gcc-internal-format msgid "empty index range in initializer" msgstr "" -#: c/c-typeck.cc:10636 +#: c/c-typeck.cc:10650 #, gcc-internal-format msgid "array index range in initializer exceeds array bounds" msgstr "" -#: c/c-typeck.cc:10770 c/c-typeck.cc:10825 c/c-typeck.cc:10866 -#: c/c-typeck.cc:10926 c/c-typeck.cc:10973 c/c-typeck.cc:11561 +#: c/c-typeck.cc:10784 c/c-typeck.cc:10839 c/c-typeck.cc:10880 +#: c/c-typeck.cc:10940 c/c-typeck.cc:10987 c/c-typeck.cc:11575 #, gcc-internal-format msgid "initialized field overwritten" msgstr "" -#: c/c-typeck.cc:10861 c/c-typeck.cc:10922 c/c-typeck.cc:10969 -#: c/c-typeck.cc:11558 +#: c/c-typeck.cc:10875 c/c-typeck.cc:10936 c/c-typeck.cc:10983 +#: c/c-typeck.cc:11572 #, gcc-internal-format msgid "initialized field with side-effects overwritten" msgstr "" -#: c/c-typeck.cc:11486 +#: c/c-typeck.cc:11500 #, gcc-internal-format msgid "enum conversion in initialization is invalid in C++" msgstr "" -#: c/c-typeck.cc:11932 +#: c/c-typeck.cc:11946 #, gcc-internal-format msgid "excess elements in %qT initializer" msgstr "" -#: c/c-typeck.cc:11944 c/c-typeck.cc:12021 +#: c/c-typeck.cc:11958 c/c-typeck.cc:12035 #, gcc-internal-format msgid "excess elements in struct initializer" msgstr "" -#: c/c-typeck.cc:11965 +#: c/c-typeck.cc:11979 #, gcc-internal-format msgid "" "positional initialization of field in %<struct%> declared with " "%<designated_init%> attribute" msgstr "" -#: c/c-typeck.cc:12036 c/c-typeck.cc:12162 cp/typeck2.cc:1245 +#: c/c-typeck.cc:12050 c/c-typeck.cc:12176 cp/typeck2.cc:1245 #, gcc-internal-format msgid "non-static initialization of a flexible array member" msgstr "" -#: c/c-typeck.cc:12132 +#: c/c-typeck.cc:12146 #, gcc-internal-format msgid "excess elements in union initializer" msgstr "" -#: c/c-typeck.cc:12154 +#: c/c-typeck.cc:12168 #, gcc-internal-format msgid "traditional C rejects initialization of unions" msgstr "" -#: c/c-typeck.cc:12253 +#: c/c-typeck.cc:12267 #, gcc-internal-format msgid "excess elements in array initializer" msgstr "" -#: c/c-typeck.cc:12330 c/c-typeck.cc:12332 +#: c/c-typeck.cc:12344 c/c-typeck.cc:12346 #, gcc-internal-format msgid "excess elements in vector initializer" msgstr "" -#: c/c-typeck.cc:12366 +#: c/c-typeck.cc:12380 #, gcc-internal-format msgid "excess elements in scalar initializer" msgstr "" -#: c/c-typeck.cc:12533 c/c-typeck.cc:12609 cp/semantics.cc:2346 -#: cp/semantics.cc:2455 +#: c/c-typeck.cc:12547 c/c-typeck.cc:12623 cp/semantics.cc:2349 +#: cp/semantics.cc:2458 #, gcc-internal-format msgid "constraint allows registers outside of a function" msgstr "" -#: c/c-typeck.cc:12545 cp/semantics.cc:2358 +#: c/c-typeck.cc:12559 cp/semantics.cc:2361 #, gcc-internal-format msgid "side-effects in output operand outside of a function" msgstr "" -#: c/c-typeck.cc:12556 cp/semantics.cc:2374 +#: c/c-typeck.cc:12570 cp/semantics.cc:2377 #, gcc-internal-format msgid "output operand outside of a function is not constant" msgstr "" -#: c/c-typeck.cc:12564 c/c-typeck.cc:12654 cp/semantics.cc:2385 -#: cp/semantics.cc:2518 +#: c/c-typeck.cc:12578 c/c-typeck.cc:12668 cp/semantics.cc:2388 +#: cp/semantics.cc:2521 #, gcc-internal-format msgid "%<-%> modifier used inside of a function" msgstr "" -#: c/c-typeck.cc:12622 cp/semantics.cc:2468 +#: c/c-typeck.cc:12636 cp/semantics.cc:2471 #, gcc-internal-format msgid "" "%<:%> constraint operand is not address of a function or non-automatic " "variable" msgstr "" -#: c/c-typeck.cc:12635 cp/semantics.cc:2481 +#: c/c-typeck.cc:12649 cp/semantics.cc:2484 #, gcc-internal-format msgid "side-effects in input operand outside of a function" msgstr "" -#: c/c-typeck.cc:12646 cp/semantics.cc:2496 cp/semantics.cc:2510 +#: c/c-typeck.cc:12660 cp/semantics.cc:2499 cp/semantics.cc:2513 #, gcc-internal-format msgid "input operand outside of a function is not constant" msgstr "" -#: c/c-typeck.cc:12698 +#: c/c-typeck.cc:12712 #, gcc-internal-format msgid "ISO C forbids %<goto *expr;%>" msgstr "" -#: c/c-typeck.cc:12704 +#: c/c-typeck.cc:12718 #, gcc-internal-format msgid "computed goto must be pointer type" msgstr "" -#: c/c-typeck.cc:12734 c/gimple-parser.cc:2648 cp/typeck.cc:11159 +#: c/c-typeck.cc:12748 c/gimple-parser.cc:2648 cp/typeck.cc:11159 #, gcc-internal-format msgid "function declared %<noreturn%> has a %<return%> statement" msgstr "" -#: c/c-typeck.cc:12763 +#: c/c-typeck.cc:12777 #, gcc-internal-format msgid "%<return%> with no value, in function returning non-void" msgstr "" -#: c/c-typeck.cc:12776 c/gimple-parser.cc:2658 +#: c/c-typeck.cc:12790 c/gimple-parser.cc:2658 #, gcc-internal-format msgid "%<return%> with a value, in function returning void" msgstr "" -#: c/c-typeck.cc:12779 +#: c/c-typeck.cc:12793 #, gcc-internal-format msgid "ISO C forbids %<return%> with expression, in function returning void" msgstr "" -#: c/c-typeck.cc:12861 +#: c/c-typeck.cc:12875 #, gcc-internal-format msgid "function returns address of label" msgstr "" -#: c/c-typeck.cc:12952 cp/semantics.cc:1921 +#: c/c-typeck.cc:12966 cp/semantics.cc:1924 #, gcc-internal-format msgid "switch quantity not an integer" msgstr "" -#: c/c-typeck.cc:12977 +#: c/c-typeck.cc:12991 #, gcc-internal-format msgid "%<long%> switch expression not converted to %<int%> in ISO C" msgstr "" -#: c/c-typeck.cc:13015 c/c-typeck.cc:13023 +#: c/c-typeck.cc:13029 c/c-typeck.cc:13037 #, gcc-internal-format msgid "case label is not an integer constant expression" msgstr "" -#: c/c-typeck.cc:13029 cp/parser.cc:13521 +#: c/c-typeck.cc:13043 cp/parser.cc:13521 #, gcc-internal-format msgid "case label not within a switch statement" msgstr "" -#: c/c-typeck.cc:13031 +#: c/c-typeck.cc:13045 #, gcc-internal-format msgid "%<default%> label not within a switch statement" msgstr "" -#: c/c-typeck.cc:13107 cp/parser.cc:15291 +#: c/c-typeck.cc:13121 cp/parser.cc:15291 #, gcc-internal-format msgid "break statement not within loop or switch" msgstr "" -#: c/c-typeck.cc:13110 c/c-typeck.cc:13130 cp/decl.cc:4107 cp/parser.cc:15301 +#: c/c-typeck.cc:13124 c/c-typeck.cc:13144 cp/decl.cc:4107 cp/parser.cc:15301 #: cp/parser.cc:15322 #, gcc-internal-format msgid "invalid exit from OpenMP structured block" msgstr "" -#: c/c-typeck.cc:13113 cp/parser.cc:15304 +#: c/c-typeck.cc:13127 cp/parser.cc:15304 #, gcc-internal-format msgid "break statement used with OpenMP for loop" msgstr "" -#: c/c-typeck.cc:13127 cp/parser.cc:15314 +#: c/c-typeck.cc:13141 cp/parser.cc:15314 #, gcc-internal-format msgid "continue statement not within a loop" msgstr "" -#: c/c-typeck.cc:13177 cp/cp-gimplify.cc:277 +#: c/c-typeck.cc:13191 cp/cp-gimplify.cc:277 #, gcc-internal-format msgid "statement with no effect" msgstr "" -#: c/c-typeck.cc:13221 +#: c/c-typeck.cc:13235 #, gcc-internal-format msgid "expression statement has incomplete type" msgstr "" -#: c/c-typeck.cc:13512 +#: c/c-typeck.cc:13526 #, gcc-internal-format msgid "" "the comparison will always evaluate as %<false%> for the pointer operand in " "%qE must not be NULL" msgstr "" -#: c/c-typeck.cc:13517 +#: c/c-typeck.cc:13531 #, gcc-internal-format msgid "" "the comparison will always evaluate as %<true%> for the pointer operand in " "%qE must not be NULL" msgstr "" -#: c/c-typeck.cc:13535 c/c-typeck.cc:13573 +#: c/c-typeck.cc:13549 c/c-typeck.cc:13587 #, gcc-internal-format msgid "" "the comparison will always evaluate as %<false%> for the address of %qE will " "never be NULL" msgstr "" -#: c/c-typeck.cc:13540 c/c-typeck.cc:13578 +#: c/c-typeck.cc:13554 c/c-typeck.cc:13592 #, gcc-internal-format msgid "" "the comparison will always evaluate as %<true%> for the address of %qE will " "never be NULL" msgstr "" -#: c/c-typeck.cc:14170 c/c-typeck.cc:14334 cp/typeck.cc:6163 +#: c/c-typeck.cc:14184 c/c-typeck.cc:14348 cp/typeck.cc:6163 #, gcc-internal-format msgid "comparing vectors with different element types" msgstr "" -#: c/c-typeck.cc:14178 c/c-typeck.cc:14342 cp/typeck.cc:6177 +#: c/c-typeck.cc:14192 c/c-typeck.cc:14356 cp/typeck.cc:6177 #, gcc-internal-format msgid "comparing vectors with different number of elements" msgstr "" -#: c/c-typeck.cc:14193 c/c-typeck.cc:14357 cp/typeck.cc:6195 +#: c/c-typeck.cc:14207 c/c-typeck.cc:14371 cp/typeck.cc:6195 #, gcc-internal-format msgid "comparison between types %qT and %qT" msgstr "" -#: c/c-typeck.cc:14203 c/c-typeck.cc:14367 cp/typeck.cc:6212 +#: c/c-typeck.cc:14217 c/c-typeck.cc:14381 cp/typeck.cc:6212 #, gcc-internal-format msgid "could not find an integer type of the same size as %qT" msgstr "" -#: c/c-typeck.cc:14217 cp/typeck.cc:5838 +#: c/c-typeck.cc:14231 cp/typeck.cc:5838 #, gcc-internal-format msgid "comparing floating-point with %<==%> or %<!=%> is unsafe" msgstr "" -#: c/c-typeck.cc:14256 c/c-typeck.cc:14408 +#: c/c-typeck.cc:14270 c/c-typeck.cc:14422 #, gcc-internal-format msgid "comparison of pointers to disjoint address spaces" msgstr "" -#: c/c-typeck.cc:14263 c/c-typeck.cc:14269 +#: c/c-typeck.cc:14277 c/c-typeck.cc:14283 #, gcc-internal-format msgid "ISO C forbids comparison of %<void *%> with function pointer" msgstr "" -#: c/c-typeck.cc:14276 c/c-typeck.cc:14418 +#: c/c-typeck.cc:14290 c/c-typeck.cc:14432 #, gcc-internal-format msgid "comparison of distinct pointer types lacks a cast" msgstr "" -#: c/c-typeck.cc:14289 c/c-typeck.cc:14295 c/c-typeck.cc:14445 -#: c/c-typeck.cc:14451 +#: c/c-typeck.cc:14303 c/c-typeck.cc:14309 c/c-typeck.cc:14459 +#: c/c-typeck.cc:14465 #, gcc-internal-format msgid "comparison between pointer and integer" msgstr "" -#: c/c-typeck.cc:14396 +#: c/c-typeck.cc:14410 #, gcc-internal-format msgid "comparison of complete and incomplete pointers" msgstr "" -#: c/c-typeck.cc:14398 +#: c/c-typeck.cc:14412 #, gcc-internal-format msgid "ISO C forbids ordered comparisons of pointers to functions" msgstr "" -#: c/c-typeck.cc:14403 +#: c/c-typeck.cc:14417 #, gcc-internal-format msgid "ordered comparison of pointer with null pointer" msgstr "" -#: c/c-typeck.cc:14426 c/c-typeck.cc:14429 c/c-typeck.cc:14436 -#: c/c-typeck.cc:14439 +#: c/c-typeck.cc:14440 c/c-typeck.cc:14443 c/c-typeck.cc:14450 +#: c/c-typeck.cc:14453 #, gcc-internal-format msgid "ordered comparison of pointer with integer zero" msgstr "" -#: c/c-typeck.cc:14516 +#: c/c-typeck.cc:14530 #, gcc-internal-format msgid "" "implicit conversion from %qT to %qT to match other operand of binary " "expression" msgstr "" -#: c/c-typeck.cc:14834 +#: c/c-typeck.cc:14848 #, gcc-internal-format msgid "used array that cannot be converted to pointer where scalar is required" msgstr "" -#: c/c-typeck.cc:14838 +#: c/c-typeck.cc:14852 #, gcc-internal-format msgid "used struct type value where scalar is required" msgstr "" -#: c/c-typeck.cc:14842 +#: c/c-typeck.cc:14856 #, gcc-internal-format msgid "used union type value where scalar is required" msgstr "" -#: c/c-typeck.cc:14858 +#: c/c-typeck.cc:14872 #, gcc-internal-format msgid "used vector type where scalar is required" msgstr "" -#: c/c-typeck.cc:15061 cp/semantics.cc:12069 +#: c/c-typeck.cc:15075 cp/semantics.cc:12083 #, gcc-internal-format msgid "" "%<#pragma omp cancel%> must specify one of %<parallel%>, %<for%>, " "%<sections%> or %<taskgroup%> clauses" msgstr "" -#: c/c-typeck.cc:15072 c/c-typeck.cc:15082 cp/semantics.cc:12080 -#: cp/semantics.cc:12090 +#: c/c-typeck.cc:15086 c/c-typeck.cc:15096 cp/semantics.cc:12094 +#: cp/semantics.cc:12104 #, gcc-internal-format msgid "expected %<cancel%> %<if%> clause modifier" msgstr "" -#: c/c-typeck.cc:15117 cp/semantics.cc:12125 +#: c/c-typeck.cc:15131 cp/semantics.cc:12139 #, gcc-internal-format msgid "" "%<#pragma omp cancellation point%> must specify one of %<parallel%>, " "%<for%>, %<sections%> or %<taskgroup%> clauses" msgstr "" -#: c/c-typeck.cc:15185 cp/semantics.cc:5948 cp/semantics.cc:9059 +#: c/c-typeck.cc:15199 cp/semantics.cc:5962 cp/semantics.cc:9073 #, gcc-internal-format msgid "%qD is not a variable in %qs clause" msgstr "" -#: c/c-typeck.cc:15189 c/c-typeck.cc:17006 cp/semantics.cc:5952 -#: cp/semantics.cc:9063 +#: c/c-typeck.cc:15203 c/c-typeck.cc:17020 cp/semantics.cc:5966 +#: cp/semantics.cc:9077 #, gcc-internal-format msgid "%qE is not a variable in %qs clause" msgstr "" -#: c/c-typeck.cc:15197 +#: c/c-typeck.cc:15211 #, gcc-internal-format msgid "%<_Atomic%> %qD in %qs clause" msgstr "" -#: c/c-typeck.cc:15207 c/c-typeck.cc:17013 c/c-typeck.cc:17167 -#: cp/semantics.cc:5961 cp/semantics.cc:9070 cp/semantics.cc:9259 +#: c/c-typeck.cc:15221 c/c-typeck.cc:17027 c/c-typeck.cc:17181 +#: cp/semantics.cc:5975 cp/semantics.cc:9084 cp/semantics.cc:9273 #, gcc-internal-format msgid "%qD is threadprivate variable in %qs clause" msgstr "" -#: c/c-typeck.cc:15244 cp/semantics.cc:5995 +#: c/c-typeck.cc:15258 cp/semantics.cc:6009 #, gcc-internal-format msgid "low bound %qE of array section does not have integral type" msgstr "" -#: c/c-typeck.cc:15251 cp/semantics.cc:6002 +#: c/c-typeck.cc:15265 cp/semantics.cc:6016 #, gcc-internal-format msgid "length %qE of array section does not have integral type" msgstr "" -#: c/c-typeck.cc:15274 cp/semantics.cc:6035 +#: c/c-typeck.cc:15288 cp/semantics.cc:6049 #, gcc-internal-format msgid "expected single pointer in %qs clause" msgstr "" -#: c/c-typeck.cc:15292 c/c-typeck.cc:15359 c/c-typeck.cc:15652 -#: cp/semantics.cc:6053 cp/semantics.cc:6120 +#: c/c-typeck.cc:15306 c/c-typeck.cc:15373 c/c-typeck.cc:15666 +#: cp/semantics.cc:6067 cp/semantics.cc:6134 #, gcc-internal-format msgid "zero length array section in %qs clause" msgstr "" -#: c/c-typeck.cc:15311 cp/semantics.cc:6072 +#: c/c-typeck.cc:15325 cp/semantics.cc:6086 #, gcc-internal-format msgid "for unknown bound array type length expression must be specified" msgstr "" -#: c/c-typeck.cc:15319 cp/semantics.cc:6080 +#: c/c-typeck.cc:15333 cp/semantics.cc:6094 #, gcc-internal-format msgid "negative low bound in array section in %qs clause" msgstr "" -#: c/c-typeck.cc:15328 c/c-typeck.cc:15452 cp/semantics.cc:6089 -#: cp/semantics.cc:6213 +#: c/c-typeck.cc:15342 c/c-typeck.cc:15466 cp/semantics.cc:6103 +#: cp/semantics.cc:6227 #, gcc-internal-format msgid "negative length in array section in %qs clause" msgstr "" -#: c/c-typeck.cc:15345 cp/semantics.cc:6106 +#: c/c-typeck.cc:15359 cp/semantics.cc:6120 #, gcc-internal-format msgid "low bound %qE above array section size in %qs clause" msgstr "" -#: c/c-typeck.cc:15388 cp/semantics.cc:6149 +#: c/c-typeck.cc:15402 cp/semantics.cc:6163 #, gcc-internal-format msgid "length %qE above array section size in %qs clause" msgstr "" -#: c/c-typeck.cc:15403 cp/semantics.cc:6164 +#: c/c-typeck.cc:15417 cp/semantics.cc:6178 #, gcc-internal-format msgid "high bound %qE above array section size in %qs clause" msgstr "" -#: c/c-typeck.cc:15440 cp/semantics.cc:6201 +#: c/c-typeck.cc:15454 cp/semantics.cc:6215 #, gcc-internal-format msgid "for array function parameter length expression must be specified" msgstr "" -#: c/c-typeck.cc:15444 cp/semantics.cc:6205 +#: c/c-typeck.cc:15458 cp/semantics.cc:6219 #, gcc-internal-format msgid "for pointer type length expression must be specified" msgstr "" -#: c/c-typeck.cc:15472 c/c-typeck.cc:15591 cp/semantics.cc:6232 -#: cp/semantics.cc:6368 +#: c/c-typeck.cc:15486 c/c-typeck.cc:15605 cp/semantics.cc:6246 +#: cp/semantics.cc:6382 #, gcc-internal-format msgid "array section is not contiguous in %qs clause" msgstr "" -#: c/c-typeck.cc:15482 cp/semantics.cc:6242 +#: c/c-typeck.cc:15496 cp/semantics.cc:6256 #, gcc-internal-format msgid "%qE does not have pointer or array type" msgstr "" -#: c/c-typeck.cc:15858 cp/semantics.cc:7305 +#: c/c-typeck.cc:15872 cp/semantics.cc:7319 #, gcc-internal-format msgid "iterator %qD has neither integral nor pointer type" msgstr "" -#: c/c-typeck.cc:15865 +#: c/c-typeck.cc:15879 #, gcc-internal-format msgid "iterator %qD has %<_Atomic%> qualified type" msgstr "" -#: c/c-typeck.cc:15871 cp/semantics.cc:7312 +#: c/c-typeck.cc:15885 cp/semantics.cc:7326 #, gcc-internal-format msgid "iterator %qD has const qualified type" msgstr "" -#: c/c-typeck.cc:15884 cp/semantics.cc:7328 +#: c/c-typeck.cc:15898 cp/semantics.cc:7342 #, gcc-internal-format msgid "iterator step with non-integral type" msgstr "" -#: c/c-typeck.cc:15904 cp/semantics.cc:7364 +#: c/c-typeck.cc:15918 cp/semantics.cc:7378 #, gcc-internal-format msgid "iterator %qD has zero step" msgstr "" -#: c/c-typeck.cc:15931 +#: c/c-typeck.cc:15945 #, gcc-internal-format msgid "type of iterator %qD refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:15938 cp/semantics.cc:7398 +#: c/c-typeck.cc:15952 cp/semantics.cc:7412 #, gcc-internal-format msgid "begin expression refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:15944 cp/semantics.cc:7404 +#: c/c-typeck.cc:15958 cp/semantics.cc:7418 #, gcc-internal-format msgid "end expression refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:15950 cp/semantics.cc:7410 +#: c/c-typeck.cc:15964 cp/semantics.cc:7424 #, gcc-internal-format msgid "step expression refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:15987 cp/semantics.cc:7458 +#: c/c-typeck.cc:16001 cp/semantics.cc:7472 #, gcc-internal-format msgid "expected pointer in %qs clause" msgstr "" -#: c/c-typeck.cc:16090 cp/semantics.cc:7624 +#: c/c-typeck.cc:16104 cp/semantics.cc:7638 #, gcc-internal-format msgid "" "%<inscan%> and non-%<inscan%> %<reduction%> clauses on the same construct" msgstr "" -#: c/c-typeck.cc:16112 cp/semantics.cc:7644 +#: c/c-typeck.cc:16126 cp/semantics.cc:7658 #, gcc-internal-format msgid "%<inscan%> %<reduction%> clause with array section" msgstr "" -#: c/c-typeck.cc:16138 c/c-typeck.cc:16148 +#: c/c-typeck.cc:16152 c/c-typeck.cc:16162 #, gcc-internal-format msgid "%qD in %<reduction%> clause is a zero size array" msgstr "" -#: c/c-typeck.cc:16168 +#: c/c-typeck.cc:16182 #, gcc-internal-format msgid "%<_Atomic%> %qE in %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:16180 +#: c/c-typeck.cc:16194 #, gcc-internal-format msgid "zero sized type %qT in %qs clause" msgstr "" -#: c/c-typeck.cc:16188 +#: c/c-typeck.cc:16202 #, gcc-internal-format msgid "variable sized type %qT in %qs clause" msgstr "" -#: c/c-typeck.cc:16232 +#: c/c-typeck.cc:16246 #, gcc-internal-format msgid "%qE has invalid type for %<reduction(%s)%>" msgstr "" -#: c/c-typeck.cc:16241 cp/semantics.cc:7197 +#: c/c-typeck.cc:16255 cp/semantics.cc:7211 #, gcc-internal-format msgid "user defined reduction not found for %qE" msgstr "" -#: c/c-typeck.cc:16329 +#: c/c-typeck.cc:16343 #, gcc-internal-format msgid "variable length element type in array %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:16347 c/c-typeck.cc:17261 cp/semantics.cc:9943 +#: c/c-typeck.cc:16361 c/c-typeck.cc:17275 cp/semantics.cc:9957 #, gcc-internal-format msgid "%<nowait%> clause must not be used together with %<copyprivate%> clause" msgstr "" -#: c/c-typeck.cc:16359 cp/semantics.cc:10011 +#: c/c-typeck.cc:16373 cp/semantics.cc:10025 #, gcc-internal-format msgid "%qE must be %<threadprivate%> for %<copyin%>" msgstr "" -#: c/c-typeck.cc:16374 cp/semantics.cc:7687 +#: c/c-typeck.cc:16388 cp/semantics.cc:7701 #, gcc-internal-format msgid "" "modifier should not be specified in %<linear%> clause on %<simd%> or %<for%> " "constructs when not using OpenMP 5.2 modifiers" msgstr "" -#: c/c-typeck.cc:16383 +#: c/c-typeck.cc:16397 #, gcc-internal-format msgid "" "linear clause applied to non-integral non-pointer variable with type %qT" msgstr "" -#: c/c-typeck.cc:16391 +#: c/c-typeck.cc:16405 #, gcc-internal-format msgid "%<_Atomic%> %qD in %<linear%> clause" msgstr "" -#: c/c-typeck.cc:16410 cp/semantics.cc:7771 +#: c/c-typeck.cc:16424 cp/semantics.cc:7785 #, gcc-internal-format msgid "%<linear%> clause step %qE is neither constant nor a parameter" msgstr "" -#: c/c-typeck.cc:16440 c/c-typeck.cc:17161 c/c-typeck.cc:17432 -#: cp/semantics.cc:7858 cp/semantics.cc:9253 cp/semantics.cc:9644 +#: c/c-typeck.cc:16454 c/c-typeck.cc:17175 c/c-typeck.cc:17446 +#: cp/semantics.cc:7872 cp/semantics.cc:9267 cp/semantics.cc:9658 #, gcc-internal-format msgid "%qE is not a variable in clause %qs" msgstr "" -#: c/c-typeck.cc:16457 cp/semantics.cc:7876 +#: c/c-typeck.cc:16471 cp/semantics.cc:7890 #, gcc-internal-format msgid "%qD appears more than once in data-sharing clauses" msgstr "" -#: c/c-typeck.cc:16468 cp/semantics.cc:7887 +#: c/c-typeck.cc:16482 cp/semantics.cc:7901 #, gcc-internal-format msgid "%qD appears more than once in reduction clauses" msgstr "" -#: c/c-typeck.cc:16482 c/c-typeck.cc:16552 c/c-typeck.cc:16587 +#: c/c-typeck.cc:16496 c/c-typeck.cc:16566 c/c-typeck.cc:16601 #, gcc-internal-format msgid "%qE appears more than once in data clauses" msgstr "" -#: c/c-typeck.cc:16492 c/c-typeck.cc:16560 c/c-typeck.cc:16909 -#: c/c-typeck.cc:17061 c/c-typeck.cc:17069 c/c-typeck.cc:17085 -#: c/c-typeck.cc:17094 c/c-typeck.cc:17102 cp/semantics.cc:7901 -#: cp/semantics.cc:7911 cp/semantics.cc:8004 cp/semantics.cc:8012 -#: cp/semantics.cc:8059 cp/semantics.cc:8941 cp/semantics.cc:9131 -#: cp/semantics.cc:9139 cp/semantics.cc:9159 cp/semantics.cc:9168 -#: cp/semantics.cc:9176 +#: c/c-typeck.cc:16506 c/c-typeck.cc:16574 c/c-typeck.cc:16923 +#: c/c-typeck.cc:17075 c/c-typeck.cc:17083 c/c-typeck.cc:17099 +#: c/c-typeck.cc:17108 c/c-typeck.cc:17116 cp/semantics.cc:7915 +#: cp/semantics.cc:7925 cp/semantics.cc:8018 cp/semantics.cc:8026 +#: cp/semantics.cc:8073 cp/semantics.cc:8955 cp/semantics.cc:9145 +#: cp/semantics.cc:9153 cp/semantics.cc:9173 cp/semantics.cc:9182 +#: cp/semantics.cc:9190 #, gcc-internal-format msgid "%qD appears more than once in data clauses" msgstr "" -#: c/c-typeck.cc:16495 c/c-typeck.cc:16566 c/c-typeck.cc:17105 -#: cp/semantics.cc:7914 cp/semantics.cc:8018 cp/semantics.cc:9179 +#: c/c-typeck.cc:16509 c/c-typeck.cc:16580 c/c-typeck.cc:17119 +#: cp/semantics.cc:7928 cp/semantics.cc:8032 cp/semantics.cc:9193 #, gcc-internal-format msgid "%qD appears both in data and map clauses" msgstr "" -#: c/c-typeck.cc:16540 cp/semantics.cc:7991 +#: c/c-typeck.cc:16554 cp/semantics.cc:8005 #, gcc-internal-format msgid "%qE is not a variable in clause %<firstprivate%>" msgstr "" -#: c/c-typeck.cc:16580 cp/semantics.cc:8051 +#: c/c-typeck.cc:16594 cp/semantics.cc:8065 #, gcc-internal-format msgid "%qE is not a variable in clause %<lastprivate%>" msgstr "" -#: c/c-typeck.cc:16599 cp/semantics.cc:8473 +#: c/c-typeck.cc:16613 cp/semantics.cc:8487 #, gcc-internal-format msgid "%qE is not a variable in %<aligned%> clause" msgstr "" -#: c/c-typeck.cc:16606 +#: c/c-typeck.cc:16620 #, gcc-internal-format msgid "%qE in %<aligned%> clause is neither a pointer nor an array" msgstr "" -#: c/c-typeck.cc:16613 +#: c/c-typeck.cc:16627 #, gcc-internal-format msgid "%<_Atomic%> %qD in %<aligned%> clause" msgstr "" -#: c/c-typeck.cc:16620 +#: c/c-typeck.cc:16634 #, gcc-internal-format msgid "%qE appears more than once in %<aligned%> clauses" msgstr "" -#: c/c-typeck.cc:16633 cp/semantics.cc:8542 +#: c/c-typeck.cc:16647 cp/semantics.cc:8556 #, gcc-internal-format msgid "%qE is not a variable in %<nontemporal%> clause" msgstr "" -#: c/c-typeck.cc:16639 +#: c/c-typeck.cc:16653 #, gcc-internal-format msgid "%qE appears more than once in %<nontemporal%> clauses" msgstr "" -#: c/c-typeck.cc:16652 cp/semantics.cc:8581 +#: c/c-typeck.cc:16666 cp/semantics.cc:8595 #, gcc-internal-format msgid "%qE is not a variable in %<allocate%> clause" msgstr "" -#: c/c-typeck.cc:16658 +#: c/c-typeck.cc:16672 #, gcc-internal-format msgid "%qE appears more than once in %<allocate%> clauses" msgstr "" -#: c/c-typeck.cc:16730 cp/semantics.cc:8709 +#: c/c-typeck.cc:16744 cp/semantics.cc:8723 #, gcc-internal-format msgid "%<depend%> clause with %<depobj%> dependence type on array section" msgstr "" -#: c/c-typeck.cc:16745 cp/semantics.cc:8724 +#: c/c-typeck.cc:16759 cp/semantics.cc:8738 #, gcc-internal-format msgid "" "%<omp_all_memory%> used with %<depend%> kind other than %<out%> or %<inout%>" msgstr "" -#: c/c-typeck.cc:16753 cp/semantics.cc:8742 +#: c/c-typeck.cc:16767 cp/semantics.cc:8756 #, gcc-internal-format msgid "%qE is not lvalue expression nor array section in %qs clause" msgstr "" -#: c/c-typeck.cc:16774 cp/semantics.cc:8764 +#: c/c-typeck.cc:16788 cp/semantics.cc:8778 #, gcc-internal-format msgid "" "%qE does not have %<omp_depend_t%> type in %<depend%> clause with %<depobj%> " "dependence type" msgstr "" -#: c/c-typeck.cc:16784 cp/semantics.cc:8776 +#: c/c-typeck.cc:16798 cp/semantics.cc:8790 #, gcc-internal-format msgid "" "%qE should not have %<omp_depend_t%> type in %<depend%> clause with " "dependence type other than %<depobj%>" msgstr "" -#: c/c-typeck.cc:16845 cp/semantics.cc:8876 +#: c/c-typeck.cc:16859 cp/semantics.cc:8890 #, gcc-internal-format msgid "array section does not have mappable type in %qs clause" msgstr "" -#: c/c-typeck.cc:16865 c/c-typeck.cc:16941 c/c-typeck.cc:16977 -#: cp/semantics.cc:8896 cp/semantics.cc:8975 cp/semantics.cc:9011 +#: c/c-typeck.cc:16879 c/c-typeck.cc:16955 c/c-typeck.cc:16991 +#: cp/semantics.cc:8910 cp/semantics.cc:8989 cp/semantics.cc:9025 #, gcc-internal-format msgid "unsupported map expression %qE" msgstr "" -#: c/c-typeck.cc:16905 c/c-typeck.cc:17082 cp/semantics.cc:8937 -#: cp/semantics.cc:9156 +#: c/c-typeck.cc:16919 c/c-typeck.cc:17096 cp/semantics.cc:8951 +#: cp/semantics.cc:9170 #, gcc-internal-format msgid "%qD appears more than once in motion clauses" msgstr "" -#: c/c-typeck.cc:16913 c/c-typeck.cc:17088 cp/semantics.cc:8945 -#: cp/semantics.cc:9162 +#: c/c-typeck.cc:16927 c/c-typeck.cc:17102 cp/semantics.cc:8959 +#: cp/semantics.cc:9176 #, gcc-internal-format msgid "%qD appears more than once in map clauses" msgstr "" -#: c/c-typeck.cc:17032 c/c-typeck.cc:17174 cp/semantics.cc:9099 -#: cp/semantics.cc:9267 +#: c/c-typeck.cc:17046 c/c-typeck.cc:17188 cp/semantics.cc:9113 +#: cp/semantics.cc:9281 #, gcc-internal-format msgid "%qD does not have a mappable type in %qs clause" msgstr "" -#: c/c-typeck.cc:17157 cp/semantics.cc:9248 +#: c/c-typeck.cc:17171 cp/semantics.cc:9262 #, gcc-internal-format msgid "%qE is neither a variable nor a function name in clause %qs" msgstr "" -#: c/c-typeck.cc:17183 cp/semantics.cc:9279 +#: c/c-typeck.cc:17197 cp/semantics.cc:9293 #, gcc-internal-format msgid "%qE appears more than once on the same %<declare target%> directive" msgstr "" -#: c/c-typeck.cc:17197 cp/semantics.cc:9295 +#: c/c-typeck.cc:17211 cp/semantics.cc:9309 #, gcc-internal-format msgid "%qD is not an argument in %<uniform%> clause" msgstr "" -#: c/c-typeck.cc:17200 cp/semantics.cc:9298 +#: c/c-typeck.cc:17214 cp/semantics.cc:9312 #, gcc-internal-format msgid "%qE is not an argument in %<uniform%> clause" msgstr "" -#: c/c-typeck.cc:17219 +#: c/c-typeck.cc:17233 #, gcc-internal-format msgid "%qs variable is not a pointer" msgstr "" -#: c/c-typeck.cc:17226 +#: c/c-typeck.cc:17240 #, gcc-internal-format msgid "%qs variable is neither a pointer nor an array" msgstr "" -#: c/c-typeck.cc:17274 c/c-typeck.cc:17379 cp/semantics.cc:9894 +#: c/c-typeck.cc:17288 c/c-typeck.cc:17393 cp/semantics.cc:9908 #, gcc-internal-format msgid "%<order%> clause must not be used together with %<ordered%> clause" msgstr "" -#: c/c-typeck.cc:17294 cp/semantics.cc:8816 +#: c/c-typeck.cc:17308 cp/semantics.cc:8830 #, gcc-internal-format msgid "too many %qs clauses on a task construct" msgstr "" -#: c/c-typeck.cc:17415 cp/semantics.cc:9612 +#: c/c-typeck.cc:17429 cp/semantics.cc:9626 #, gcc-internal-format msgid "%<inbranch%> clause is incompatible with %<notinbranch%>" msgstr "" -#: c/c-typeck.cc:17450 cp/semantics.cc:9706 +#: c/c-typeck.cc:17464 cp/semantics.cc:9720 #, gcc-internal-format msgid "%qD appears more than once in action clauses" msgstr "" -#: c/c-typeck.cc:17461 cp/semantics.cc:9720 +#: c/c-typeck.cc:17475 cp/semantics.cc:9734 #, gcc-internal-format msgid "%qD must be of %<omp_interop_t%>" msgstr "" -#: c/c-typeck.cc:17470 cp/semantics.cc:9729 +#: c/c-typeck.cc:17484 cp/semantics.cc:9743 #, gcc-internal-format msgid "%qD shall not be const" msgstr "" -#: c/c-typeck.cc:17519 cp/semantics.cc:10082 +#: c/c-typeck.cc:17533 cp/semantics.cc:10096 #, gcc-internal-format msgid "%qE is predetermined %qs for %qs" msgstr "" -#: c/c-typeck.cc:17529 +#: c/c-typeck.cc:17543 #, gcc-internal-format msgid "" "%<const%> qualified %qE may appear only in %<shared%> or %<firstprivate%> " "clauses" msgstr "" -#: c/c-typeck.cc:17560 cp/semantics.cc:9835 +#: c/c-typeck.cc:17574 cp/semantics.cc:9849 #, gcc-internal-format msgid "%<simdlen%> clause value is bigger than %<safelen%> clause value" msgstr "" -#: c/c-typeck.cc:17572 cp/semantics.cc:9848 +#: c/c-typeck.cc:17586 cp/semantics.cc:9862 #, gcc-internal-format msgid "" "%<nonmonotonic%> schedule modifier specified together with %<ordered%> clause" msgstr "" -#: c/c-typeck.cc:17583 c/c-typeck.cc:17591 cp/semantics.cc:9857 -#: cp/semantics.cc:9886 +#: c/c-typeck.cc:17597 c/c-typeck.cc:17605 cp/semantics.cc:9871 +#: cp/semantics.cc:9900 #, gcc-internal-format msgid "%qs clause specified together with %<inscan%> %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:17639 cp/semantics.cc:9815 +#: c/c-typeck.cc:17653 cp/semantics.cc:9829 #, gcc-internal-format msgid "" "%<linear%> clause step is a parameter %qD not specified in %<uniform%> clause" msgstr "" -#: c/c-typeck.cc:17690 cp/semantics.cc:9865 +#: c/c-typeck.cc:17704 cp/semantics.cc:9879 #, gcc-internal-format msgid "%<nogroup%> clause must not be used together with %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:17698 cp/semantics.cc:9876 +#: c/c-typeck.cc:17712 cp/semantics.cc:9890 #, gcc-internal-format msgid "" "%<grainsize%> clause must not be used together with %<num_tasks%> clause" msgstr "" -#: c/c-typeck.cc:17706 cp/semantics.cc:9932 +#: c/c-typeck.cc:17720 cp/semantics.cc:9946 #, gcc-internal-format msgid "%<full%> clause must not be used together with %<partial%> clause" msgstr "" -#: c/c-typeck.cc:17716 cp/semantics.cc:9905 +#: c/c-typeck.cc:17730 cp/semantics.cc:9919 #, gcc-internal-format msgid "%<detach%> clause must not be used together with %<mergeable%> clause" msgstr "" -#: c/c-typeck.cc:17734 cp/semantics.cc:10107 +#: c/c-typeck.cc:17748 cp/semantics.cc:10121 #, gcc-internal-format msgid "" "the event handle of a %<detach%> clause should not be in a data-sharing " "clause" msgstr "" -#: c/c-typeck.cc:17752 cp/semantics.cc:10178 +#: c/c-typeck.cc:17766 cp/semantics.cc:10192 #, gcc-internal-format msgid "" "%<depend%> clause requires action clauses with %<targetsync%> interop-type" msgstr "" -#: c/c-typeck.cc:17756 cp/semantics.cc:10182 +#: c/c-typeck.cc:17770 cp/semantics.cc:10196 #, gcc-internal-format msgid "%<init%> clause lacks the %<targetsync%> modifier" msgstr "" -#: c/c-typeck.cc:17928 +#: c/c-typeck.cc:17942 #, gcc-internal-format msgid "cannot use %<va_arg%> with reverse storage order" msgstr "" -#: c/c-typeck.cc:17933 +#: c/c-typeck.cc:17947 #, gcc-internal-format msgid "second argument to %<va_arg%> is of incomplete type %qT" msgstr "" -#: c/c-typeck.cc:17939 +#: c/c-typeck.cc:17953 #, gcc-internal-format msgid "second argument to %<va_arg%> is a function type %qT" msgstr "" -#: c/c-typeck.cc:17945 +#: c/c-typeck.cc:17959 #, gcc-internal-format msgid "C++ requires promoted type, not enum type, in %<va_arg%>" msgstr "" @@ -55541,18 +55542,18 @@ msgstr "" msgid "exception '%s'" msgstr "" -#: cobol/cobol1.cc:412 +#: cobol/cobol1.cc:408 #, gcc-internal-format, gfc-internal-format msgid "could not execute preprocessor %s" msgstr "" -#: cobol/cobol1.cc:417 +#: cobol/cobol1.cc:413 #, gcc-internal-format, gfc-internal-format msgid "could not include %s" msgstr "" #. This isn't right. All OPT_main should be replaced -#: cobol/cobol1.cc:423 +#: cobol/cobol1.cc:419 #, gcc-internal-format msgid "We should never see a non-equal dash-main in cobol1.c" msgstr "" @@ -55561,245 +55562,245 @@ msgstr "" msgid "no such exception: 0x%04x" msgstr "" -#: cobol/genapi.cc:331 +#: cobol/genapi.cc:332 #, gcc-internal-format msgid "Probable cause: it was referenced without being defined." msgstr "" -#: cobol/genapi.cc:570 +#: cobol/genapi.cc:571 #, gcc-internal-format msgid "Nice try, but you can't fire me. I quit!" msgstr "" -#: cobol/genapi.cc:1485 +#: cobol/genapi.cc:1486 #, gcc-internal-format, gfc-internal-format msgid "%s(): Knows not the variable type %s for %s" msgstr "" -#: cobol/genapi.cc:2172 +#: cobol/genapi.cc:2176 #, gcc-internal-format, gfc-internal-format msgid "I don't know how to MOVE an alphabetical string to %s(%s) \n" msgstr "" -#: cobol/genapi.cc:2240 +#: cobol/genapi.cc:2244 #, gcc-internal-format, gfc-internal-format msgid "%s(): field->type %s must be literal or alphanumeric" msgstr "" -#: cobol/genapi.cc:5720 +#: cobol/genapi.cc:5728 #, gcc-internal-format, gfc-internal-format msgid "%s(): Invalid field type %s:" msgstr "" -#: cobol/genapi.cc:6937 cobol/genapi.cc:6943 cobol/genapi.cc:6949 +#: cobol/genapi.cc:6929 cobol/genapi.cc:6935 cobol/genapi.cc:6941 #, gcc-internal-format, gfc-internal-format msgid "" "parser_logop() was called with variable %s on line %d, which is not a " "FldConditional\n" msgstr "" -#: cobol/genapi.cc:7056 cobol/genapi.cc:7120 +#: cobol/genapi.cc:7048 cobol/genapi.cc:7112 #, gcc-internal-format, gfc-internal-format msgid "" "parser_relop() was called with variable %s, which is not a FldConditional\n" msgstr "" -#: cobol/genapi.cc:7166 +#: cobol/genapi.cc:7158 #, gcc-internal-format, gfc-internal-format msgid "" "parser_if() was called with variable %s, which is not a FldConditional\n" msgstr "" -#: cobol/genapi.cc:7419 +#: cobol/genapi.cc:7411 #, gcc-internal-format, gfc-internal-format msgid "###### candidate %s has unimplemented CVT_type %d(%s)\n" msgstr "" -#: cobol/genapi.cc:7430 +#: cobol/genapi.cc:7422 #, gcc-internal-format, gfc-internal-format msgid "###### unknown setop_t code %d\n" msgstr "" -#: cobol/genapi.cc:7626 +#: cobol/genapi.cc:7618 msgid "%s:%d: %zu exceeds MAXIMUM_UNTILS of %d, line %d" msgstr "" -#: cobol/genapi.cc:8632 +#: cobol/genapi.cc:8624 #, gcc-internal-format, gfc-internal-format msgid "%s:%d: ignoring subscripts" msgstr "" -#: cobol/genapi.cc:8854 cobol/genapi.cc:9314 +#: cobol/genapi.cc:8846 cobol/genapi.cc:9306 #, gcc-internal-format, gfc-internal-format msgid "%s(): called with NULL *file" msgstr "" -#: cobol/genapi.cc:8979 +#: cobol/genapi.cc:8971 #, gcc-internal-format, gfc-internal-format msgid "%s:%d file %s access mode is 'file_inaccessible_e' in %s" msgstr "" -#: cobol/genapi.cc:9052 +#: cobol/genapi.cc:9044 #, gcc-internal-format msgid "parser_file_open called with NULL *file" msgstr "" -#: cobol/genapi.cc:9057 +#: cobol/genapi.cc:9049 #, gcc-internal-format, gfc-internal-format msgid "parser_file_open for %s called with NULL var_decl_node" msgstr "" -#: cobol/genapi.cc:9062 +#: cobol/genapi.cc:9054 #, gcc-internal-format, gfc-internal-format msgid "EXTEND can only be used where %s is ACCESS MODE SEQUENTIAL" msgstr "" -#: cobol/genapi.cc:9130 +#: cobol/genapi.cc:9122 #, gcc-internal-format msgid "parser_file_close called with NULL *file" msgstr "" -#: cobol/genapi.cc:9135 +#: cobol/genapi.cc:9127 #, gcc-internal-format, gfc-internal-format msgid "parser_file_close for %s called with NULL file->var_decl_node" msgstr "" -#: cobol/genapi.cc:9188 +#: cobol/genapi.cc:9180 #, gcc-internal-format, gfc-internal-format msgid "%s:%d file %s 'where' is zero in %s" msgstr "" -#: cobol/genapi.cc:9198 +#: cobol/genapi.cc:9190 #, gcc-internal-format msgid "parser_file_read called with NULL *file" msgstr "" -#: cobol/genapi.cc:9203 +#: cobol/genapi.cc:9195 #, gcc-internal-format, gfc-internal-format msgid "parser_file_read for %s called with NULL file->var_decl_node" msgstr "" -#: cobol/genapi.cc:9208 +#: cobol/genapi.cc:9200 #, gcc-internal-format msgid "parser_file_read called with NULL *field" msgstr "" -#: cobol/genapi.cc:9213 +#: cobol/genapi.cc:9205 #, gcc-internal-format, gfc-internal-format msgid "parser_file_read for %s called with NULL field->var_decl_node" msgstr "" -#: cobol/genapi.cc:9218 +#: cobol/genapi.cc:9210 #, gcc-internal-format, gfc-internal-format msgid "%s:%d file %s is RELATIVE/SEQUENTIAL, but 'where' >= 0" msgstr "" -#: cobol/genapi.cc:9227 +#: cobol/genapi.cc:9219 #, gcc-internal-format, gfc-internal-format msgid "%s:%d file %s is RELATIVE/RANDOM, but 'where' < 0" msgstr "" -#: cobol/genapi.cc:9270 +#: cobol/genapi.cc:9262 #, gcc-internal-format, gfc-internal-format msgid "%s:%d file %s 'sequentially' is %d in %s" msgstr "" -#: cobol/genapi.cc:9319 +#: cobol/genapi.cc:9311 #, gcc-internal-format, gfc-internal-format msgid "%s(): for %s called with NULL file->var_decl_node" msgstr "" -#: cobol/genapi.cc:9325 +#: cobol/genapi.cc:9317 #, gcc-internal-format, gfc-internal-format msgid "%s(): called with NULL *field" msgstr "" -#: cobol/genapi.cc:9330 +#: cobol/genapi.cc:9322 #, gcc-internal-format, gfc-internal-format msgid "%s(): for %s called with NULL field->var_decl_node" msgstr "" -#: cobol/genapi.cc:9465 +#: cobol/genapi.cc:9457 #, gcc-internal-format, gfc-internal-format msgid "%s:%d file %s is INDEXED/SEQUENTIAL, but 'sequentially' is false" msgstr "" -#: cobol/genapi.cc:11124 +#: cobol/genapi.cc:11122 #, gcc-internal-format, gfc-internal-format msgid "%s(): asked to sort %s, but it's not a table" msgstr "" #. Having both or neither violates SORT syntax -#: cobol/genapi.cc:11252 +#: cobol/genapi.cc:11250 #, gcc-internal-format, gfc-internal-format msgid "" "%s(): syntax error -- both (or neither) USING and input-proc are specified" msgstr "" -#: cobol/genapi.cc:11381 +#: cobol/genapi.cc:11379 #, gcc-internal-format, gfc-internal-format msgid "" "%s(): syntax error -- both (or neither) GIVING and output-proc are specified" msgstr "" -#: cobol/genapi.cc:11787 +#: cobol/genapi.cc:11786 #, gcc-internal-format, gfc-internal-format msgid "" "%s(): syntax error -- both (or neither) files and output-proc are specified" msgstr "" -#: cobol/genapi.cc:12188 +#: cobol/genapi.cc:12187 #, gcc-internal-format msgid "CALL USING BY CONTENT <temporary> would require REPOSITORY PROTOTYPES." msgstr "" -#: cobol/genapi.cc:12440 +#: cobol/genapi.cc:12439 #, gcc-internal-format, gfc-internal-format msgid "%s(): What in the name of Nero's fiddle are we doing here?" msgstr "" -#: cobol/genapi.cc:13949 +#: cobol/genapi.cc:13948 #, gcc-internal-format, gfc-internal-format msgid "" "In parser_move(%s to %s), the move of FldLiteralN to %s hasn't been " "implemented" msgstr "" -#: cobol/genapi.cc:14185 +#: cobol/genapi.cc:14184 #, gcc-internal-format, gfc-internal-format msgid "" "In mh_dest_is_float(%s to %s), the move of %s to %s hasn't been implemented" msgstr "" -#: cobol/genapi.cc:16312 +#: cobol/genapi.cc:16279 #, gcc-internal-format, gfc-internal-format msgid "LEVEL 01 (%s) OCCURS has insufficient data.memsize" msgstr "" -#: cobol/genapi.cc:16384 +#: cobol/genapi.cc:16351 #, gcc-internal-format msgid "parser_symbol_add() was called with a NULL new_var\n" msgstr "" -#: cobol/genapi.cc:16412 +#: cobol/genapi.cc:16379 msgid "%s(): %2.2d %s is a table, but it improperly has a capacity of zero" msgstr "" -#: cobol/genapi.cc:16452 +#: cobol/genapi.cc:16419 #, gcc-internal-format, gfc-internal-format msgid "parser_symbol_add(): %s is its own ancestor" msgstr "" -#: cobol/genapi.cc:16458 +#: cobol/genapi.cc:16425 msgid "parser_symbol_add(): %2.2d %s has null ancestor" msgstr "" -#: cobol/genapi.cc:16466 +#: cobol/genapi.cc:16433 #, gcc-internal-format, gfc-internal-format msgid "parser_symbol_add( %s ) improperly has a non-null var_decl_node\n" msgstr "" -#: cobol/genapi.cc:16671 +#: cobol/genapi.cc:16638 msgid "%s(): %2.2d %s<%s> improperly has a data.capacity of zero" msgstr "" @@ -55833,26 +55834,26 @@ msgstr "" msgid "Too many subscripts" msgstr "" -#: cobol/lexio.cc:1488 +#: cobol/lexio.cc:1490 #, gcc-internal-format, gfc-internal-format msgid "%s pid %d terminated by %s" msgstr "" -#: cobol/lexio.cc:1493 +#: cobol/lexio.cc:1495 #, gcc-internal-format, gfc-internal-format msgid "%s exited with status %d" msgstr "" -#: cobol/symbols.cc:456 +#: cobol/symbols.cc:450 msgid "%s:%d: LblNone '%s' has parent #%zu" msgstr "" -#: cobol/symbols.cc:1968 +#: cobol/symbols.cc:1907 #, gcc-internal-format, gfc-internal-format msgid "%s: key must be field" msgstr "" -#: cobol/symbols.cc:3855 cobol/symbols.cc:3976 cobol/symbols.cc:4011 +#: cobol/symbols.cc:3709 cobol/symbols.cc:3816 cobol/symbols.cc:3846 #, gcc-internal-format, gfc-internal-format msgid "%s:%d: could not add '%s'" msgstr "" @@ -55862,17 +55863,17 @@ msgstr "" msgid "logic error: MOVE %s %s invalid type:" msgstr "" -#: cobol/util.cc:1726 +#: cobol/util.cc:1705 #, gcc-internal-format, gfc-internal-format msgid "%s: regcomp: %s" msgstr "" -#: cobol/util.cc:1836 +#: cobol/util.cc:1815 #, gcc-internal-format, gfc-internal-format msgid "logic error: missing inode for %s" msgstr "" -#: cobol/util.cc:2174 +#: cobol/util.cc:2141 #, gcc-internal-format, gfc-internal-format msgid "failed compiling %s" msgstr "" @@ -56343,7 +56344,7 @@ msgstr "" msgid "%q#D is private within this context" msgstr "" -#: cp/call.cc:8377 cp/decl.cc:9615 +#: cp/call.cc:8377 cp/decl.cc:9617 #, gcc-internal-format msgid "declared private here" msgstr "" @@ -56353,7 +56354,7 @@ msgstr "" msgid "%q#D is protected within this context" msgstr "" -#: cp/call.cc:8383 cp/decl.cc:9616 +#: cp/call.cc:8383 cp/decl.cc:9618 #, gcc-internal-format msgid "declared protected here" msgstr "" @@ -56728,7 +56729,7 @@ msgstr "" msgid "call to non-function %qD" msgstr "" -#: cp/call.cc:11947 cp/pt.cc:17448 cp/typeck.cc:3508 +#: cp/call.cc:11947 cp/pt.cc:17467 cp/typeck.cc:3508 #, gcc-internal-format msgid "cannot call constructor %<%T::%D%> directly" msgstr "" @@ -57330,7 +57331,7 @@ msgstr "" msgid "next member %q#D declared here" msgstr "" -#: cp/class.cc:7840 cp/decl.cc:18273 cp/parser.cc:28411 +#: cp/class.cc:7840 cp/decl.cc:18275 cp/parser.cc:28411 #, gcc-internal-format msgid "redefinition of %q#T" msgstr "" @@ -57468,7 +57469,7 @@ msgstr "" msgid "lambdas are implicitly %<constexpr%> only in C++17 and later" msgstr "" -#: cp/constexpr.cc:270 cp/decl.cc:15267 +#: cp/constexpr.cc:270 cp/decl.cc:15269 #, gcc-internal-format msgid "" "%<constexpr%> destructors only available with %<-std=c++20%> or %<-std=gnu+" @@ -57481,134 +57482,139 @@ msgstr "" msgid "invalid return type %qT of %<constexpr%> function %q+D" msgstr "" -#: cp/constexpr.cc:310 +#: cp/constexpr.cc:312 #, gcc-internal-format -msgid "%q#T has virtual base classes" +msgid "%<constexpr%> constructor in %q#T that has virtual base classes" msgstr "" -#: cp/constexpr.cc:568 +#: cp/constexpr.cc:315 +#, gcc-internal-format +msgid "%<constexpr%> destructor in %q#T that has virtual base classes" +msgstr "" + +#: cp/constexpr.cc:575 #, gcc-internal-format msgid "%<constexpr%> constructor does not have empty body" msgstr "" -#: cp/constexpr.cc:826 +#: cp/constexpr.cc:833 #, gcc-internal-format msgid "" "%<constexpr%> constructor for union %qT must initialize exactly one non-" "static data member" msgstr "" -#: cp/constexpr.cc:887 +#: cp/constexpr.cc:894 #, gcc-internal-format msgid "" "member %qD must be initialized by mem-initializer in %<constexpr%> " "constructor" msgstr "" -#: cp/constexpr.cc:950 +#: cp/constexpr.cc:957 #, gcc-internal-format msgid "body of %<constexpr%> function %qD not a return-statement" msgstr "" -#: cp/constexpr.cc:1069 +#: cp/constexpr.cc:1082 #, gcc-internal-format msgid "%<-fimplicit-constexpr%> only affects %<inline%> functions" msgstr "" -#: cp/constexpr.cc:1085 +#: cp/constexpr.cc:1098 #, gcc-internal-format msgid "%qD is not usable as a %<constexpr%> function because:" msgstr "" -#: cp/constexpr.cc:1339 cp/constexpr.cc:6558 +#: cp/constexpr.cc:1354 cp/constexpr.cc:6586 #, gcc-internal-format msgid "destroying %qE outside its lifetime" msgstr "" -#: cp/constexpr.cc:1631 cp/constexpr.cc:3389 +#: cp/constexpr.cc:1644 cp/constexpr.cc:3402 #: rust/backend/rust-constexpr.cc:3329 #, gcc-internal-format msgid "%<constexpr%> call flows off the end of the function" msgstr "" -#: cp/constexpr.cc:1633 cp/constexpr.cc:1732 cp/constexpr.cc:1741 -#: cp/constexpr.cc:3683 rust/backend/rust-constexpr.cc:3334 +#: cp/constexpr.cc:1646 cp/constexpr.cc:1745 cp/constexpr.cc:1754 +#: cp/constexpr.cc:3711 rust/backend/rust-constexpr.cc:3334 #: rust/backend/rust-constexpr.cc:3344 rust/backend/rust-constexpr.cc:4324 #, gcc-internal-format msgid "%q+E is not a constant expression" msgstr "" -#: cp/constexpr.cc:1891 cp/constexpr.cc:2790 cp/constexpr.cc:3077 -#: cp/constexpr.cc:10075 rust/backend/rust-constexpr.cc:5789 +#: cp/constexpr.cc:1904 cp/constexpr.cc:2803 cp/constexpr.cc:3086 +#: cp/constexpr.cc:10141 rust/backend/rust-constexpr.cc:5789 #, gcc-internal-format msgid "call to non-%<constexpr%> function %qD" msgstr "" -#: cp/constexpr.cc:1938 cp/constexpr.cc:6116 cp/constexpr.cc:8564 +#: cp/constexpr.cc:1951 cp/constexpr.cc:6144 cp/constexpr.cc:8592 #: rust/backend/rust-constexpr.cc:875 rust/backend/rust-constexpr.cc:2494 #, gcc-internal-format msgid "dereferencing a null pointer" msgstr "" -#: cp/constexpr.cc:2126 +#: cp/constexpr.cc:2139 #, gcc-internal-format msgid "the comparison reduces to %qE" msgstr "" -#: cp/constexpr.cc:2129 +#: cp/constexpr.cc:2142 #, gcc-internal-format msgid "%qE evaluates to false" msgstr "" -#: cp/constexpr.cc:2208 +#: cp/constexpr.cc:2221 #, gcc-internal-format msgid "failed %<assume%> attribute assumption" msgstr "" -#: cp/constexpr.cc:2243 cp/constexpr.cc:10039 +#: cp/constexpr.cc:2256 cp/constexpr.cc:10105 #: rust/backend/rust-constexpr.cc:5758 #, gcc-internal-format msgid "call to internal function %qE" msgstr "" -#: cp/constexpr.cc:2297 rust/backend/rust-constexpr.cc:2615 +#: cp/constexpr.cc:2310 rust/backend/rust-constexpr.cc:2615 #, gcc-internal-format msgid "modifying a const object %qE is not allowed in a constant expression" msgstr "" -#: cp/constexpr.cc:2325 rust/backend/rust-constexpr.cc:2618 +#: cp/constexpr.cc:2338 rust/backend/rust-constexpr.cc:2618 #, gcc-internal-format msgid "originally declared %<const%> here" msgstr "" -#: cp/constexpr.cc:2578 cp/constexpr.cc:2634 cp/constexpr.cc:2667 -#: cp/constexpr.cc:2689 +#: cp/constexpr.cc:2591 cp/constexpr.cc:2647 cp/constexpr.cc:2680 +#: cp/constexpr.cc:2702 #, gcc-internal-format msgid "reference %<dynamic_cast%> failed" msgstr "" -#: cp/constexpr.cc:2579 +#: cp/constexpr.cc:2592 #, gcc-internal-format msgid "dynamic type %qT of its operand does not have a base class of type %qT" msgstr "" -#: cp/constexpr.cc:2603 +#: cp/constexpr.cc:2616 #, gcc-internal-format msgid "virtual table pointer is used uninitialized" msgstr "" -#: cp/constexpr.cc:2635 cp/constexpr.cc:2668 +#: cp/constexpr.cc:2648 cp/constexpr.cc:2681 #, gcc-internal-format msgid "" "static type %qT of its operand is a non-public base class of dynamic type %qT" msgstr "" -#: cp/constexpr.cc:2691 +#: cp/constexpr.cc:2704 #, gcc-internal-format msgid "%qT is an ambiguous base class of dynamic type %qT of its operand" msgstr "" -#: cp/constexpr.cc:2694 +#: cp/constexpr.cc:2707 #, gcc-internal-format msgid "" "dynamic type %qT of its operand does not have an unambiguous public base " @@ -57617,154 +57623,154 @@ msgstr "" #. virtual_offset is only set for virtual bases, which make the #. class non-literal, so we don't need to handle it here. -#: cp/constexpr.cc:2796 +#: cp/constexpr.cc:2809 #, gcc-internal-format msgid "calling constexpr member function %qD through virtual base subobject" msgstr "" -#: cp/constexpr.cc:2908 rust/backend/rust-constexpr.cc:3390 +#: cp/constexpr.cc:2918 rust/backend/rust-constexpr.cc:3390 #, gcc-internal-format msgid "expression %qE does not designate a %<constexpr%> function" msgstr "" -#: cp/constexpr.cc:2956 +#: cp/constexpr.cc:2965 #, gcc-internal-format msgid "cannot allocate array: size not constant" msgstr "" -#: cp/constexpr.cc:2997 +#: cp/constexpr.cc:3006 #, gcc-internal-format msgid "array deallocation of object allocated with non-array allocation" msgstr "" -#: cp/constexpr.cc:3001 cp/constexpr.cc:3024 +#: cp/constexpr.cc:3010 cp/constexpr.cc:3033 #, gcc-internal-format msgid "allocation performed here" msgstr "" -#: cp/constexpr.cc:3020 +#: cp/constexpr.cc:3029 #, gcc-internal-format msgid "non-array deallocation of object allocated with array allocation" msgstr "" -#: cp/constexpr.cc:3037 +#: cp/constexpr.cc:3046 #, gcc-internal-format msgid "deallocation of already deallocated storage" msgstr "" -#: cp/constexpr.cc:3044 +#: cp/constexpr.cc:3053 #, gcc-internal-format msgid "deallocation of storage that was not previously allocated" msgstr "" -#: cp/constexpr.cc:3170 rust/backend/rust-constexpr.cc:3445 +#: cp/constexpr.cc:3179 rust/backend/rust-constexpr.cc:3445 #, gcc-internal-format msgid "%qD called in a constant expression before its definition is complete" msgstr "" -#: cp/constexpr.cc:3177 +#: cp/constexpr.cc:3186 #, gcc-internal-format msgid "%qD called in a constant expression" msgstr "" -#: cp/constexpr.cc:3181 rust/backend/rust-constexpr.cc:3459 +#: cp/constexpr.cc:3190 rust/backend/rust-constexpr.cc:3459 #, gcc-internal-format msgid "%qD used before its definition" msgstr "" -#: cp/constexpr.cc:3259 rust/backend/rust-constexpr.cc:3501 +#: cp/constexpr.cc:3272 rust/backend/rust-constexpr.cc:3501 #, gcc-internal-format msgid "call has circular dependency" msgstr "" -#: cp/constexpr.cc:3270 rust/backend/rust-constexpr.cc:3512 +#: cp/constexpr.cc:3283 rust/backend/rust-constexpr.cc:3512 #, gcc-internal-format msgid "" "%<constexpr%> evaluation depth exceeds maximum of %d (use %<-fconstexpr-" "depth=%> to increase the maximum)" msgstr "" -#: cp/constexpr.cc:3641 +#: cp/constexpr.cc:3669 #, gcc-internal-format msgid "reference to %qD is not a constant expression" msgstr "" -#: cp/constexpr.cc:3644 +#: cp/constexpr.cc:3672 #, gcc-internal-format msgid "pointer to %qD is not a constant expression" msgstr "" -#: cp/constexpr.cc:3650 +#: cp/constexpr.cc:3678 #, gcc-internal-format msgid "" "address of non-static constexpr variable %qD may differ on each invocation " "of the enclosing function; add %<static%> to give it a constant address" msgstr "" -#: cp/constexpr.cc:3726 +#: cp/constexpr.cc:3754 #, gcc-internal-format msgid "right operand of shift expression %q+E is negative" msgstr "" -#: cp/constexpr.cc:3733 +#: cp/constexpr.cc:3761 #, gcc-internal-format msgid "" "right operand of shift expression %q+E is greater than or equal to the " "precision %wu of the left operand" msgstr "" -#: cp/constexpr.cc:3756 +#: cp/constexpr.cc:3784 #, gcc-internal-format msgid "left operand of shift expression %q+E is negative" msgstr "" -#: cp/constexpr.cc:3775 +#: cp/constexpr.cc:3803 #, gcc-internal-format msgid "shift expression %q+E overflows" msgstr "" -#: cp/constexpr.cc:3974 +#: cp/constexpr.cc:4002 #, gcc-internal-format msgid "arithmetic involving a null pointer in %qE" msgstr "" -#: cp/constexpr.cc:4484 rust/backend/rust-constexpr.cc:4399 +#: cp/constexpr.cc:4512 rust/backend/rust-constexpr.cc:4399 #, gcc-internal-format msgid "" "array subscript value %qE is outside the bounds of array %qD of type %qT" msgstr "" -#: cp/constexpr.cc:4487 rust/backend/rust-constexpr.cc:4404 +#: cp/constexpr.cc:4515 rust/backend/rust-constexpr.cc:4404 #, gcc-internal-format msgid "" "nonzero array subscript %qE is used with array %qD of type %qT with unknown " "bounds" msgstr "" -#: cp/constexpr.cc:4492 rust/backend/rust-constexpr.cc:4411 +#: cp/constexpr.cc:4520 rust/backend/rust-constexpr.cc:4411 #, gcc-internal-format msgid "array subscript value %qE is outside the bounds of array type %qT" msgstr "" -#: cp/constexpr.cc:4495 rust/backend/rust-constexpr.cc:4416 +#: cp/constexpr.cc:4523 rust/backend/rust-constexpr.cc:4416 #, gcc-internal-format msgid "" "nonzero array subscript %qE is used with array of type %qT with unknown " "bounds" msgstr "" -#: cp/constexpr.cc:4694 rust/backend/rust-constexpr.cc:1667 +#: cp/constexpr.cc:4722 rust/backend/rust-constexpr.cc:1667 #, gcc-internal-format msgid "accessing uninitialized array element" msgstr "" -#: cp/constexpr.cc:4756 rust/backend/rust-constexpr.cc:1724 +#: cp/constexpr.cc:4784 rust/backend/rust-constexpr.cc:1724 #, gcc-internal-format msgid "dereferencing a null pointer in %qE" msgstr "" -#: cp/constexpr.cc:4775 cp/constexpr.cc:4891 cp/constexpr.cc:4903 -#: cp/constexpr.cc:7739 cp/constexpr.cc:7870 cp/constexpr.cc:9989 +#: cp/constexpr.cc:4803 cp/constexpr.cc:4919 cp/constexpr.cc:4931 +#: cp/constexpr.cc:7767 cp/constexpr.cc:7898 cp/constexpr.cc:10055 #: rust/backend/rust-constexpr.cc:1738 rust/backend/rust-constexpr.cc:1983 #: rust/backend/rust-constexpr.cc:2225 rust/backend/rust-constexpr.cc:4743 #: rust/backend/rust-constexpr.cc:5712 @@ -57772,269 +57778,269 @@ msgstr "" msgid "%qE is not a constant expression" msgstr "" -#: cp/constexpr.cc:4783 rust/backend/rust-constexpr.cc:1744 +#: cp/constexpr.cc:4811 rust/backend/rust-constexpr.cc:1744 #, gcc-internal-format msgid "mutable %qD is not usable in a constant expression" msgstr "" -#: cp/constexpr.cc:4815 cp/constexpr.cc:4851 cp/constexpr.cc:6726 +#: cp/constexpr.cc:4843 cp/constexpr.cc:4879 cp/constexpr.cc:6754 #: rust/backend/rust-constexpr.cc:1774 rust/backend/rust-constexpr.cc:1797 #, gcc-internal-format msgid "accessing uninitialized member %qD" msgstr "" -#: cp/constexpr.cc:4817 cp/constexpr.cc:4830 cp/constexpr.cc:6721 +#: cp/constexpr.cc:4845 cp/constexpr.cc:4858 cp/constexpr.cc:6749 #: rust/backend/rust-constexpr.cc:1776 #, gcc-internal-format msgid "" "accessing %qD member instead of initialized %qD member in constant expression" msgstr "" -#: cp/constexpr.cc:4969 +#: cp/constexpr.cc:4997 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is a union type" msgstr "" -#: cp/constexpr.cc:4972 +#: cp/constexpr.cc:5000 #, gcc-internal-format msgid "%qs is not a constant expression because %qT contains a union type" msgstr "" -#: cp/constexpr.cc:4983 +#: cp/constexpr.cc:5011 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is a pointer type" msgstr "" -#: cp/constexpr.cc:4986 +#: cp/constexpr.cc:5014 #, gcc-internal-format msgid "%qs is not a constant expression because %qT contains a pointer type" msgstr "" -#: cp/constexpr.cc:4997 +#: cp/constexpr.cc:5025 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is a reference type" msgstr "" -#: cp/constexpr.cc:5000 +#: cp/constexpr.cc:5028 #, gcc-internal-format msgid "%qs is not a constant expression because %qT contains a reference type" msgstr "" -#: cp/constexpr.cc:5011 +#: cp/constexpr.cc:5039 #, gcc-internal-format msgid "" "%qs is not a constant expression because %qT is a pointer to member type" msgstr "" -#: cp/constexpr.cc:5015 +#: cp/constexpr.cc:5043 #, gcc-internal-format msgid "" "%qs is not a constant expression because %qT contains a pointer to member " "type" msgstr "" -#: cp/constexpr.cc:5026 +#: cp/constexpr.cc:5054 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is volatile" msgstr "" -#: cp/constexpr.cc:5029 +#: cp/constexpr.cc:5057 #, gcc-internal-format msgid "" "%qs is not a constant expression because %qT contains a volatile subobject" msgstr "" -#: cp/constexpr.cc:5184 +#: cp/constexpr.cc:5212 #, gcc-internal-format msgid "%qs cannot be constant evaluated on the target" msgstr "" -#: cp/constexpr.cc:5193 cp/constexpr.cc:5203 +#: cp/constexpr.cc:5221 cp/constexpr.cc:5231 #, gcc-internal-format msgid "%qs cannot be constant evaluated because the type is too large" msgstr "" -#: cp/constexpr.cc:5223 +#: cp/constexpr.cc:5251 #, gcc-internal-format msgid "%qs cannot be constant evaluated because the argument cannot be encoded" msgstr "" -#: cp/constexpr.cc:5269 +#: cp/constexpr.cc:5297 #, gcc-internal-format msgid "%qs accessing uninitialized byte at offset %d" msgstr "" -#: cp/constexpr.cc:5281 +#: cp/constexpr.cc:5309 #, gcc-internal-format msgid "" "%qs cannot be constant evaluated because the argument cannot be interpreted" msgstr "" -#: cp/constexpr.cc:6136 rust/backend/rust-constexpr.cc:895 +#: cp/constexpr.cc:6164 rust/backend/rust-constexpr.cc:895 #, gcc-internal-format msgid "accessing value of %qE through a %qT glvalue in a constant expression" msgstr "" #. Provide a more accurate message for deleted variables. -#: cp/constexpr.cc:6176 cp/constexpr.cc:6209 +#: cp/constexpr.cc:6204 cp/constexpr.cc:6237 #, gcc-internal-format msgid "use of allocated storage after deallocation in a constant expression" msgstr "" -#: cp/constexpr.cc:6178 cp/constexpr.cc:6204 cp/constexpr.cc:6211 -#: cp/constexpr.cc:6553 +#: cp/constexpr.cc:6206 cp/constexpr.cc:6232 cp/constexpr.cc:6239 +#: cp/constexpr.cc:6581 cp/constexpr.cc:9260 cp/constexpr.cc:9273 #, gcc-internal-format msgid "allocated here" msgstr "" -#: cp/constexpr.cc:6182 +#: cp/constexpr.cc:6210 #, gcc-internal-format msgid "accessing %qE outside its lifetime" msgstr "" -#: cp/constexpr.cc:6202 +#: cp/constexpr.cc:6230 #, gcc-internal-format msgid "" "the content of uninitialized storage is not usable in a constant expression" msgstr "" -#: cp/constexpr.cc:6214 rust/backend/rust-constexpr.cc:4041 +#: cp/constexpr.cc:6242 rust/backend/rust-constexpr.cc:4041 #, gcc-internal-format msgid "the value of %qD is not usable in a constant expression" msgstr "" -#: cp/constexpr.cc:6222 +#: cp/constexpr.cc:6250 #, gcc-internal-format msgid "%qD used in its own initializer" msgstr "" -#: cp/constexpr.cc:6227 +#: cp/constexpr.cc:6255 #, gcc-internal-format msgid "%q#D is not const" msgstr "" -#: cp/constexpr.cc:6230 +#: cp/constexpr.cc:6258 #, gcc-internal-format msgid "%q#D is volatile" msgstr "" -#: cp/constexpr.cc:6235 cp/constexpr.cc:6242 +#: cp/constexpr.cc:6263 cp/constexpr.cc:6270 #, gcc-internal-format msgid "%qD was not initialized with a constant expression" msgstr "" -#: cp/constexpr.cc:6248 +#: cp/constexpr.cc:6276 #, gcc-internal-format msgid "%qD was not declared %<constexpr%>" msgstr "" -#: cp/constexpr.cc:6251 +#: cp/constexpr.cc:6279 #, gcc-internal-format msgid "%qD does not have integral or enumeration type" msgstr "" -#: cp/constexpr.cc:6551 +#: cp/constexpr.cc:6579 #, gcc-internal-format msgid "" "modification of allocated storage after deallocation is not a constant " "expression" msgstr "" -#: cp/constexpr.cc:6560 +#: cp/constexpr.cc:6588 #, gcc-internal-format msgid "modification of %qE outside its lifetime is not a constant expression" msgstr "" -#: cp/constexpr.cc:6567 +#: cp/constexpr.cc:6595 #, gcc-internal-format msgid "" "destroying %qE from outside current evaluation is not a constant expression" msgstr "" -#: cp/constexpr.cc:6570 +#: cp/constexpr.cc:6598 #, gcc-internal-format msgid "" "modification of %qE from outside current evaluation is not a constant " "expression" msgstr "" -#: cp/constexpr.cc:6701 +#: cp/constexpr.cc:6729 #, gcc-internal-format msgid "" "change of the active member of a union from %qD to %qD is not a constant " "expression before C++20" msgstr "" -#: cp/constexpr.cc:6730 +#: cp/constexpr.cc:6758 #, gcc-internal-format msgid "" "%qD does not implicitly begin its lifetime because %qT does not have a non-" "deleted trivial default constructor, use %<std::construct_at%> instead" msgstr "" -#: cp/constexpr.cc:6737 +#: cp/constexpr.cc:6765 #, gcc-internal-format msgid "" "initializing %qD requires a member access expression as the left operand of " "the assignment" msgstr "" -#: cp/constexpr.cc:6749 rust/backend/rust-constexpr.cc:2820 +#: cp/constexpr.cc:6777 rust/backend/rust-constexpr.cc:2820 #, gcc-internal-format msgid "" "change of the active member of a union from %qD to %qD during initialization" msgstr "" -#: cp/constexpr.cc:7201 cp/constexpr.cc:8906 cp/constexpr.cc:8918 +#: cp/constexpr.cc:7229 cp/constexpr.cc:8934 cp/constexpr.cc:8946 #: rust/backend/rust-constexpr.cc:4668 #, gcc-internal-format msgid "statement is not a constant expression" msgstr "" -#: cp/constexpr.cc:7408 rust/backend/rust-constexpr.cc:4933 +#: cp/constexpr.cc:7436 rust/backend/rust-constexpr.cc:4933 #, gcc-internal-format msgid "" "%<constexpr%> loop iteration count exceeds limit of %d (use %<-fconstexpr-" "loop-limit=%> to increase the limit)" msgstr "" -#: cp/constexpr.cc:7517 rust/backend/rust-constexpr.cc:999 +#: cp/constexpr.cc:7545 rust/backend/rust-constexpr.cc:999 #, gcc-internal-format msgid "inline assembly is not a constant expression" msgstr "" -#: cp/constexpr.cc:7519 rust/backend/rust-constexpr.cc:1000 +#: cp/constexpr.cc:7547 rust/backend/rust-constexpr.cc:1000 #, gcc-internal-format msgid "" "only unevaluated inline assembly is allowed in a %<constexpr%> function in C+" "+20" msgstr "" -#: cp/constexpr.cc:7538 +#: cp/constexpr.cc:7566 #, gcc-internal-format msgid "use of %qD" msgstr "" -#: cp/constexpr.cc:7542 +#: cp/constexpr.cc:7570 #, gcc-internal-format msgid "" "its value can vary between compiler versions or with different %<-mtune%> or " "%<-mcpu%> flags" msgstr "" -#: cp/constexpr.cc:7544 +#: cp/constexpr.cc:7572 #, gcc-internal-format msgid "" "if this use is part of a public ABI, change it to instead use a constant " "variable you define" msgstr "" -#: cp/constexpr.cc:7546 +#: cp/constexpr.cc:7574 #, gcc-internal-format, gfc-internal-format msgid "the default value for the current CPU tuning is %d bytes" msgstr "" -#: cp/constexpr.cc:7548 +#: cp/constexpr.cc:7576 #, gcc-internal-format msgid "" "you can stabilize this value with %<--param " @@ -58042,239 +58048,234 @@ msgid "" "Wno-interference-size%>" msgstr "" -#: cp/constexpr.cc:7701 +#: cp/constexpr.cc:7729 #, gcc-internal-format msgid "value %qE of type %qT is not a constant expression" msgstr "" -#: cp/constexpr.cc:7714 +#: cp/constexpr.cc:7742 #, gcc-internal-format msgid "" "%<constexpr%> evaluation operation count exceeds limit of %wd (use %<-" "fconstexpr-ops-limit=%> to increase the limit)" msgstr "" -#: cp/constexpr.cc:7900 +#: cp/constexpr.cc:7928 #, gcc-internal-format msgid "control passes through definition of %qD with thread storage duration" msgstr "" -#: cp/constexpr.cc:7903 +#: cp/constexpr.cc:7931 #, gcc-internal-format msgid "control passes through definition of %qD with static storage duration" msgstr "" -#: cp/constexpr.cc:7968 cp/constexpr.cc:10700 +#: cp/constexpr.cc:7996 cp/constexpr.cc:10751 #: rust/backend/rust-constexpr.cc:2056 rust/backend/rust-constexpr.cc:6206 #, gcc-internal-format msgid "temporary of non-literal type %qT in a constant expression" msgstr "" -#: cp/constexpr.cc:8426 cp/constexpr.cc:10190 +#: cp/constexpr.cc:8454 cp/constexpr.cc:10256 #, gcc-internal-format msgid "%<reinterpret_cast%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:8457 rust/backend/rust-constexpr.cc:2461 +#: cp/constexpr.cc:8485 rust/backend/rust-constexpr.cc:2461 #, gcc-internal-format msgid "" "conversion from pointer type %qT to arithmetic type %qT in a constant " "expression" msgstr "" -#: cp/constexpr.cc:8509 +#: cp/constexpr.cc:8537 #, gcc-internal-format msgid "" "cast from %qT is not allowed in a constant expression because pointed-to " "type %qT is not similar to %qT" msgstr "" -#: cp/constexpr.cc:8519 +#: cp/constexpr.cc:8547 #, gcc-internal-format msgid "pointed-to object declared here" msgstr "" -#: cp/constexpr.cc:8527 +#: cp/constexpr.cc:8555 #, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression before C++26" msgstr "" -#: cp/constexpr.cc:8541 +#: cp/constexpr.cc:8569 #, gcc-internal-format msgid "%qE is not a constant expression when the class %qT is still incomplete" msgstr "" -#: cp/constexpr.cc:8581 rust/backend/rust-constexpr.cc:2506 +#: cp/constexpr.cc:8609 rust/backend/rust-constexpr.cc:2506 #, gcc-internal-format msgid "%<reinterpret_cast<%T>(%E)%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:8719 cp/constexpr.cc:10512 cp/constexpr.cc:10923 +#: cp/constexpr.cc:8747 cp/constexpr.cc:10563 cp/constexpr.cc:10974 #: rust/backend/rust-constexpr.cc:6100 rust/backend/rust-constexpr.cc:6415 #, gcc-internal-format msgid "expression %qE is not a constant expression" msgstr "" -#: cp/constexpr.cc:8763 cp/constexpr.cc:10964 +#: cp/constexpr.cc:8791 cp/constexpr.cc:11015 #, gcc-internal-format msgid "%<goto%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:8821 +#: cp/constexpr.cc:8849 #, gcc-internal-format msgid "contract predicate is false in constant expression" msgstr "" -#: cp/constexpr.cc:8856 +#: cp/constexpr.cc:8884 #, gcc-internal-format msgid "address of a call to %qs is not a constant expression" msgstr "" -#: cp/constexpr.cc:8921 +#: cp/constexpr.cc:8949 #, gcc-internal-format msgid "unexpected expression %qE of kind %s" msgstr "" -#: cp/constexpr.cc:9211 rust/backend/rust-constexpr.cc:5158 +#: cp/constexpr.cc:9243 rust/backend/rust-constexpr.cc:5158 #, gcc-internal-format msgid "" "%qE is not a constant expression because it refers to mutable subobjects of " "%qT" msgstr "" -#: cp/constexpr.cc:9219 rust/backend/rust-constexpr.cc:5167 -#, gcc-internal-format -msgid "" -"%qE is not a constant expression because it refers to an incompletely " -"initialized variable" -msgstr "" - -#: cp/constexpr.cc:9235 rust/backend/rust-constexpr.cc:5183 +#: cp/constexpr.cc:9258 rust/backend/rust-constexpr.cc:5183 #, gcc-internal-format msgid "" "%qE is not a constant expression because it refers to a result of %<operator " "new%>" msgstr "" -#: cp/constexpr.cc:9246 rust/backend/rust-constexpr.cc:5195 +#: cp/constexpr.cc:9271 rust/backend/rust-constexpr.cc:5195 #, gcc-internal-format msgid "" "%qE is not a constant expression because allocated storage has not been " "deallocated" msgstr "" -#: cp/constexpr.cc:9266 rust/backend/rust-constexpr.cc:5213 +#: cp/constexpr.cc:9293 rust/backend/rust-constexpr.cc:5213 #, gcc-internal-format msgid "immediate evaluation returns address of immediate function %qD" msgstr "" -#: cp/constexpr.cc:9270 +#: cp/constexpr.cc:9297 #, gcc-internal-format msgid "constant evaluation returns address of immediate function %qD" msgstr "" -#: cp/constexpr.cc:9305 +#: cp/constexpr.cc:9313 rust/backend/rust-constexpr.cc:5167 +#, gcc-internal-format +msgid "" +"%qE is not a constant expression because it refers to an incompletely " +"initialized variable" +msgstr "" + +#: cp/constexpr.cc:9351 #, gcc-internal-format msgid "" "%qE is not a constant expression because it initializes a %qT rather than %qT" msgstr "" -#: cp/constexpr.cc:9926 rust/backend/rust-constexpr.cc:5667 +#: cp/constexpr.cc:9992 rust/backend/rust-constexpr.cc:5667 #, gcc-internal-format msgid "lvalue-to-rvalue conversion of a volatile lvalue %qE with type %qT" msgstr "" -#: cp/constexpr.cc:10155 +#: cp/constexpr.cc:10221 #, gcc-internal-format msgid "lambda capture of %qE is not a constant expression" msgstr "" -#: cp/constexpr.cc:10158 +#: cp/constexpr.cc:10224 #, gcc-internal-format msgid "because it is used as a glvalue" msgstr "" -#: cp/constexpr.cc:10214 rust/backend/rust-constexpr.cc:5893 +#: cp/constexpr.cc:10280 rust/backend/rust-constexpr.cc:5893 #, gcc-internal-format msgid "%<reinterpret_cast%> from integer to pointer" msgstr "" -#: cp/constexpr.cc:10248 rust/backend/rust-constexpr.cc:5921 +#: cp/constexpr.cc:10314 rust/backend/rust-constexpr.cc:5921 #, gcc-internal-format msgid "" "address-of an object %qE with thread local or automatic storage is not a " "constant expression" msgstr "" -#: cp/constexpr.cc:10290 -#, gcc-internal-format -msgid "use of %<this%> in a constant expression" -msgstr "" - -#: cp/constexpr.cc:10447 +#: cp/constexpr.cc:10498 #, gcc-internal-format msgid "lambda-expression is not a constant expression before C++17" msgstr "" -#: cp/constexpr.cc:10459 +#: cp/constexpr.cc:10510 #, gcc-internal-format msgid "new-expression is not a constant expression before C++20" msgstr "" -#: cp/constexpr.cc:10526 +#: cp/constexpr.cc:10577 #, gcc-internal-format msgid "virtual functions cannot be %<constexpr%> before C++20" msgstr "" -#: cp/constexpr.cc:10542 +#: cp/constexpr.cc:10593 #, gcc-internal-format msgid "" "%<typeid%> is not a constant expression because %qE is of polymorphic type" msgstr "" -#: cp/constexpr.cc:10606 +#: cp/constexpr.cc:10657 #, gcc-internal-format msgid "cast to non-integral type %qT in a constant expression" msgstr "" -#: cp/constexpr.cc:10664 +#: cp/constexpr.cc:10715 #, gcc-internal-format msgid "%qD defined %<thread_local%> in %<constexpr%> context" msgstr "" -#: cp/constexpr.cc:10672 +#: cp/constexpr.cc:10723 #, gcc-internal-format msgid "%qD defined %<static%> in %<constexpr%> context" msgstr "" -#: cp/constexpr.cc:10750 rust/backend/rust-constexpr.cc:6251 +#: cp/constexpr.cc:10801 rust/backend/rust-constexpr.cc:6251 #, gcc-internal-format msgid "division by zero is not a constant expression" msgstr "" -#: cp/constexpr.cc:10851 rust/backend/rust-constexpr.cc:6349 +#: cp/constexpr.cc:10902 rust/backend/rust-constexpr.cc:6349 #, gcc-internal-format msgid "%<delete[]%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:10920 +#: cp/constexpr.cc:10971 #, gcc-internal-format msgid "neither branch of %<if%> is a constant expression" msgstr "" -#: cp/constexpr.cc:10933 +#: cp/constexpr.cc:10984 #, gcc-internal-format msgid "non-constant array initialization" msgstr "" -#: cp/constexpr.cc:10981 +#: cp/constexpr.cc:11032 #, gcc-internal-format msgid "" "label definition in %<constexpr%> function only available with %<-std=c+" "+23%> or %<-std=gnu++23%>" msgstr "" -#: cp/constexpr.cc:11017 rust/backend/rust-constexpr.cc:6438 +#: cp/constexpr.cc:11068 rust/backend/rust-constexpr.cc:6438 #, gcc-internal-format, gfc-internal-format msgid "unexpected AST of kind %s" msgstr "" @@ -58396,316 +58397,316 @@ msgstr "" msgid "the operand %qE is unsatisfied because" msgstr "" -#: cp/constraint.cc:3042 +#: cp/constraint.cc:3044 #, gcc-internal-format msgid " %qT is not nothrow copy assignable" msgstr "" -#: cp/constraint.cc:3045 cp/constraint.cc:3139 +#: cp/constraint.cc:3047 cp/constraint.cc:3141 #, gcc-internal-format msgid " %qT is not nothrow default constructible" msgstr "" -#: cp/constraint.cc:3048 +#: cp/constraint.cc:3050 #, gcc-internal-format msgid " %qT is not nothrow copy constructible" msgstr "" -#: cp/constraint.cc:3051 +#: cp/constraint.cc:3053 #, gcc-internal-format msgid " %qT is not trivially copy assignable" msgstr "" -#: cp/constraint.cc:3054 cp/constraint.cc:3188 +#: cp/constraint.cc:3056 cp/constraint.cc:3190 #, gcc-internal-format msgid " %qT is not trivially default constructible" msgstr "" -#: cp/constraint.cc:3057 +#: cp/constraint.cc:3059 #, gcc-internal-format msgid " %qT is not trivially copy constructible" msgstr "" -#: cp/constraint.cc:3060 +#: cp/constraint.cc:3062 #, gcc-internal-format msgid " %qT is not trivially destructible" msgstr "" -#: cp/constraint.cc:3063 +#: cp/constraint.cc:3065 #, gcc-internal-format msgid " %qT does not have unique object representations" msgstr "" -#: cp/constraint.cc:3066 +#: cp/constraint.cc:3068 #, gcc-internal-format msgid " %qT does not have a virtual destructor" msgstr "" -#: cp/constraint.cc:3069 +#: cp/constraint.cc:3071 #, gcc-internal-format msgid " %qT is not an abstract class" msgstr "" -#: cp/constraint.cc:3072 +#: cp/constraint.cc:3074 #, gcc-internal-format msgid " %qT is not an aggregate" msgstr "" -#: cp/constraint.cc:3075 +#: cp/constraint.cc:3077 #, gcc-internal-format msgid " %qT is not an array" msgstr "" -#: cp/constraint.cc:3078 +#: cp/constraint.cc:3080 #, gcc-internal-format msgid " %qT is not assignable from %qT" msgstr "" -#: cp/constraint.cc:3081 +#: cp/constraint.cc:3083 #, gcc-internal-format msgid " %qT is not a base of %qT" msgstr "" -#: cp/constraint.cc:3084 +#: cp/constraint.cc:3086 #, gcc-internal-format msgid " %qT is not a bounded array" msgstr "" -#: cp/constraint.cc:3087 +#: cp/constraint.cc:3089 #, gcc-internal-format msgid " %qT is not a class" msgstr "" -#: cp/constraint.cc:3090 +#: cp/constraint.cc:3092 #, gcc-internal-format msgid " %qT is not a const type" msgstr "" -#: cp/constraint.cc:3094 +#: cp/constraint.cc:3096 #, gcc-internal-format msgid " %qT is not default constructible" msgstr "" -#: cp/constraint.cc:3096 +#: cp/constraint.cc:3098 #, gcc-internal-format msgid " %qT is not constructible from %qE" msgstr "" -#: cp/constraint.cc:3099 +#: cp/constraint.cc:3101 #, gcc-internal-format msgid " %qT is not convertible from %qE" msgstr "" -#: cp/constraint.cc:3102 +#: cp/constraint.cc:3104 #, gcc-internal-format msgid " %qT is not an empty class" msgstr "" -#: cp/constraint.cc:3105 +#: cp/constraint.cc:3107 #, gcc-internal-format msgid " %qT is not an enum" msgstr "" -#: cp/constraint.cc:3108 +#: cp/constraint.cc:3110 #, gcc-internal-format msgid " %qT is not a final class" msgstr "" -#: cp/constraint.cc:3111 +#: cp/constraint.cc:3113 #, gcc-internal-format msgid " %qT is not a function" msgstr "" -#: cp/constraint.cc:3115 +#: cp/constraint.cc:3117 #, gcc-internal-format msgid " %qT is not invocable" msgstr "" -#: cp/constraint.cc:3117 +#: cp/constraint.cc:3119 #, gcc-internal-format msgid " %qT is not invocable by %qE" msgstr "" -#: cp/constraint.cc:3120 +#: cp/constraint.cc:3122 #, gcc-internal-format msgid " %qT is not layout compatible with %qT" msgstr "" -#: cp/constraint.cc:3123 +#: cp/constraint.cc:3125 #, gcc-internal-format msgid " %qT is not a literal type" msgstr "" -#: cp/constraint.cc:3126 +#: cp/constraint.cc:3128 #, gcc-internal-format msgid " %qT is not a member function pointer" msgstr "" -#: cp/constraint.cc:3129 +#: cp/constraint.cc:3131 #, gcc-internal-format msgid " %qT is not a member object pointer" msgstr "" -#: cp/constraint.cc:3132 +#: cp/constraint.cc:3134 #, gcc-internal-format msgid " %qT is not a member pointer" msgstr "" -#: cp/constraint.cc:3135 +#: cp/constraint.cc:3137 #, gcc-internal-format msgid " %qT is not nothrow assignable from %qT" msgstr "" -#: cp/constraint.cc:3141 +#: cp/constraint.cc:3143 #, gcc-internal-format msgid " %qT is not nothrow constructible from %qE" msgstr "" -#: cp/constraint.cc:3144 +#: cp/constraint.cc:3146 #, gcc-internal-format msgid " %qT is not nothrow convertible from %qE" msgstr "" -#: cp/constraint.cc:3148 +#: cp/constraint.cc:3150 #, gcc-internal-format msgid " %qT is not nothrow invocable" msgstr "" -#: cp/constraint.cc:3150 +#: cp/constraint.cc:3152 #, gcc-internal-format msgid " %qT is not nothrow invocable by %qE" msgstr "" -#: cp/constraint.cc:3153 +#: cp/constraint.cc:3155 #, gcc-internal-format msgid " %qT is not an object type" msgstr "" -#: cp/constraint.cc:3156 +#: cp/constraint.cc:3158 #, gcc-internal-format msgid " %qT is not pointer-interconvertible base of %qT" msgstr "" -#: cp/constraint.cc:3160 +#: cp/constraint.cc:3162 #, gcc-internal-format msgid " %qT is not a POD type" msgstr "" -#: cp/constraint.cc:3163 +#: cp/constraint.cc:3165 #, gcc-internal-format msgid " %qT is not a pointer" msgstr "" -#: cp/constraint.cc:3166 +#: cp/constraint.cc:3168 #, gcc-internal-format msgid " %qT is not a polymorphic type" msgstr "" -#: cp/constraint.cc:3169 +#: cp/constraint.cc:3171 #, gcc-internal-format msgid " %qT is not a reference" msgstr "" -#: cp/constraint.cc:3172 +#: cp/constraint.cc:3174 #, gcc-internal-format msgid " %qT is not the same as %qT" msgstr "" -#: cp/constraint.cc:3175 +#: cp/constraint.cc:3177 #, gcc-internal-format msgid " %qT is not a scoped enum" msgstr "" -#: cp/constraint.cc:3178 +#: cp/constraint.cc:3180 #, gcc-internal-format msgid " %qT is not an standard layout type" msgstr "" -#: cp/constraint.cc:3181 +#: cp/constraint.cc:3183 #, gcc-internal-format msgid " %qT is not a trivial type" msgstr "" -#: cp/constraint.cc:3184 +#: cp/constraint.cc:3186 #, gcc-internal-format msgid " %qT is not trivially assignable from %qT" msgstr "" -#: cp/constraint.cc:3190 +#: cp/constraint.cc:3192 #, gcc-internal-format msgid " %qT is not trivially constructible from %qE" msgstr "" -#: cp/constraint.cc:3193 +#: cp/constraint.cc:3195 #, gcc-internal-format msgid " %qT is not trivially copyable" msgstr "" -#: cp/constraint.cc:3196 +#: cp/constraint.cc:3198 #, gcc-internal-format msgid " %qT is not an unbounded array" msgstr "" -#: cp/constraint.cc:3199 +#: cp/constraint.cc:3201 #, gcc-internal-format msgid " %qT is not a union" msgstr "" -#: cp/constraint.cc:3202 +#: cp/constraint.cc:3204 #, gcc-internal-format msgid " %qT is not a virtual base of %qT" msgstr "" -#: cp/constraint.cc:3205 +#: cp/constraint.cc:3207 #, gcc-internal-format msgid " %qT is not a volatile type" msgstr "" -#: cp/constraint.cc:3208 +#: cp/constraint.cc:3210 #, gcc-internal-format msgid " %qT cannot yield a rank" msgstr "" -#: cp/constraint.cc:3211 +#: cp/constraint.cc:3213 #, gcc-internal-format msgid "" " %qT is not a reference that binds to a temporary object of type %qT " "(direct-initialization)" msgstr "" -#: cp/constraint.cc:3215 +#: cp/constraint.cc:3217 #, gcc-internal-format msgid "" " %qT is not a reference that binds to a temporary object of type %qT (copy-" "initialization)" msgstr "" -#: cp/constraint.cc:3219 +#: cp/constraint.cc:3221 #, gcc-internal-format msgid " %qD is not deducible from %qT" msgstr "" -#: cp/constraint.cc:3246 +#: cp/constraint.cc:3248 #, gcc-internal-format msgid "invalid constraints" msgstr "" -#: cp/constraint.cc:3271 +#: cp/constraint.cc:3273 #, gcc-internal-format msgid "constraint %qE has type %qT, not %<bool%>" msgstr "" -#: cp/constraint.cc:3274 +#: cp/constraint.cc:3276 #, gcc-internal-format msgid "the expression %qE evaluated to %<false%>" msgstr "" -#: cp/constraint.cc:3325 +#: cp/constraint.cc:3327 #, gcc-internal-format msgid "constraints not satisfied" msgstr "" -#: cp/constraint.cc:3342 +#: cp/constraint.cc:3344 #, gcc-internal-format msgid "set %qs to at least %d for more detail" msgstr "" @@ -58813,58 +58814,58 @@ msgstr "" msgid "function does not return a value to test" msgstr "" -#: cp/contracts.cc:1139 +#: cp/contracts.cc:1143 #, gcc-internal-format msgid "mismatched contract attribute in declaration" msgstr "" -#: cp/contracts.cc:1141 cp/contracts.cc:1172 +#: cp/contracts.cc:1145 cp/contracts.cc:1176 #, gcc-internal-format msgid "previous contract here" msgstr "" -#: cp/contracts.cc:1169 +#: cp/contracts.cc:1173 #, gcc-internal-format msgid "mismatched contract condition in declaration" msgstr "" -#: cp/contracts.cc:1212 +#: cp/contracts.cc:1216 #, gcc-internal-format msgid "" "declaration has a different number of contracts than previously declared" msgstr "" -#: cp/contracts.cc:1218 +#: cp/contracts.cc:1222 #, gcc-internal-format msgid "original declaration with fewer contracts here" msgstr "" -#: cp/contracts.cc:1964 +#: cp/contracts.cc:1968 #, gcc-internal-format msgid "contracts must appertain to a function type" msgstr "" -#: cp/contracts.cc:2261 +#: cp/contracts.cc:2265 #, gcc-internal-format msgid "cannot add contracts after definition" msgstr "" -#: cp/contracts.cc:2262 +#: cp/contracts.cc:2266 #, gcc-internal-format msgid "original definition here" msgstr "" -#: cp/contracts.cc:2270 +#: cp/contracts.cc:2274 #, gcc-internal-format msgid "cannot add contracts to a virtual function" msgstr "" -#: cp/contracts.cc:2271 +#: cp/contracts.cc:2275 #, gcc-internal-format msgid "original declaration here" msgstr "" -#: cp/contracts.cc:2281 +#: cp/contracts.cc:2285 #, gcc-internal-format msgid "declaration adds contracts to %q#D" msgstr "" @@ -58936,7 +58937,7 @@ msgstr "" msgid "%<return_void%> declared here" msgstr "" -#: cp/coroutines.cc:919 cp/coroutines.cc:997 cp/coroutines.cc:4553 +#: cp/coroutines.cc:919 cp/coroutines.cc:997 cp/coroutines.cc:4536 #, gcc-internal-format msgid "no member named %qE in %qT" msgstr "" @@ -59025,39 +59026,39 @@ msgstr "" msgid "the direction argument to %<__builtin_coro_promise%> must be a constant" msgstr "" -#: cp/coroutines.cc:2267 +#: cp/coroutines.cc:2252 #, gcc-internal-format msgid "no suspend point info for %qD" msgstr "" -#: cp/coroutines.cc:2829 +#: cp/coroutines.cc:2812 #, gcc-internal-format msgid "duplicate info for %qE" msgstr "" -#: cp/coroutines.cc:3958 +#: cp/coroutines.cc:3941 #, gcc-internal-format msgid "await expressions are not permitted in handlers" msgstr "" -#: cp/coroutines.cc:4183 +#: cp/coroutines.cc:4166 #, gcc-internal-format msgid "variable length arrays are not yet supported in coroutines" msgstr "" -#: cp/coroutines.cc:4701 +#: cp/coroutines.cc:4684 #, gcc-internal-format msgid "" "%qE is provided by %qT but is not usable with the function signature %qD" msgstr "" -#: cp/coroutines.cc:4708 +#: cp/coroutines.cc:4691 #, gcc-internal-format msgid "" "%qE is provided by %qT but %qE is not marked %<throw()%> or %<noexcept%>" msgstr "" -#: cp/coroutines.cc:4713 +#: cp/coroutines.cc:4696 #, gcc-internal-format msgid "" "%qE is marked %<throw()%> or %<noexcept%> but no usable " @@ -59065,17 +59066,17 @@ msgid "" msgstr "" #. Something is seriously wrong, punt. -#: cp/coroutines.cc:4744 +#: cp/coroutines.cc:4727 #, gcc-internal-format msgid "%qE is provided by %qT but %<std::nothrow%> cannot be found" msgstr "" -#: cp/coroutines.cc:4840 +#: cp/coroutines.cc:4823 #, gcc-internal-format msgid "%qE is provided by %qT but is not usable with the function %qD" msgstr "" -#: cp/coroutines.cc:5146 +#: cp/coroutines.cc:5129 #, gcc-internal-format msgid "" "no viable conversion from %<void%> provided by %<get_return_object%> to " @@ -59104,65 +59105,65 @@ msgstr "" msgid "taking address of an immediate function %qD" msgstr "" -#: cp/cp-gimplify.cc:1315 +#: cp/cp-gimplify.cc:1318 #, gcc-internal-format msgid "call to consteval function %qE is not a constant expression" msgstr "" -#: cp/cp-gimplify.cc:2045 +#: cp/cp-gimplify.cc:2050 #, gcc-internal-format msgid "%<throw%> will always call %<terminate%>" msgstr "" -#: cp/cp-gimplify.cc:2048 +#: cp/cp-gimplify.cc:2053 #, gcc-internal-format msgid "in C++11 destructors default to %<noexcept%>" msgstr "" -#: cp/cp-gimplify.cc:2060 +#: cp/cp-gimplify.cc:2065 #, gcc-internal-format msgid "" "in C++11 this %<throw%> will call %<terminate%> because destructors default " "to %<noexcept%>" msgstr "" -#: cp/cp-gimplify.cc:3645 +#: cp/cp-gimplify.cc:3650 #, gcc-internal-format msgid "ignoring attribute %qE after earlier %qE" msgstr "" -#: cp/cp-gimplify.cc:3688 +#: cp/cp-gimplify.cc:3693 #, gcc-internal-format msgid "pack expansion of %qE attribute" msgstr "" -#: cp/cp-gimplify.cc:3691 +#: cp/cp-gimplify.cc:3696 #, gcc-internal-format msgid "use fold expression in the attribute argument instead" msgstr "" -#: cp/cp-gimplify.cc:3730 cp/cp-gimplify.cc:3742 cp/decl.cc:4511 +#: cp/cp-gimplify.cc:3735 cp/cp-gimplify.cc:3747 cp/decl.cc:4511 #: cp/method.cc:990 #, gcc-internal-format msgid "%qD is not a type" msgstr "" -#: cp/cp-gimplify.cc:3748 +#: cp/cp-gimplify.cc:3753 #, gcc-internal-format msgid "%qD is not a class type" msgstr "" -#: cp/cp-gimplify.cc:3765 +#: cp/cp-gimplify.cc:3770 #, gcc-internal-format msgid "%qD does not have %<const char *%> type" msgstr "" -#: cp/cp-gimplify.cc:3775 +#: cp/cp-gimplify.cc:3780 #, gcc-internal-format msgid "%qD does not have integral type" msgstr "" -#: cp/cp-gimplify.cc:3787 +#: cp/cp-gimplify.cc:3792 #, gcc-internal-format msgid "" "%<std::source_location::__impl%> does not contain only non-static data " @@ -59655,7 +59656,7 @@ msgstr "" msgid "redeclaration %qD differs in %qs from previous declaration" msgstr "" -#: cp/decl.cc:1492 cp/decl.cc:17249 +#: cp/decl.cc:1492 cp/decl.cc:17251 #, gcc-internal-format msgid "previous declaration %qD" msgstr "" @@ -59868,12 +59869,12 @@ msgstr "" msgid "previous specification in %q#D here" msgstr "" -#: cp/decl.cc:2321 cp/decl.cc:17267 +#: cp/decl.cc:2321 cp/decl.cc:17269 #, gcc-internal-format msgid "conflicting exporting for declaration %qD" msgstr "" -#: cp/decl.cc:2323 cp/decl.cc:17269 +#: cp/decl.cc:2323 cp/decl.cc:17271 #, gcc-internal-format msgid "previously declared here without exporting" msgstr "" @@ -60150,848 +60151,848 @@ msgid "" "cache-line-size=%d%>" msgstr "" -#: cp/decl.cc:5567 +#: cp/decl.cc:5569 #, gcc-internal-format msgid "" "%q#D invalid; an anonymous union may only have public non-static data members" msgstr "" -#: cp/decl.cc:5577 cp/parser.cc:24254 +#: cp/decl.cc:5579 cp/parser.cc:24254 #, gcc-internal-format msgid "this flexibility is deprecated and will be removed" msgstr "" -#: cp/decl.cc:5606 +#: cp/decl.cc:5608 #, gcc-internal-format msgid "anonymous struct with base classes" msgstr "" -#: cp/decl.cc:5618 +#: cp/decl.cc:5620 #, gcc-internal-format msgid "member %q+#D with constructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.cc:5621 +#: cp/decl.cc:5623 #, gcc-internal-format msgid "member %q+#D with destructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.cc:5624 +#: cp/decl.cc:5626 #, gcc-internal-format msgid "" "member %q+#D with copy assignment operator not allowed in anonymous aggregate" msgstr "" -#: cp/decl.cc:5643 +#: cp/decl.cc:5645 #, gcc-internal-format msgid "attribute ignored in declaration of %q#T" msgstr "" -#: cp/decl.cc:5646 +#: cp/decl.cc:5648 #, gcc-internal-format msgid "attribute for %q#T must follow the %qs keyword" msgstr "" -#: cp/decl.cc:5688 +#: cp/decl.cc:5690 #, gcc-internal-format msgid "multiple types in one declaration" msgstr "" -#: cp/decl.cc:5693 +#: cp/decl.cc:5695 #, gcc-internal-format msgid "redeclaration of C++ built-in type %qT" msgstr "" -#: cp/decl.cc:5710 +#: cp/decl.cc:5712 #, gcc-internal-format msgid "%<auto%> can only be specified for variables or function declarations" msgstr "" -#: cp/decl.cc:5743 +#: cp/decl.cc:5745 #, gcc-internal-format msgid "missing type-name in typedef-declaration" msgstr "" -#: cp/decl.cc:5751 +#: cp/decl.cc:5753 #, gcc-internal-format msgid "ISO C++ prohibits anonymous structs" msgstr "" -#: cp/decl.cc:5758 +#: cp/decl.cc:5760 #, gcc-internal-format msgid "%<inline%> can only be specified for functions" msgstr "" -#: cp/decl.cc:5761 +#: cp/decl.cc:5763 #, gcc-internal-format msgid "%<virtual%> can only be specified for functions" msgstr "" -#: cp/decl.cc:5766 +#: cp/decl.cc:5768 #, gcc-internal-format msgid "%<friend%> can only be specified inside a class" msgstr "" -#: cp/decl.cc:5769 +#: cp/decl.cc:5771 #, gcc-internal-format msgid "%<explicit%> can only be specified for constructors" msgstr "" -#: cp/decl.cc:5772 +#: cp/decl.cc:5774 #, gcc-internal-format msgid "a storage class can only be specified for objects and functions" msgstr "" -#: cp/decl.cc:5776 +#: cp/decl.cc:5778 #, gcc-internal-format msgid "%<const%> can only be specified for objects and functions" msgstr "" -#: cp/decl.cc:5780 +#: cp/decl.cc:5782 #, gcc-internal-format msgid "%<volatile%> can only be specified for objects and functions" msgstr "" -#: cp/decl.cc:5784 +#: cp/decl.cc:5786 #, gcc-internal-format msgid "%<__restrict%> can only be specified for objects and functions" msgstr "" -#: cp/decl.cc:5788 +#: cp/decl.cc:5790 #, gcc-internal-format msgid "%<__thread%> can only be specified for objects and functions" msgstr "" -#: cp/decl.cc:5792 +#: cp/decl.cc:5794 #, gcc-internal-format msgid "%<typedef%> was ignored in this declaration" msgstr "" -#: cp/decl.cc:5795 cp/decl.cc:5798 cp/decl.cc:5801 +#: cp/decl.cc:5797 cp/decl.cc:5800 cp/decl.cc:5803 #, gcc-internal-format msgid "%qs cannot be used for type declarations" msgstr "" -#: cp/decl.cc:5824 +#: cp/decl.cc:5826 #, gcc-internal-format msgid "attribute ignored in explicit instantiation %q#T" msgstr "" -#: cp/decl.cc:5827 +#: cp/decl.cc:5829 #, gcc-internal-format msgid "no attribute can be applied to an explicit instantiation" msgstr "" -#: cp/decl.cc:5840 cp/decl.cc:13780 cp/decl.cc:15427 cp/parser.cc:16037 +#: cp/decl.cc:5842 cp/decl.cc:13782 cp/decl.cc:15429 cp/parser.cc:16037 #: cp/parser.cc:21975 cp/parser.cc:28867 #, gcc-internal-format msgid "attribute ignored" msgstr "" -#: cp/decl.cc:5842 cp/decl.cc:13781 +#: cp/decl.cc:5844 cp/decl.cc:13783 #, gcc-internal-format msgid "an attribute that appertains to a type-specifier is ignored" msgstr "" -#: cp/decl.cc:5917 +#: cp/decl.cc:5919 #, gcc-internal-format msgid "ignoring attributes applied to class type %qT outside of definition" msgstr "" #. A template type parameter or other dependent type. -#: cp/decl.cc:5921 +#: cp/decl.cc:5923 #, gcc-internal-format msgid "" "ignoring attributes applied to dependent type %qT without an associated " "declaration" msgstr "" -#: cp/decl.cc:5987 cp/decl2.cc:1069 cp/decl2.cc:1271 +#: cp/decl.cc:5989 cp/decl2.cc:1069 cp/decl2.cc:1271 #, gcc-internal-format msgid "typedef %qD is initialized (use %qs instead)" msgstr "" -#: cp/decl.cc:6000 +#: cp/decl.cc:6002 #, gcc-internal-format msgid "declaration of %q#D has %<extern%> and is initialized" msgstr "" -#: cp/decl.cc:6038 +#: cp/decl.cc:6040 #, gcc-internal-format msgid "definition of %q#D is marked %<dllimport%>" msgstr "" -#: cp/decl.cc:6065 +#: cp/decl.cc:6067 #, gcc-internal-format msgid "%q+#D is not a static data member of %q#T" msgstr "" -#: cp/decl.cc:6074 +#: cp/decl.cc:6076 #, gcc-internal-format msgid "non-member-template declaration of %qD" msgstr "" -#: cp/decl.cc:6075 +#: cp/decl.cc:6077 #, gcc-internal-format msgid "does not match member template declaration here" msgstr "" -#: cp/decl.cc:6087 +#: cp/decl.cc:6089 #, gcc-internal-format msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" msgstr "" -#: cp/decl.cc:6099 +#: cp/decl.cc:6101 #, gcc-internal-format msgid "duplicate initialization of %qD" msgstr "" -#: cp/decl.cc:6149 cp/decl.cc:6153 +#: cp/decl.cc:6151 cp/decl.cc:6155 #, gcc-internal-format msgid "declaration of %q#D outside of class is not definition" msgstr "" -#: cp/decl.cc:6171 +#: cp/decl.cc:6173 #, gcc-internal-format msgid "" "block-scope extern declaration %q#D must not be attached to a named module" msgstr "" -#: cp/decl.cc:6207 +#: cp/decl.cc:6209 #, gcc-internal-format msgid "" "%qD defined %<thread_local%> in %qs function only available with %<-std=c+" "+23%> or %<-std=gnu++23%>" msgstr "" -#: cp/decl.cc:6213 +#: cp/decl.cc:6215 #, gcc-internal-format msgid "" "%qD defined %<static%> in %qs function only available with %<-std=c++23%> or " "%<-std=gnu++23%>" msgstr "" -#: cp/decl.cc:6279 +#: cp/decl.cc:6281 #, gcc-internal-format msgid "variable %q#D has initializer but incomplete type" msgstr "" -#: cp/decl.cc:6288 cp/decl.cc:7763 +#: cp/decl.cc:6290 cp/decl.cc:7765 #, gcc-internal-format msgid "elements of array %q#D have incomplete type" msgstr "" -#: cp/decl.cc:6299 +#: cp/decl.cc:6301 #, gcc-internal-format msgid "aggregate %q#D has incomplete type and cannot be defined" msgstr "" -#: cp/decl.cc:6369 +#: cp/decl.cc:6371 #, gcc-internal-format msgid "%qD declared as reference but not initialized" msgstr "" -#: cp/decl.cc:6452 +#: cp/decl.cc:6454 #, gcc-internal-format msgid "name used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.cc:6458 +#: cp/decl.cc:6460 #, gcc-internal-format msgid "name %qD used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.cc:6477 +#: cp/decl.cc:6479 #, gcc-internal-format msgid "non-trivial designated initializers not supported" msgstr "" -#: cp/decl.cc:6481 +#: cp/decl.cc:6483 #, gcc-internal-format msgid "C99 designator %qE is not an integral constant-expression" msgstr "" -#: cp/decl.cc:6546 +#: cp/decl.cc:6548 #, gcc-internal-format msgid "initializer fails to determine size of %qD" msgstr "" -#: cp/decl.cc:6553 +#: cp/decl.cc:6555 #, gcc-internal-format msgid "array size missing in %qD" msgstr "" -#: cp/decl.cc:6565 +#: cp/decl.cc:6567 #, gcc-internal-format msgid "zero-size array %qD" msgstr "" -#: cp/decl.cc:6605 +#: cp/decl.cc:6607 #, gcc-internal-format msgid "storage size of %qD isn%'t known" msgstr "" -#: cp/decl.cc:6630 +#: cp/decl.cc:6632 #, gcc-internal-format msgid "storage size of %qD isn%'t constant" msgstr "" -#: cp/decl.cc:6732 +#: cp/decl.cc:6734 #, gcc-internal-format msgid "" "sorry: semantics of inline variable %q#D are wrong (you%'ll wind up with " "multiple copies)" msgstr "" -#: cp/decl.cc:6736 +#: cp/decl.cc:6738 #, gcc-internal-format msgid "" "sorry: semantics of inline function static data %q#D are wrong (you%'ll wind " "up with multiple copies)" msgstr "" -#: cp/decl.cc:6743 +#: cp/decl.cc:6745 #, gcc-internal-format msgid "you can work around this by removing the initializer" msgstr "" -#: cp/decl.cc:6786 rust/backend/rust-tree.cc:3265 +#: cp/decl.cc:6788 rust/backend/rust-tree.cc:3265 #, gcc-internal-format msgid "uninitialized %<const %D%>" msgstr "" -#: cp/decl.cc:6793 rust/backend/rust-tree.cc:3272 +#: cp/decl.cc:6795 rust/backend/rust-tree.cc:3272 #, gcc-internal-format msgid "uninitialized variable %qD in %<constexpr%> function" msgstr "" -#: cp/decl.cc:6802 rust/backend/rust-tree.cc:3281 +#: cp/decl.cc:6804 rust/backend/rust-tree.cc:3281 #, gcc-internal-format msgid "uninitialized variable %qD in %<constexpr%> context" msgstr "" -#: cp/decl.cc:6810 +#: cp/decl.cc:6812 #, gcc-internal-format msgid "%q#T has no user-provided default constructor" msgstr "" -#: cp/decl.cc:6814 +#: cp/decl.cc:6816 #, gcc-internal-format msgid "" "constructor is not user-provided because it is explicitly defaulted in the " "class body" msgstr "" -#: cp/decl.cc:6817 +#: cp/decl.cc:6819 #, gcc-internal-format msgid "and the implicitly-defined constructor does not initialize %q#D" msgstr "" -#: cp/decl.cc:7117 +#: cp/decl.cc:7119 #, gcc-internal-format msgid "invalid type %qT as initializer for a vector of type %qT" msgstr "" -#: cp/decl.cc:7189 +#: cp/decl.cc:7191 #, gcc-internal-format msgid "initializer for %qT must be brace-enclosed" msgstr "" -#: cp/decl.cc:7234 +#: cp/decl.cc:7236 #, gcc-internal-format msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT" msgstr "" -#: cp/decl.cc:7251 cp/init.cc:3424 cp/search.cc:1244 +#: cp/decl.cc:7253 cp/init.cc:3424 cp/search.cc:1244 #, gcc-internal-format msgid "request for member %qD is ambiguous" msgstr "" -#: cp/decl.cc:7256 +#: cp/decl.cc:7258 #, gcc-internal-format msgid "%qT has no non-static data member named %qD" msgstr "" -#: cp/decl.cc:7281 +#: cp/decl.cc:7283 #, gcc-internal-format msgid "%qD is not a direct member of %qT" msgstr "" -#: cp/decl.cc:7337 +#: cp/decl.cc:7339 #, gcc-internal-format msgid "invalid initializer for %q#D" msgstr "" -#: cp/decl.cc:7391 +#: cp/decl.cc:7393 #, gcc-internal-format msgid "C99 designator %qE outside aggregate initializer" msgstr "" -#: cp/decl.cc:7430 cp/decl.cc:7721 cp/typeck2.cc:1634 cp/typeck2.cc:1969 +#: cp/decl.cc:7432 cp/decl.cc:7723 cp/typeck2.cc:1634 cp/typeck2.cc:1969 #: cp/typeck2.cc:2017 cp/typeck2.cc:2064 #, gcc-internal-format msgid "too many initializers for %qT" msgstr "" -#: cp/decl.cc:7473 +#: cp/decl.cc:7475 #, gcc-internal-format msgid "braces around scalar initializer for type %qT" msgstr "" -#: cp/decl.cc:7483 +#: cp/decl.cc:7485 #, gcc-internal-format msgid "too many braces around scalar initializer for type %qT" msgstr "" -#: cp/decl.cc:7617 +#: cp/decl.cc:7619 #, gcc-internal-format msgid "missing braces around initializer for %qT" msgstr "" -#: cp/decl.cc:7751 +#: cp/decl.cc:7753 #, gcc-internal-format msgid "structured binding has incomplete type %qT" msgstr "" -#: cp/decl.cc:7765 +#: cp/decl.cc:7767 #, gcc-internal-format msgid "elements of array %q#T have incomplete type" msgstr "" -#: cp/decl.cc:7778 +#: cp/decl.cc:7780 #, gcc-internal-format msgid "variable-sized compound literal" msgstr "" -#: cp/decl.cc:7834 +#: cp/decl.cc:7836 #, gcc-internal-format msgid "%q#D has incomplete type" msgstr "" -#: cp/decl.cc:7855 +#: cp/decl.cc:7857 #, gcc-internal-format msgid "scalar object %qD requires one element in initializer" msgstr "" -#: cp/decl.cc:7900 +#: cp/decl.cc:7902 #, gcc-internal-format msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>" msgstr "" -#: cp/decl.cc:8043 +#: cp/decl.cc:8045 #, gcc-internal-format msgid "array %qD initialized by parenthesized string literal %qE" msgstr "" -#: cp/decl.cc:8083 +#: cp/decl.cc:8085 #, gcc-internal-format msgid "initializer invalid for static member with constructor" msgstr "" -#: cp/decl.cc:8085 +#: cp/decl.cc:8087 #, gcc-internal-format msgid "non-constant in-class initialization invalid for static member %qD" msgstr "" -#: cp/decl.cc:8088 +#: cp/decl.cc:8090 #, gcc-internal-format msgid "" "non-constant in-class initialization invalid for non-inline static member %qD" msgstr "" -#: cp/decl.cc:8093 +#: cp/decl.cc:8095 #, gcc-internal-format msgid "(an out of class initialization is required)" msgstr "" -#: cp/decl.cc:8295 +#: cp/decl.cc:8297 #, gcc-internal-format msgid "reference %qD is initialized with itself" msgstr "" -#: cp/decl.cc:8497 +#: cp/decl.cc:8499 #, gcc-internal-format msgid "argument %d of %qE must be of %<omp_interop_t%>" msgstr "" -#: cp/decl.cc:8668 +#: cp/decl.cc:8670 #, gcc-internal-format msgid "could not find variant declaration" msgstr "" -#: cp/decl.cc:8692 +#: cp/decl.cc:8694 #, gcc-internal-format msgid "%<declare variant%> on constructor %qD" msgstr "" -#: cp/decl.cc:8697 +#: cp/decl.cc:8699 #, gcc-internal-format msgid "%<declare variant%> on destructor %qD" msgstr "" -#: cp/decl.cc:8702 +#: cp/decl.cc:8704 #, gcc-internal-format msgid "%<declare variant%> on defaulted %qD" msgstr "" -#: cp/decl.cc:8707 +#: cp/decl.cc:8709 #, gcc-internal-format msgid "%<declare variant%> on deleted %qD" msgstr "" -#: cp/decl.cc:8712 +#: cp/decl.cc:8714 #, gcc-internal-format msgid "%<declare variant%> on virtual %qD" msgstr "" -#: cp/decl.cc:8777 +#: cp/decl.cc:8779 #, gcc-internal-format msgid "assignment (not initialization) in declaration" msgstr "" -#: cp/decl.cc:8798 cp/decl.cc:15827 +#: cp/decl.cc:8800 cp/decl.cc:15829 #, gcc-internal-format msgid "ISO C++17 does not allow %<register%> storage class specifier" msgstr "" -#: cp/decl.cc:8802 cp/decl.cc:15831 +#: cp/decl.cc:8804 cp/decl.cc:15833 #, gcc-internal-format msgid "%<register%> storage class specifier used" msgstr "" -#: cp/decl.cc:8847 cp/decl.cc:15794 +#: cp/decl.cc:8849 cp/decl.cc:15796 #, gcc-internal-format msgid "declaration of %q#D has no initializer" msgstr "" -#: cp/decl.cc:8883 +#: cp/decl.cc:8885 #, gcc-internal-format msgid "" "initializer for %<decltype(auto) %D%> has function type; did you forget the " "%<()%>?" msgstr "" -#: cp/decl.cc:8895 +#: cp/decl.cc:8897 #, gcc-internal-format msgid "deduced type %qT for %qD is incomplete" msgstr "" #. [basic.start.main]/3: A program that defines main as deleted #. is ill-formed. -#: cp/decl.cc:8946 +#: cp/decl.cc:8948 #, gcc-internal-format msgid "%<::main%> cannot be deleted" msgstr "" -#: cp/decl.cc:9100 +#: cp/decl.cc:9102 #, gcc-internal-format msgid "shadowing previous type declaration of %q#D" msgstr "" -#: cp/decl.cc:9143 +#: cp/decl.cc:9145 #, gcc-internal-format msgid "" "%<constinit%> can only be applied to a variable with static or thread " "storage duration" msgstr "" -#: cp/decl.cc:9351 +#: cp/decl.cc:9353 #, gcc-internal-format msgid "function %q#D is initialized like a variable" msgstr "" -#: cp/decl.cc:9583 +#: cp/decl.cc:9585 #, gcc-internal-format msgid "cannot decompose lambda closure type %qT" msgstr "" -#: cp/decl.cc:9584 +#: cp/decl.cc:9586 #, gcc-internal-format msgid "lambda declared here" msgstr "" -#: cp/decl.cc:9600 +#: cp/decl.cc:9602 #, gcc-internal-format msgid "" "cannot decompose class type %qT because it has an anonymous struct member" msgstr "" -#: cp/decl.cc:9603 +#: cp/decl.cc:9605 #, gcc-internal-format msgid "" "cannot decompose class type %qT because it has an anonymous union member" msgstr "" -#: cp/decl.cc:9611 +#: cp/decl.cc:9613 #, gcc-internal-format msgid "cannot decompose inaccessible member %qD of %qT" msgstr "" -#: cp/decl.cc:9634 +#: cp/decl.cc:9636 #, gcc-internal-format msgid "in base class of %qT" msgstr "" -#: cp/decl.cc:9641 +#: cp/decl.cc:9643 #, gcc-internal-format msgid "" "cannot decompose class type %qT: both it and its base class %qT have non-" "static data members" msgstr "" -#: cp/decl.cc:9650 +#: cp/decl.cc:9652 #, gcc-internal-format msgid "" "cannot decompose class type %qT: its base classes %qT and %qT have non-" "static data members" msgstr "" -#: cp/decl.cc:9888 +#: cp/decl.cc:9890 #, gcc-internal-format msgid "structured binding refers to incomplete type %qT" msgstr "" -#: cp/decl.cc:9904 +#: cp/decl.cc:9906 #, gcc-internal-format msgid "array initializer for structured binding declaration in condition" msgstr "" -#: cp/decl.cc:9910 +#: cp/decl.cc:9912 #, gcc-internal-format msgid "cannot decompose variable length array %qT" msgstr "" -#: cp/decl.cc:9920 cp/decl.cc:10000 +#: cp/decl.cc:9922 cp/decl.cc:10002 #, gcc-internal-format, gfc-internal-format msgid "%u name provided for structured binding" msgid_plural "%u names provided for structured binding" msgstr[0] "" msgstr[1] "" -#: cp/decl.cc:9924 +#: cp/decl.cc:9926 #, gcc-internal-format, gfc-internal-format msgid "only %u name provided for structured binding" msgid_plural "only %u names provided for structured binding" msgstr[0] "" msgstr[1] "" -#: cp/decl.cc:9927 +#: cp/decl.cc:9929 #, gcc-internal-format msgid "while %qT decomposes into %wu element" msgid_plural "while %qT decomposes into %wu elements" msgstr[0] "" msgstr[1] "" -#: cp/decl.cc:9968 +#: cp/decl.cc:9970 #, gcc-internal-format msgid "cannot decompose variable length vector %qT" msgstr "" -#: cp/decl.cc:9992 +#: cp/decl.cc:9994 #, gcc-internal-format msgid "%<std::tuple_size<%T>::value%> is not an integral constant expression" msgstr "" -#: cp/decl.cc:10002 +#: cp/decl.cc:10004 #, gcc-internal-format msgid "while %qT decomposes into %E elements" msgstr "" -#: cp/decl.cc:10049 +#: cp/decl.cc:10051 #, gcc-internal-format msgid "%<std::tuple_element<%u, %T>::type%> is %<void%>" msgstr "" -#: cp/decl.cc:10055 +#: cp/decl.cc:10057 #, gcc-internal-format msgid "in initialization of structured binding variable %qD" msgstr "" -#: cp/decl.cc:10084 +#: cp/decl.cc:10086 #, gcc-internal-format msgid "cannot decompose union type %qT" msgstr "" -#: cp/decl.cc:10089 +#: cp/decl.cc:10091 #, gcc-internal-format msgid "cannot decompose non-array non-class type %qT" msgstr "" -#: cp/decl.cc:10095 +#: cp/decl.cc:10097 #, gcc-internal-format msgid "structured binding refers to incomplete class type %qT" msgstr "" -#: cp/decl.cc:10104 +#: cp/decl.cc:10106 #, gcc-internal-format msgid "cannot decompose class type %qT without non-static data members" msgstr "" -#: cp/decl.cc:10600 +#: cp/decl.cc:10602 #, gcc-internal-format msgid "" "non-local variable %qD declared %<__thread%> needs dynamic initialization" msgstr "" -#: cp/decl.cc:10603 +#: cp/decl.cc:10605 #, gcc-internal-format msgid "" "non-local variable %qD declared %<__thread%> has a non-trivial destructor" msgstr "" -#: cp/decl.cc:10608 +#: cp/decl.cc:10610 #, gcc-internal-format msgid "C++11 %<thread_local%> allows dynamic initialization and destruction" msgstr "" -#: cp/decl.cc:10827 +#: cp/decl.cc:10829 #, gcc-internal-format msgid "initializer fails to determine size of %qT" msgstr "" -#: cp/decl.cc:10831 +#: cp/decl.cc:10833 #, gcc-internal-format msgid "array size missing in %qT" msgstr "" -#: cp/decl.cc:10834 +#: cp/decl.cc:10836 #, gcc-internal-format msgid "zero-size array %qT" msgstr "" -#: cp/decl.cc:10850 +#: cp/decl.cc:10852 #, gcc-internal-format msgid "destructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.cc:10852 +#: cp/decl.cc:10854 #, gcc-internal-format msgid "constructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.cc:10878 +#: cp/decl.cc:10880 #, gcc-internal-format msgid "%qD declared as a %<virtual%> variable" msgstr "" -#: cp/decl.cc:10880 +#: cp/decl.cc:10882 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in variable " "declaration" msgstr "" -#: cp/decl.cc:10886 +#: cp/decl.cc:10888 #, gcc-internal-format msgid "%qD declared as a %<virtual%> parameter" msgstr "" -#: cp/decl.cc:10889 +#: cp/decl.cc:10891 #, gcc-internal-format msgid "%qD declared as an %<inline%> parameter" msgstr "" -#: cp/decl.cc:10891 +#: cp/decl.cc:10893 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in parameter " "declaration" msgstr "" -#: cp/decl.cc:10897 +#: cp/decl.cc:10899 #, gcc-internal-format msgid "%qD declared as a %<virtual%> type" msgstr "" -#: cp/decl.cc:10900 +#: cp/decl.cc:10902 #, gcc-internal-format msgid "%qD declared as an %<inline%> type" msgstr "" -#: cp/decl.cc:10902 +#: cp/decl.cc:10904 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in type " "declaration" msgstr "" -#: cp/decl.cc:10908 +#: cp/decl.cc:10910 #, gcc-internal-format msgid "%qD declared as a %<virtual%> field" msgstr "" -#: cp/decl.cc:10911 +#: cp/decl.cc:10913 #, gcc-internal-format msgid "%qD declared as an %<inline%> field" msgstr "" -#: cp/decl.cc:10913 +#: cp/decl.cc:10915 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in field " "declaration" msgstr "" -#: cp/decl.cc:10920 +#: cp/decl.cc:10922 #, gcc-internal-format msgid "%q+D declared as a friend" msgstr "" -#: cp/decl.cc:10927 +#: cp/decl.cc:10929 #, gcc-internal-format msgid "%q+D declared with an exception specification" msgstr "" -#: cp/decl.cc:10959 +#: cp/decl.cc:10961 #, gcc-internal-format msgid "definition of %qD is not in namespace enclosing %qT" msgstr "" -#: cp/decl.cc:10999 +#: cp/decl.cc:11001 #, gcc-internal-format msgid "static member function %q#D declared with type qualifiers" msgstr "" -#: cp/decl.cc:11075 +#: cp/decl.cc:11077 #, gcc-internal-format msgid "function concepts are no longer supported" msgstr "" -#: cp/decl.cc:11113 +#: cp/decl.cc:11115 #, gcc-internal-format msgid "constraints on a non-templated function" msgstr "" -#: cp/decl.cc:11115 +#: cp/decl.cc:11117 #, gcc-internal-format msgid "constrained non-template friend declaration must be a definition" msgstr "" -#: cp/decl.cc:11122 +#: cp/decl.cc:11124 #, gcc-internal-format msgid "" "friend function template with constraints that depend on outer template " "parameters must be a definition" msgstr "" -#: cp/decl.cc:11174 +#: cp/decl.cc:11176 #, gcc-internal-format msgid "defining explicit specialization %qD in friend declaration" msgstr "" -#: cp/decl.cc:11185 +#: cp/decl.cc:11187 #, gcc-internal-format msgid "invalid use of template-id %qD in declaration of primary template" msgstr "" -#: cp/decl.cc:11203 +#: cp/decl.cc:11205 #, gcc-internal-format msgid "" "default arguments are not allowed in declaration of friend template " "specialization %qD" msgstr "" -#: cp/decl.cc:11212 +#: cp/decl.cc:11214 #, gcc-internal-format msgid "" "%<inline%> is not allowed in declaration of friend template specialization " @@ -60999,1593 +61000,1593 @@ msgid "" msgstr "" #. diagnostic_option_id= -#: cp/decl.cc:11243 +#: cp/decl.cc:11245 #, gcc-internal-format msgid "" "friend declaration of %qD specifies default arguments and isn%'t a definition" msgstr "" -#: cp/decl.cc:11285 +#: cp/decl.cc:11287 #, gcc-internal-format msgid "cannot declare %<::main%> to be a template" msgstr "" -#: cp/decl.cc:11288 +#: cp/decl.cc:11290 #, gcc-internal-format msgid "cannot declare %<::main%> to be inline" msgstr "" -#: cp/decl.cc:11291 cp/decl.cc:11294 +#: cp/decl.cc:11293 cp/decl.cc:11296 #, gcc-internal-format msgid "cannot declare %<::main%> to be %qs" msgstr "" -#: cp/decl.cc:11296 +#: cp/decl.cc:11298 #, gcc-internal-format msgid "cannot declare %<::main%> to be static" msgstr "" -#: cp/decl.cc:11298 +#: cp/decl.cc:11300 #, gcc-internal-format msgid "cannot declare %<::main%> with a linkage specification" msgstr "" -#: cp/decl.cc:11301 +#: cp/decl.cc:11303 #, gcc-internal-format msgid "cannot attach %<::main%> to a named module" msgstr "" -#: cp/decl.cc:11360 +#: cp/decl.cc:11362 #, gcc-internal-format msgid "non-member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.cc:11362 +#: cp/decl.cc:11364 #, gcc-internal-format msgid "static member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.cc:11363 +#: cp/decl.cc:11365 #, gcc-internal-format msgid "explicit object member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.cc:11368 +#: cp/decl.cc:11370 #, gcc-internal-format msgid "non-member function %qD cannot have ref-qualifier" msgstr "" -#: cp/decl.cc:11370 +#: cp/decl.cc:11372 #, gcc-internal-format msgid "static member function %qD cannot have ref-qualifier" msgstr "" -#: cp/decl.cc:11371 +#: cp/decl.cc:11373 #, gcc-internal-format msgid "explicit object member function %qD cannot have ref-qualifier" msgstr "" -#: cp/decl.cc:11377 cp/decl.cc:14310 cp/decl.cc:14320 cp/parser.cc:12368 +#: cp/decl.cc:11379 cp/decl.cc:14312 cp/decl.cc:14322 cp/parser.cc:12368 #, gcc-internal-format msgid "explicit object parameter declared here" msgstr "" -#: cp/decl.cc:11390 +#: cp/decl.cc:11392 #, gcc-internal-format msgid "deduction guide %qD must be declared in the same scope as %qT" msgstr "" -#: cp/decl.cc:11392 cp/decl.cc:11401 cp/typeck.cc:4667 +#: cp/decl.cc:11394 cp/decl.cc:11403 cp/typeck.cc:4667 #, gcc-internal-format msgid " declared here" msgstr "" -#: cp/decl.cc:11399 +#: cp/decl.cc:11401 #, gcc-internal-format msgid "deduction guide %qD must have the same access as %qT" msgstr "" -#: cp/decl.cc:11405 +#: cp/decl.cc:11407 #, gcc-internal-format msgid "deduction guide %qD must not have a function body" msgstr "" -#: cp/decl.cc:11419 +#: cp/decl.cc:11421 #, gcc-internal-format msgid "literal operator with C linkage" msgstr "" -#: cp/decl.cc:11429 +#: cp/decl.cc:11431 #, gcc-internal-format msgid "%qD has invalid argument list" msgstr "" -#: cp/decl.cc:11437 +#: cp/decl.cc:11439 #, gcc-internal-format msgid "integer suffix %qs shadowed by implementation" msgstr "" -#: cp/decl.cc:11443 +#: cp/decl.cc:11445 #, gcc-internal-format msgid "floating-point suffix %qs shadowed by implementation" msgstr "" -#: cp/decl.cc:11450 +#: cp/decl.cc:11452 #, gcc-internal-format msgid "" "literal operator suffixes not preceded by %<_%> are reserved for future " "standardization" msgstr "" -#: cp/decl.cc:11455 +#: cp/decl.cc:11457 #, gcc-internal-format msgid "%qD must be a non-member function" msgstr "" -#: cp/decl.cc:11540 +#: cp/decl.cc:11542 #, gcc-internal-format msgid "%<::main%> must return %<int%>" msgstr "" -#: cp/decl.cc:11580 +#: cp/decl.cc:11582 #, gcc-internal-format msgid "definition of implicitly-declared %qD" msgstr "" -#: cp/decl.cc:11586 +#: cp/decl.cc:11588 #, gcc-internal-format msgid "definition of explicitly-defaulted %q+D" msgstr "" -#: cp/decl.cc:11588 +#: cp/decl.cc:11590 #, gcc-internal-format msgid "%q#D explicitly defaulted here" msgstr "" -#: cp/decl.cc:11605 +#: cp/decl.cc:11607 #, gcc-internal-format msgid "no %q#D member function declared in class %qT" msgstr "" -#: cp/decl.cc:11802 +#: cp/decl.cc:11804 #, gcc-internal-format msgid "cannot declare %<::main%> to be a global variable" msgstr "" -#: cp/decl.cc:11805 +#: cp/decl.cc:11807 #, gcc-internal-format msgid "an entity named %<main%> cannot be declared with C language linkage" msgstr "" -#: cp/decl.cc:11814 +#: cp/decl.cc:11816 #, gcc-internal-format msgid "a non-template variable cannot be %<concept%>" msgstr "" -#: cp/decl.cc:11817 +#: cp/decl.cc:11819 #, gcc-internal-format msgid "concept must be defined at namespace scope" msgstr "" -#: cp/decl.cc:11820 +#: cp/decl.cc:11822 #, gcc-internal-format msgid "variable concepts are no longer supported" msgstr "" -#: cp/decl.cc:11941 +#: cp/decl.cc:11943 #, gcc-internal-format msgid "in-class initialization of static data member %q#D of incomplete type" msgstr "" -#: cp/decl.cc:11945 +#: cp/decl.cc:11947 #, gcc-internal-format msgid "" "%<constexpr%> needed for in-class initialization of static data member %q#D " "of non-integral type" msgstr "" -#: cp/decl.cc:11949 +#: cp/decl.cc:11951 #, gcc-internal-format msgid "in-class initialization of static data member %q#D of non-literal type" msgstr "" -#: cp/decl.cc:11960 +#: cp/decl.cc:11962 #, gcc-internal-format msgid "" "invalid in-class initialization of static data member of non-integral type " "%qT" msgstr "" -#: cp/decl.cc:11965 +#: cp/decl.cc:11967 #, gcc-internal-format msgid "ISO C++ forbids in-class initialization of non-const static member %qD" msgstr "" -#: cp/decl.cc:11970 +#: cp/decl.cc:11972 #, gcc-internal-format msgid "" "ISO C++ forbids initialization of member constant %qD of non-integral type " "%qT" msgstr "" -#: cp/decl.cc:12082 +#: cp/decl.cc:12084 #, gcc-internal-format msgid "size of array %qD has non-integral type %qT" msgstr "" -#: cp/decl.cc:12085 +#: cp/decl.cc:12087 #, gcc-internal-format msgid "size of array has non-integral type %qT" msgstr "" -#: cp/decl.cc:12116 cp/decl.cc:12188 +#: cp/decl.cc:12118 cp/decl.cc:12190 #, gcc-internal-format msgid "size of array %qD is not an integral constant-expression" msgstr "" -#: cp/decl.cc:12120 cp/decl.cc:12191 +#: cp/decl.cc:12122 cp/decl.cc:12193 #, gcc-internal-format msgid "size of array is not an integral constant-expression" msgstr "" -#: cp/decl.cc:12171 +#: cp/decl.cc:12173 #, gcc-internal-format msgid "ISO C++ forbids zero-size array %qD" msgstr "" -#: cp/decl.cc:12174 +#: cp/decl.cc:12176 #, gcc-internal-format msgid "ISO C++ forbids zero-size array" msgstr "" -#: cp/decl.cc:12198 +#: cp/decl.cc:12200 #, gcc-internal-format msgid "ISO C++ forbids variable length array %qD" msgstr "" -#: cp/decl.cc:12201 +#: cp/decl.cc:12203 #, gcc-internal-format msgid "ISO C++ forbids variable length array" msgstr "" -#: cp/decl.cc:12207 +#: cp/decl.cc:12209 #, gcc-internal-format msgid "variable length array %qD is used" msgstr "" -#: cp/decl.cc:12210 +#: cp/decl.cc:12212 #, gcc-internal-format msgid "variable length array is used" msgstr "" -#: cp/decl.cc:12262 +#: cp/decl.cc:12264 #, gcc-internal-format msgid "overflow in array dimension" msgstr "" -#: cp/decl.cc:12322 +#: cp/decl.cc:12324 #, gcc-internal-format msgid "%qD declared as array of template placeholder type %qT" msgstr "" -#: cp/decl.cc:12325 +#: cp/decl.cc:12327 #, gcc-internal-format msgid "creating array of template placeholder type %qT" msgstr "" -#: cp/decl.cc:12335 +#: cp/decl.cc:12337 #, gcc-internal-format msgid "declaration of %qD as array of void" msgstr "" -#: cp/decl.cc:12337 +#: cp/decl.cc:12339 #, gcc-internal-format msgid "creating array of void" msgstr "" -#: cp/decl.cc:12342 +#: cp/decl.cc:12344 #, gcc-internal-format msgid "declaration of %qD as array of functions" msgstr "" -#: cp/decl.cc:12344 +#: cp/decl.cc:12346 #, gcc-internal-format msgid "creating array of functions" msgstr "" -#: cp/decl.cc:12349 +#: cp/decl.cc:12351 #, gcc-internal-format msgid "declaration of %qD as array of references" msgstr "" -#: cp/decl.cc:12351 +#: cp/decl.cc:12353 #, gcc-internal-format msgid "creating array of references" msgstr "" -#: cp/decl.cc:12356 +#: cp/decl.cc:12358 #, gcc-internal-format msgid "declaration of %qD as array of function members" msgstr "" -#: cp/decl.cc:12359 +#: cp/decl.cc:12361 #, gcc-internal-format msgid "creating array of function members" msgstr "" -#: cp/decl.cc:12377 +#: cp/decl.cc:12379 #, gcc-internal-format msgid "" "declaration of %qD as multidimensional array must have bounds for all " "dimensions except the first" msgstr "" -#: cp/decl.cc:12381 +#: cp/decl.cc:12383 #, gcc-internal-format msgid "" "multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.cc:12395 +#: cp/decl.cc:12397 #, gcc-internal-format msgid "variable-length array of %<auto%>" msgstr "" -#: cp/decl.cc:12493 +#: cp/decl.cc:12495 #, gcc-internal-format msgid "return type specification for constructor invalid" msgstr "" -#: cp/decl.cc:12496 +#: cp/decl.cc:12498 #, gcc-internal-format msgid "qualifiers are not allowed on constructor declaration" msgstr "" -#: cp/decl.cc:12507 +#: cp/decl.cc:12509 #, gcc-internal-format msgid "return type specification for destructor invalid" msgstr "" -#: cp/decl.cc:12510 +#: cp/decl.cc:12512 #, gcc-internal-format msgid "qualifiers are not allowed on destructor declaration" msgstr "" -#: cp/decl.cc:12523 +#: cp/decl.cc:12525 #, gcc-internal-format msgid "return type specified for %<operator %T%>" msgstr "" -#: cp/decl.cc:12526 +#: cp/decl.cc:12528 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of %<operator %T%>" msgstr "" -#: cp/decl.cc:12535 +#: cp/decl.cc:12537 #, gcc-internal-format msgid "return type specified for deduction guide" msgstr "" -#: cp/decl.cc:12538 +#: cp/decl.cc:12540 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of deduction guide" msgstr "" -#: cp/decl.cc:12542 +#: cp/decl.cc:12544 #, gcc-internal-format msgid "template template parameter %qT in declaration of deduction guide" msgstr "" -#: cp/decl.cc:12551 +#: cp/decl.cc:12553 #, gcc-internal-format msgid "%<decl-specifier%> in declaration of deduction guide" msgstr "" -#: cp/decl.cc:12572 +#: cp/decl.cc:12574 #, gcc-internal-format msgid "unnamed variable or field declared void" msgstr "" -#: cp/decl.cc:12580 +#: cp/decl.cc:12582 #, gcc-internal-format msgid "variable or field declared void" msgstr "" -#: cp/decl.cc:12595 +#: cp/decl.cc:12597 #, gcc-internal-format msgid "%<inline%> specifier invalid for variable %qD declared at block scope" msgstr "" -#: cp/decl.cc:12600 +#: cp/decl.cc:12602 #, gcc-internal-format msgid "" "inline variables are only available with %<-std=c++17%> or %<-std=gnu++17%>" msgstr "" -#: cp/decl.cc:12656 +#: cp/decl.cc:12658 #, gcc-internal-format msgid "%qT as type rather than plain %<decltype(auto)%>" msgstr "" -#: cp/decl.cc:12662 +#: cp/decl.cc:12664 #, gcc-internal-format msgid "%<decltype(auto)%> cannot be cv-qualified" msgstr "" -#: cp/decl.cc:12683 +#: cp/decl.cc:12685 msgid "%e and %e specified together" msgstr "" -#: cp/decl.cc:12895 +#: cp/decl.cc:12897 #, gcc-internal-format msgid "invalid use of qualified-name %<::%D%>" msgstr "" -#: cp/decl.cc:12898 cp/decl.cc:12920 +#: cp/decl.cc:12900 cp/decl.cc:12922 #, gcc-internal-format msgid "invalid use of qualified-name %<%T::%D%>" msgstr "" -#: cp/decl.cc:12901 +#: cp/decl.cc:12903 #, gcc-internal-format msgid "invalid use of qualified-name %<%D::%D%>" msgstr "" -#: cp/decl.cc:12911 +#: cp/decl.cc:12913 #, gcc-internal-format msgid "%q#T is not a class or namespace" msgstr "" -#: cp/decl.cc:12935 +#: cp/decl.cc:12937 #, gcc-internal-format msgid "declaration of %qE as non-function" msgstr "" -#: cp/decl.cc:12942 +#: cp/decl.cc:12944 #, gcc-internal-format msgid "declaration of %qE as non-member" msgstr "" -#: cp/decl.cc:12970 +#: cp/decl.cc:12972 #, gcc-internal-format msgid "declarator-id missing; using reserved word %qD" msgstr "" -#: cp/decl.cc:13021 +#: cp/decl.cc:13023 #, gcc-internal-format msgid "function definition does not declare parameters" msgstr "" -#: cp/decl.cc:13029 cp/decl.cc:13038 cp/decl.cc:15034 +#: cp/decl.cc:13031 cp/decl.cc:13040 cp/decl.cc:15036 #, gcc-internal-format msgid "declaration of %qD as non-function" msgstr "" -#: cp/decl.cc:13046 +#: cp/decl.cc:13048 #, gcc-internal-format msgid "declaration of %qD as %<typedef%>" msgstr "" -#: cp/decl.cc:13051 +#: cp/decl.cc:13053 #, gcc-internal-format msgid "declaration of %qD as parameter" msgstr "" -#: cp/decl.cc:13086 +#: cp/decl.cc:13088 #, gcc-internal-format msgid "both %qs and %qs specified" msgstr "" -#: cp/decl.cc:13093 cp/decl.cc:13100 cp/decl.cc:13107 cp/decl.cc:13114 +#: cp/decl.cc:13095 cp/decl.cc:13102 cp/decl.cc:13109 cp/decl.cc:13116 #, gcc-internal-format msgid "%qs cannot appear in a typedef declaration" msgstr "" -#: cp/decl.cc:13125 +#: cp/decl.cc:13127 #, gcc-internal-format msgid "can use at most one of the %<constinit%> and %<constexpr%> specifiers" msgstr "" -#: cp/decl.cc:13135 +#: cp/decl.cc:13137 #, gcc-internal-format msgid "two or more data types in declaration of %qs" msgstr "" -#: cp/decl.cc:13189 +#: cp/decl.cc:13191 #, gcc-internal-format msgid "ISO C++ does not support plain %<complex%> meaning %<double complex%>" msgstr "" -#: cp/decl.cc:13239 cp/decl.cc:13243 cp/decl.cc:13246 +#: cp/decl.cc:13241 cp/decl.cc:13245 cp/decl.cc:13248 #, gcc-internal-format msgid "ISO C++ forbids declaration of %qs with no type" msgstr "" -#: cp/decl.cc:13263 +#: cp/decl.cc:13265 #, gcc-internal-format msgid "%<__int%d%> is not supported by this target" msgstr "" -#: cp/decl.cc:13271 +#: cp/decl.cc:13273 #, gcc-internal-format msgid "ISO C++ does not support %<__int%d%> for %qs" msgstr "" -#: cp/decl.cc:13334 +#: cp/decl.cc:13336 #, gcc-internal-format msgid "%qs specified with %qT" msgstr "" -#: cp/decl.cc:13341 +#: cp/decl.cc:13343 #, gcc-internal-format msgid "%qs specified with typedef-name %qD" msgstr "" -#: cp/decl.cc:13350 +#: cp/decl.cc:13352 #, gcc-internal-format msgid "%qs specified with %<decltype%>" msgstr "" -#: cp/decl.cc:13352 +#: cp/decl.cc:13354 #, gcc-internal-format msgid "%qs specified with %<typeof%>" msgstr "" -#: cp/decl.cc:13421 +#: cp/decl.cc:13423 #, gcc-internal-format msgid "complex invalid for %qs" msgstr "" -#: cp/decl.cc:13465 +#: cp/decl.cc:13467 #, gcc-internal-format msgid "" "missing template argument list after %qE; for deduction, template " "placeholder must be followed by a simple declarator-id" msgstr "" -#: cp/decl.cc:13491 +#: cp/decl.cc:13493 #, gcc-internal-format msgid "member %qD cannot be declared both %<virtual%> and %<static%>" msgstr "" -#: cp/decl.cc:13500 +#: cp/decl.cc:13502 #, gcc-internal-format msgid "" "member %qD can be declared both %<virtual%> and %<constexpr%> only in %<-" "std=c++20%> or %<-std=gnu++20%>" msgstr "" -#: cp/decl.cc:13513 +#: cp/decl.cc:13515 #, gcc-internal-format msgid "typedef declaration invalid in parameter declaration" msgstr "" -#: cp/decl.cc:13520 +#: cp/decl.cc:13522 #, gcc-internal-format msgid "storage class specified for template parameter %qs" msgstr "" -#: cp/decl.cc:13530 cp/decl.cc:13707 +#: cp/decl.cc:13532 cp/decl.cc:13709 #, gcc-internal-format msgid "storage class specified for parameter %qs" msgstr "" -#: cp/decl.cc:13538 cp/decl.cc:13547 cp/decl.cc:13553 cp/decl.cc:13559 +#: cp/decl.cc:13540 cp/decl.cc:13549 cp/decl.cc:13555 cp/decl.cc:13561 #, gcc-internal-format msgid "a parameter cannot be declared %qs" msgstr "" -#: cp/decl.cc:13569 +#: cp/decl.cc:13571 #, gcc-internal-format msgid "%<virtual%> outside class declaration" msgstr "" -#: cp/decl.cc:13579 cp/decl.cc:13582 cp/decl.cc:13584 cp/decl.cc:13587 -#: cp/decl.cc:13597 cp/decl.cc:13607 cp/decl.cc:13617 cp/decl.cc:13621 +#: cp/decl.cc:13581 cp/decl.cc:13584 cp/decl.cc:13586 cp/decl.cc:13589 +#: cp/decl.cc:13599 cp/decl.cc:13609 cp/decl.cc:13619 cp/decl.cc:13623 #, gcc-internal-format msgid "structured binding declaration cannot be %qs" msgstr "" -#: cp/decl.cc:13591 cp/decl.cc:13613 +#: cp/decl.cc:13593 cp/decl.cc:13615 #, gcc-internal-format msgid "" "structured binding declaration can be %qs only in %<-std=c++20%> or %<-" "std=gnu++20%>" msgstr "" -#: cp/decl.cc:13601 +#: cp/decl.cc:13603 #, gcc-internal-format msgid "%<volatile%>-qualified structured binding is deprecated" msgstr "" -#: cp/decl.cc:13625 +#: cp/decl.cc:13627 #, gcc-internal-format msgid "structured binding declaration cannot be C++98 %<auto%>" msgstr "" -#: cp/decl.cc:13637 +#: cp/decl.cc:13639 #, gcc-internal-format msgid "structured binding declaration cannot have type %qT" msgstr "" -#: cp/decl.cc:13640 +#: cp/decl.cc:13642 #, gcc-internal-format msgid "" "type must be cv-qualified %<auto%> or reference to cv-qualified %<auto%>" msgstr "" -#: cp/decl.cc:13648 +#: cp/decl.cc:13650 #, gcc-internal-format msgid "" "structured binding declaration cannot have constrained %<auto%> type %qT" msgstr "" -#: cp/decl.cc:13679 +#: cp/decl.cc:13681 #, gcc-internal-format msgid "multiple storage classes in declaration of %qs" msgstr "" -#: cp/decl.cc:13705 +#: cp/decl.cc:13707 #, gcc-internal-format msgid "storage class specified for %qs" msgstr "" -#: cp/decl.cc:13719 +#: cp/decl.cc:13721 #, gcc-internal-format msgid "nested function %qs declared %<extern%>" msgstr "" -#: cp/decl.cc:13724 +#: cp/decl.cc:13726 #, gcc-internal-format msgid "top-level declaration of %qs specifies %<auto%>" msgstr "" -#: cp/decl.cc:13732 +#: cp/decl.cc:13734 #, gcc-internal-format msgid "function-scope %qs implicitly auto and declared %<__thread%>" msgstr "" -#: cp/decl.cc:13746 +#: cp/decl.cc:13748 #, gcc-internal-format msgid "storage class specifiers invalid in friend function declarations" msgstr "" -#: cp/decl.cc:13852 +#: cp/decl.cc:13854 #, gcc-internal-format msgid "unnecessary parentheses in declaration of %qs" msgstr "" -#: cp/decl.cc:13858 +#: cp/decl.cc:13860 #, gcc-internal-format msgid "remove parentheses" msgstr "" -#: cp/decl.cc:13925 +#: cp/decl.cc:13927 #, gcc-internal-format msgid "" "explicit object member function only available with %<-std=c++23%> or %<-" "std=gnu++23%>" msgstr "" -#: cp/decl.cc:13939 +#: cp/decl.cc:13941 #, gcc-internal-format msgid "a function type cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13945 +#: cp/decl.cc:13947 #, gcc-internal-format msgid "a pointer to function type cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13949 +#: cp/decl.cc:13951 #, gcc-internal-format msgid "" "a pointer to member function type cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13957 +#: cp/decl.cc:13959 #, gcc-internal-format msgid "" "the type of a pointer to explicit object member function is a regular " "pointer to function type" msgstr "" -#: cp/decl.cc:13961 +#: cp/decl.cc:13963 #, gcc-internal-format msgid "" "the type of an explicit object member function is a regular function type" msgstr "" -#: cp/decl.cc:13982 +#: cp/decl.cc:13984 #, gcc-internal-format msgid "" "only the first parameter of a member function can be declared as an explicit " "object parameter" msgstr "" -#: cp/decl.cc:13987 +#: cp/decl.cc:13989 #, gcc-internal-format msgid "valid explicit object parameter declared here" msgstr "" -#: cp/decl.cc:13991 +#: cp/decl.cc:13993 #, gcc-internal-format msgid "requires-clause on return type" msgstr "" -#: cp/decl.cc:14012 +#: cp/decl.cc:14014 #, gcc-internal-format msgid "%qs function uses %<auto%> type specifier without trailing return type" msgstr "" -#: cp/decl.cc:14016 +#: cp/decl.cc:14018 #, gcc-internal-format msgid "" "deduced return type only available with %<-std=c++14%> or %<-std=gnu++14%>" msgstr "" -#: cp/decl.cc:14021 +#: cp/decl.cc:14023 #, gcc-internal-format msgid "virtual function cannot have deduced return type" msgstr "" -#: cp/decl.cc:14028 +#: cp/decl.cc:14030 #, gcc-internal-format msgid "" "%qs function with trailing return type has %qT as its type rather than plain " "%<auto%>" msgstr "" -#: cp/decl.cc:14037 +#: cp/decl.cc:14039 #, gcc-internal-format msgid "" "%qs function with trailing return type has %<decltype(auto)%> as its type " "rather than plain %<auto%>" msgstr "" -#: cp/decl.cc:14042 +#: cp/decl.cc:14044 #, gcc-internal-format msgid "invalid use of %<decltype(auto)%>" msgstr "" -#: cp/decl.cc:14049 +#: cp/decl.cc:14051 #, gcc-internal-format msgid "" "%qs function with trailing return type has constrained %<auto%> type " "specifier rather than plain %<auto%>" msgstr "" -#: cp/decl.cc:14055 +#: cp/decl.cc:14057 #, gcc-internal-format msgid "invalid use of constrained %<auto%> type" msgstr "" -#: cp/decl.cc:14067 +#: cp/decl.cc:14069 #, gcc-internal-format msgid "deduced class type %qD in function return type" msgstr "" -#: cp/decl.cc:14077 +#: cp/decl.cc:14079 #, gcc-internal-format msgid "deduction guide for %qT must have trailing return type" msgstr "" -#: cp/decl.cc:14090 +#: cp/decl.cc:14092 #, gcc-internal-format msgid "" "trailing return type %qT of deduction guide is not a specialization of %qT" msgstr "" -#: cp/decl.cc:14104 +#: cp/decl.cc:14106 #, gcc-internal-format msgid "" "trailing return type only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/decl.cc:14107 +#: cp/decl.cc:14109 #, gcc-internal-format msgid "" "%qs function with trailing return type not declared with %<auto%> type " "specifier" msgstr "" -#: cp/decl.cc:14114 +#: cp/decl.cc:14116 #, gcc-internal-format msgid "a conversion function cannot have a trailing return type" msgstr "" -#: cp/decl.cc:14140 +#: cp/decl.cc:14142 #, gcc-internal-format msgid "%<volatile%>-qualified return type is deprecated" msgstr "" -#: cp/decl.cc:14152 +#: cp/decl.cc:14154 #, gcc-internal-format msgid "%qs declared as function returning a function" msgstr "" -#: cp/decl.cc:14158 +#: cp/decl.cc:14160 #, gcc-internal-format msgid "%qs declared as function returning an array" msgstr "" -#: cp/decl.cc:14165 +#: cp/decl.cc:14167 #, gcc-internal-format msgid "%<constinit%> on function return type is not allowed" msgstr "" -#: cp/decl.cc:14198 +#: cp/decl.cc:14200 #, gcc-internal-format msgid "destructor cannot be static member function" msgstr "" -#: cp/decl.cc:14200 +#: cp/decl.cc:14202 #, gcc-internal-format msgid "constructor cannot be static member function" msgstr "" -#: cp/decl.cc:14205 +#: cp/decl.cc:14207 #, gcc-internal-format msgid "destructors may not be cv-qualified" msgstr "" -#: cp/decl.cc:14206 +#: cp/decl.cc:14208 #, gcc-internal-format msgid "constructors may not be cv-qualified" msgstr "" -#: cp/decl.cc:14214 +#: cp/decl.cc:14216 #, gcc-internal-format msgid "destructors may not be ref-qualified" msgstr "" -#: cp/decl.cc:14215 +#: cp/decl.cc:14217 #, gcc-internal-format msgid "constructors may not be ref-qualified" msgstr "" -#: cp/decl.cc:14233 +#: cp/decl.cc:14235 #, gcc-internal-format msgid "constructors cannot be declared %<virtual%>" msgstr "" -#: cp/decl.cc:14250 +#: cp/decl.cc:14252 #, gcc-internal-format msgid "virtual functions cannot be friends" msgstr "" -#: cp/decl.cc:14255 +#: cp/decl.cc:14257 #, gcc-internal-format msgid "friend declaration not in class definition" msgstr "" -#: cp/decl.cc:14259 +#: cp/decl.cc:14261 #, gcc-internal-format msgid "cannot define friend function %qs in a local class definition" msgstr "" -#: cp/decl.cc:14269 +#: cp/decl.cc:14271 #, gcc-internal-format msgid "friend function definition %qs cannot have a name qualified with %<::%>" msgstr "" -#: cp/decl.cc:14273 +#: cp/decl.cc:14275 #, gcc-internal-format msgid "" "friend function definition %qs cannot have a name qualified with %<%D::%>" msgstr "" -#: cp/decl.cc:14299 +#: cp/decl.cc:14301 #, gcc-internal-format msgid "a non-member function cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:14307 +#: cp/decl.cc:14309 #, gcc-internal-format msgid "an explicit object member function cannot be %<virtual%>" msgstr "" -#: cp/decl.cc:14317 +#: cp/decl.cc:14319 #, gcc-internal-format msgid "an explicit object member function cannot be %<static%>" msgstr "" -#: cp/decl.cc:14326 +#: cp/decl.cc:14328 #, gcc-internal-format msgid "%qD cannot be an explicit object member function" msgstr "" -#: cp/decl.cc:14349 +#: cp/decl.cc:14351 #, gcc-internal-format msgid "destructors may not have parameters" msgstr "" -#: cp/decl.cc:14407 +#: cp/decl.cc:14409 #, gcc-internal-format msgid "cannot declare pointer to %q#T" msgstr "" -#: cp/decl.cc:14420 cp/decl.cc:14427 +#: cp/decl.cc:14422 cp/decl.cc:14429 #, gcc-internal-format msgid "cannot declare reference to %q#T" msgstr "" -#: cp/decl.cc:14429 +#: cp/decl.cc:14431 #, gcc-internal-format msgid "cannot declare pointer to %q#T member" msgstr "" -#: cp/decl.cc:14458 +#: cp/decl.cc:14460 #, gcc-internal-format msgid "cannot declare reference to qualified function type %qT" msgstr "" -#: cp/decl.cc:14459 +#: cp/decl.cc:14461 #, gcc-internal-format msgid "cannot declare pointer to qualified function type %qT" msgstr "" -#: cp/decl.cc:14532 +#: cp/decl.cc:14534 #, gcc-internal-format msgid "" "cannot declare reference to %q#T, which is not a typedef or a template type " "argument" msgstr "" -#: cp/decl.cc:14611 +#: cp/decl.cc:14613 #, gcc-internal-format msgid "template-id %qD used as a declarator" msgstr "" -#: cp/decl.cc:14637 +#: cp/decl.cc:14639 #, gcc-internal-format msgid "member functions are implicitly friends of their class" msgstr "" -#: cp/decl.cc:14642 +#: cp/decl.cc:14644 #, gcc-internal-format msgid "extra qualification %<%T::%> on member %qs" msgstr "" -#: cp/decl.cc:14672 +#: cp/decl.cc:14674 #, gcc-internal-format msgid "cannot define member function %<%T::%s%> within %qT" msgstr "" -#: cp/decl.cc:14674 +#: cp/decl.cc:14676 #, gcc-internal-format msgid "cannot declare member function %<%T::%s%> within %qT" msgstr "" -#: cp/decl.cc:14682 +#: cp/decl.cc:14684 #, gcc-internal-format msgid "cannot declare member %<%T::%s%> within %qT" msgstr "" -#: cp/decl.cc:14722 +#: cp/decl.cc:14724 #, gcc-internal-format msgid "non-parameter %qs cannot be a parameter pack" msgstr "" -#: cp/decl.cc:14731 +#: cp/decl.cc:14733 #, gcc-internal-format msgid "data member may not have variably modified type %qT" msgstr "" -#: cp/decl.cc:14734 +#: cp/decl.cc:14736 #, gcc-internal-format msgid "parameter may not have variably modified type %qT" msgstr "" -#: cp/decl.cc:14745 +#: cp/decl.cc:14747 #, gcc-internal-format msgid "%<explicit%> outside class declaration" msgstr "" -#: cp/decl.cc:14748 +#: cp/decl.cc:14750 #, gcc-internal-format msgid "%<explicit%> in friend declaration" msgstr "" -#: cp/decl.cc:14751 +#: cp/decl.cc:14753 #, gcc-internal-format msgid "" "only declarations of constructors and conversion operators can be " "%<explicit%>" msgstr "" -#: cp/decl.cc:14761 +#: cp/decl.cc:14763 #, gcc-internal-format msgid "non-member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14768 +#: cp/decl.cc:14770 #, gcc-internal-format msgid "non-object member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14774 +#: cp/decl.cc:14776 #, gcc-internal-format msgid "function %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14780 +#: cp/decl.cc:14782 #, gcc-internal-format msgid "%<static%> %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14786 +#: cp/decl.cc:14788 #, gcc-internal-format msgid "%<const%> %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14792 +#: cp/decl.cc:14794 #, gcc-internal-format msgid "reference %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14808 +#: cp/decl.cc:14810 #, gcc-internal-format msgid "typedef may not be a function definition" msgstr "" -#: cp/decl.cc:14811 +#: cp/decl.cc:14813 #, gcc-internal-format msgid "typedef may not be a member function definition" msgstr "" -#: cp/decl.cc:14837 +#: cp/decl.cc:14839 #, gcc-internal-format msgid "%<auto%> not allowed in alias declaration" msgstr "" -#: cp/decl.cc:14840 +#: cp/decl.cc:14842 #, gcc-internal-format msgid "typedef declared %<auto%>" msgstr "" -#: cp/decl.cc:14845 +#: cp/decl.cc:14847 #, gcc-internal-format msgid "requires-clause on typedef" msgstr "" -#: cp/decl.cc:14849 +#: cp/decl.cc:14851 #, gcc-internal-format msgid "typedef name may not be a nested-name-specifier" msgstr "" -#: cp/decl.cc:14875 +#: cp/decl.cc:14877 #, gcc-internal-format msgid "ISO C++ forbids nested type %qD with same name as enclosing class" msgstr "" -#: cp/decl.cc:14964 +#: cp/decl.cc:14966 #, gcc-internal-format msgid "%<inline%> specified for friend class declaration" msgstr "" -#: cp/decl.cc:14972 +#: cp/decl.cc:14974 #, gcc-internal-format msgid "template parameters cannot be friends" msgstr "" -#: cp/decl.cc:14974 +#: cp/decl.cc:14976 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>" msgstr "" -#: cp/decl.cc:14978 +#: cp/decl.cc:14980 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend %#T%>" msgstr "" -#: cp/decl.cc:14991 +#: cp/decl.cc:14993 #, gcc-internal-format msgid "trying to make class %qT a friend of global scope" msgstr "" -#: cp/decl.cc:15011 +#: cp/decl.cc:15013 #, gcc-internal-format msgid "invalid qualifiers on non-member function type" msgstr "" -#: cp/decl.cc:15015 +#: cp/decl.cc:15017 #, gcc-internal-format msgid "requires-clause on type-id" msgstr "" -#: cp/decl.cc:15025 +#: cp/decl.cc:15027 #, gcc-internal-format msgid "abstract declarator %qT used as declaration" msgstr "" -#: cp/decl.cc:15040 +#: cp/decl.cc:15042 #, gcc-internal-format msgid "requires-clause on declaration of non-function type %qT" msgstr "" -#: cp/decl.cc:15059 +#: cp/decl.cc:15061 #, gcc-internal-format msgid "cannot use %<::%> in parameter declaration" msgstr "" -#: cp/decl.cc:15069 cp/parser.cc:21410 +#: cp/decl.cc:15071 cp/parser.cc:21410 #, gcc-internal-format msgid "cannot declare a parameter with %<decltype(auto)%>" msgstr "" -#: cp/decl.cc:15076 +#: cp/decl.cc:15078 #, gcc-internal-format msgid "" "missing template argument list after %qE; template placeholder not permitted " "in parameter" msgstr "" -#: cp/decl.cc:15079 +#: cp/decl.cc:15081 #, gcc-internal-format msgid "or use %<auto%> for an abbreviated function template" msgstr "" -#: cp/decl.cc:15085 cp/parser.cc:26076 +#: cp/decl.cc:15087 cp/parser.cc:26076 #, gcc-internal-format msgid "%<auto%> parameter not permitted in this context" msgstr "" -#: cp/decl.cc:15095 +#: cp/decl.cc:15097 #, gcc-internal-format msgid "parameter declared %<auto%>" msgstr "" -#: cp/decl.cc:15149 cp/parser.cc:3855 +#: cp/decl.cc:15151 cp/parser.cc:3855 #, gcc-internal-format msgid "invalid use of template-name %qE without an argument list" msgstr "" -#: cp/decl.cc:15153 +#: cp/decl.cc:15155 #, gcc-internal-format msgid "non-static data member declared with placeholder %qT" msgstr "" -#: cp/decl.cc:15173 +#: cp/decl.cc:15175 #, gcc-internal-format msgid "ISO C++ forbids flexible array member %qs" msgstr "" -#: cp/decl.cc:15176 +#: cp/decl.cc:15178 #, gcc-internal-format msgid "ISO C++ forbids flexible array members" msgstr "" #. Something like struct S { int N::j; }; -#: cp/decl.cc:15192 +#: cp/decl.cc:15194 #, gcc-internal-format msgid "invalid use of %<::%>" msgstr "" -#: cp/decl.cc:15213 +#: cp/decl.cc:15215 #, gcc-internal-format msgid "declaration of function %qD in invalid context" msgstr "" -#: cp/decl.cc:15223 +#: cp/decl.cc:15225 #, gcc-internal-format msgid "function %qD declared %<virtual%> inside a union" msgstr "" -#: cp/decl.cc:15233 +#: cp/decl.cc:15235 #, gcc-internal-format msgid "%qD cannot be declared %<virtual%>, since it is always static" msgstr "" -#: cp/decl.cc:15247 +#: cp/decl.cc:15249 #, gcc-internal-format msgid "expected qualified name in friend declaration for destructor %qD" msgstr "" -#: cp/decl.cc:15254 +#: cp/decl.cc:15256 #, gcc-internal-format msgid "declaration of %qD as member of %qT" msgstr "" -#: cp/decl.cc:15261 cp/decl.cc:15274 +#: cp/decl.cc:15263 cp/decl.cc:15276 #, gcc-internal-format msgid "a destructor cannot be %qs" msgstr "" -#: cp/decl.cc:15280 +#: cp/decl.cc:15282 #, gcc-internal-format msgid "expected qualified name in friend declaration for constructor %qD" msgstr "" -#: cp/decl.cc:15289 +#: cp/decl.cc:15291 #, gcc-internal-format msgid "a constructor cannot be %<concept%>" msgstr "" -#: cp/decl.cc:15295 +#: cp/decl.cc:15297 #, gcc-internal-format msgid "a concept cannot be a member function" msgstr "" -#: cp/decl.cc:15303 cp/decl.cc:15662 +#: cp/decl.cc:15305 cp/decl.cc:15664 #, gcc-internal-format msgid "%qD cannot be %qs" msgstr "" -#: cp/decl.cc:15313 +#: cp/decl.cc:15315 #, gcc-internal-format msgid "specialization of variable template %qD declared as function" msgstr "" -#: cp/decl.cc:15316 +#: cp/decl.cc:15318 #, gcc-internal-format msgid "variable template declared here" msgstr "" -#: cp/decl.cc:15381 +#: cp/decl.cc:15383 #, gcc-internal-format msgid "field %qD has incomplete type %qT" msgstr "" -#: cp/decl.cc:15386 +#: cp/decl.cc:15388 #, gcc-internal-format msgid "name %qT has incomplete type" msgstr "" -#: cp/decl.cc:15406 +#: cp/decl.cc:15408 #, gcc-internal-format msgid "%qE is neither function nor member function; cannot be declared friend" msgstr "" -#: cp/decl.cc:15409 +#: cp/decl.cc:15411 #, gcc-internal-format msgid "" "unnamed field is neither function nor member function; cannot be declared " "friend" msgstr "" -#: cp/decl.cc:15428 cp/parser.cc:21976 cp/parser.cc:28868 +#: cp/decl.cc:15430 cp/parser.cc:21976 cp/parser.cc:28868 #, gcc-internal-format msgid "" "an attribute that appertains to a friend declaration that is not a " "definition is ignored" msgstr "" -#: cp/decl.cc:15478 cp/decl.cc:15489 +#: cp/decl.cc:15480 cp/decl.cc:15491 #, gcc-internal-format msgid "static data member %qE declared %qs" msgstr "" -#: cp/decl.cc:15483 +#: cp/decl.cc:15485 #, gcc-internal-format msgid "%<constexpr%> static data member %qD must have an initializer" msgstr "" -#: cp/decl.cc:15526 cp/decl.cc:15534 cp/decl.cc:15541 cp/decl.cc:15548 +#: cp/decl.cc:15528 cp/decl.cc:15536 cp/decl.cc:15543 cp/decl.cc:15550 #, gcc-internal-format msgid "non-static data member %qE declared %qs" msgstr "" -#: cp/decl.cc:15600 +#: cp/decl.cc:15602 #, gcc-internal-format msgid "storage class %<auto%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15603 +#: cp/decl.cc:15605 #, gcc-internal-format msgid "storage class %<register%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15609 +#: cp/decl.cc:15611 #, gcc-internal-format msgid "storage class %<__thread%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15613 +#: cp/decl.cc:15615 #, gcc-internal-format msgid "storage class %<thread_local%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15618 +#: cp/decl.cc:15620 #, gcc-internal-format msgid "%<constinit%> specifier invalid for function %qs" msgstr "" -#: cp/decl.cc:15621 +#: cp/decl.cc:15623 #, gcc-internal-format msgid "virt-specifiers in %qs not allowed outside a class definition" msgstr "" -#: cp/decl.cc:15633 +#: cp/decl.cc:15635 #, gcc-internal-format msgid "" "%<static%> specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.cc:15637 +#: cp/decl.cc:15639 #, gcc-internal-format msgid "" "%<inline%> specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.cc:15645 +#: cp/decl.cc:15647 #, gcc-internal-format msgid "virtual non-class function %qs" msgstr "" -#: cp/decl.cc:15652 +#: cp/decl.cc:15654 #, gcc-internal-format msgid "%qs defined in a non-class scope" msgstr "" -#: cp/decl.cc:15653 +#: cp/decl.cc:15655 #, gcc-internal-format msgid "%qs declared in a non-class scope" msgstr "" -#: cp/decl.cc:15696 +#: cp/decl.cc:15698 #, gcc-internal-format msgid "cannot declare member function %qD to have static linkage" msgstr "" -#: cp/decl.cc:15705 +#: cp/decl.cc:15707 #, gcc-internal-format msgid "cannot declare static function inside another function" msgstr "" -#: cp/decl.cc:15746 +#: cp/decl.cc:15748 #, gcc-internal-format msgid "" "%<static%> may not be used when defining (as opposed to declaring) a static " "data member" msgstr "" -#: cp/decl.cc:15753 +#: cp/decl.cc:15755 #, gcc-internal-format msgid "static member %qD declared %<register%>" msgstr "" -#: cp/decl.cc:15759 +#: cp/decl.cc:15761 #, gcc-internal-format msgid "cannot explicitly declare member %q#D to have extern linkage" msgstr "" -#: cp/decl.cc:15767 +#: cp/decl.cc:15769 #, gcc-internal-format msgid "declaration of %<constexpr%> variable %qD is not a definition" msgstr "" -#: cp/decl.cc:15774 +#: cp/decl.cc:15776 #, gcc-internal-format msgid "a variable cannot be declared %<consteval%>" msgstr "" -#: cp/decl.cc:15806 +#: cp/decl.cc:15808 #, gcc-internal-format msgid "%qs initialized and declared %<extern%>" msgstr "" -#: cp/decl.cc:15811 +#: cp/decl.cc:15813 #, gcc-internal-format msgid "%qs has both %<extern%> and initializer" msgstr "" -#: cp/decl.cc:16013 +#: cp/decl.cc:16015 #, gcc-internal-format msgid "default argument %qE uses %qD" msgstr "" -#: cp/decl.cc:16016 +#: cp/decl.cc:16018 #, gcc-internal-format msgid "default argument %qE uses local variable %qD" msgstr "" -#: cp/decl.cc:16143 +#: cp/decl.cc:16145 #, gcc-internal-format msgid "invalid use of cv-qualified type %qT in parameter declaration" msgstr "" -#: cp/decl.cc:16147 +#: cp/decl.cc:16149 #, gcc-internal-format msgid "invalid use of type %<void%> in parameter declaration" msgstr "" -#: cp/decl.cc:16176 +#: cp/decl.cc:16178 #, gcc-internal-format msgid "%<volatile%>-qualified parameter is deprecated" msgstr "" -#: cp/decl.cc:16184 +#: cp/decl.cc:16186 #, gcc-internal-format msgid "parameter %qD invalidly declared method type" msgstr "" -#: cp/decl.cc:16209 +#: cp/decl.cc:16211 #, gcc-internal-format msgid "parameter %qD includes pointer to array of unknown bound %qT" msgstr "" -#: cp/decl.cc:16211 +#: cp/decl.cc:16213 #, gcc-internal-format msgid "parameter %qD includes reference to array of unknown bound %qT" msgstr "" -#: cp/decl.cc:16494 +#: cp/decl.cc:16496 #, gcc-internal-format msgid "invalid constructor; you probably meant %<%T (const %T&)%>" msgstr "" -#: cp/decl.cc:16573 +#: cp/decl.cc:16575 #, gcc-internal-format msgid "%qD may not be declared within a namespace" msgstr "" -#: cp/decl.cc:16580 +#: cp/decl.cc:16582 #, gcc-internal-format msgid "%qD may not be declared as static" msgstr "" -#: cp/decl.cc:16638 +#: cp/decl.cc:16640 #, gcc-internal-format msgid "%qD must be a non-static member function" msgstr "" -#: cp/decl.cc:16646 +#: cp/decl.cc:16648 #, gcc-internal-format msgid "%qD must be a member function" msgstr "" -#: cp/decl.cc:16654 +#: cp/decl.cc:16656 #, gcc-internal-format msgid "" "%qD may be a static member function only with %<-std=c++23%> or %<-std=gnu+" "+23%>" msgstr "" -#: cp/decl.cc:16664 +#: cp/decl.cc:16666 #, gcc-internal-format msgid "" "%qD must be either a non-static member function or a non-member function" msgstr "" -#: cp/decl.cc:16674 +#: cp/decl.cc:16676 #, gcc-internal-format msgid "%qD must have an argument of class or enumerated type" msgstr "" #. 13.4.0.3 -#: cp/decl.cc:16705 +#: cp/decl.cc:16707 #, gcc-internal-format msgid "ISO C++ prohibits overloading %<operator ?:%>" msgstr "" -#: cp/decl.cc:16715 +#: cp/decl.cc:16717 #, gcc-internal-format msgid "%qD must not have variable number of arguments" msgstr "" -#: cp/decl.cc:16741 +#: cp/decl.cc:16743 #, gcc-internal-format msgid "%qD must have either zero or one argument" msgstr "" -#: cp/decl.cc:16742 +#: cp/decl.cc:16744 #, gcc-internal-format msgid "%qD must have either one or two arguments" msgstr "" -#: cp/decl.cc:16754 +#: cp/decl.cc:16756 #, gcc-internal-format msgid "postfix %qD must have %<int%> as its argument" msgstr "" -#: cp/decl.cc:16755 +#: cp/decl.cc:16757 #, gcc-internal-format msgid "postfix %qD must have %<int%> as its second argument" msgstr "" -#: cp/decl.cc:16766 +#: cp/decl.cc:16768 #, gcc-internal-format msgid "%qD must have no arguments" msgstr "" -#: cp/decl.cc:16767 cp/decl.cc:16777 +#: cp/decl.cc:16769 cp/decl.cc:16779 #, gcc-internal-format msgid "%qD must have exactly one argument" msgstr "" -#: cp/decl.cc:16778 +#: cp/decl.cc:16780 #, gcc-internal-format msgid "%qD must have exactly two arguments" msgstr "" -#: cp/decl.cc:16793 +#: cp/decl.cc:16795 #, gcc-internal-format msgid "%qD cannot have default arguments" msgstr "" -#: cp/decl.cc:16817 +#: cp/decl.cc:16819 #, gcc-internal-format msgid "converting %qT to %<void%> will never use a type conversion operator" msgstr "" -#: cp/decl.cc:16824 +#: cp/decl.cc:16826 #, gcc-internal-format msgid "" "converting %qT to a reference to the same type will never use a type " "conversion operator" msgstr "" -#: cp/decl.cc:16826 +#: cp/decl.cc:16828 #, gcc-internal-format msgid "" "converting %qT to the same type will never use a type conversion operator" msgstr "" -#: cp/decl.cc:16835 +#: cp/decl.cc:16837 #, gcc-internal-format msgid "" "converting %qT to a reference to a base class %qT will never use a type " "conversion operator" msgstr "" -#: cp/decl.cc:16837 +#: cp/decl.cc:16839 #, gcc-internal-format msgid "" "converting %qT to a base class %qT will never use a type conversion operator" msgstr "" -#: cp/decl.cc:16853 +#: cp/decl.cc:16855 #, gcc-internal-format msgid "user-defined %qD always evaluates both arguments" msgstr "" -#: cp/decl.cc:16872 +#: cp/decl.cc:16874 #, gcc-internal-format msgid "prefix %qD should return %qT" msgstr "" -#: cp/decl.cc:16879 +#: cp/decl.cc:16881 #, gcc-internal-format msgid "postfix %qD should return %qT" msgstr "" -#: cp/decl.cc:16891 +#: cp/decl.cc:16893 #, gcc-internal-format msgid "%qD should return by value" msgstr "" -#: cp/decl.cc:16946 +#: cp/decl.cc:16948 #, gcc-internal-format msgid "using template type parameter %qT after %qs" msgstr "" -#: cp/decl.cc:16970 +#: cp/decl.cc:16972 #, gcc-internal-format msgid "using alias template specialization %qT after %qs" msgstr "" -#: cp/decl.cc:16973 +#: cp/decl.cc:16975 #, gcc-internal-format msgid "using typedef-name %qD after %qs" msgstr "" -#: cp/decl.cc:16975 +#: cp/decl.cc:16977 #, gcc-internal-format msgid "%qD has a previous declaration here" msgstr "" -#: cp/decl.cc:16984 +#: cp/decl.cc:16986 #, gcc-internal-format msgid "%qT referred to as %qs" msgstr "" -#: cp/decl.cc:16985 cp/decl.cc:16993 +#: cp/decl.cc:16987 cp/decl.cc:16995 #, gcc-internal-format msgid "%qT has a previous declaration here" msgstr "" -#: cp/decl.cc:16992 +#: cp/decl.cc:16994 #, gcc-internal-format msgid "%qT referred to as enum" msgstr "" @@ -62597,100 +62598,100 @@ msgstr "" #. void f(class C); // No template header here #. #. then the required template argument is missing. -#: cp/decl.cc:17007 +#: cp/decl.cc:17009 #, gcc-internal-format msgid "template argument required for %<%s %T%>" msgstr "" -#: cp/decl.cc:17050 cp/name-lookup.cc:6232 cp/name-lookup.cc:6365 +#: cp/decl.cc:17052 cp/name-lookup.cc:6235 cp/name-lookup.cc:6368 #: cp/parser.cc:7477 cp/parser.cc:33034 #, gcc-internal-format msgid "reference to %qD is ambiguous" msgstr "" -#: cp/decl.cc:17060 +#: cp/decl.cc:17062 #, gcc-internal-format msgid "class template %qD redeclared as non-template" msgstr "" -#: cp/decl.cc:17082 cp/name-lookup.cc:5921 +#: cp/decl.cc:17084 cp/name-lookup.cc:5924 #, gcc-internal-format msgid "%qD has the same name as the class in which it is declared" msgstr "" -#: cp/decl.cc:17111 cp/friend.cc:318 cp/parser.cc:3680 cp/parser.cc:7181 +#: cp/decl.cc:17113 cp/friend.cc:318 cp/parser.cc:3680 cp/parser.cc:7181 #: cp/pt.cc:10128 #, gcc-internal-format msgid "%qT is not a template" msgstr "" -#: cp/decl.cc:17116 +#: cp/decl.cc:17118 #, gcc-internal-format msgid "perhaps you want to explicitly add %<%T::%>" msgstr "" -#: cp/decl.cc:17221 +#: cp/decl.cc:17223 #, gcc-internal-format msgid "use of enum %q#D without previous declaration" msgstr "" -#: cp/decl.cc:17248 +#: cp/decl.cc:17250 #, gcc-internal-format msgid "redeclaration of %qT as a non-template" msgstr "" -#: cp/decl.cc:17385 +#: cp/decl.cc:17387 #, gcc-internal-format msgid "derived union %qT invalid" msgstr "" -#: cp/decl.cc:17392 +#: cp/decl.cc:17394 #, gcc-internal-format msgid "%qT defined with multiple direct bases" msgstr "" -#: cp/decl.cc:17403 +#: cp/decl.cc:17405 #, gcc-internal-format msgid "%qT defined with direct virtual base" msgstr "" -#: cp/decl.cc:17428 +#: cp/decl.cc:17430 #, gcc-internal-format msgid "base type %qT fails to be a struct or class type" msgstr "" -#: cp/decl.cc:17458 +#: cp/decl.cc:17460 #, gcc-internal-format msgid "recursive type %qT undefined" msgstr "" -#: cp/decl.cc:17460 +#: cp/decl.cc:17462 #, gcc-internal-format msgid "duplicate base type %qT invalid" msgstr "" -#: cp/decl.cc:17618 +#: cp/decl.cc:17620 #, gcc-internal-format msgid "scoped/unscoped mismatch in enum %q#T" msgstr "" -#: cp/decl.cc:17621 cp/decl.cc:17630 cp/decl.cc:17641 cp/decl.cc:18242 +#: cp/decl.cc:17623 cp/decl.cc:17632 cp/decl.cc:17643 cp/decl.cc:18244 #: cp/parser.cc:22331 #, gcc-internal-format msgid "previous definition here" msgstr "" -#: cp/decl.cc:17627 +#: cp/decl.cc:17629 #, gcc-internal-format msgid "underlying type mismatch in enum %q#T" msgstr "" -#: cp/decl.cc:17638 +#: cp/decl.cc:17640 #, gcc-internal-format msgid "different underlying type in enum %q#T" msgstr "" -#: cp/decl.cc:17713 +#: cp/decl.cc:17715 #, gcc-internal-format msgid "underlying type %qT of %qT must be an integral type" msgstr "" @@ -62699,83 +62700,83 @@ msgstr "" #. #. IF no integral type can represent all the enumerator values, the #. enumeration is ill-formed. -#: cp/decl.cc:17862 +#: cp/decl.cc:17864 #, gcc-internal-format msgid "no integral type can represent all of the enumerator values for %qT" msgstr "" -#: cp/decl.cc:18049 +#: cp/decl.cc:18051 #, gcc-internal-format msgid "" "enumerator value for %qD must have integral or unscoped enumeration type" msgstr "" -#: cp/decl.cc:18059 +#: cp/decl.cc:18061 #, gcc-internal-format msgid "enumerator value for %qD is not an integer constant" msgstr "" -#: cp/decl.cc:18108 +#: cp/decl.cc:18110 #, gcc-internal-format msgid "incremented enumerator value is too large for %<unsigned long%>" msgstr "" -#: cp/decl.cc:18109 +#: cp/decl.cc:18111 #, gcc-internal-format msgid "incremented enumerator value is too large for %<long%>" msgstr "" -#: cp/decl.cc:18120 +#: cp/decl.cc:18122 #, gcc-internal-format msgid "overflow in enumeration values at %qD" msgstr "" -#: cp/decl.cc:18140 +#: cp/decl.cc:18142 #, gcc-internal-format msgid "enumerator value %qE is outside the range of underlying type %qT" msgstr "" -#: cp/decl.cc:18240 cp/parser.cc:22329 +#: cp/decl.cc:18242 cp/parser.cc:22329 #, gcc-internal-format msgid "multiple definition of %q#T" msgstr "" -#: cp/decl.cc:18314 +#: cp/decl.cc:18316 #, gcc-internal-format msgid "return type %q#T is incomplete" msgstr "" -#: cp/decl.cc:18481 cp/typeck.cc:11344 +#: cp/decl.cc:18483 cp/typeck.cc:11344 #, gcc-internal-format msgid "%<operator=%> should return a reference to %<*this%>" msgstr "" -#: cp/decl.cc:19300 +#: cp/decl.cc:19302 #, gcc-internal-format msgid "no return statements in function returning %qT" msgstr "" -#: cp/decl.cc:19302 cp/typeck.cc:11222 +#: cp/decl.cc:19304 cp/typeck.cc:11222 #, gcc-internal-format msgid "only plain %<auto%> return type can be deduced to %<void%>" msgstr "" -#: cp/decl.cc:19358 +#: cp/decl.cc:19360 #, gcc-internal-format msgid "no return statement in %<constexpr%> function returning non-void" msgstr "" -#: cp/decl.cc:19549 +#: cp/decl.cc:19551 #, gcc-internal-format msgid "%qD is already defined in class %qT" msgstr "" -#: cp/decl.cc:19946 +#: cp/decl.cc:19949 #, gcc-internal-format msgid "using %qs" msgstr "" -#: cp/decl.cc:19958 +#: cp/decl.cc:19961 #, gcc-internal-format msgid "use of %qD before deduction of %<auto%>" msgstr "" @@ -63205,145 +63206,280 @@ msgstr "" msgid "use of built-in parameter pack %qD outside of a template" msgstr "" -#: cp/error.cc:4305 +#: cp/error.cc:3791 +msgid " inlined from %qD at %r%s:%d:%d%R" +msgstr "" + +#: cp/error.cc:3796 +msgid " inlined from %qD at %r%s:%d%R" +msgstr "" + +#: cp/error.cc:3802 +#, gcc-internal-format +msgid " inlined from %qD" +msgstr "" + +#: cp/error.cc:3828 +#, gcc-internal-format +msgid "In static member function %qD" +msgstr "" + +#: cp/error.cc:3830 +#, gcc-internal-format +msgid "In copy constructor %qD" +msgstr "" + +#: cp/error.cc:3832 +#, gcc-internal-format +msgid "In constructor %qD" +msgstr "" + +#: cp/error.cc:3834 +#, gcc-internal-format +msgid "In destructor %qD" +msgstr "" + +#: cp/error.cc:3836 +#, gcc-internal-format +msgid "In lambda function" +msgstr "" + +#: cp/error.cc:3838 +#, gcc-internal-format +msgid "In explicit object member function %qD" +msgstr "" + +#: cp/error.cc:3840 +#, gcc-internal-format +msgid "In member function %qD" +msgstr "" + +#: cp/error.cc:3843 +#, gcc-internal-format +msgid "In function %qD" +msgstr "" + +#: cp/error.cc:3870 +msgid "%s%s%sIn substitution of %qS:\n" +msgstr "" + +#: cp/error.cc:3871 +#, gcc-internal-format +msgid "%s%s%sIn instantiation of %q#D:\n" +msgstr "" + +#: cp/error.cc:3891 +msgid "%r%s:%d:%d:%R " +msgstr "" + +#: cp/error.cc:3894 +msgid "%r%s:%d:%R " +msgstr "" + +#: cp/error.cc:3987 +msgid "recursively required by substitution of %qS\n" +msgstr "" + +#: cp/error.cc:3988 +msgid "required by substitution of %qS\n" +msgstr "" + +#: cp/error.cc:3993 +#, gcc-internal-format +msgid "recursively required from %q#D\n" +msgstr "" + +#: cp/error.cc:3994 +#, gcc-internal-format +msgid "required from %q#D\n" +msgstr "" + +#: cp/error.cc:4001 +#, gcc-internal-format +msgid "recursively required from here\n" +msgstr "" + +#: cp/error.cc:4002 +#, gcc-internal-format +msgid "required from here\n" +msgstr "" + +#: cp/error.cc:4052 +#, gcc-internal-format, gfc-internal-format +msgid "" +"[ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to " +"disable ]\n" +msgstr "" + +#: cp/error.cc:4104 +#, gcc-internal-format +msgid "in %<constexpr%> expansion of %qs" +msgstr "" + +#: cp/error.cc:4117 +#, gcc-internal-format +msgid "required by the constraints of %q#D\n" +msgstr "" + +#: cp/error.cc:4132 +#, gcc-internal-format +msgid "required for the satisfaction of %qE" +msgstr "" + +#: cp/error.cc:4154 +#, gcc-internal-format +msgid "required for constraint satisfaction\n" +msgstr "" + +#: cp/error.cc:4185 +#, gcc-internal-format +msgid "in requirements with " +msgstr "" + +#: cp/error.cc:4186 +#, gcc-internal-format +msgid "in requirements " +msgstr "" + +#: cp/error.cc:4304 #, gcc-internal-format msgid "(no argument)" msgstr "" -#: cp/error.cc:4399 +#: cp/error.cc:4398 #, gcc-internal-format msgid "[...]" msgstr "" -#: cp/error.cc:4751 +#: cp/error.cc:4750 #, gcc-internal-format msgid "" "extended initializer lists only available with %<-std=c++11%> or %<-std=gnu+" "+11%>" msgstr "" -#: cp/error.cc:4756 +#: cp/error.cc:4755 #, gcc-internal-format msgid "" "explicit conversion operators only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4761 +#: cp/error.cc:4760 #, gcc-internal-format msgid "" "variadic templates only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4766 +#: cp/error.cc:4765 #, gcc-internal-format msgid "" "lambda expressions only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4771 +#: cp/error.cc:4770 #, gcc-internal-format msgid "C++11 auto only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4776 +#: cp/error.cc:4775 #, gcc-internal-format msgid "scoped enums only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4781 +#: cp/error.cc:4780 #, gcc-internal-format msgid "" "defaulted and deleted functions only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4787 +#: cp/error.cc:4786 #, gcc-internal-format msgid "" "inline namespaces only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4792 +#: cp/error.cc:4791 #, gcc-internal-format msgid "" "override controls (override/final) only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4797 +#: cp/error.cc:4796 #, gcc-internal-format msgid "" "non-static data member initializers only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4802 +#: cp/error.cc:4801 #, gcc-internal-format msgid "" "user-defined literals only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4807 +#: cp/error.cc:4806 #, gcc-internal-format msgid "" "delegating constructors only available with %<-std=c++11%> or %<-std=gnu+" "+11%>" msgstr "" -#: cp/error.cc:4812 +#: cp/error.cc:4811 #, gcc-internal-format msgid "" "inheriting constructors only available with %<-std=c++11%> or %<-std=gnu+" "+11%>" msgstr "" -#: cp/error.cc:4818 +#: cp/error.cc:4817 #, gcc-internal-format msgid "C++11 attributes only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4823 +#: cp/error.cc:4822 #, gcc-internal-format msgid "ref-qualifiers only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4876 +#: cp/error.cc:4875 #, gcc-internal-format msgid "incomplete type %qT used in nested name specifier" msgstr "" -#: cp/error.cc:4881 +#: cp/error.cc:4880 #, gcc-internal-format msgid "reference to %<%T::%D%> is ambiguous" msgstr "" -#: cp/error.cc:4896 +#: cp/error.cc:4895 #, gcc-internal-format msgid "%qD is not a member of %qT; did you mean %qs?" msgstr "" -#: cp/error.cc:4900 cp/typeck.cc:2897 +#: cp/error.cc:4899 cp/typeck.cc:2897 #, gcc-internal-format msgid "%qD is not a member of %qT" msgstr "" -#: cp/error.cc:4922 +#: cp/error.cc:4921 #, gcc-internal-format msgid "%qD is not a member of %qD; did you mean %qs?" msgstr "" -#: cp/error.cc:4926 cp/typeck.cc:3492 +#: cp/error.cc:4925 cp/typeck.cc:3492 #, gcc-internal-format msgid "%qD is not a member of %qD" msgstr "" -#: cp/error.cc:4937 +#: cp/error.cc:4936 #, gcc-internal-format msgid "%<::%D%> has not been declared; did you mean %qs?" msgstr "" -#: cp/error.cc:4941 +#: cp/error.cc:4940 #, gcc-internal-format msgid "%<::%D%> has not been declared" msgstr "" @@ -63683,7 +63819,7 @@ msgstr "" msgid "type %qT is not a direct base of %qT" msgstr "" -#: cp/init.cc:2376 cp/semantics.cc:4430 rust/backend/rust-tree.cc:4155 +#: cp/init.cc:2376 cp/semantics.cc:4434 rust/backend/rust-tree.cc:4155 #, gcc-internal-format msgid "%qT is not a class type" msgstr "" @@ -63703,7 +63839,7 @@ msgstr "" msgid "invalid use of non-static member function %qD" msgstr "" -#: cp/init.cc:2541 cp/semantics.cc:2752 +#: cp/init.cc:2541 cp/semantics.cc:2755 #, gcc-internal-format msgid "invalid use of non-static data member %qD" msgstr "" @@ -64026,24 +64162,29 @@ msgstr "" msgid "%qD not defined" msgstr "" -#: cp/lex.cc:763 +#: cp/lex.cc:753 cp/parser.cc:3922 cp/parser.cc:32272 +#, gcc-internal-format +msgid "%<requires%> only available with %<-std=c++20%> or %<-fconcepts%>" +msgstr "" + +#: cp/lex.cc:766 #, gcc-internal-format msgid "%qD was not declared in this scope; did you mean %qs?" msgstr "" -#: cp/lex.cc:767 +#: cp/lex.cc:770 #, gcc-internal-format msgid "%qD was not declared in this scope" msgstr "" -#: cp/lex.cc:810 +#: cp/lex.cc:813 #, gcc-internal-format msgid "" "there are no arguments to %qD that depend on a template parameter, so a " "declaration of %qD must be available" msgstr "" -#: cp/lex.cc:819 +#: cp/lex.cc:822 #, gcc-internal-format msgid "" "(if you use %<-fpermissive%>, G++ will accept your code, but allowing the " @@ -64055,12 +64196,12 @@ msgstr "" msgid " # %E" msgstr "" -#: cp/mangle.cc:2663 +#: cp/mangle.cc:2669 #, gcc-internal-format msgid "mangling %<typeof%>, use %<decltype%> instead" msgstr "" -#: cp/mangle.cc:2667 +#: cp/mangle.cc:2673 #, gcc-internal-format msgid "" "use of built-in trait %qT in function signature; use library traits instead" @@ -64068,61 +64209,61 @@ msgstr "" #. TODO Mangle pack indexing #. <https://github.com/itanium-cxx-abi/cxx-abi/issues/175>. -#: cp/mangle.cc:2674 +#: cp/mangle.cc:2680 #, gcc-internal-format msgid "mangling type pack index" msgstr "" -#: cp/mangle.cc:3887 +#: cp/mangle.cc:3893 #, gcc-internal-format msgid "" "use of built-in trait %qE in function signature; use library traits instead" msgstr "" -#: cp/mangle.cc:3892 +#: cp/mangle.cc:3898 #, gcc-internal-format, gfc-internal-format msgid "mangling %C" msgstr "" -#: cp/mangle.cc:3966 +#: cp/mangle.cc:3972 #, gcc-internal-format msgid "omitted middle operand to %<?:%> operand cannot be mangled" msgstr "" -#: cp/mangle.cc:4539 +#: cp/mangle.cc:4545 #, gcc-internal-format msgid "" "mangled name for %qD will change in C++17 because the exception " "specification is part of a function type" msgstr "" -#: cp/mangle.cc:4585 cp/mangle.cc:4764 +#: cp/mangle.cc:4591 cp/mangle.cc:4770 #, gcc-internal-format msgid "" "the mangled name of %qD changed between %<%s=%d%> (%qD) and %<%s=%d%> (%qD)" msgstr "" -#: cp/mangle.cc:4591 cp/mangle.cc:4770 +#: cp/mangle.cc:4597 cp/mangle.cc:4776 #, gcc-internal-format msgid "" "the mangled name of %qD changes between %<%s=%d%> (%qD) and %<%s=%d%> (%qD)" msgstr "" -#: cp/mangle.cc:4917 +#: cp/mangle.cc:4923 #, gcc-internal-format msgid "" "the mangled name of a thunk for %qD changes between %<-fabi-version=%d%> and " "%<-fabi-version=%d%>" msgstr "" -#: cp/mangle.cc:4922 +#: cp/mangle.cc:4928 #, gcc-internal-format msgid "" "the mangled name of %qD changes between %<-fabi-version=%d%> and %<-fabi-" "version=%d%>" msgstr "" -#: cp/mangle.cc:4927 +#: cp/mangle.cc:4933 #, gcc-internal-format msgid "" "the mangled name of the initialization guard variable for %qD changes " @@ -64451,405 +64592,440 @@ msgstr "" msgid "unable to represent further imported source locations" msgstr "" -#: cp/module.cc:12041 +#: cp/module.cc:12044 #, gcc-internal-format msgid "mismatching abi tags for %qD with tags %qE" msgstr "" -#: cp/module.cc:12045 +#: cp/module.cc:12048 #, gcc-internal-format msgid "mismatching abi tags for %qD with no tags" msgstr "" -#: cp/module.cc:12048 +#: cp/module.cc:12051 #, gcc-internal-format msgid "existing declaration here with tags %qE" msgstr "" -#: cp/module.cc:12051 +#: cp/module.cc:12054 #, gcc-internal-format msgid "existing declaration here with no tags" msgstr "" -#: cp/module.cc:12193 +#: cp/module.cc:12105 cp/module.cc:12229 +#, gcc-internal-format +msgid "conflicting type for imported declaration %#qD" +msgstr "" + +#: cp/module.cc:12114 #, gcc-internal-format -msgid "conflicting global module declaration %#qD" +msgid "conflicting language linkage for imported declaration %#qD" msgstr "" -#: cp/module.cc:12195 +#: cp/module.cc:12126 +#, gcc-internal-format +msgid "conflicting argument list for imported declaration %#qD" +msgstr "" + +#: cp/module.cc:12133 +#, gcc-internal-format +msgid "conflicting argument types for imported declaration %#qD" +msgstr "" + +#: cp/module.cc:12171 +#, gcc-internal-format +msgid "conflicting %<noexcept%> specifier for imported declaration %#qD" +msgstr "" + +#: cp/module.cc:12189 +#, gcc-internal-format +msgid "conflicting deduced return type for imported declaration %#qD" +msgstr "" + +#: cp/module.cc:12204 +#, gcc-internal-format +msgid "conflicting %<constexpr%> for imported declaration %#qD" +msgstr "" + +#: cp/module.cc:12220 +#, gcc-internal-format +msgid "conflicting imported declaration %q#D" +msgstr "" + +#: cp/module.cc:12246 #, gcc-internal-format msgid "existing declaration %#qD" msgstr "" -#: cp/module.cc:12298 +#: cp/module.cc:12349 #, gcc-internal-format msgid "conflicting default argument for %#qD" msgstr "" -#: cp/module.cc:12300 cp/module.cc:12327 +#: cp/module.cc:12351 cp/module.cc:12378 #, gcc-internal-format msgid "existing default declared here" msgstr "" -#: cp/module.cc:12324 +#: cp/module.cc:12375 #, gcc-internal-format msgid "conflicting default argument for parameter %P of %#qD" msgstr "" -#: cp/module.cc:13383 +#: cp/module.cc:13434 #, gcc-internal-format msgid "definition of %qD does not match" msgstr "" -#: cp/module.cc:13385 +#: cp/module.cc:13436 #, gcc-internal-format msgid "existing definition %qD" msgstr "" -#: cp/module.cc:13397 +#: cp/module.cc:13448 #, gcc-internal-format msgid "enumerator %qD does not match ..." msgstr "" -#: cp/module.cc:13399 +#: cp/module.cc:13450 #, gcc-internal-format msgid "... this enumerator %qD" msgstr "" -#: cp/module.cc:13405 +#: cp/module.cc:13456 #, gcc-internal-format msgid "additional enumerators beginning with %qD" msgstr "" -#: cp/module.cc:13409 +#: cp/module.cc:13460 #, gcc-internal-format msgid "enumeration range differs" msgstr "" -#: cp/module.cc:13622 +#: cp/module.cc:13673 #, gcc-internal-format msgid "%qD is an alias of TU-local type %qT" msgstr "" -#: cp/module.cc:13640 +#: cp/module.cc:13691 #, gcc-internal-format msgid "%qD is a specialization of TU-local template %qD" msgstr "" -#: cp/module.cc:13664 +#: cp/module.cc:13715 #, gcc-internal-format msgid "%qD declared with internal linkage" msgstr "" -#: cp/module.cc:13682 +#: cp/module.cc:13733 #, gcc-internal-format msgid "%qD has no linkage and is declared in an anonymous namespace" msgstr "" -#: cp/module.cc:13694 +#: cp/module.cc:13745 #, gcc-internal-format msgid "%qD has no linkage and is declared within TU-local entity %qT" msgstr "" -#: cp/module.cc:13705 +#: cp/module.cc:13756 #, gcc-internal-format msgid "%qD has no linkage and is declared within TU-local entity %qD" msgstr "" -#: cp/module.cc:13737 +#: cp/module.cc:13788 #, gcc-internal-format msgid "" "%qT has no name and cannot be differentiated from similar lambdas in other " "TUs" msgstr "" -#: cp/module.cc:13746 +#: cp/module.cc:13797 #, gcc-internal-format msgid "" "%qT has no name and is not defined within a class, function, or initializer" msgstr "" -#: cp/module.cc:13782 +#: cp/module.cc:13833 #, gcc-internal-format msgid "%qD has TU-local template argument %qD" msgstr "" -#: cp/module.cc:13794 +#: cp/module.cc:13845 #, gcc-internal-format msgid "%qD has TU-local template argument %qT" msgstr "" -#: cp/module.cc:13846 +#: cp/module.cc:13897 #, gcc-internal-format msgid "%qD refers to TU-local object %qD" msgstr "" -#: cp/module.cc:13848 +#: cp/module.cc:13899 #, gcc-internal-format msgid "%qD refers to TU-local function %qD" msgstr "" -#: cp/module.cc:14970 +#: cp/module.cc:15021 #, gcc-internal-format msgid "%qD exposes TU-local entity %qD" msgstr "" -#: cp/module.cc:14981 +#: cp/module.cc:15032 #, gcc-internal-format msgid "%qD is declared %<constexpr%> and is initialized to a TU-local value" msgstr "" -#: cp/module.cc:15019 +#: cp/module.cc:15070 #, gcc-internal-format msgid "" "%qD refers to TU-local entity %qD and cannot be instantiated in other TUs" msgstr "" -#: cp/module.cc:15616 +#: cp/module.cc:15667 #, gcc-internal-format msgid "recursive lazy load" msgstr "" -#: cp/module.cc:15636 +#: cp/module.cc:15687 #, gcc-internal-format msgid "cannot import module in its own purview" msgstr "" -#: cp/module.cc:15637 cp/module.cc:21219 +#: cp/module.cc:15688 cp/module.cc:21270 #, gcc-internal-format msgid "module %qs declared here" msgstr "" -#: cp/module.cc:15986 +#: cp/module.cc:16037 #, gcc-internal-format msgid "indirect import %qs is not already loaded" msgstr "" -#: cp/module.cc:15992 +#: cp/module.cc:16043 #, gcc-internal-format msgid "import %qs has CRC mismatch" msgstr "" -#: cp/module.cc:18759 +#: cp/module.cc:18810 #, gcc-internal-format msgid "not exporting %<#define %E%> as it is a keyword" msgstr "" -#: cp/module.cc:18999 +#: cp/module.cc:19050 #, gcc-internal-format msgid "macro definitions of %qE corrupted" msgstr "" -#: cp/module.cc:19024 cp/module.cc:19027 +#: cp/module.cc:19075 cp/module.cc:19078 #, gcc-internal-format msgid "inconsistent imported macro definition %qE" msgstr "" -#: cp/module.cc:19033 +#: cp/module.cc:19084 #, gcc-internal-format msgid "%<#undef %E%>" msgstr "" -#: cp/module.cc:19035 +#: cp/module.cc:19086 #, gcc-internal-format msgid "%<#define %s%>" msgstr "" -#: cp/module.cc:19367 +#: cp/module.cc:19418 #, gcc-internal-format msgid "compiled module file is %qs" msgstr "" -#: cp/module.cc:19405 cp/module.cc:19410 +#: cp/module.cc:19456 cp/module.cc:19461 #, gcc-internal-format, gfc-internal-format msgid "compiled module is %sversion %s" msgstr "" -#: cp/module.cc:19416 +#: cp/module.cc:19467 #, gcc-internal-format, gfc-internal-format msgid "compiler is %sversion %s%s%s" msgstr "" -#: cp/module.cc:19446 +#: cp/module.cc:19497 #, gcc-internal-format msgid "module %qs found" msgstr "" -#: cp/module.cc:19448 +#: cp/module.cc:19499 #, gcc-internal-format msgid "header module expected, module %qs found" msgstr "" -#: cp/module.cc:19449 +#: cp/module.cc:19500 #, gcc-internal-format msgid "module %qs expected, header module found" msgstr "" -#: cp/module.cc:19464 +#: cp/module.cc:19515 #, gcc-internal-format msgid "module %qs CRC mismatch" msgstr "" -#: cp/module.cc:19478 +#: cp/module.cc:19529 #, gcc-internal-format msgid "target & host is %qs:%qs, expected %qs:%qs" msgstr "" -#: cp/module.cc:19490 +#: cp/module.cc:19541 #, gcc-internal-format msgid "language dialect differs %qs, expected %qs" msgstr "" -#: cp/module.cc:19510 +#: cp/module.cc:19561 #, gcc-internal-format msgid "module contains OpenMP, use %<-fopenmp%> to enable" msgstr "" -#: cp/module.cc:19512 +#: cp/module.cc:19563 #, gcc-internal-format msgid "module contains OpenMP, use %<-fopenmp%> or %<-fopenmp-simd%> to enable" msgstr "" -#: cp/module.cc:19515 +#: cp/module.cc:19566 #, gcc-internal-format msgid "module contains OpenACC, use %<-fopenacc%> to enable" msgstr "" -#: cp/module.cc:19533 +#: cp/module.cc:19584 #, gcc-internal-format msgid "fixed tree mismatch" msgstr "" -#: cp/module.cc:19624 +#: cp/module.cc:19675 #, gcc-internal-format msgid "interface partition is not exported" msgstr "" -#: cp/module.cc:20181 +#: cp/module.cc:20232 #, gcc-internal-format, gfc-internal-format msgid "failed to read compiled module cluster %u: %s" msgstr "" -#: cp/module.cc:20220 +#: cp/module.cc:20271 #, gcc-internal-format, gfc-internal-format msgid "failed to read compiled module: %s" msgstr "" -#: cp/module.cc:20230 +#: cp/module.cc:20281 #, gcc-internal-format msgid "" "consider using %<-fno-module-lazy%>, increasing %<-param-lazy-modules=%u%> " "value, or increasing the per-process file descriptor limit" msgstr "" -#: cp/module.cc:20235 +#: cp/module.cc:20286 #, gcc-internal-format msgid "imports must be built before being imported" msgstr "" -#: cp/module.cc:20238 +#: cp/module.cc:20289 #, gcc-internal-format msgid "returning to the gate for a mechanical issue" msgstr "" -#: cp/module.cc:20559 +#: cp/module.cc:20610 #, gcc-internal-format msgid "declaring %qD in module %qs conflicts with builtin in global module" msgstr "" -#: cp/module.cc:20562 +#: cp/module.cc:20613 #, gcc-internal-format msgid "declaration %qD conflicts with builtin" msgstr "" -#: cp/module.cc:20568 +#: cp/module.cc:20619 #, gcc-internal-format msgid "redeclaring %qD in module %qs conflicts with import" msgstr "" -#: cp/module.cc:20571 +#: cp/module.cc:20622 #, gcc-internal-format msgid "redeclaring %qD in global module conflicts with import" msgstr "" -#: cp/module.cc:20576 +#: cp/module.cc:20627 #, gcc-internal-format msgid "import declared attached to module %qs" msgstr "" -#: cp/module.cc:20580 +#: cp/module.cc:20631 #, gcc-internal-format msgid "import declared in global module" msgstr "" -#: cp/module.cc:20586 +#: cp/module.cc:20637 #, gcc-internal-format msgid "conflicting declaration of %qD in module %qs" msgstr "" -#: cp/module.cc:20589 +#: cp/module.cc:20640 #, gcc-internal-format msgid "conflicting declaration of %qD in global module" msgstr "" -#: cp/module.cc:20594 +#: cp/module.cc:20645 #, gcc-internal-format msgid "previously declared in module %qs" msgstr "" -#: cp/module.cc:20598 +#: cp/module.cc:20649 #, gcc-internal-format msgid "previously declared in global module" msgstr "" -#: cp/module.cc:20737 +#: cp/module.cc:20788 #, gcc-internal-format msgid "" "external linkage definition of %qD in header module must be declared " "%<inline%>" msgstr "" -#: cp/module.cc:20752 +#: cp/module.cc:20803 #, gcc-internal-format msgid "exporting declaration %qD declared in unnamed namespace" msgstr "" -#: cp/module.cc:20759 +#: cp/module.cc:20810 #, gcc-internal-format msgid "exporting declaration %qD with internal linkage" msgstr "" -#: cp/module.cc:20912 +#: cp/module.cc:20963 #, gcc-internal-format msgid "reading CMI %qs" msgstr "" -#: cp/module.cc:21063 +#: cp/module.cc:21114 #, gcc-internal-format msgid "failed to load binding %<%E%s%E%>" msgstr "" -#: cp/module.cc:21064 +#: cp/module.cc:21115 #, gcc-internal-format msgid "failed to load binding %<%E%s%E@%s%>" msgstr "" -#: cp/module.cc:21071 +#: cp/module.cc:21122 #, gcc-internal-format msgid "during load of binding %<%E%s%E%>" msgstr "" -#: cp/module.cc:21072 +#: cp/module.cc:21123 #, gcc-internal-format msgid "during load of binding %<%E%s%E@%s%>" msgstr "" -#: cp/module.cc:21134 +#: cp/module.cc:21185 #, gcc-internal-format msgid "failed to load pendings for %<%E%s%E%>" msgstr "" -#: cp/module.cc:21138 +#: cp/module.cc:21189 #, gcc-internal-format msgid "during load of pendings for %<%E%s%E%>" msgstr "" @@ -64861,102 +65037,102 @@ msgstr "" #. module, so we don't want to confuse things by having to think #. about whether 'extern "C++" { import foo; }' puts foo's #. contents into the global module all of a sudden. -#: cp/module.cc:21183 +#: cp/module.cc:21234 #, gcc-internal-format msgid "import of named module %qs inside language-linkage block" msgstr "" -#: cp/module.cc:21214 +#: cp/module.cc:21265 #, gcc-internal-format msgid "module already declared" msgstr "" -#: cp/module.cc:21215 +#: cp/module.cc:21266 #, gcc-internal-format msgid "module already imported" msgstr "" -#: cp/module.cc:21220 +#: cp/module.cc:21271 #, gcc-internal-format msgid "module %qs imported here" msgstr "" -#: cp/module.cc:21428 +#: cp/module.cc:21479 #, gcc-internal-format msgid "mismatching compiled module interface: had %qs, got %qs" msgstr "" -#: cp/module.cc:21434 +#: cp/module.cc:21485 #, gcc-internal-format, gfc-internal-format msgid "unknown compiled module interface: %s" msgstr "" -#: cp/module.cc:21478 +#: cp/module.cc:21529 #, gcc-internal-format msgid "cannot determine %<#include%> translation of %s: %s" msgstr "" -#: cp/module.cc:21496 +#: cp/module.cc:21547 #, gcc-internal-format msgid "include %qs translated to import" msgstr "" -#: cp/module.cc:21497 +#: cp/module.cc:21548 #, gcc-internal-format msgid "include %qs processed textually" msgstr "" -#: cp/module.cc:21857 +#: cp/module.cc:21908 #, gcc-internal-format msgid "C++ modules are incompatible with precompiled headers" msgstr "" -#: cp/module.cc:21861 +#: cp/module.cc:21912 #, gcc-internal-format msgid "C++ modules are incompatible with traditional preprocessing" msgstr "" -#: cp/module.cc:21893 cp/module.cc:21922 +#: cp/module.cc:21944 cp/module.cc:21973 #, gcc-internal-format msgid "invalid header name %qs" msgstr "" -#: cp/module.cc:21932 +#: cp/module.cc:21983 #, gcc-internal-format msgid "invalid module name %qs" msgstr "" -#: cp/module.cc:22132 +#: cp/module.cc:22183 #, gcc-internal-format msgid "%<-fmodule-only%> used for non-interface" msgstr "" -#: cp/module.cc:22172 +#: cp/module.cc:22223 #, gcc-internal-format msgid "writing CMI %qs" msgstr "" -#: cp/module.cc:22187 +#: cp/module.cc:22238 #, gcc-internal-format msgid "not writing module %qs due to errors in template bodies" msgstr "" -#: cp/module.cc:22190 +#: cp/module.cc:22241 #, gcc-internal-format msgid "enable %<-Wtemplate-body%> for more details" msgstr "" -#: cp/module.cc:22192 +#: cp/module.cc:22243 #, gcc-internal-format msgid "first error in %qD appeared here" msgstr "" -#: cp/module.cc:22256 +#: cp/module.cc:22307 #, gcc-internal-format, gfc-internal-format msgid "failed to write compiled module: %s" msgstr "" -#: cp/module.cc:22353 +#: cp/module.cc:22404 #, gcc-internal-format msgid "unknown header kind %qs" msgstr "" @@ -65013,259 +65189,259 @@ msgstr "" msgid "friend declaration %qD in local class without prior local declaration" msgstr "" -#: cp/name-lookup.cc:4653 +#: cp/name-lookup.cc:4654 #, gcc-internal-format msgid "%s %<%s(%E)%> %p %d" msgstr "" -#: cp/name-lookup.cc:4656 +#: cp/name-lookup.cc:4657 #, gcc-internal-format msgid "%s %s %p %d" msgstr "" -#: cp/name-lookup.cc:5250 +#: cp/name-lookup.cc:5253 #, gcc-internal-format msgid "exporting %q#D that does not have external linkage" msgstr "" -#: cp/name-lookup.cc:5254 +#: cp/name-lookup.cc:5257 #, gcc-internal-format msgid "%q#D declared here with no linkage" msgstr "" -#: cp/name-lookup.cc:5257 +#: cp/name-lookup.cc:5260 #, gcc-internal-format msgid "%q#D declared here with internal linkage" msgstr "" -#: cp/name-lookup.cc:5260 +#: cp/name-lookup.cc:5263 #, gcc-internal-format msgid "%q#D declared here with module linkage" msgstr "" -#: cp/name-lookup.cc:6068 +#: cp/name-lookup.cc:6071 #, gcc-internal-format msgid "%<%T%s%D%> names destructor" msgstr "" -#: cp/name-lookup.cc:6084 +#: cp/name-lookup.cc:6087 #, gcc-internal-format msgid "using-declaration for non-member at class scope" msgstr "" -#: cp/name-lookup.cc:6092 +#: cp/name-lookup.cc:6095 #, gcc-internal-format msgid "" "%<using%> with enumeration scope %q#T only available with %<-std=c++20%> or " "%<-std=gnu++20%>" msgstr "" -#: cp/name-lookup.cc:6108 cp/pt.cc:18889 +#: cp/name-lookup.cc:6111 cp/pt.cc:18933 #, gcc-internal-format msgid "%qT is not a class, namespace, or enumeration" msgstr "" -#: cp/name-lookup.cc:6118 +#: cp/name-lookup.cc:6121 #, gcc-internal-format msgid "non-member using-declaration names constructor of %qT" msgstr "" -#: cp/name-lookup.cc:6129 cp/name-lookup.cc:6202 +#: cp/name-lookup.cc:6132 cp/name-lookup.cc:6205 #, gcc-internal-format msgid "using-declaration for member at non-class scope" msgstr "" -#: cp/name-lookup.cc:6152 +#: cp/name-lookup.cc:6155 #, gcc-internal-format msgid "%qT is not a direct base of %qT" msgstr "" -#: cp/name-lookup.cc:6212 +#: cp/name-lookup.cc:6215 #, gcc-internal-format msgid "did you mean %<using enum %T::%D%>?" msgstr "" -#: cp/name-lookup.cc:6224 +#: cp/name-lookup.cc:6227 #, gcc-internal-format msgid "%qD has not been declared in %qD" msgstr "" -#: cp/name-lookup.cc:6239 +#: cp/name-lookup.cc:6242 #, gcc-internal-format msgid "using-declaration may not name namespace %qD" msgstr "" -#: cp/name-lookup.cc:6250 +#: cp/name-lookup.cc:6253 #, gcc-internal-format msgid "%<%T::%D%> names constructor in %qT" msgstr "" -#: cp/name-lookup.cc:6343 +#: cp/name-lookup.cc:6346 #, gcc-internal-format msgid "declaration of %qD not in a namespace surrounding %qD" msgstr "" -#: cp/name-lookup.cc:6385 +#: cp/name-lookup.cc:6388 #, gcc-internal-format msgid "explicit qualification in declaration of %qD" msgstr "" -#: cp/name-lookup.cc:6395 +#: cp/name-lookup.cc:6398 #, gcc-internal-format msgid "%qD should have been declared inside %qD" msgstr "" -#: cp/name-lookup.cc:6465 +#: cp/name-lookup.cc:6468 #, gcc-internal-format msgid "%qD has not been declared within %qD" msgstr "" -#: cp/name-lookup.cc:6467 +#: cp/name-lookup.cc:6470 #, gcc-internal-format msgid "only here as a %<friend%>" msgstr "" -#: cp/name-lookup.cc:6521 +#: cp/name-lookup.cc:6524 #, gcc-internal-format msgid "%qD attribute requires a single NTBS argument" msgstr "" -#: cp/name-lookup.cc:6528 +#: cp/name-lookup.cc:6531 #, gcc-internal-format msgid "" "%qD attribute is meaningless since members of the anonymous namespace get " "local symbols" msgstr "" -#: cp/name-lookup.cc:6538 cp/name-lookup.cc:6565 +#: cp/name-lookup.cc:6541 cp/name-lookup.cc:6568 #, gcc-internal-format msgid "ignoring %qD attribute on anonymous namespace" msgstr "" -#: cp/name-lookup.cc:6544 +#: cp/name-lookup.cc:6547 #, gcc-internal-format msgid "ignoring %qD attribute on non-inline namespace" msgstr "" -#: cp/name-lookup.cc:6581 cp/name-lookup.cc:9002 +#: cp/name-lookup.cc:6584 cp/name-lookup.cc:9005 #, gcc-internal-format msgid "%qD attribute directive ignored" msgstr "" -#: cp/name-lookup.cc:6910 +#: cp/name-lookup.cc:6913 #, gcc-internal-format msgid "maximum limit of %d namespaces searched for %qE" msgstr "" -#: cp/name-lookup.cc:6962 +#: cp/name-lookup.cc:6965 #, gcc-internal-format msgid "suggested alternative:" msgid_plural "suggested alternatives:" msgstr[0] "" msgstr[1] "" -#: cp/name-lookup.cc:6968 +#: cp/name-lookup.cc:6971 #, gcc-internal-format msgid " %qE" msgstr "" -#: cp/name-lookup.cc:7293 +#: cp/name-lookup.cc:7296 #, gcc-internal-format msgid "" "%<std::%s%> is defined in header %qs; this is probably fixable by adding " "%<#include %s%>" msgstr "" -#: cp/name-lookup.cc:7299 +#: cp/name-lookup.cc:7302 #, gcc-internal-format msgid "%<std::%s%> is only available from %s onwards" msgstr "" -#: cp/name-lookup.cc:7737 +#: cp/name-lookup.cc:7740 #, gcc-internal-format msgid "the macro %qs had not yet been defined" msgstr "" -#: cp/name-lookup.cc:7740 +#: cp/name-lookup.cc:7743 #, gcc-internal-format msgid "it was later defined here" msgstr "" -#: cp/name-lookup.cc:8536 +#: cp/name-lookup.cc:8539 #, gcc-internal-format msgid "" "declaration of %<std::initializer_list%> does not match %<#include " "<initializer_list>%>, isn%'t a template" msgstr "" -#: cp/name-lookup.cc:8974 +#: cp/name-lookup.cc:8977 #, gcc-internal-format msgid "%<strong%> using directive no longer supported" msgstr "" -#: cp/name-lookup.cc:8977 +#: cp/name-lookup.cc:8980 #, gcc-internal-format msgid "you can use an inline namespace instead" msgstr "" -#: cp/name-lookup.cc:8996 +#: cp/name-lookup.cc:8999 #, gcc-internal-format msgid "%<omp::%E%> not allowed to be specified in this context" msgstr "" #. We only allow depth 255. -#: cp/name-lookup.cc:9088 +#: cp/name-lookup.cc:9091 #, gcc-internal-format, gfc-internal-format msgid "cannot nest more than %d namespaces" msgstr "" -#: cp/name-lookup.cc:9190 +#: cp/name-lookup.cc:9193 #, gcc-internal-format msgid "%<namespace %E%> is ambiguous" msgstr "" -#: cp/name-lookup.cc:9206 +#: cp/name-lookup.cc:9209 #, gcc-internal-format msgid "namespace alias %qD not allowed here, assuming %qD" msgstr "" -#: cp/name-lookup.cc:9289 +#: cp/name-lookup.cc:9292 #, gcc-internal-format msgid "exporting namespace %qD with internal linkage" msgstr "" -#: cp/name-lookup.cc:9291 +#: cp/name-lookup.cc:9294 #, gcc-internal-format msgid "" "%qD has internal linkage because it was declared in an unnamed namespace" msgstr "" -#: cp/name-lookup.cc:9295 +#: cp/name-lookup.cc:9298 #, gcc-internal-format msgid "exporting unnamed namespace" msgstr "" -#: cp/name-lookup.cc:9305 +#: cp/name-lookup.cc:9308 #, gcc-internal-format msgid "inline namespace must be specified at initial definition" msgstr "" -#: cp/name-lookup.cc:9355 +#: cp/name-lookup.cc:9358 #, gcc-internal-format msgid "%s namespace %qD conflicts with reachable definition" msgstr "" -#: cp/name-lookup.cc:9357 +#: cp/name-lookup.cc:9360 #, gcc-internal-format, gfc-internal-format msgid "reachable %s definition here" msgstr "" -#: cp/name-lookup.cc:9400 +#: cp/name-lookup.cc:9403 #, gcc-internal-format msgid "XXX entering %<pop_everything ()%>" msgstr "" -#: cp/name-lookup.cc:9409 +#: cp/name-lookup.cc:9412 #, gcc-internal-format msgid "XXX leaving %<pop_everything ()%>" msgstr "" @@ -65290,7 +65466,7 @@ msgstr "" msgid "%<LEXER_DEBUGGING_ENABLED_P%> is not set to true" msgstr "" -#: cp/parser.cc:1724 cp/parser.cc:49640 +#: cp/parser.cc:1724 cp/parser.cc:49645 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> not immediately followed by function declaration " @@ -65572,11 +65748,6 @@ msgstr "" msgid "%<concept%> only available with %<-std=c++20%> or %<-fconcepts%>" msgstr "" -#: cp/parser.cc:3922 cp/parser.cc:32272 -#, gcc-internal-format -msgid "%<requires%> only available with %<-std=c++20%> or %<-fconcepts%>" -msgstr "" - #: cp/parser.cc:3944 #, gcc-internal-format msgid "(perhaps %<typename %T::%E%> was intended)" @@ -65764,7 +65935,7 @@ msgstr "" msgid "fold-expressions only available with %<-std=c++17%> or %<-std=gnu++17%>" msgstr "" -#: cp/parser.cc:6241 cp/parser.cc:6396 cp/parser.cc:6585 cp/semantics.cc:4779 +#: cp/parser.cc:6241 cp/parser.cc:6396 cp/parser.cc:6585 cp/semantics.cc:4783 #, gcc-internal-format msgid "expected primary-expression" msgstr "" @@ -65889,7 +66060,7 @@ msgstr "" msgid "wrong number of arguments to %<__builtin_addressof%>" msgstr "" -#: cp/parser.cc:8002 cp/pt.cc:21478 +#: cp/parser.cc:8002 cp/pt.cc:21522 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_launder%>" msgstr "" @@ -65904,21 +66075,21 @@ msgstr "" msgid "wrong number of arguments to %<__builtin_shufflevector%>" msgstr "" -#: cp/parser.cc:8069 cp/pt.cc:21593 +#: cp/parser.cc:8069 cp/pt.cc:21637 #, gcc-internal-format msgid "" "call to %<__builtin_operator_new%> does not select replaceable global " "allocation function" msgstr "" -#: cp/parser.cc:8073 cp/pt.cc:21597 +#: cp/parser.cc:8073 cp/pt.cc:21641 #, gcc-internal-format msgid "" "call to %<__builtin_operator_delete%> does not select replaceable global " "deallocation function" msgstr "" -#: cp/parser.cc:8078 cp/pt.cc:21602 +#: cp/parser.cc:8078 cp/pt.cc:21646 #, gcc-internal-format msgid "selected function declared here" msgstr "" @@ -65973,7 +66144,7 @@ msgstr "" msgid "%<co_await%> cannot be used in default arguments" msgstr "" -#: cp/parser.cc:9791 cp/parser.cc:34817 +#: cp/parser.cc:9791 cp/parser.cc:34822 #, gcc-internal-format msgid "types may not be defined in %qs expressions" msgstr "" @@ -66140,8 +66311,8 @@ msgstr "" msgid "capture of non-variable %qE" msgstr "" -#: cp/parser.cc:12078 cp/parser.cc:12089 cp/semantics.cc:4618 -#: cp/semantics.cc:4634 +#: cp/parser.cc:12078 cp/parser.cc:12089 cp/semantics.cc:4622 +#: cp/semantics.cc:4638 #, gcc-internal-format msgid "%q#D declared here" msgstr "" @@ -66186,7 +66357,7 @@ msgid "" "with %<-std=c++23%> or %<-std=gnu++23%>" msgstr "" -#: cp/parser.cc:12328 cp/pt.cc:14968 +#: cp/parser.cc:12328 cp/pt.cc:14987 #, gcc-internal-format msgid "" "a lambda with captures may not have an explicit object parameter of an " @@ -66331,7 +66502,7 @@ msgid "" "%<-std=gnu++17%>" msgstr "" -#: cp/parser.cc:14260 cp/parser.cc:35329 +#: cp/parser.cc:14260 cp/parser.cc:35334 #, gcc-internal-format msgid "expected selection-statement" msgstr "" @@ -66399,7 +66570,7 @@ msgid "" "inconsistent begin/end types in range-based %<for%> statement: %qT and %qT" msgstr "" -#: cp/parser.cc:15171 cp/parser.cc:35332 +#: cp/parser.cc:15171 cp/parser.cc:35337 #, gcc-internal-format msgid "expected iteration-statement" msgstr "" @@ -66431,7 +66602,7 @@ msgstr "" msgid "ISO C++ forbids computed gotos" msgstr "" -#: cp/parser.cc:15423 cp/parser.cc:35335 +#: cp/parser.cc:15423 cp/parser.cc:35340 #, gcc-internal-format msgid "expected jump-statement" msgstr "" @@ -66792,12 +66963,12 @@ msgstr "" msgid "cannot expand initializer for member %qD" msgstr "" -#: cp/parser.cc:18185 cp/pt.cc:28232 +#: cp/parser.cc:18185 cp/pt.cc:28283 #, gcc-internal-format msgid "mem-initializer for %qD follows constructor delegation" msgstr "" -#: cp/parser.cc:18197 cp/pt.cc:28244 +#: cp/parser.cc:18197 cp/pt.cc:28295 #, gcc-internal-format msgid "constructor delegation follows mem-initializer for %qD" msgstr "" @@ -67702,7 +67873,7 @@ msgstr "" msgid "unexpanded parameter pack in local class in lambda" msgstr "" -#: cp/parser.cc:28533 cp/parser.cc:35338 +#: cp/parser.cc:28533 cp/parser.cc:35343 #, gcc-internal-format msgid "expected class-key" msgstr "" @@ -67992,14 +68163,14 @@ msgstr "" msgid "named return values are no longer supported" msgstr "" -#: cp/parser.cc:33786 +#: cp/parser.cc:33791 #, gcc-internal-format msgid "" "ISO C++ did not adopt string literal operator templates taking an argument " "pack of characters" msgstr "" -#: cp/parser.cc:33795 +#: cp/parser.cc:33800 #, gcc-internal-format msgid "" "literal operator template %qD has invalid parameter list; expected non-type " @@ -68007,406 +68178,406 @@ msgid "" "type" msgstr "" -#: cp/parser.cc:33801 +#: cp/parser.cc:33806 #, gcc-internal-format msgid "" "literal operator template %qD has invalid parameter list; expected non-type " "template parameter pack %<<char...>%>" msgstr "" -#: cp/parser.cc:33841 +#: cp/parser.cc:33846 #, gcc-internal-format msgid "invalid declaration of member template in local class" msgstr "" -#: cp/parser.cc:33851 +#: cp/parser.cc:33856 #, gcc-internal-format msgid "template with C linkage" msgstr "" -#: cp/parser.cc:33871 +#: cp/parser.cc:33876 #, gcc-internal-format msgid "invalid explicit specialization" msgstr "" -#: cp/parser.cc:33981 +#: cp/parser.cc:33986 #, gcc-internal-format msgid "template declaration of %<typedef%>" msgstr "" -#: cp/parser.cc:34032 +#: cp/parser.cc:34037 #, gcc-internal-format msgid "a class template declaration must not declare anything else" msgstr "" -#: cp/parser.cc:34084 +#: cp/parser.cc:34089 #, gcc-internal-format msgid "explicit template specialization cannot have a storage class" msgstr "" -#: cp/parser.cc:34403 +#: cp/parser.cc:34408 #, gcc-internal-format msgid "%<>>%> should be %<> >%> within a nested template argument list" msgstr "" -#: cp/parser.cc:34416 +#: cp/parser.cc:34421 #, gcc-internal-format msgid "spurious %<>>%>, use %<>%> to terminate a template argument list" msgstr "" -#: cp/parser.cc:34447 +#: cp/parser.cc:34452 #, gcc-internal-format msgid "%qs should be %qs to terminate a template argument list" msgstr "" -#: cp/parser.cc:34764 +#: cp/parser.cc:34769 #, gcc-internal-format msgid "%<sizeof...%> argument must be surrounded by parentheses" msgstr "" -#: cp/parser.cc:34939 +#: cp/parser.cc:34944 #, gcc-internal-format msgid "invalid use of %qD in linkage specification" msgstr "" -#: cp/parser.cc:34951 +#: cp/parser.cc:34956 #, gcc-internal-format msgid "duplicate %qD specifier" msgstr "" -#: cp/parser.cc:34954 +#: cp/parser.cc:34959 #, gcc-internal-format msgid "%qD specifier conflicts with %qs" msgstr "" -#: cp/parser.cc:34966 +#: cp/parser.cc:34971 #, gcc-internal-format msgid "%<__thread%> before %qD" msgstr "" -#: cp/parser.cc:34983 +#: cp/parser.cc:34988 #, gcc-internal-format msgid "%qD specifier conflicts with %<typedef%>" msgstr "" -#: cp/parser.cc:35092 +#: cp/parser.cc:35097 #, gcc-internal-format msgid "ISO C++ 1998 does not support %<long long%>" msgstr "" -#: cp/parser.cc:35103 +#: cp/parser.cc:35108 #, gcc-internal-format msgid "both %<__thread%> and %<thread_local%> specified" msgstr "" -#: cp/parser.cc:35108 +#: cp/parser.cc:35113 #, gcc-internal-format msgid "duplicate %qD" msgstr "" -#: cp/parser.cc:35137 +#: cp/parser.cc:35142 #, gcc-internal-format msgid "duplicate %qs" msgstr "" -#: cp/parser.cc:35189 +#: cp/parser.cc:35194 #, gcc-internal-format msgid "expected %<new%>" msgstr "" -#: cp/parser.cc:35192 +#: cp/parser.cc:35197 #, gcc-internal-format msgid "expected %<delete%>" msgstr "" -#: cp/parser.cc:35195 +#: cp/parser.cc:35200 #, gcc-internal-format msgid "expected %<return%>" msgstr "" -#: cp/parser.cc:35201 +#: cp/parser.cc:35206 #, gcc-internal-format msgid "expected %<extern%>" msgstr "" -#: cp/parser.cc:35204 +#: cp/parser.cc:35209 #, gcc-internal-format msgid "expected %<static_assert%>" msgstr "" -#: cp/parser.cc:35207 +#: cp/parser.cc:35212 #, gcc-internal-format msgid "expected %<decltype%>" msgstr "" -#: cp/parser.cc:35210 +#: cp/parser.cc:35215 #, gcc-internal-format msgid "expected %<operator%>" msgstr "" -#: cp/parser.cc:35213 +#: cp/parser.cc:35218 #, gcc-internal-format msgid "expected %<class%>" msgstr "" -#: cp/parser.cc:35216 +#: cp/parser.cc:35221 #, gcc-internal-format msgid "expected %<template%>" msgstr "" -#: cp/parser.cc:35219 +#: cp/parser.cc:35224 #, gcc-internal-format msgid "expected %<namespace%>" msgstr "" -#: cp/parser.cc:35222 +#: cp/parser.cc:35227 #, gcc-internal-format msgid "expected %<using%>" msgstr "" -#: cp/parser.cc:35225 +#: cp/parser.cc:35230 #, gcc-internal-format msgid "expected %<asm%>" msgstr "" -#: cp/parser.cc:35228 +#: cp/parser.cc:35233 #, gcc-internal-format msgid "expected %<try%>" msgstr "" -#: cp/parser.cc:35231 +#: cp/parser.cc:35236 #, gcc-internal-format msgid "expected %<catch%>" msgstr "" -#: cp/parser.cc:35234 +#: cp/parser.cc:35239 #, gcc-internal-format msgid "expected %<throw%>" msgstr "" -#: cp/parser.cc:35237 +#: cp/parser.cc:35242 #, gcc-internal-format msgid "expected %<auto%>" msgstr "" -#: cp/parser.cc:35240 +#: cp/parser.cc:35245 #, gcc-internal-format msgid "expected %<__label__%>" msgstr "" -#: cp/parser.cc:35243 +#: cp/parser.cc:35248 #, gcc-internal-format msgid "expected %<@try%>" msgstr "" -#: cp/parser.cc:35246 +#: cp/parser.cc:35251 #, gcc-internal-format msgid "expected %<@synchronized%>" msgstr "" -#: cp/parser.cc:35249 +#: cp/parser.cc:35254 #, gcc-internal-format msgid "expected %<@throw%>" msgstr "" -#: cp/parser.cc:35252 +#: cp/parser.cc:35257 #, gcc-internal-format msgid "expected %<__transaction_atomic%>" msgstr "" -#: cp/parser.cc:35255 +#: cp/parser.cc:35260 #, gcc-internal-format msgid "expected %<__transaction_relaxed%>" msgstr "" -#: cp/parser.cc:35258 +#: cp/parser.cc:35263 #, gcc-internal-format msgid "expected %<co_yield%>" msgstr "" -#: cp/parser.cc:35290 +#: cp/parser.cc:35295 #, gcc-internal-format msgid "expected %<::%>" msgstr "" -#: cp/parser.cc:35302 +#: cp/parser.cc:35307 #, gcc-internal-format msgid "expected %<...%>" msgstr "" -#: cp/parser.cc:35305 +#: cp/parser.cc:35310 #, gcc-internal-format msgid "expected %<*%>" msgstr "" -#: cp/parser.cc:35308 +#: cp/parser.cc:35313 #, gcc-internal-format msgid "expected %<~%>" msgstr "" -#: cp/parser.cc:35314 +#: cp/parser.cc:35319 #, gcc-internal-format msgid "expected %<:%> or %<::%>" msgstr "" -#: cp/parser.cc:35341 +#: cp/parser.cc:35346 #, gcc-internal-format msgid "expected %<class%>, %<typename%>, or %<template%>" msgstr "" -#: cp/parser.cc:35676 +#: cp/parser.cc:35681 #, gcc-internal-format msgid "redundant enum-key %<enum%s%> in reference to %q#T" msgstr "" -#: cp/parser.cc:35828 +#: cp/parser.cc:35833 #, gcc-internal-format msgid "%qs tag used in naming %q#T" msgstr "" -#: cp/parser.cc:35833 +#: cp/parser.cc:35838 #, gcc-internal-format msgid "%q#T was previously declared here" msgstr "" -#: cp/parser.cc:35954 +#: cp/parser.cc:35959 #, gcc-internal-format msgid "redundant class-key %qs in reference to %q#T" msgstr "" -#: cp/parser.cc:36112 cp/parser.cc:36146 +#: cp/parser.cc:36117 cp/parser.cc:36151 #, gcc-internal-format msgid "%qT declared with a mismatched class-key %qs" msgstr "" -#: cp/parser.cc:36119 cp/parser.cc:36152 +#: cp/parser.cc:36124 cp/parser.cc:36157 #, gcc-internal-format msgid "remove the class-key or replace it with %qs" msgstr "" -#: cp/parser.cc:36120 cp/parser.cc:36153 +#: cp/parser.cc:36125 cp/parser.cc:36158 #, gcc-internal-format msgid "replace the class-key with %qs" msgstr "" -#: cp/parser.cc:36127 +#: cp/parser.cc:36132 #, gcc-internal-format msgid "%qT defined as %qs here" msgstr "" -#: cp/parser.cc:36128 +#: cp/parser.cc:36133 #, gcc-internal-format msgid "%qT first declared as %qs here" msgstr "" -#: cp/parser.cc:36211 +#: cp/parser.cc:36216 #, gcc-internal-format msgid "%qD redeclared with different access" msgstr "" -#: cp/parser.cc:36232 +#: cp/parser.cc:36237 #, gcc-internal-format msgid "" "in C++98 %<template%> (as a disambiguator) is only allowed within templates" msgstr "" -#: cp/parser.cc:36481 +#: cp/parser.cc:36486 #, gcc-internal-format msgid "file ends in default argument" msgstr "" -#: cp/parser.cc:36722 cp/parser.cc:38034 cp/parser.cc:38223 +#: cp/parser.cc:36727 cp/parser.cc:38039 cp/parser.cc:38228 #, gcc-internal-format msgid "misplaced %<@%D%> Objective-C++ construct" msgstr "" -#: cp/parser.cc:36793 +#: cp/parser.cc:36798 #, gcc-internal-format msgid "objective-c++ message receiver expected" msgstr "" -#: cp/parser.cc:36867 +#: cp/parser.cc:36872 #, gcc-internal-format msgid "objective-c++ message argument(s) are expected" msgstr "" -#: cp/parser.cc:36898 +#: cp/parser.cc:36903 #, gcc-internal-format msgid "%<@encode%> must specify a type as an argument" msgstr "" -#: cp/parser.cc:37302 +#: cp/parser.cc:37307 #, gcc-internal-format msgid "invalid Objective-C++ selector name" msgstr "" -#: cp/parser.cc:37377 cp/parser.cc:37395 +#: cp/parser.cc:37382 cp/parser.cc:37400 #, gcc-internal-format msgid "objective-c++ method declaration is expected" msgstr "" -#: cp/parser.cc:37389 cp/parser.cc:37455 +#: cp/parser.cc:37394 cp/parser.cc:37460 #, gcc-internal-format msgid "method attributes must be specified at the end" msgstr "" -#: cp/parser.cc:37498 +#: cp/parser.cc:37503 #, gcc-internal-format msgid "stray %qs between Objective-C++ methods" msgstr "" -#: cp/parser.cc:37695 cp/parser.cc:37702 cp/parser.cc:37709 +#: cp/parser.cc:37700 cp/parser.cc:37707 cp/parser.cc:37714 #, gcc-internal-format msgid "invalid type for instance variable" msgstr "" -#: cp/parser.cc:37826 +#: cp/parser.cc:37831 #, gcc-internal-format msgid "identifier expected after %<@protocol%>" msgstr "" -#: cp/parser.cc:37999 +#: cp/parser.cc:38004 #, gcc-internal-format msgid "" "attributes may not be specified before the %<@%D%> Objective-C++ keyword" msgstr "" -#: cp/parser.cc:38006 +#: cp/parser.cc:38011 #, gcc-internal-format msgid "prefix attributes are ignored before %<@%D%>" msgstr "" -#: cp/parser.cc:38286 cp/parser.cc:38293 cp/parser.cc:38300 +#: cp/parser.cc:38291 cp/parser.cc:38298 cp/parser.cc:38305 #, gcc-internal-format msgid "invalid type for property" msgstr "" -#: cp/parser.cc:38462 +#: cp/parser.cc:38467 #, gcc-internal-format msgid "unknown property attribute %qE" msgstr "" -#: cp/parser.cc:39760 +#: cp/parser.cc:39765 #, gcc-internal-format msgid "expected integer expression list" msgstr "" -#: cp/parser.cc:39777 +#: cp/parser.cc:39782 #, gcc-internal-format msgid "%<wait%> expression must be integral" msgstr "" -#: cp/parser.cc:40533 +#: cp/parser.cc:40538 #, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<all%>" msgstr "" -#: cp/parser.cc:40924 +#: cp/parser.cc:40929 #, gcc-internal-format msgid "invalid reduction-identifier" msgstr "" -#: cp/parser.cc:41985 +#: cp/parser.cc:41990 #, gcc-internal-format msgid "types may not be defined in iterator type" msgstr "" @@ -68415,178 +68586,178 @@ msgstr "" #. check above and add one in semantics.cc (to properly handle templates). #. Base this on the allocator/align modifiers check for the 'allocate' clause #. in semantics.cc's finish_omp_clauses. -#: cp/parser.cc:44097 +#: cp/parser.cc:44102 #, gcc-internal-format msgid "%<#pragma omp allocate%> not yet supported" msgstr "" -#: cp/parser.cc:45548 +#: cp/parser.cc:45553 #, gcc-internal-format msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop" msgstr "" -#: cp/parser.cc:46479 +#: cp/parser.cc:46484 #, gcc-internal-format msgid "%<ordered%> clause with parameter on range-based %<for%> loop" msgstr "" -#: cp/parser.cc:46561 cp/pt.cc:18549 +#: cp/parser.cc:46566 cp/pt.cc:18593 #, gcc-internal-format msgid "iteration variable %qD should not be reduction" msgstr "" -#: cp/parser.cc:49602 +#: cp/parser.cc:49607 #, gcc-internal-format msgid "%<#pragma omp declare %s%> followed by %<#pragma omp declare %s%>" msgstr "" -#: cp/parser.cc:50289 +#: cp/parser.cc:50294 #, gcc-internal-format msgid "" "%<#pragma omp dispatch%> must be followed by a direct function call with " "optional assignment" msgstr "" -#: cp/parser.cc:50516 +#: cp/parser.cc:50521 #, gcc-internal-format msgid "%qD is not a C pointer" msgstr "" -#: cp/parser.cc:50642 +#: cp/parser.cc:50647 #, gcc-internal-format msgid "" "an %qs clause can only be specified if the %<dispatch%> selector of the " "construct selector set appears in the %<match%> clause" msgstr "" -#: cp/parser.cc:50763 +#: cp/parser.cc:50768 #, gcc-internal-format msgid "" "OpenMP directive other than %<declare simd%> or %<declare variant%> " "appertains to a declaration" msgstr "" -#: cp/parser.cc:51817 +#: cp/parser.cc:51822 #, gcc-internal-format msgid "invalid initializer clause" msgstr "" -#: cp/parser.cc:51848 +#: cp/parser.cc:51853 #, gcc-internal-format msgid "expected id-expression (arguments)" msgstr "" -#: cp/parser.cc:51860 +#: cp/parser.cc:51865 #, gcc-internal-format msgid "" "one of the initializer call arguments should be %<omp_priv%> or %<&omp_priv%>" msgstr "" -#: cp/parser.cc:51963 +#: cp/parser.cc:51968 #, gcc-internal-format msgid "types may not be defined in declare reduction type list" msgstr "" -#: cp/parser.cc:51983 cp/semantics.cc:6841 +#: cp/parser.cc:51988 cp/semantics.cc:6855 #, gcc-internal-format msgid "predeclared arithmetic type %qT in %<#pragma omp declare reduction%>" msgstr "" -#: cp/parser.cc:51987 cp/semantics.cc:6849 +#: cp/parser.cc:51992 cp/semantics.cc:6863 #, gcc-internal-format msgid "function or array type %qT in %<#pragma omp declare reduction%>" msgstr "" -#: cp/parser.cc:51990 cp/pt.cc:14861 cp/semantics.cc:6855 +#: cp/parser.cc:51995 cp/pt.cc:14880 cp/semantics.cc:6869 #, gcc-internal-format msgid "reference type %qT in %<#pragma omp declare reduction%>" msgstr "" -#: cp/parser.cc:51993 cp/semantics.cc:6861 +#: cp/parser.cc:51998 cp/semantics.cc:6875 #, gcc-internal-format msgid "" "%<const%>, %<volatile%> or %<__restrict%>-qualified type %qT in %<#pragma " "omp declare reduction%>" msgstr "" -#: cp/parser.cc:52744 +#: cp/parser.cc:52749 #, gcc-internal-format msgid "%<#pragma acc routine%> names a set of overloads" msgstr "" -#: cp/parser.cc:52754 +#: cp/parser.cc:52759 #, gcc-internal-format msgid "%qD does not refer to a namespace scope function" msgstr "" -#: cp/parser.cc:52924 cp/parser.cc:53459 +#: cp/parser.cc:52929 cp/parser.cc:53464 #, gcc-internal-format msgid "OpenMP directives may not appear in %<constexpr%> functions" msgstr "" #. cancel-and-throw is unimplemented. -#: cp/parser.cc:53135 +#: cp/parser.cc:53140 #, gcc-internal-format msgid "%<atomic_cancel%>" msgstr "" -#: cp/parser.cc:53182 cp/semantics.cc:12154 +#: cp/parser.cc:53187 cp/semantics.cc:12168 #, gcc-internal-format msgid "%<__transaction_relaxed%> without transactional memory support enabled" msgstr "" -#: cp/parser.cc:53184 cp/semantics.cc:12156 +#: cp/parser.cc:53189 cp/semantics.cc:12170 #, gcc-internal-format msgid "%<__transaction_atomic%> without transactional memory support enabled" msgstr "" -#: cp/parser.cc:53330 +#: cp/parser.cc:53335 #, gcc-internal-format msgid "" "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>" msgstr "" -#: cp/parser.cc:53333 +#: cp/parser.cc:53338 #, gcc-internal-format msgid " or a %<transaction_may_cancel_outer%> function" msgstr "" -#: cp/parser.cc:53380 +#: cp/parser.cc:53385 #, gcc-internal-format msgid "malformed %<#pragma GCC pch_preprocess%>" msgstr "" -#: cp/parser.cc:53709 +#: cp/parser.cc:53714 #, gcc-internal-format msgid "%<#pragma omp requires%> may only be used at file or namespace scope" msgstr "" -#: cp/parser.cc:53720 +#: cp/parser.cc:53725 #, gcc-internal-format msgid "%<#pragma omp assumes%> may only be used at file or namespace scope" msgstr "" -#: cp/parser.cc:53807 +#: cp/parser.cc:53812 #, gcc-internal-format msgid "%<#pragma GCC %s%> must be inside a function" msgstr "" -#: cp/parser.cc:53949 +#: cp/parser.cc:53954 #, gcc-internal-format msgid "multi-source compilation not implemented for C++" msgstr "" -#: cp/parser.cc:53986 +#: cp/parser.cc:53991 #, gcc-internal-format msgid "placeholder type not allowed in this context" msgstr "" -#: cp/parser.cc:54195 +#: cp/parser.cc:54200 #, gcc-internal-format msgid "implicit templates may not be %<virtual%>" msgstr "" -#: cp/parser.cc:54251 +#: cp/parser.cc:54256 #, gcc-internal-format msgid "%<extern \"C\"%> linkage started here" msgstr "" @@ -68675,7 +68846,7 @@ msgstr "" msgid "specialization of %qD after instantiation" msgstr "" -#: cp/pt.cc:2067 cp/semantics.cc:6711 +#: cp/pt.cc:2067 cp/semantics.cc:6725 #, gcc-internal-format msgid "%s %#qD" msgstr "" @@ -69508,7 +69679,7 @@ msgstr "" msgid "for template declaration %q+D" msgstr "" -#: cp/pt.cc:10311 cp/pt.cc:22795 +#: cp/pt.cc:10311 cp/pt.cc:22841 #, gcc-internal-format msgid "template constraint failure for %qD" msgstr "" @@ -69518,84 +69689,84 @@ msgstr "" msgid "use of invalid variable template %qE" msgstr "" -#: cp/pt.cc:11380 +#: cp/pt.cc:11392 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d (use %<-ftemplate-" "depth=%> to increase the maximum)" msgstr "" -#: cp/pt.cc:12200 +#: cp/pt.cc:12216 #, gcc-internal-format msgid "score argument must be constant integer expression" msgstr "" -#: cp/pt.cc:12209 +#: cp/pt.cc:12225 #, gcc-internal-format msgid "score argument must be non-negative" msgstr "" -#: cp/pt.cc:12236 +#: cp/pt.cc:12252 #, gcc-internal-format msgid "property must be constant integer expression or string literal" msgstr "" -#: cp/pt.cc:12240 +#: cp/pt.cc:12256 #, gcc-internal-format msgid "property must be constant integer expression" msgstr "" -#: cp/pt.cc:12466 +#: cp/pt.cc:12484 #, gcc-internal-format msgid "instantiating erroneous template" msgstr "" -#: cp/pt.cc:12467 +#: cp/pt.cc:12485 #, gcc-internal-format msgid "first error appeared here" msgstr "" -#: cp/pt.cc:12818 +#: cp/pt.cc:12836 #, gcc-internal-format msgid "flexible array member %qD in union" msgstr "" -#: cp/pt.cc:13337 +#: cp/pt.cc:13355 #, gcc-internal-format msgid "fold of empty expansion over %O" msgstr "" -#: cp/pt.cc:13807 +#: cp/pt.cc:13826 #, gcc-internal-format msgid "%qE is not the entire pattern of the pack expansion" msgstr "" -#: cp/pt.cc:13895 +#: cp/pt.cc:13914 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %qT" msgstr "" -#: cp/pt.cc:13898 +#: cp/pt.cc:13917 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %qE" msgstr "" -#: cp/pt.cc:14083 +#: cp/pt.cc:14102 #, gcc-internal-format msgid "cannot index an empty pack" msgstr "" -#: cp/pt.cc:14534 +#: cp/pt.cc:14553 #, gcc-internal-format msgid " when instantiating default argument for call to %qD" msgstr "" -#: cp/pt.cc:14631 +#: cp/pt.cc:14650 #, gcc-internal-format msgid "creating pointer to member function of non-class type %qT" msgstr "" -#: cp/pt.cc:15621 +#: cp/pt.cc:15640 #, gcc-internal-format, gfc-internal-format msgid "mismatched argument pack lengths (%d vs %d)" msgstr "" @@ -69613,305 +69784,305 @@ msgstr "" #. #. is an attempt to declare a variable with function #. type. -#: cp/pt.cc:15809 +#: cp/pt.cc:15828 #, gcc-internal-format msgid "variable %qD has function type" msgstr "" -#: cp/pt.cc:16015 +#: cp/pt.cc:16034 #, gcc-internal-format msgid "invalid parameter type %qT" msgstr "" -#: cp/pt.cc:16017 +#: cp/pt.cc:16036 #, gcc-internal-format msgid "in declaration %q+D" msgstr "" -#: cp/pt.cc:16144 +#: cp/pt.cc:16163 #, gcc-internal-format msgid "function returning an array" msgstr "" -#: cp/pt.cc:16146 +#: cp/pt.cc:16165 #, gcc-internal-format msgid "function returning a function" msgstr "" -#: cp/pt.cc:16877 +#: cp/pt.cc:16896 #, gcc-internal-format msgid "forming reference to void" msgstr "" -#: cp/pt.cc:16879 +#: cp/pt.cc:16898 #, gcc-internal-format msgid "forming pointer to reference type %qT" msgstr "" -#: cp/pt.cc:16881 +#: cp/pt.cc:16900 #, gcc-internal-format msgid "forming reference to reference type %qT" msgstr "" -#: cp/pt.cc:16894 +#: cp/pt.cc:16913 #, gcc-internal-format msgid "forming pointer to qualified function type %qT" msgstr "" -#: cp/pt.cc:16897 +#: cp/pt.cc:16916 #, gcc-internal-format msgid "forming reference to qualified function type %qT" msgstr "" -#: cp/pt.cc:16950 +#: cp/pt.cc:16969 #, gcc-internal-format msgid "creating pointer to member of non-class type %qT" msgstr "" -#: cp/pt.cc:16956 +#: cp/pt.cc:16975 #, gcc-internal-format msgid "creating pointer to member reference type %qT" msgstr "" -#: cp/pt.cc:16962 +#: cp/pt.cc:16981 #, gcc-internal-format msgid "creating pointer to member of type void" msgstr "" -#: cp/pt.cc:17031 +#: cp/pt.cc:17050 #, gcc-internal-format msgid "creating array of %qT" msgstr "" -#: cp/pt.cc:17072 +#: cp/pt.cc:17091 #, gcc-internal-format msgid "%qD expanded to more than one element" msgstr "" -#: cp/pt.cc:17079 +#: cp/pt.cc:17098 #, gcc-internal-format msgid "%qD is instantiated for an empty pack" msgstr "" -#: cp/pt.cc:17100 +#: cp/pt.cc:17119 #, gcc-internal-format msgid "%qT is not a class, struct, or union type" msgstr "" -#: cp/pt.cc:17140 +#: cp/pt.cc:17159 #, gcc-internal-format msgid "%qT resolves to %qT, which is not an enumeration type" msgstr "" -#: cp/pt.cc:17148 +#: cp/pt.cc:17167 #, gcc-internal-format msgid "%qT resolves to %qT, which is not a class type" msgstr "" -#: cp/pt.cc:17271 +#: cp/pt.cc:17290 #, gcc-internal-format msgid "use of %qs in template" msgstr "" -#: cp/pt.cc:17590 +#: cp/pt.cc:17609 #, gcc-internal-format msgid "qualifying type %qT does not match destructor name ~%qT" msgstr "" -#: cp/pt.cc:17606 +#: cp/pt.cc:17625 #, gcc-internal-format msgid "" "dependent-name %qE is parsed as a non-type, but instantiation yields a type" msgstr "" -#: cp/pt.cc:17608 +#: cp/pt.cc:17627 #, gcc-internal-format msgid "say %<typename %E%> if a type is meant" msgstr "" -#: cp/pt.cc:17692 +#: cp/pt.cc:17711 #, gcc-internal-format msgid "initializer for %q#D expands to an empty list of expressions" msgstr "" -#: cp/pt.cc:19936 cp/pt.cc:22157 +#: cp/pt.cc:19980 cp/pt.cc:22201 #, gcc-internal-format msgid "invalid use of pack expansion expression" msgstr "" -#: cp/pt.cc:19940 cp/pt.cc:22161 +#: cp/pt.cc:19984 cp/pt.cc:22205 #, gcc-internal-format msgid "use %<...%> to expand argument pack" msgstr "" -#: cp/pt.cc:20087 +#: cp/pt.cc:20131 #, gcc-internal-format msgid "empty initializer in lambda init-capture" msgstr "" -#: cp/pt.cc:21393 +#: cp/pt.cc:21437 #, gcc-internal-format msgid "" "%qD was not declared in this scope, and no declarations were found by " "argument-dependent lookup at the point of instantiation" msgstr "" -#: cp/pt.cc:21428 +#: cp/pt.cc:21472 #, gcc-internal-format msgid "declarations in dependent base %qT are not found by unqualified lookup" msgstr "" -#: cp/pt.cc:21433 +#: cp/pt.cc:21477 #, gcc-internal-format msgid "use %<this->%D%> instead" msgstr "" -#: cp/pt.cc:21436 +#: cp/pt.cc:21480 #, gcc-internal-format msgid "use %<%T::%D%> instead" msgstr "" -#: cp/pt.cc:21441 +#: cp/pt.cc:21485 #, gcc-internal-format msgid "%qD declared here, later in the translation unit" msgstr "" -#: cp/pt.cc:21492 +#: cp/pt.cc:21536 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_convertvector%>" msgstr "" -#: cp/pt.cc:21519 +#: cp/pt.cc:21563 #, gcc-internal-format msgid "wrong number of arguments to %<assume%> attribute" msgstr "" -#: cp/pt.cc:21758 +#: cp/pt.cc:21802 #, gcc-internal-format msgid "%qT is not a class or namespace" msgstr "" -#: cp/pt.cc:21761 +#: cp/pt.cc:21805 #, gcc-internal-format msgid "%qD is not a class or namespace" msgstr "" -#: cp/pt.cc:22077 +#: cp/pt.cc:22121 #, gcc-internal-format msgid "using invalid field %qD" msgstr "" -#: cp/pt.cc:22427 +#: cp/pt.cc:22471 #, gcc-internal-format msgid "%qT is/uses unnamed type" msgstr "" -#: cp/pt.cc:22429 +#: cp/pt.cc:22473 #, gcc-internal-format msgid "template argument for %qD uses local type %qT" msgstr "" -#: cp/pt.cc:22439 +#: cp/pt.cc:22483 #, gcc-internal-format msgid "%qT is a variably modified type" msgstr "" -#: cp/pt.cc:22454 +#: cp/pt.cc:22498 #, gcc-internal-format msgid "integral expression %qE is not constant" msgstr "" -#: cp/pt.cc:22472 +#: cp/pt.cc:22516 #, gcc-internal-format msgid " trying to instantiate %qD" msgstr "" -#: cp/pt.cc:26907 +#: cp/pt.cc:26953 #, gcc-internal-format msgid "ambiguous template instantiation for %q#T" msgstr "" -#: cp/pt.cc:26909 +#: cp/pt.cc:26955 #, gcc-internal-format msgid "ambiguous template instantiation for %q#D" msgstr "" -#: cp/pt.cc:26915 +#: cp/pt.cc:26961 msgid "%s %#qS" msgstr "" -#: cp/pt.cc:26942 cp/pt.cc:27029 +#: cp/pt.cc:26988 cp/pt.cc:27075 #, gcc-internal-format msgid "explicit instantiation of non-template %q#D" msgstr "" -#: cp/pt.cc:26961 +#: cp/pt.cc:27007 #, gcc-internal-format msgid "%qD is not a static data member of a class template" msgstr "" -#: cp/pt.cc:26967 cp/pt.cc:27024 +#: cp/pt.cc:27013 cp/pt.cc:27070 #, gcc-internal-format msgid "no matching template for %qD found" msgstr "" -#: cp/pt.cc:26972 +#: cp/pt.cc:27018 #, gcc-internal-format msgid "" "type %qT for explicit instantiation %qD does not match declared type %qT" msgstr "" -#: cp/pt.cc:26980 +#: cp/pt.cc:27026 #, gcc-internal-format msgid "explicit instantiation of %q#D" msgstr "" -#: cp/pt.cc:27016 +#: cp/pt.cc:27062 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#D" msgstr "" -#: cp/pt.cc:27039 cp/pt.cc:27106 +#: cp/pt.cc:27085 cp/pt.cc:27152 #, gcc-internal-format msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations" msgstr "" -#: cp/pt.cc:27044 cp/pt.cc:27121 +#: cp/pt.cc:27090 cp/pt.cc:27167 #, gcc-internal-format msgid "storage class %qD applied to template instantiation" msgstr "" -#: cp/pt.cc:27078 +#: cp/pt.cc:27124 #, gcc-internal-format msgid "explicit instantiation of non-class template %qD" msgstr "" -#: cp/pt.cc:27081 +#: cp/pt.cc:27127 #, gcc-internal-format msgid "explicit instantiation of non-template type %qT" msgstr "" -#: cp/pt.cc:27090 +#: cp/pt.cc:27136 #, gcc-internal-format msgid "explicit instantiation of %q#T before definition of template" msgstr "" -#: cp/pt.cc:27111 +#: cp/pt.cc:27157 #, gcc-internal-format msgid "ISO C++ forbids the use of %qE on explicit instantiations" msgstr "" -#: cp/pt.cc:27151 +#: cp/pt.cc:27197 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#T" msgstr "" -#: cp/pt.cc:27481 +#: cp/pt.cc:27527 #, gcc-internal-format msgid "exception specification of %qD depends on itself" msgstr "" -#: cp/pt.cc:27487 +#: cp/pt.cc:27533 #, gcc-internal-format msgid "" "exception specification of %qD is not available until end of class definition" @@ -69924,12 +70095,12 @@ msgstr "" #. member function or static data member of a class template #. shall be present in every translation unit in which it is #. explicitly instantiated. -#: cp/pt.cc:27958 +#: cp/pt.cc:28009 #, gcc-internal-format msgid "explicit instantiation of %qD but no definition available" msgstr "" -#: cp/pt.cc:28004 +#: cp/pt.cc:28055 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d instantiating %q+D, " @@ -69937,164 +70108,164 @@ msgid "" "increase the maximum)" msgstr "" -#: cp/pt.cc:28379 +#: cp/pt.cc:28430 #, gcc-internal-format msgid "" "non-type template parameters of deduced class type only available with %<-" "std=c++20%> or %<-std=gnu++20%>" msgstr "" -#: cp/pt.cc:28409 +#: cp/pt.cc:28460 #, gcc-internal-format msgid "" "%qT is not a valid type for a template non-type parameter because it is not " "structural" msgstr "" -#: cp/pt.cc:28418 +#: cp/pt.cc:28469 #, gcc-internal-format msgid "" "non-type template parameters of class type only available with %<-std=c+" "+20%> or %<-std=gnu++20%>" msgstr "" -#: cp/pt.cc:28426 +#: cp/pt.cc:28477 #, gcc-internal-format msgid "invalid template non-type parameter" msgstr "" -#: cp/pt.cc:28428 +#: cp/pt.cc:28479 #, gcc-internal-format msgid "%q#T is not a valid type for a template non-type parameter" msgstr "" -#: cp/pt.cc:29891 +#: cp/pt.cc:29942 #, gcc-internal-format msgid "keyword %<template%> not allowed in declarator-id" msgstr "" -#: cp/pt.cc:30076 +#: cp/pt.cc:30127 #, gcc-internal-format msgid "a concept cannot be constrained" msgstr "" -#: cp/pt.cc:30085 +#: cp/pt.cc:30136 #, gcc-internal-format msgid "concept %qE not in namespace scope" msgstr "" -#: cp/pt.cc:30091 +#: cp/pt.cc:30142 #, gcc-internal-format msgid "concept %qE has multiple template parameter lists" msgstr "" -#: cp/pt.cc:30135 +#: cp/pt.cc:30186 #, gcc-internal-format msgid "" "deducing from brace-enclosed initializer list requires %<#include " "<initializer_list>%>" msgstr "" -#: cp/pt.cc:31407 +#: cp/pt.cc:31457 #, gcc-internal-format msgid "non-deducible template %qT used without template arguments" msgstr "" -#: cp/pt.cc:31420 +#: cp/pt.cc:31470 #, gcc-internal-format msgid "" "alias template deduction only available with %<-std=c++20%> or %<-std=gnu+" "+20%>" msgstr "" -#: cp/pt.cc:31426 +#: cp/pt.cc:31476 #, gcc-internal-format msgid "use %qD directly instead" msgstr "" -#: cp/pt.cc:31554 +#: cp/pt.cc:31604 #, gcc-internal-format msgid "" "cannot deduce template arguments for copy-initialization of %qT, as it has " "no non-explicit deduction guides or user-declared constructors" msgstr "" -#: cp/pt.cc:31561 +#: cp/pt.cc:31611 #, gcc-internal-format msgid "" "cannot deduce template arguments of %qT, as it has no viable deduction guides" msgstr "" -#: cp/pt.cc:31574 +#: cp/pt.cc:31624 #, gcc-internal-format msgid "class template argument deduction failed:" msgstr "" -#: cp/pt.cc:31577 +#: cp/pt.cc:31627 #, gcc-internal-format msgid "explicit deduction guides not considered for copy-initialization" msgstr "" -#: cp/pt.cc:31592 +#: cp/pt.cc:31642 #, gcc-internal-format msgid "" "class template argument deduction for %qT failed: explicit deduction guide " "selected in copy-list-initialization" msgstr "" -#: cp/pt.cc:31596 +#: cp/pt.cc:31646 #, gcc-internal-format msgid "explicit deduction guide declared here" msgstr "" -#: cp/pt.cc:31611 +#: cp/pt.cc:31661 #, gcc-internal-format msgid "%qT may not intend to support class template argument deduction" msgstr "" -#: cp/pt.cc:31613 +#: cp/pt.cc:31663 #, gcc-internal-format msgid "add a deduction guide to suppress this warning" msgstr "" -#: cp/pt.cc:31736 +#: cp/pt.cc:31786 #, gcc-internal-format msgid "direct-list-initialization of %<auto%> requires exactly one element" msgstr "" -#: cp/pt.cc:31739 +#: cp/pt.cc:31789 #, gcc-internal-format msgid "" "for deduction to %<std::initializer_list%>, use copy-list-initialization (i." "e. add %<=%> before the %<{%>)" msgstr "" -#: cp/pt.cc:31799 +#: cp/pt.cc:31849 #, gcc-internal-format msgid "unable to deduce lambda return type from %qE" msgstr "" -#: cp/pt.cc:31802 +#: cp/pt.cc:31852 #, gcc-internal-format msgid "unable to deduce %qT from %qE" msgstr "" -#: cp/pt.cc:31877 +#: cp/pt.cc:31927 #, gcc-internal-format msgid "placeholder constraints not satisfied" msgstr "" -#: cp/pt.cc:31881 +#: cp/pt.cc:31931 #, gcc-internal-format msgid "deduced initializer does not satisfy placeholder constraints" msgstr "" -#: cp/pt.cc:31885 +#: cp/pt.cc:31935 #, gcc-internal-format msgid "deduced return type does not satisfy placeholder constraints" msgstr "" -#: cp/pt.cc:31889 +#: cp/pt.cc:31939 #, gcc-internal-format msgid "deduced expression type does not satisfy placeholder constraints" msgstr "" @@ -70247,724 +70418,729 @@ msgstr "" msgid "virtual function declared here" msgstr "" -#: cp/semantics.cc:1291 +#: cp/semantics.cc:1294 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> always evaluates to true in %<if constexpr%>" msgstr "" -#: cp/semantics.cc:1297 +#: cp/semantics.cc:1300 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> evaluates to true when checking if trivially " "empty iteration statement is trivial infinite loop" msgstr "" -#: cp/semantics.cc:1302 +#: cp/semantics.cc:1305 #, gcc-internal-format msgid "" "and evaluates to false when actually evaluating the condition in non-" "%<constexpr%> function" msgstr "" -#: cp/semantics.cc:1307 +#: cp/semantics.cc:1310 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> always evaluates to false in a non-" "%<constexpr%> function" msgstr "" -#: cp/semantics.cc:1311 +#: cp/semantics.cc:1314 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> always evaluates to true in a %<consteval%> " "function" msgstr "" -#: cp/semantics.cc:1537 +#: cp/semantics.cc:1540 #, gcc-internal-format msgid "suggest explicit braces around empty body in %<do%> statement" msgstr "" -#: cp/semantics.cc:2105 +#: cp/semantics.cc:2108 #, gcc-internal-format msgid "catching polymorphic type %q#T by value" msgstr "" -#: cp/semantics.cc:2110 +#: cp/semantics.cc:2113 #, gcc-internal-format msgid "catching type %q#T by value" msgstr "" -#: cp/semantics.cc:2115 +#: cp/semantics.cc:2118 #, gcc-internal-format msgid "catching non-reference type %q#T" msgstr "" -#: cp/semantics.cc:2412 +#: cp/semantics.cc:2415 #, gcc-internal-format msgid "type of %<asm%> operand %qE could not be determined" msgstr "" -#: cp/semantics.cc:2564 +#: cp/semantics.cc:2567 #, gcc-internal-format msgid "%<__label__%> declarations are only allowed in function scopes" msgstr "" -#: cp/semantics.cc:2742 +#: cp/semantics.cc:2745 #, gcc-internal-format msgid "invalid use of member %qD in static member function" msgstr "" -#: cp/semantics.cc:2746 +#: cp/semantics.cc:2749 #, gcc-internal-format msgid "invalid use of member %qD in constructor %<pre%> contract" msgstr "" -#: cp/semantics.cc:2750 +#: cp/semantics.cc:2753 #, gcc-internal-format msgid "invalid use of member %qD in destructor %<post%> contract" msgstr "" -#: cp/semantics.cc:3018 +#: cp/semantics.cc:3021 #, gcc-internal-format msgid "%qE missing template arguments" msgstr "" -#: cp/semantics.cc:3078 +#: cp/semantics.cc:3081 #, gcc-internal-format msgid "" "a statement expression is an insufficient context for overload resolution" msgstr "" -#: cp/semantics.cc:3430 +#: cp/semantics.cc:3434 #, gcc-internal-format msgid "cannot call a concept as a function" msgstr "" -#: cp/semantics.cc:3510 +#: cp/semantics.cc:3514 #, gcc-internal-format msgid "arguments to destructor are not allowed" msgstr "" -#: cp/semantics.cc:3615 +#: cp/semantics.cc:3619 #, gcc-internal-format msgid "%<this%> is unavailable for explicit object member functions" msgstr "" -#: cp/semantics.cc:3627 +#: cp/semantics.cc:3631 #, gcc-internal-format msgid "use explicit object parameter %qs instead" msgstr "" -#: cp/semantics.cc:3631 +#: cp/semantics.cc:3635 #, gcc-internal-format msgid "name the explicit object parameter" msgstr "" -#: cp/semantics.cc:3636 +#: cp/semantics.cc:3640 #, gcc-internal-format msgid "%<this%> is unavailable for static member functions" msgstr "" -#: cp/semantics.cc:3638 +#: cp/semantics.cc:3642 #, gcc-internal-format msgid "invalid use of %<this%> before it is valid" msgstr "" -#: cp/semantics.cc:3640 +#: cp/semantics.cc:3644 #, gcc-internal-format msgid "invalid use of %<this%> after it is valid" msgstr "" -#: cp/semantics.cc:3642 +#: cp/semantics.cc:3646 #, gcc-internal-format msgid "invalid use of %<this%> in non-member function" msgstr "" -#: cp/semantics.cc:3644 +#: cp/semantics.cc:3648 #, gcc-internal-format msgid "invalid use of %<this%> at top level" msgstr "" -#: cp/semantics.cc:3667 +#: cp/semantics.cc:3671 #, gcc-internal-format msgid "invalid qualifying scope in pseudo-destructor name" msgstr "" -#: cp/semantics.cc:3676 cp/typeck.cc:3109 +#: cp/semantics.cc:3680 cp/typeck.cc:3109 #, gcc-internal-format msgid "qualified type %qT does not match destructor name ~%qT" msgstr "" -#: cp/semantics.cc:3699 +#: cp/semantics.cc:3703 #, gcc-internal-format msgid "%qE is not of type %qT" msgstr "" -#: cp/semantics.cc:3813 +#: cp/semantics.cc:3817 #, gcc-internal-format msgid "compound literal of non-object type %qT" msgstr "" -#: cp/semantics.cc:3833 +#: cp/semantics.cc:3837 #, gcc-internal-format msgid "%<auto{x}%> cannot be constrained" msgstr "" -#: cp/semantics.cc:3838 +#: cp/semantics.cc:3842 #, gcc-internal-format msgid "%<auto{x}%> only available with %<-std=c++23%> or %<-std=gnu++23%>" msgstr "" -#: cp/semantics.cc:4030 +#: cp/semantics.cc:4034 #, gcc-internal-format msgid "template type parameters must use the keyword %<class%> or %<typename%>" msgstr "" -#: cp/semantics.cc:4083 +#: cp/semantics.cc:4087 #, gcc-internal-format msgid "" "invalid use of type %qT as a default value for a template template-parameter" msgstr "" -#: cp/semantics.cc:4087 +#: cp/semantics.cc:4091 #, gcc-internal-format msgid "invalid default argument for a template template parameter" msgstr "" -#: cp/semantics.cc:4104 +#: cp/semantics.cc:4108 #, gcc-internal-format msgid "definition of %q#T inside template parameter list" msgstr "" -#: cp/semantics.cc:4135 +#: cp/semantics.cc:4139 #, gcc-internal-format msgid "invalid definition of qualified type %qT" msgstr "" -#: cp/semantics.cc:4425 +#: cp/semantics.cc:4429 #, gcc-internal-format msgid "invalid base-class specification" msgstr "" -#: cp/semantics.cc:4591 +#: cp/semantics.cc:4595 #, gcc-internal-format msgid "cannot capture member %qD of anonymous union" msgstr "" -#: cp/semantics.cc:4609 +#: cp/semantics.cc:4613 #, gcc-internal-format msgid "%qD is not captured" msgstr "" -#: cp/semantics.cc:4613 +#: cp/semantics.cc:4617 #, gcc-internal-format msgid "the lambda has no capture-default" msgstr "" -#: cp/semantics.cc:4615 +#: cp/semantics.cc:4619 #, gcc-internal-format msgid "" "lambda in local class %q+T cannot capture variables from the enclosing " "context" msgstr "" -#: cp/semantics.cc:4631 +#: cp/semantics.cc:4635 #, gcc-internal-format msgid "use of local variable with automatic storage from containing function" msgstr "" -#: cp/semantics.cc:4633 +#: cp/semantics.cc:4637 #, gcc-internal-format msgid "use of parameter from containing function" msgstr "" -#: cp/semantics.cc:4763 +#: cp/semantics.cc:4767 #, gcc-internal-format msgid "use of parameter outside function body" msgstr "" -#: cp/semantics.cc:4773 +#: cp/semantics.cc:4777 #, gcc-internal-format msgid "missing template arguments" msgstr "" -#: cp/semantics.cc:4809 +#: cp/semantics.cc:4813 #, gcc-internal-format msgid "" "template parameter %qD of type %qT is not allowed in an integral constant " "expression because it is not of integral or enumeration type" msgstr "" -#: cp/semantics.cc:4860 +#: cp/semantics.cc:4864 #, gcc-internal-format msgid "use of class template %qT as expression" msgstr "" -#: cp/semantics.cc:4868 +#: cp/semantics.cc:4872 #, gcc-internal-format msgid "request for member %qD is ambiguous in multiple inheritance lattice" msgstr "" -#: cp/semantics.cc:4896 +#: cp/semantics.cc:4900 #, gcc-internal-format msgid "%qD cannot appear in a constant-expression" msgstr "" -#: cp/semantics.cc:5049 +#: cp/semantics.cc:5053 #, gcc-internal-format msgid "type of %qE is unknown" msgstr "" -#: cp/semantics.cc:5067 rust/backend/rust-tree.cc:5498 +#: cp/semantics.cc:5071 rust/backend/rust-tree.cc:5498 #, gcc-internal-format msgid "%qT is not an enumeration type" msgstr "" -#: cp/semantics.cc:5094 +#: cp/semantics.cc:5098 +#, gcc-internal-format +msgid "pack index has non-integral type %qT" +msgstr "" + +#: cp/semantics.cc:5105 #, gcc-internal-format msgid "pack index is not an integral constant" msgstr "" -#: cp/semantics.cc:5100 +#: cp/semantics.cc:5113 #, gcc-internal-format -msgid "pack index is negative" +msgid "pack index %qE is negative" msgstr "" -#: cp/semantics.cc:5106 +#: cp/semantics.cc:5119 #, gcc-internal-format -msgid "pack index is out of range" +msgid "pack index %qE is out of range for pack of length %qd" msgstr "" #. Parameter packs can only be used in templates -#: cp/semantics.cc:5243 +#: cp/semantics.cc:5257 #, gcc-internal-format msgid "parameter pack %<__bases%> only valid in template declaration" msgstr "" -#: cp/semantics.cc:5275 +#: cp/semantics.cc:5289 #, gcc-internal-format msgid "cannot apply %<offsetof%> to destructor %<~%T%>" msgstr "" -#: cp/semantics.cc:5289 +#: cp/semantics.cc:5303 #, gcc-internal-format msgid "cannot apply %<offsetof%> to member function %qD" msgstr "" -#: cp/semantics.cc:5293 +#: cp/semantics.cc:5307 #, gcc-internal-format msgid "cannot apply %<offsetof%> to member function" msgstr "" -#: cp/semantics.cc:5298 +#: cp/semantics.cc:5312 #, gcc-internal-format msgid "cannot apply %<offsetof%> to an enumerator %qD" msgstr "" -#: cp/semantics.cc:5309 +#: cp/semantics.cc:5323 #, gcc-internal-format msgid "" "%<offsetof%> within non-standard-layout type %qT is conditionally-supported" msgstr "" -#: cp/semantics.cc:6513 +#: cp/semantics.cc:6527 #, gcc-internal-format msgid "pointer-to-member mapping %qE not supported" msgstr "" -#: cp/semantics.cc:6708 +#: cp/semantics.cc:6722 #, gcc-internal-format msgid "user defined reduction lookup is ambiguous" msgstr "" -#: cp/semantics.cc:6981 +#: cp/semantics.cc:6995 #, gcc-internal-format msgid "%qE in %<reduction%> clause is a zero size array" msgstr "" -#: cp/semantics.cc:7027 +#: cp/semantics.cc:7041 #, gcc-internal-format msgid "%qE has const type for %<reduction%>" msgstr "" -#: cp/semantics.cc:7146 +#: cp/semantics.cc:7160 #, gcc-internal-format msgid "user defined reduction with constructor initializer for base class %qT" msgstr "" -#: cp/semantics.cc:7505 +#: cp/semantics.cc:7519 #, gcc-internal-format msgid "expected string literal or constant integer expression instead of %qE" msgstr "" -#: cp/semantics.cc:7695 +#: cp/semantics.cc:7709 #, gcc-internal-format msgid "" "modifier other than %<val%> specified in %<linear%> clause on %<simd%> or " "%<for%> constructs when using OpenMP 5.2 modifiers" msgstr "" -#: cp/semantics.cc:7710 +#: cp/semantics.cc:7724 #, gcc-internal-format msgid "" "linear clause with %qs modifier applied to non-reference variable with %qT " "type" msgstr "" -#: cp/semantics.cc:7725 +#: cp/semantics.cc:7739 #, gcc-internal-format msgid "" "linear clause applied to non-integral non-pointer variable with %qT type" msgstr "" -#: cp/semantics.cc:7749 +#: cp/semantics.cc:7763 #, gcc-internal-format msgid "linear step expression must be integral" msgstr "" -#: cp/semantics.cc:7842 cp/semantics.cc:7974 cp/semantics.cc:8034 -#: cp/semantics.cc:8459 cp/semantics.cc:9627 +#: cp/semantics.cc:7856 cp/semantics.cc:7988 cp/semantics.cc:8048 +#: cp/semantics.cc:8473 cp/semantics.cc:9641 #, gcc-internal-format msgid "%<this%> allowed in OpenMP only in %<declare simd%> clauses" msgstr "" -#: cp/semantics.cc:7854 cp/semantics.cc:9640 +#: cp/semantics.cc:7868 cp/semantics.cc:9654 #, gcc-internal-format msgid "%qD is not a variable in clause %qs" msgstr "" -#: cp/semantics.cc:7987 +#: cp/semantics.cc:8001 #, gcc-internal-format msgid "%qD is not a variable in clause %<firstprivate%>" msgstr "" -#: cp/semantics.cc:8047 +#: cp/semantics.cc:8061 #, gcc-internal-format msgid "%qD is not a variable in clause %<lastprivate%>" msgstr "" -#: cp/semantics.cc:8118 +#: cp/semantics.cc:8132 #, gcc-internal-format msgid "%<gang%> static expression must be integral" msgstr "" -#: cp/semantics.cc:8132 +#: cp/semantics.cc:8146 #, gcc-internal-format msgid "%<gang%> static value must be positive" msgstr "" -#: cp/semantics.cc:8170 +#: cp/semantics.cc:8184 #, gcc-internal-format msgid "%<gang%> num expression must be integral" msgstr "" -#: cp/semantics.cc:8173 +#: cp/semantics.cc:8187 #, gcc-internal-format msgid "%<vector%> length expression must be integral" msgstr "" -#: cp/semantics.cc:8177 +#: cp/semantics.cc:8191 #, gcc-internal-format msgid "%<worker%> num expression must be integral" msgstr "" -#: cp/semantics.cc:8199 +#: cp/semantics.cc:8213 #, gcc-internal-format msgid "%<gang%> num value must be positive" msgstr "" -#: cp/semantics.cc:8203 +#: cp/semantics.cc:8217 #, gcc-internal-format msgid "%<vector%> length value must be positive" msgstr "" -#: cp/semantics.cc:8208 +#: cp/semantics.cc:8222 #, gcc-internal-format msgid "%<worker%> num value must be positive" msgstr "" -#: cp/semantics.cc:8284 +#: cp/semantics.cc:8298 #, gcc-internal-format msgid "schedule chunk size expression must be integral" msgstr "" -#: cp/semantics.cc:8317 +#: cp/semantics.cc:8331 #, gcc-internal-format msgid "%qs length expression must be integral" msgstr "" -#: cp/semantics.cc:8331 +#: cp/semantics.cc:8345 #, gcc-internal-format msgid "%qs length expression must be positive constant integer expression" msgstr "" -#: cp/semantics.cc:8351 +#: cp/semantics.cc:8365 #, gcc-internal-format msgid "%<async%> expression must be integral" msgstr "" -#: cp/semantics.cc:8380 +#: cp/semantics.cc:8394 #, gcc-internal-format msgid "%<thread_limit%> expression must be integral" msgstr "" -#: cp/semantics.cc:8410 +#: cp/semantics.cc:8424 #, gcc-internal-format msgid "%<device%> id must be integral" msgstr "" -#: cp/semantics.cc:8441 +#: cp/semantics.cc:8455 #, gcc-internal-format msgid "%<dist_schedule%> chunk size expression must be integral" msgstr "" -#: cp/semantics.cc:8470 +#: cp/semantics.cc:8484 #, gcc-internal-format msgid "%qD is not a variable in %<aligned%> clause" msgstr "" -#: cp/semantics.cc:8485 +#: cp/semantics.cc:8499 #, gcc-internal-format msgid "" "%qE in %<aligned%> clause is neither a pointer nor an array nor a reference " "to pointer or array" msgstr "" -#: cp/semantics.cc:8492 +#: cp/semantics.cc:8506 #, gcc-internal-format msgid "%qD appears more than once in %<aligned%> clauses" msgstr "" -#: cp/semantics.cc:8507 +#: cp/semantics.cc:8521 #, gcc-internal-format msgid "%<aligned%> clause alignment expression must be integral" msgstr "" -#: cp/semantics.cc:8538 +#: cp/semantics.cc:8552 #, gcc-internal-format msgid "%qD is not a variable in %<nontemporal%> clause" msgstr "" -#: cp/semantics.cc:8549 +#: cp/semantics.cc:8563 #, gcc-internal-format msgid "%qD appears more than once in %<nontemporal%> clauses" msgstr "" -#: cp/semantics.cc:8566 +#: cp/semantics.cc:8580 #, gcc-internal-format msgid "%<this%> not allowed in %<allocate%> clause" msgstr "" -#: cp/semantics.cc:8578 +#: cp/semantics.cc:8592 #, gcc-internal-format msgid "%qD is not a variable in %<allocate%> clause" msgstr "" -#: cp/semantics.cc:8587 +#: cp/semantics.cc:8601 #, gcc-internal-format msgid "%qD appears more than once in %<allocate%> clauses" msgstr "" -#: cp/semantics.cc:8737 +#: cp/semantics.cc:8751 #, gcc-internal-format msgid "%qD is not lvalue expression nor array section in %qs clause" msgstr "" -#: cp/semantics.cc:9241 +#: cp/semantics.cc:9255 #, gcc-internal-format msgid "template %qE in clause %qs" msgstr "" -#: cp/semantics.cc:9244 +#: cp/semantics.cc:9258 #, gcc-internal-format msgid "overloaded function name %qE in clause %qs" msgstr "" -#: cp/semantics.cc:9314 +#: cp/semantics.cc:9328 #, gcc-internal-format msgid "%<grainsize%> expression must be integral" msgstr "" -#: cp/semantics.cc:9344 +#: cp/semantics.cc:9358 #, gcc-internal-format msgid "%<priority%> expression must be integral" msgstr "" -#: cp/semantics.cc:9374 +#: cp/semantics.cc:9388 #, gcc-internal-format msgid "%<hint%> expression must be integral" msgstr "" -#: cp/semantics.cc:9386 +#: cp/semantics.cc:9400 #, gcc-internal-format msgid "%<hint%> expression must be constant integer expression" msgstr "" -#: cp/semantics.cc:9403 +#: cp/semantics.cc:9417 #, gcc-internal-format msgid "%<filter%> expression must be integral" msgstr "" -#: cp/semantics.cc:9434 +#: cp/semantics.cc:9448 #, gcc-internal-format msgid "%qs variable is neither a pointer nor reference to pointer" msgstr "" -#: cp/semantics.cc:9444 +#: cp/semantics.cc:9458 #, gcc-internal-format msgid "" "%qs variable is neither a pointer, nor an array nor reference to pointer or " "array" msgstr "" -#: cp/semantics.cc:9528 +#: cp/semantics.cc:9542 #, gcc-internal-format msgid "%<tile%> argument needs integral type" msgstr "" -#: cp/semantics.cc:10092 +#: cp/semantics.cc:10106 #, gcc-internal-format msgid "" "%<const%> qualified %qE without %<mutable%> member may appear only in " "%<shared%> or %<firstprivate%> clauses" msgstr "" -#: cp/semantics.cc:10333 +#: cp/semantics.cc:10347 #, gcc-internal-format msgid "%<threadprivate%> %qD is not file, namespace or block scope variable" msgstr "" -#: cp/semantics.cc:10347 +#: cp/semantics.cc:10361 #, gcc-internal-format msgid "%<threadprivate%> %qE directive not in %qT definition" msgstr "" -#: cp/semantics.cc:11084 +#: cp/semantics.cc:11098 #, gcc-internal-format msgid "difference between %qE and %qD does not have integer type" msgstr "" -#: cp/semantics.cc:11582 +#: cp/semantics.cc:11596 #, gcc-internal-format msgid "%<#pragma omp simd%> used with class iteration variable %qE" msgstr "" -#: cp/semantics.cc:11906 cp/semantics.cc:11916 +#: cp/semantics.cc:11920 cp/semantics.cc:11930 #, gcc-internal-format msgid "%<#pragma omp atomic update%> uses two different expressions for memory" msgstr "" -#: cp/semantics.cc:12248 +#: cp/semantics.cc:12262 #, gcc-internal-format msgid "" "constexpr string must be a string literal or object with %<size%> and " "%<data%> members" msgstr "" -#: cp/semantics.cc:12264 +#: cp/semantics.cc:12278 #, gcc-internal-format msgid "" "constexpr string %<size()%> must be implicitly convertible to %<std::size_t%>" msgstr "" -#: cp/semantics.cc:12273 +#: cp/semantics.cc:12287 #, gcc-internal-format msgid "" "constexpr string %<data()%> must be implicitly convertible to %<const char*%>" msgstr "" -#: cp/semantics.cc:12311 +#: cp/semantics.cc:12325 #, gcc-internal-format msgid "constexpr string %<size()%> must be a constant expression" msgstr "" -#: cp/semantics.cc:12319 +#: cp/semantics.cc:12333 #, gcc-internal-format msgid "constexpr string message %<size()%> %qE too large" msgstr "" -#: cp/semantics.cc:12346 +#: cp/semantics.cc:12360 #, gcc-internal-format msgid "constexpr string %<data()[%d]%> must be a constant expression" msgstr "" -#: cp/semantics.cc:12372 +#: cp/semantics.cc:12386 #, gcc-internal-format msgid "constexpr string %<data()%> must be a core constant expression" msgstr "" -#: cp/semantics.cc:12471 +#: cp/semantics.cc:12485 #, gcc-internal-format msgid "static assertion failed: %.*s" msgstr "" -#: cp/semantics.cc:12477 +#: cp/semantics.cc:12491 #, gcc-internal-format msgid "non-constant condition for static assertion" msgstr "" -#: cp/semantics.cc:12506 +#: cp/semantics.cc:12520 #, gcc-internal-format msgid "argument to %<decltype%> must be an expression" msgstr "" -#: cp/semantics.cc:12552 +#: cp/semantics.cc:12566 #, gcc-internal-format msgid "%<decltype%> cannot resolve address of overloaded function" msgstr "" -#: cp/semantics.cc:12856 rust/backend/rust-tree.cc:5212 +#: cp/semantics.cc:12870 rust/backend/rust-tree.cc:5212 #, gcc-internal-format msgid "" "%<__builtin_is_pointer_interconvertible_with_class%> needs a single argument" msgstr "" -#: cp/semantics.cc:12865 rust/backend/rust-tree.cc:5221 +#: cp/semantics.cc:12879 rust/backend/rust-tree.cc:5221 #, gcc-internal-format msgid "" "%<__builtin_is_pointer_interconvertible_with_class%> argument is not pointer " "to member" msgstr "" -#: cp/semantics.cc:13036 rust/backend/rust-tree.cc:5825 +#: cp/semantics.cc:13050 rust/backend/rust-tree.cc:5825 #, gcc-internal-format msgid "" "%<__builtin_is_corresponding_member%> not well defined for anonymous unions" msgstr "" -#: cp/semantics.cc:13060 rust/backend/rust-tree.cc:5869 +#: cp/semantics.cc:13074 rust/backend/rust-tree.cc:5869 #, gcc-internal-format msgid "%<__builtin_is_corresponding_member%> needs two arguments" msgstr "" -#: cp/semantics.cc:13071 rust/backend/rust-tree.cc:5879 +#: cp/semantics.cc:13085 rust/backend/rust-tree.cc:5879 #, gcc-internal-format msgid "%<__builtin_is_corresponding_member%> argument is not pointer to member" msgstr "" -#: cp/semantics.cc:13628 +#: cp/semantics.cc:13642 #, gcc-internal-format msgid "%qD is not a class or alias template" msgstr "" -#: cp/semantics.cc:13869 +#: cp/semantics.cc:13883 #, gcc-internal-format msgid "operand of fold expression has no unexpanded parameter packs" msgstr "" -#: cp/semantics.cc:13929 +#: cp/semantics.cc:13943 #, gcc-internal-format msgid "both arguments in binary fold have unexpanded parameter packs" msgstr "" -#: cp/semantics.cc:13931 +#: cp/semantics.cc:13945 #, gcc-internal-format msgid "no unexpanded parameter packs in binary fold" msgstr "" -#: cp/semantics.cc:13948 +#: cp/semantics.cc:13962 #, gcc-internal-format msgid "" "type %qT of argument to %<__builtin_launder%> is not a pointer to object type" @@ -70973,22 +71149,22 @@ msgstr "" #. std::bit_cast for destination ARRAY_TYPE is not possible, #. as functions may not return an array, so don't bother trying #. to support this (and then deal with VLAs etc.). -#: cp/semantics.cc:13998 +#: cp/semantics.cc:14012 #, gcc-internal-format msgid "%<__builtin_bit_cast%> destination type %qT is an array type" msgstr "" -#: cp/semantics.cc:14004 +#: cp/semantics.cc:14018 #, gcc-internal-format msgid "%<__builtin_bit_cast%> destination type %qT is not trivially copyable" msgstr "" -#: cp/semantics.cc:14031 +#: cp/semantics.cc:14045 #, gcc-internal-format msgid "%<__builtin_bit_cast%> source type %qT is not trivially copyable" msgstr "" -#: cp/semantics.cc:14039 +#: cp/semantics.cc:14053 #, gcc-internal-format msgid "" "%<__builtin_bit_cast%> source size %qE not equal to destination type size %qE" @@ -72639,53 +72815,53 @@ msgstr "" msgid "cannot determine the length of a %qs" msgstr "" -#: d/d-codegen.cc:1282 +#: d/d-codegen.cc:1285 #, gcc-internal-format msgid "overlapping initializer for field %qT.%qD" msgstr "" -#: d/d-codegen.cc:1477 +#: d/d-codegen.cc:1491 #, gcc-internal-format msgid "the address of %qD will never be %<null%>" msgstr "" -#: d/d-codegen.cc:2262 +#: d/d-codegen.cc:2276 #, gcc-internal-format msgid "need %<this%> to access member %qE" msgstr "" -#: d/d-codegen.cc:2412 +#: d/d-codegen.cc:2426 #, gcc-internal-format msgid "tried to perform floating-point modulo division on %qT" msgstr "" -#: d/d-codegen.cc:2463 +#: d/d-codegen.cc:2477 #, gcc-internal-format msgid "cannot get frame pointer to %qs" msgstr "" #. Should instead error on line that references `fd'. -#: d/d-codegen.cc:2489 +#: d/d-codegen.cc:2503 #, gcc-internal-format msgid "nested function missing body" msgstr "" -#: d/d-codegen.cc:2531 +#: d/d-codegen.cc:2545 #, gcc-internal-format msgid "%qs is a nested function and cannot be accessed from %qs" msgstr "" -#: d/d-codegen.cc:2840 +#: d/d-codegen.cc:2854 #, gcc-internal-format msgid "variable %qs has scoped destruction, cannot build closure" msgstr "" -#: d/d-codegen.cc:2848 +#: d/d-codegen.cc:2862 #, gcc-internal-format msgid "explicit register variable %qs cannot be used in nested function" msgstr "" -#: d/d-codegen.cc:3073 +#: d/d-codegen.cc:3087 #, gcc-internal-format msgid "forward reference to frame of %qs" msgstr "" @@ -72756,42 +72932,42 @@ msgstr "" msgid "bad argument for %<-fextern-std%>: %qs" msgstr "" -#: d/d-lang.cc:537 +#: d/d-lang.cc:541 #, gcc-internal-format msgid "bad argument for %<-fmodule-file=%>: %qs" msgstr "" -#: d/d-lang.cc:704 +#: d/d-lang.cc:708 #, gcc-internal-format msgid "bad argument for %<-fversion=%>: %qs" msgstr "" -#: d/d-lang.cc:980 +#: d/d-lang.cc:984 #, gcc-internal-format msgid "unable to open %s for writing: %m" msgstr "" -#: d/d-lang.cc:987 +#: d/d-lang.cc:991 #, gcc-internal-format msgid "writing output file %s: %m" msgstr "" -#: d/d-lang.cc:1007 +#: d/d-lang.cc:1011 #, gcc-internal-format msgid "unable to open %s for reading: %m" msgstr "" -#: d/d-lang.cc:1032 +#: d/d-lang.cc:1036 #, gcc-internal-format msgid "reading ddoc file %s: %m" msgstr "" -#: d/d-lang.cc:1091 +#: d/d-lang.cc:1095 #, gcc-internal-format msgid "%<-fonly=%> argument is different from first input file name" msgstr "" -#: d/d-lang.cc:1274 +#: d/d-lang.cc:1278 #, gcc-internal-format msgid "unable to resolve forward reference in definition" msgstr "" @@ -72832,27 +73008,27 @@ msgstr "" msgid "use %<alias %s = %s.%s;%> to introduce base class overload set" msgstr "" -#: d/decl.cc:811 +#: d/decl.cc:815 #, gcc-internal-format msgid "size is too large" msgstr "" -#: d/decl.cc:1423 +#: d/decl.cc:1428 #, gcc-internal-format msgid "function requires a dual-context, which is not yet supported by GDC" msgstr "" -#: d/decl.cc:1600 +#: d/decl.cc:1605 #, gcc-internal-format msgid "explicit register variable %qs declared %<extern%>" msgstr "" -#: d/decl.cc:1603 +#: d/decl.cc:1608 #, gcc-internal-format msgid "explicit register variable %qs declared thread local" msgstr "" -#: d/decl.cc:1816 +#: d/decl.cc:1821 #, gcc-internal-format msgid "" "mismatch between declaration %qE size (%wd) and its initializer size (%wd)" @@ -72913,17 +73089,17 @@ msgstr "" msgid "recursive reference %qs" msgstr "" -#: d/expr.cc:2157 d/expr.cc:3055 +#: d/expr.cc:2157 d/expr.cc:3057 #, gcc-internal-format msgid "non-constant expression %qs" msgstr "" -#: d/expr.cc:3022 +#: d/expr.cc:3024 #, gcc-internal-format msgid "%qs is not an expression" msgstr "" -#: d/expr.cc:3029 +#: d/expr.cc:3031 #, gcc-internal-format msgid "type %qs is not an expression" msgstr "" @@ -72966,7 +73142,7 @@ msgstr "" msgid "intrinsic function %qE must be directly called" msgstr "" -#: d/modules.cc:417 +#: d/modules.cc:418 #, gcc-internal-format msgid "%<-fmoduleinfo%> is not supported on this target" msgstr "" @@ -73035,17 +73211,17 @@ msgstr "" msgid "%<object.TypeInfo%> could not be found, but is implicitly used" msgstr "" -#: d/types.cc:161 +#: d/types.cc:160 #, gcc-internal-format msgid "missing or corrupt object.d" msgstr "" -#: d/types.cc:902 +#: d/types.cc:896 #, gcc-internal-format, gfc-internal-format msgid "invalid expression for static array dimension: %s" msgstr "" -#: d/types.cc:1110 +#: d/types.cc:1104 #, gcc-internal-format msgid "size of %qs (%wd) differ from its declared size (%wd)" msgstr "" @@ -73359,12 +73535,10 @@ msgstr "" msgid "Array reference at %C cannot have more than %d dimensions" msgstr "" -#: fortran/array.cc:335 fortran/array.cc:805 fortran/check.cc:3813 -#: fortran/check.cc:6539 fortran/check.cc:6582 fortran/check.cc:6624 -#: fortran/check.cc:6651 fortran/check.cc:6914 fortran/match.cc:1859 -#: fortran/match.cc:3656 fortran/match.cc:3998 fortran/match.cc:4194 -#: fortran/simplify.cc:3099 fortran/simplify.cc:3129 fortran/simplify.cc:6736 -#: fortran/simplify.cc:9043 +#: fortran/array.cc:335 fortran/array.cc:805 fortran/match.cc:1917 +#: fortran/match.cc:3811 fortran/match.cc:4298 fortran/match.cc:4494 +#: fortran/simplify.cc:3099 fortran/simplify.cc:3129 fortran/simplify.cc:6738 +#: fortran/simplify.cc:9039 #, gcc-internal-format msgid "Coarrays disabled at %C, use %<-fcoarray=%> to enable" msgstr "" @@ -73521,7 +73695,7 @@ msgstr "" msgid "Array constructor including type specification at %C" msgstr "" -#: fortran/array.cc:1372 fortran/match.cc:4630 +#: fortran/array.cc:1372 fortran/match.cc:4930 #, gcc-internal-format, gfc-internal-format msgid "Type-spec at %L cannot contain a deferred type parameter" msgstr "" @@ -73641,7 +73815,7 @@ msgstr "" msgid "Arguments of %qs at %L and %L cannot both be BOZ literal constants" msgstr "" -#: fortran/check.cc:123 fortran/resolve.cc:12315 +#: fortran/check.cc:123 fortran/resolve.cc:12453 #, gcc-internal-format, gfc-internal-format msgid "Invalid use of BOZ literal constant at %L" msgstr "" @@ -73704,7 +73878,7 @@ msgstr "" msgid "%qs argument of %qs intrinsic at %L must be INTEGER or REAL or UNSIGNED" msgstr "" -#: fortran/check.cc:681 fortran/check.cc:3768 +#: fortran/check.cc:681 fortran/check.cc:3793 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be of intrinsic type" msgstr "" @@ -73719,7 +73893,7 @@ msgstr "" msgid "%qs argument of %qs intrinsic at %L must be INTEGER or PROCEDURE" msgstr "" -#: fortran/check.cc:742 fortran/check.cc:8216 +#: fortran/check.cc:742 fortran/check.cc:8278 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be a constant" msgstr "" @@ -73853,7 +74027,7 @@ msgstr "" msgid "%qs and %qs arguments of %qs intrinsic at %L must have the same type" msgstr "" -#: fortran/check.cc:1531 fortran/check.cc:1564 fortran/check.cc:4085 +#: fortran/check.cc:1531 fortran/check.cc:1564 fortran/check.cc:4111 #, gcc-internal-format, gfc-internal-format msgid "Different type kinds at %L" msgstr "" @@ -73869,7 +74043,7 @@ msgstr "" msgid "%qs argument of %qs intrinsic at %L must be a POINTER" msgstr "" -#: fortran/check.cc:1618 fortran/check.cc:1653 fortran/check.cc:4870 +#: fortran/check.cc:1618 fortran/check.cc:1653 fortran/check.cc:4906 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be coindexed" msgstr "" @@ -73913,17 +74087,17 @@ msgid "" "%qs argument of %qs intrinsic at %L shall have the same type as %qs at %L" msgstr "" -#: fortran/check.cc:1751 fortran/check.cc:2000 +#: fortran/check.cc:1751 fortran/check.cc:2025 #, gcc-internal-format, gfc-internal-format msgid "STAT= argument to %s at %L" msgstr "" -#: fortran/check.cc:1770 fortran/check.cc:1940 fortran/check.cc:2037 +#: fortran/check.cc:1770 fortran/check.cc:1965 fortran/check.cc:2062 #, gcc-internal-format, gfc-internal-format msgid "ATOM argument of the %s intrinsic function at %L shall be definable" msgstr "" -#: fortran/check.cc:1784 fortran/check.cc:2020 +#: fortran/check.cc:1784 fortran/check.cc:2045 #, gcc-internal-format, gfc-internal-format msgid "" "ATOM argument at %L to intrinsic function %s shall be an integer of " @@ -73935,112 +74109,129 @@ msgstr "" msgid "VALUE argument of the %s intrinsic function at %L shall be definable" msgstr "" -#: fortran/check.cc:1823 fortran/check.cc:1873 fortran/check.cc:1908 +#: fortran/check.cc:1819 #, gcc-internal-format -msgid "%qs argument of %qs intrinsic at %L not yet supported" +msgid "" +"%qs argument of %qs intrinsic at %L shall be of type %<team_type%> from the " +"intrinsic module %<ISO_FORTRAN_ENV%>" msgstr "" -#: fortran/check.cc:1848 +#: fortran/check.cc:1858 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L shall have a type of " "CHARACTER(KIND=C_CHAR)" msgstr "" -#: fortran/check.cc:1893 +#: fortran/check.cc:1883 +#, gcc-internal-format +msgid "%qs argument of %qs intrinsic at %L not yet supported" +msgstr "" + +#: fortran/check.cc:1903 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall specify a valid integer kind" msgstr "" -#: fortran/check.cc:1947 fortran/check.cc:2044 +#: fortran/check.cc:1930 +#, gcc-internal-format +msgid "" +"%qs argument of %qs intrinsic at %L shall specify one of the INITIAL_TEAM, " +"PARENT_TEAM or CURRENT_TEAM constants from the intrinsic module " +"ISO_FORTRAN_ENV" +msgstr "" + +#: fortran/check.cc:1972 fortran/check.cc:2069 #, gcc-internal-format, gfc-internal-format msgid "OLD argument of the %s intrinsic function at %L shall be definable" msgstr "" -#: fortran/check.cc:1962 +#: fortran/check.cc:1987 #, gcc-internal-format, gfc-internal-format msgid "" "EVENT argument at %L to the intrinsic EVENT_QUERY shall be of type EVENT_TYPE" msgstr "" -#: fortran/check.cc:1972 +#: fortran/check.cc:1997 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT argument of the EVENT_QUERY intrinsic function at %L shall be definable" msgstr "" -#: fortran/check.cc:1985 +#: fortran/check.cc:2010 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT argument of the EVENT_QUERY intrinsic function at %L shall have at " "least the range of the default integer" msgstr "" -#: fortran/check.cc:2064 +#: fortran/check.cc:2089 #, gcc-internal-format, gfc-internal-format msgid "Negative argument N at %L" msgstr "" -#: fortran/check.cc:2195 +#: fortran/check.cc:2220 #, gcc-internal-format, gfc-internal-format msgid "BOZ literal constant at %L cannot appear in CHAR intrinsic subprogram" msgstr "" -#: fortran/check.cc:2319 fortran/check.cc:2839 +#: fortran/check.cc:2344 fortran/check.cc:2864 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must not be present if %<x%> is COMPLEX" msgstr "" -#: fortran/check.cc:2328 fortran/check.cc:2848 +#: fortran/check.cc:2353 fortran/check.cc:2873 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must have a type of either REAL or " "INTEGER" msgstr "" -#: fortran/check.cc:2338 fortran/check.cc:2344 +#: fortran/check.cc:2363 fortran/check.cc:2369 #, gcc-internal-format, gfc-internal-format msgid "" "Conversion from %s to default-kind COMPLEX(%d) at %L might lose precision, " "consider using the KIND argument" msgstr "" -#: fortran/check.cc:2366 +#: fortran/check.cc:2391 #, gcc-internal-format msgid "" "Argument %<A%> with INTENT(INOUT) at %L of the intrinsic subroutine %s shall " "not have a vector subscript" msgstr "" -#: fortran/check.cc:2374 +#: fortran/check.cc:2399 #, gcc-internal-format, gfc-internal-format msgid "The A argument at %L to the intrinsic %s shall not be coindexed" msgstr "" -#: fortran/check.cc:2397 +#: fortran/check.cc:2422 #, gcc-internal-format, gfc-internal-format msgid "The stat= argument at %L must be a kind=4 integer variable" msgstr "" -#: fortran/check.cc:2413 +#: fortran/check.cc:2438 #, gcc-internal-format, gfc-internal-format msgid "The errmsg= argument at %L must be a default-kind character variable" msgstr "" -#: fortran/check.cc:2421 +#: fortran/check.cc:2446 fortran/check.cc:3838 fortran/check.cc:6576 +#: fortran/check.cc:6627 fortran/check.cc:6657 fortran/check.cc:6675 +#: fortran/check.cc:6975 #, gcc-internal-format msgid "Coarrays disabled at %L, use %<-fcoarray=%> to enable" msgstr "" -#: fortran/check.cc:2436 +#: fortran/check.cc:2461 #, gcc-internal-format, gfc-internal-format msgid "" "Support for the A argument at %L which is polymorphic A argument or has " "allocatable components is not yet implemented" msgstr "" -#: fortran/check.cc:2469 +#: fortran/check.cc:2494 #, gcc-internal-format, gfc-internal-format msgid "OPERATION argument at %L must be a PURE function" msgstr "" @@ -74048,903 +74239,903 @@ msgstr "" #. None of the intrinsics fulfills the criteria of taking two arguments, #. returning the same type and kind as the arguments and being permitted #. as actual argument. -#: fortran/check.cc:2479 +#: fortran/check.cc:2504 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic function %s at %L is not permitted for %s" msgstr "" -#: fortran/check.cc:2497 +#: fortran/check.cc:2522 #, gcc-internal-format, gfc-internal-format msgid "The function passed as OPERATION at %L shall have two arguments" msgstr "" -#: fortran/check.cc:2507 +#: fortran/check.cc:2532 #, gcc-internal-format, gfc-internal-format msgid "" "The %s argument at %L has type %s but the function passed as OPERATION at %L " "returns %s" msgstr "" -#: fortran/check.cc:2518 +#: fortran/check.cc:2543 #, gcc-internal-format, gfc-internal-format msgid "" "The function passed as OPERATION at %L has arguments of type %s and %s but " "shall have type %s" msgstr "" -#: fortran/check.cc:2529 +#: fortran/check.cc:2554 #, gcc-internal-format, gfc-internal-format msgid "" "The function passed as OPERATION at %L shall have scalar nonallocatable " "nonpointer arguments and return a nonallocatable nonpointer scalar" msgstr "" -#: fortran/check.cc:2537 +#: fortran/check.cc:2562 #, gcc-internal-format, gfc-internal-format msgid "" "The function passed as OPERATION at %L shall have the VALUE attribute either " "for none or both arguments" msgstr "" -#: fortran/check.cc:2544 +#: fortran/check.cc:2569 #, gcc-internal-format, gfc-internal-format msgid "" "The function passed as OPERATION at %L shall have the TARGET attribute " "either for none or both arguments" msgstr "" -#: fortran/check.cc:2551 +#: fortran/check.cc:2576 #, gcc-internal-format, gfc-internal-format msgid "" "The function passed as OPERATION at %L shall have the ASYNCHRONOUS attribute " "either for none or both arguments" msgstr "" -#: fortran/check.cc:2559 +#: fortran/check.cc:2584 #, gcc-internal-format, gfc-internal-format msgid "" "The function passed as OPERATION at %L shall not have the OPTIONAL attribute " "for either of the arguments" msgstr "" -#: fortran/check.cc:2577 +#: fortran/check.cc:2602 #, gcc-internal-format, gfc-internal-format msgid "" "The character length of the %s argument at %L and of the arguments of the " "OPERATION at %L shall be the same" msgstr "" -#: fortran/check.cc:2585 +#: fortran/check.cc:2610 #, gcc-internal-format, gfc-internal-format msgid "" "The character length of the %s argument at %L and of the function result of " "the OPERATION at %L shall be the same" msgstr "" -#: fortran/check.cc:2602 +#: fortran/check.cc:2627 #, gcc-internal-format, gfc-internal-format msgid "The A argument at %L of CO_REDUCE shall not be polymorphic" msgstr "" -#: fortran/check.cc:2609 +#: fortran/check.cc:2634 #, gcc-internal-format, gfc-internal-format msgid "" "Support for the A argument at %L with allocatable components is not yet " "implemented" msgstr "" -#: fortran/check.cc:2631 +#: fortran/check.cc:2656 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L shall be of type integer, real or " "character" msgstr "" -#: fortran/check.cc:2660 fortran/check.cc:2668 +#: fortran/check.cc:2685 fortran/check.cc:2693 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be UNSIGNED" msgstr "" -#: fortran/check.cc:2676 fortran/check.cc:2690 +#: fortran/check.cc:2701 fortran/check.cc:2715 #, gcc-internal-format, gfc-internal-format msgid "BOZ constant at %L cannot appear in the COMPLEX intrinsic subprogram" msgstr "" -#: fortran/check.cc:2727 fortran/check.cc:3454 fortran/check.cc:3537 -#: fortran/check.cc:3799 fortran/check.cc:3847 fortran/check.cc:5515 -#: fortran/check.cc:5639 fortran/check.cc:5717 fortran/check.cc:6900 -#: fortran/check.cc:7031 +#: fortran/check.cc:2752 fortran/check.cc:3479 fortran/check.cc:3562 +#: fortran/check.cc:3824 fortran/check.cc:3873 fortran/check.cc:5551 +#: fortran/check.cc:5675 fortran/check.cc:5753 fortran/check.cc:6961 +#: fortran/check.cc:7093 #, gcc-internal-format msgid "%qs intrinsic with KIND argument at %L" msgstr "" -#: fortran/check.cc:2774 fortran/check.cc:3082 fortran/check.cc:3142 +#: fortran/check.cc:2799 fortran/check.cc:3107 fortran/check.cc:3167 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L has invalid shape in dimension %d (%ld/" "%ld)" msgstr "" -#: fortran/check.cc:2789 fortran/check.cc:3097 fortran/check.cc:3157 +#: fortran/check.cc:2814 fortran/check.cc:3122 fortran/check.cc:3182 #, gcc-internal-format msgid "%qs argument of intrinsic %qs at %L of must have rank %d or be a scalar" msgstr "" -#: fortran/check.cc:2911 fortran/check.cc:4197 fortran/check.cc:4205 +#: fortran/check.cc:2936 fortran/check.cc:4223 fortran/check.cc:4231 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be numeric or LOGICAL" msgstr "" -#: fortran/check.cc:2919 fortran/check.cc:4215 +#: fortran/check.cc:2944 fortran/check.cc:4241 #, gcc-internal-format msgid "Argument types of %qs intrinsic at %L must match (%s/%s)" msgstr "" -#: fortran/check.cc:2933 +#: fortran/check.cc:2958 #, gcc-internal-format msgid "" "Different shape for arguments %qs and %qs at %L for intrinsic %<dot_product%>" msgstr "" -#: fortran/check.cc:2953 fortran/check.cc:2961 +#: fortran/check.cc:2978 fortran/check.cc:2986 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be default real" msgstr "" -#: fortran/check.cc:3118 +#: fortran/check.cc:3143 #, gcc-internal-format msgid "%qs must be of same type and kind as %qs at %L in %qs" msgstr "" -#: fortran/check.cc:3182 +#: fortran/check.cc:3207 #, gcc-internal-format msgid "Missing %qs argument to %qs intrinsic at %L for %qs of type %qs" msgstr "" -#: fortran/check.cc:3200 +#: fortran/check.cc:3225 #, gcc-internal-format, gfc-internal-format msgid "" "BOZ literal constant at %L cannot appear in the FLOAT intrinsic subprogram" msgstr "" -#: fortran/check.cc:3214 +#: fortran/check.cc:3239 #, gcc-internal-format, gfc-internal-format msgid "non-default INTEGER kind argument to %s intrinsic at %L" msgstr "" -#: fortran/check.cc:3275 +#: fortran/check.cc:3300 #, gcc-internal-format msgid "COMPLEX argument %qs of %qs intrinsic at %L" msgstr "" -#: fortran/check.cc:3401 +#: fortran/check.cc:3426 #, gcc-internal-format msgid "Arguments of %qs have different kind type parameters at %L" msgstr "" -#: fortran/check.cc:3505 +#: fortran/check.cc:3530 #, gcc-internal-format, gfc-internal-format msgid "Argument of %s at %L must be of length one" msgstr "" -#: fortran/check.cc:3544 +#: fortran/check.cc:3569 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be the same kind as %qs" msgstr "" -#: fortran/check.cc:3577 +#: fortran/check.cc:3602 #, gcc-internal-format msgid "UINT intrinsic only valid with %<-funsigned%> at %L" msgstr "" -#: fortran/check.cc:3601 +#: fortran/check.cc:3626 #, gcc-internal-format msgid "" "%qs intrinsic subprogram at %L has been removed. Use INT intrinsic " "subprogram." msgstr "" -#: fortran/check.cc:3670 +#: fortran/check.cc:3695 #, gcc-internal-format, gfc-internal-format msgid "SIZE at %L must be positive" msgstr "" -#: fortran/check.cc:3682 +#: fortran/check.cc:3707 #, gcc-internal-format, gfc-internal-format msgid "" "The absolute value of SHIFT at %L must be less than or equal to SIZE at %L" msgstr "" -#: fortran/check.cc:3741 +#: fortran/check.cc:3766 #, gcc-internal-format, gfc-internal-format msgid "STATUS at %L shall be an INTENT(OUT) variable" msgstr "" -#: fortran/check.cc:3750 +#: fortran/check.cc:3775 #, gcc-internal-format msgid "%qs at %L shall be an INTENT(OUT) variable" msgstr "" -#: fortran/check.cc:3775 +#: fortran/check.cc:3800 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be a data entity" msgstr "" -#: fortran/check.cc:3989 +#: fortran/check.cc:4015 #, gcc-internal-format msgid "Intrinsic %qs at %L must have at least two arguments" msgstr "" -#: fortran/check.cc:4037 +#: fortran/check.cc:4063 #, gcc-internal-format msgid "Missing %qs argument to the %s intrinsic at %L" msgstr "" -#: fortran/check.cc:4052 +#: fortran/check.cc:4078 #, gcc-internal-format msgid "Duplicate argument %qs at %L to intrinsic %s" msgstr "" -#: fortran/check.cc:4057 +#: fortran/check.cc:4083 #, gcc-internal-format msgid "Unknown argument %qs at %L to intrinsic %s" msgstr "" -#: fortran/check.cc:4082 +#: fortran/check.cc:4108 #, gcc-internal-format, gfc-internal-format msgid "Different character kinds at %L" msgstr "" -#: fortran/check.cc:4091 +#: fortran/check.cc:4117 #, gcc-internal-format msgid "%<a%d%> argument of %qs intrinsic at %L must be %s(%d)" msgstr "" -#: fortran/check.cc:4122 +#: fortran/check.cc:4148 #, gcc-internal-format msgid "%qs intrinsic with CHARACTER argument at %L" msgstr "" -#: fortran/check.cc:4134 +#: fortran/check.cc:4160 #, gcc-internal-format msgid "" "%<a1%> argument of %qs intrinsic at %L must be INTEGER, REAL, CHARACTER or " "UNSIGNED" msgstr "" -#: fortran/check.cc:4144 +#: fortran/check.cc:4170 #, gcc-internal-format msgid "" "%<a1%> argument of %qs intrinsic at %L must be INTEGER, REAL or CHARACTER" msgstr "" -#: fortran/check.cc:4229 +#: fortran/check.cc:4255 #, gcc-internal-format msgid "" "Different shape on dimension 1 for arguments %qs and %qs at %L for intrinsic " "matmul" msgstr "" -#: fortran/check.cc:4248 +#: fortran/check.cc:4274 #, gcc-internal-format msgid "" "Different shape on dimension 2 for argument %qs and dimension 1 for argument " "%qs at %L for intrinsic matmul" msgstr "" -#: fortran/check.cc:4257 +#: fortran/check.cc:4283 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be of rank 1 or 2" msgstr "" -#: fortran/check.cc:4435 +#: fortran/check.cc:4461 #, gcc-internal-format msgid "" "Argument %qs of %qs intrinsic at %L must be in type conformance to argument " "%qs at %L" msgstr "" -#: fortran/check.cc:4569 +#: fortran/check.cc:4595 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be INTEGER or UNSIGNED" msgstr "" -#: fortran/check.cc:4577 fortran/check.cc:8136 fortran/check.cc:8151 +#: fortran/check.cc:4603 fortran/check.cc:8198 fortran/check.cc:8213 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be INTEGER" msgstr "" -#: fortran/check.cc:4694 +#: fortran/check.cc:4718 +#, gcc-internal-format, gfc-internal-format +msgid "STAT= or ERRMSG= at %L not supported" +msgstr "" + +#: fortran/check.cc:4730 #, gcc-internal-format, gfc-internal-format msgid "The FROM argument to MOVE_ALLOC at %L shall not be coindexed" msgstr "" -#: fortran/check.cc:4705 +#: fortran/check.cc:4741 #, gcc-internal-format, gfc-internal-format msgid "The TO argument to MOVE_ALLOC at %L shall not be coindexed" msgstr "" -#: fortran/check.cc:4712 +#: fortran/check.cc:4748 #, gcc-internal-format, gfc-internal-format msgid "" "The TO arguments in MOVE_ALLOC at %L must be polymorphic if FROM is " "polymorphic" msgstr "" -#: fortran/check.cc:4723 +#: fortran/check.cc:4759 #, gcc-internal-format, gfc-internal-format msgid "" "The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L must have the " "same rank %d/%d" msgstr "" -#: fortran/check.cc:4732 +#: fortran/check.cc:4768 #, gcc-internal-format, gfc-internal-format msgid "" "The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L must have the " "same corank %d/%d" msgstr "" -#: fortran/check.cc:4772 +#: fortran/check.cc:4808 #, gcc-internal-format, gfc-internal-format msgid "" "The FROM and TO arguments at %L violate aliasing restrictions (F2003 " "12.4.1.7)" msgstr "" -#: fortran/check.cc:4799 +#: fortran/check.cc:4835 #, gcc-internal-format msgid "Argument %<S%> of NEAREST at %L shall not be zero" msgstr "" -#: fortran/check.cc:4855 +#: fortran/check.cc:4891 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be a POINTER, ALLOCATABLE or " "procedure pointer" msgstr "" -#: fortran/check.cc:4863 +#: fortran/check.cc:4899 #, gcc-internal-format, gfc-internal-format msgid "NULL intrinsic with allocatable MOLD at %L" msgstr "" -#: fortran/check.cc:4906 +#: fortran/check.cc:4942 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L shall appear only if %qs is of type REAL " "and %qs is of type INTEGER or UNSIGNED" msgstr "" -#: fortran/check.cc:4984 fortran/check.cc:6978 +#: fortran/check.cc:5020 fortran/check.cc:7040 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must provide at least as many elements " "as there are .TRUE. values in %qs (%ld/%d)" msgstr "" -#: fortran/check.cc:5045 +#: fortran/check.cc:5081 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be of a dummy variable" msgstr "" -#: fortran/check.cc:5055 +#: fortran/check.cc:5091 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be of an OPTIONAL dummy variable" msgstr "" -#: fortran/check.cc:5074 +#: fortran/check.cc:5110 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must not be a subobject of %qs" msgstr "" -#: fortran/check.cc:5125 +#: fortran/check.cc:5161 #, gcc-internal-format, gfc-internal-format msgid "The argument of the RANK intrinsic at %L must be a data object" msgstr "" -#: fortran/check.cc:5157 +#: fortran/check.cc:5193 #, gcc-internal-format, gfc-internal-format msgid "The ARRAY argument at %L of REDUCE shall not be polymorphic" msgstr "" -#: fortran/check.cc:5167 +#: fortran/check.cc:5203 #, gcc-internal-format, gfc-internal-format msgid "The DIM argument at %L, if present, must be an integer scalar" msgstr "" -#: fortran/check.cc:5174 +#: fortran/check.cc:5210 #, gcc-internal-format, gfc-internal-format msgid "" "The MASK argument at %L, if present, must be a logical array with the same " "rank as ARRAY" msgstr "" -#: fortran/check.cc:5186 +#: fortran/check.cc:5222 #, gcc-internal-format, gfc-internal-format msgid "MASK present at %L without IDENTITY" msgstr "" -#: fortran/check.cc:5190 +#: fortran/check.cc:5226 #, gcc-internal-format, gfc-internal-format msgid "The ORDERED argument at %L, if present, must be a logical scalar" msgstr "" -#: fortran/check.cc:5198 +#: fortran/check.cc:5234 #, gcc-internal-format, gfc-internal-format msgid "" "The IDENTITY argument at %L, if present, must be a scalar with the same type " "as ARRAY" msgstr "" -#: fortran/check.cc:5289 +#: fortran/check.cc:5325 #, gcc-internal-format msgid "" "%<shape%> argument of %<reshape%> intrinsic at %L must be an array of " "constant size" msgstr "" -#: fortran/check.cc:5299 +#: fortran/check.cc:5335 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L is empty" msgstr "" -#: fortran/check.cc:5306 +#: fortran/check.cc:5342 #, gcc-internal-format msgid "" "%<shape%> argument of %<reshape%> intrinsic at %L has more than %d elements" msgstr "" -#: fortran/check.cc:5329 +#: fortran/check.cc:5365 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L has negative element (%d)" msgstr "" -#: fortran/check.cc:5369 +#: fortran/check.cc:5405 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L has wrong number of elements (%d/%d)" msgstr "" -#: fortran/check.cc:5387 +#: fortran/check.cc:5423 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L has out-of-range dimension (%d)" msgstr "" -#: fortran/check.cc:5396 +#: fortran/check.cc:5432 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L has invalid permutation of dimensions " "(dimension %qd duplicated)" msgstr "" -#: fortran/check.cc:5431 fortran/simplify.cc:7594 +#: fortran/check.cc:5467 fortran/simplify.cc:7589 #, gcc-internal-format, gfc-internal-format msgid "" "Without padding, there are not enough elements in the intrinsic RESHAPE " "source at %L to match the shape" msgstr "" -#: fortran/check.cc:5448 fortran/check.cc:5467 +#: fortran/check.cc:5484 fortran/check.cc:5503 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L cannot be of type %s" msgstr "" -#: fortran/check.cc:5458 fortran/check.cc:5477 +#: fortran/check.cc:5494 fortran/check.cc:5513 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be of an extensible type" msgstr "" -#: fortran/check.cc:5575 +#: fortran/check.cc:5611 #, gcc-internal-format msgid "SELECTED_REAL_KIND with neither %<P%> nor %<R%> argument at %L" msgstr "" -#: fortran/check.cc:5606 +#: fortran/check.cc:5642 #, gcc-internal-format msgid "%qs intrinsic with RADIX argument at %L" msgstr "" -#: fortran/check.cc:5654 +#: fortran/check.cc:5690 #, gcc-internal-format msgid "" "%<source%> argument of %<shape%> intrinsic at %L must not be an assumed size " "array" msgstr "" -#: fortran/check.cc:5735 fortran/check.cc:8196 +#: fortran/check.cc:5771 fortran/check.cc:8258 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be a procedure" msgstr "" -#: fortran/check.cc:5751 fortran/check.cc:5897 fortran/check.cc:8188 +#: fortran/check.cc:5787 fortran/check.cc:5933 fortran/check.cc:8250 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be TYPE(*)" msgstr "" -#: fortran/check.cc:5762 fortran/check.cc:5909 +#: fortran/check.cc:5798 fortran/check.cc:5945 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be an assumed-size array" msgstr "" -#: fortran/check.cc:5844 +#: fortran/check.cc:5880 #, gcc-internal-format msgid "is_c_interoperable(): gfc_simplify_expr failed" msgstr "" -#: fortran/check.cc:5888 +#: fortran/check.cc:5924 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be an interoperable data entity: %s" msgstr "" -#: fortran/check.cc:5927 +#: fortran/check.cc:5963 #, gcc-internal-format, gfc-internal-format msgid "" "Argument C_PTR_1 at %L to C_ASSOCIATED shall have the type TYPE(C_PTR) or " "TYPE(C_FUNPTR)" msgstr "" -#: fortran/check.cc:5941 +#: fortran/check.cc:5977 #, gcc-internal-format, gfc-internal-format msgid "" "Argument C_PTR_2 at %L to C_ASSOCIATED shall have the same type as C_PTR_1: " "%s instead of %s" msgstr "" -#: fortran/check.cc:5965 +#: fortran/check.cc:6001 #, gcc-internal-format, gfc-internal-format msgid "Argument CPTR at %L to C_F_POINTER shall have the type TYPE(C_PTR)" msgstr "" -#: fortran/check.cc:5977 +#: fortran/check.cc:6013 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_POINTER must be a pointer" msgstr "" -#: fortran/check.cc:5984 +#: fortran/check.cc:6020 #, gcc-internal-format, gfc-internal-format msgid "FPTR argument at %L to C_F_POINTER shall not be polymorphic" msgstr "" -#: fortran/check.cc:5991 +#: fortran/check.cc:6027 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_POINTER shall not be coindexed" msgstr "" -#: fortran/check.cc:5998 +#: fortran/check.cc:6034 #, gcc-internal-format, gfc-internal-format msgid "Unexpected SHAPE argument at %L to C_F_POINTER with scalar FPTR" msgstr "" -#: fortran/check.cc:6004 +#: fortran/check.cc:6040 #, gcc-internal-format, gfc-internal-format msgid "Expected SHAPE argument to C_F_POINTER with array FPTR at %L" msgstr "" -#: fortran/check.cc:6023 +#: fortran/check.cc:6059 #, gcc-internal-format, gfc-internal-format msgid "" "SHAPE argument at %L to C_F_POINTER must have the same size as the RANK of " "FPTR" msgstr "" -#: fortran/check.cc:6033 +#: fortran/check.cc:6069 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic FPTR at %L to C_F_POINTER" msgstr "" -#: fortran/check.cc:6039 +#: fortran/check.cc:6075 #, gcc-internal-format, gfc-internal-format msgid "FPTR argument to C_F_POINTER at %L is a function returning a pointer" msgstr "" -#: fortran/check.cc:6046 +#: fortran/check.cc:6082 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable array FPTR argument to C_F_POINTER at %L: %s" msgstr "" -#: fortran/check.cc:6062 +#: fortran/check.cc:6098 #, gcc-internal-format, gfc-internal-format msgid "" "Argument CPTR at %L to C_F_PROCPOINTER shall have the type TYPE(C_FUNPTR)" msgstr "" -#: fortran/check.cc:6074 +#: fortran/check.cc:6110 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure pointer" msgstr "" -#: fortran/check.cc:6081 +#: fortran/check.cc:6117 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_PROCPOINTER shall not be coindexed" msgstr "" -#: fortran/check.cc:6087 +#: fortran/check.cc:6123 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable procedure pointer at %L to C_F_PROCPOINTER" msgstr "" -#: fortran/check.cc:6101 +#: fortran/check.cc:6137 #, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_FUNLOC shall not be coindexed" msgstr "" -#: fortran/check.cc:6113 +#: fortran/check.cc:6149 #, gcc-internal-format msgid "Function result %qs at %L is invalid as X argument to C_FUNLOC" msgstr "" -#: fortran/check.cc:6120 +#: fortran/check.cc:6156 #, gcc-internal-format, gfc-internal-format msgid "" "Argument X at %L to C_FUNLOC shall be a procedure or a procedure pointer" msgstr "" -#: fortran/check.cc:6126 +#: fortran/check.cc:6162 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable procedure at %L to C_FUNLOC" msgstr "" -#: fortran/check.cc:6140 +#: fortran/check.cc:6176 #, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall not be coindexed" msgstr "" -#: fortran/check.cc:6146 +#: fortran/check.cc:6182 #, gcc-internal-format, gfc-internal-format msgid "X argument at %L to C_LOC shall not be polymorphic" msgstr "" -#: fortran/check.cc:6157 +#: fortran/check.cc:6193 #, gcc-internal-format, gfc-internal-format msgid "" "Argument X at %L to C_LOC shall have either the POINTER or the TARGET " "attribute" msgstr "" -#: fortran/check.cc:6165 +#: fortran/check.cc:6201 #, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall be not be a zero-sized string" msgstr "" -#: fortran/check.cc:6174 +#: fortran/check.cc:6210 #, gcc-internal-format, gfc-internal-format msgid "Argument at %L to C_LOC shall not be polymorphic" msgstr "" -#: fortran/check.cc:6181 +#: fortran/check.cc:6217 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable array at %L as argument to C_LOC: %s" msgstr "" -#: fortran/check.cc:6192 +#: fortran/check.cc:6228 #, gcc-internal-format, gfc-internal-format msgid "" "Array of interoperable type at %L to C_LOC which is nonallocatable and " "neither assumed size nor explicit size" msgstr "" -#: fortran/check.cc:6197 +#: fortran/check.cc:6233 #, gcc-internal-format, gfc-internal-format msgid "Array section at %L to C_LOC" msgstr "" -#: fortran/check.cc:6225 +#: fortran/check.cc:6261 #, gcc-internal-format, gfc-internal-format msgid "non double precision REAL argument to %s intrinsic at %L" msgstr "" -#: fortran/check.cc:6241 +#: fortran/check.cc:6277 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be less than rank %d" msgstr "" -#: fortran/check.cc:6260 +#: fortran/check.cc:6296 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L is not a valid dimension index" msgstr "" -#: fortran/check.cc:6284 +#: fortran/check.cc:6320 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must have length at least 1" msgstr "" -#: fortran/check.cc:6548 +#: fortran/check.cc:6586 #, gcc-internal-format, gfc-internal-format msgid "%s argument to IMAGE_INDEX must be a rank one array at %L" msgstr "" -#: fortran/check.cc:6555 -#, gcc-internal-format, gfc-internal-format -msgid "Type of %s argument of IMAGE_INDEX at %L shall be INTEGER" -msgstr "" - -#: fortran/check.cc:6564 +#: fortran/check.cc:6598 #, gcc-internal-format, gfc-internal-format msgid "" "The number of array elements of the SUB argument to IMAGE_INDEX at %L shall " "be %d (corank) not %d" msgstr "" -#: fortran/check.cc:6597 -#, gcc-internal-format, gfc-internal-format -msgid "DISTANCE= argument to NUM_IMAGES at %L" -msgstr "" - -#: fortran/check.cc:6610 -#, gcc-internal-format, gfc-internal-format -msgid "FAILED= argument to NUM_IMAGES at %L" +#: fortran/check.cc:6636 +#, gcc-internal-format +msgid "%<team%> or %<team_number%> argument to %qs at %L" msgstr "" -#: fortran/check.cc:6634 -#, gcc-internal-format, gfc-internal-format +#: fortran/check.cc:6696 +#, gcc-internal-format msgid "" -"TEAM argument at %L to the intrinsic TEAM_NUMBER shall be of type TEAM_TYPE" +"First argument of %<this_image%> intrinsic at %L must be a coarray variable " +"or an object of type %<team_type%> from the intrinsic module " +"%<ISO_FORTRAN_ENV%>" msgstr "" -#: fortran/check.cc:6660 -#, gcc-internal-format, gfc-internal-format +#: fortran/check.cc:6725 +#, gcc-internal-format msgid "" -"DIM argument without COARRAY argument not allowed for THIS_IMAGE intrinsic " -"at %L" +"Second argument of %<this_image%> intrinsic at %L must be an %<INTEGER%> " +"typed scalar or an object of type %<team_type%> from the intrinsic module " +"%<ISO_FORTRAN_ENV%>" msgstr "" -#: fortran/check.cc:6667 -#, gcc-internal-format, gfc-internal-format +#: fortran/check.cc:6751 +#, gcc-internal-format msgid "" -"The DISTANCE argument may not be specified together with the COARRAY or DIM " -"argument in intrinsic at %L" +"%<dim%> argument without %<coarray%> argument not allowed for %<this_image%> " +"intrinsic at %L" msgstr "" -#: fortran/check.cc:6678 -#, gcc-internal-format, gfc-internal-format -msgid "Unexpected DIM argument with noncoarray argument at %L" +#: fortran/check.cc:6762 +#, gcc-internal-format +msgid "%<team%> argument to %<this_image%> at %L" msgstr "" -#: fortran/check.cc:6696 -#, gcc-internal-format, gfc-internal-format -msgid "DISTANCE= argument to THIS_IMAGE at %L" +#: fortran/check.cc:6773 +#, gcc-internal-format +msgid "" +"At most one argument of type %<team_type%> from the intrinsic module " +"%<ISO_FORTRAN_ENV%> to %<this_image%> at %L allowed" msgstr "" -#: fortran/check.cc:6754 +#: fortran/check.cc:6815 #, gcc-internal-format msgid "" "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L is an array and shall not " "have storage size 0 when %<SOURCE%> argument has size greater than 0" msgstr "" -#: fortran/check.cc:6806 +#: fortran/check.cc:6867 #, gcc-internal-format msgid "%<SOURCE%> argument of %<TRANSFER%> intrinsic at %L must not be a %s" msgstr "" -#: fortran/check.cc:6825 +#: fortran/check.cc:6886 #, gcc-internal-format msgid "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be a %s" msgstr "" -#: fortran/check.cc:6833 +#: fortran/check.cc:6894 #, gcc-internal-format msgid "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be %s" msgstr "" -#: fortran/check.cc:6868 +#: fortran/check.cc:6929 msgid "" "Intrinsic TRANSFER at %L has partly undefined result: source size %zd < " "result size %zd" msgstr "" -#: fortran/check.cc:6992 +#: fortran/check.cc:7054 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must have the same rank as %qs or be a " "scalar" msgstr "" -#: fortran/check.cc:7005 +#: fortran/check.cc:7067 #, gcc-internal-format msgid "%qs and %qs arguments of %qs intrinsic at %L must have identical shape." msgstr "" -#: fortran/check.cc:7141 +#: fortran/check.cc:7203 #, gcc-internal-format, gfc-internal-format msgid "VALUES argument of DATE_AND_TIME at %L has non-default kind" msgstr "" -#: fortran/check.cc:7153 +#: fortran/check.cc:7215 #, gcc-internal-format, gfc-internal-format msgid "" "VALUES argument of DATE_AND_TIME at %L must have a decimal exponent range of " "at least four" msgstr "" -#: fortran/check.cc:7308 fortran/check.cc:7344 +#: fortran/check.cc:7370 fortran/check.cc:7406 #, gcc-internal-format msgid "Size of %qs argument of %qs intrinsic at %L too small (%i/%i)" msgstr "" -#: fortran/check.cc:7355 +#: fortran/check.cc:7417 #, gcc-internal-format, gfc-internal-format msgid "Too many arguments to %s at %L" msgstr "" -#: fortran/check.cc:7373 +#: fortran/check.cc:7435 #, gcc-internal-format msgid "fe_runtime_error string must be null terminated" msgstr "" -#: fortran/check.cc:7385 +#: fortran/check.cc:7447 #, gcc-internal-format, gfc-internal-format msgid "fe_runtime_error: Wrong number of arguments (%d instead of %d)" msgstr "" -#: fortran/check.cc:7427 +#: fortran/check.cc:7489 #, gcc-internal-format, gfc-internal-format msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "" -#: fortran/check.cc:7434 +#: fortran/check.cc:7496 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT argument to SYSTEM_CLOCK at %L with kind smaller than default integer" msgstr "" -#: fortran/check.cc:7455 +#: fortran/check.cc:7517 #, gcc-internal-format, gfc-internal-format msgid "Real COUNT_RATE argument to SYSTEM_CLOCK at %L" msgstr "" -#: fortran/check.cc:7465 +#: fortran/check.cc:7527 #, gcc-internal-format, gfc-internal-format msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "" -#: fortran/check.cc:7472 +#: fortran/check.cc:7534 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT_RATE argument to SYSTEM_CLOCK at %L with kind smaller than default " "integer" msgstr "" -#: fortran/check.cc:7492 +#: fortran/check.cc:7554 #, gcc-internal-format, gfc-internal-format msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "" -#: fortran/check.cc:7502 +#: fortran/check.cc:7564 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT_MAX argument to SYSTEM_CLOCK at %L with kind smaller than default " "integer" msgstr "" -#: fortran/check.cc:7517 fortran/check.cc:7524 +#: fortran/check.cc:7579 fortran/check.cc:7586 #, gcc-internal-format, gfc-internal-format msgid "integer arguments to SYSTEM_CLOCK at %L with different kind parameters" msgstr "" -#: fortran/check.cc:7738 +#: fortran/check.cc:7800 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be of a kind not wider than the " "default kind (%d)" msgstr "" -#: fortran/check.cc:7920 +#: fortran/check.cc:7982 #, gcc-internal-format msgid "Actual argument at %L of %qs intrinsic shall be an associated pointer" msgstr "" -#: fortran/check.cc:8109 fortran/check.cc:8120 +#: fortran/check.cc:8171 fortran/check.cc:8182 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be INTEGER, LOGICAL, or a BOZ " "literal constant" msgstr "" -#: fortran/check.cc:8180 +#: fortran/check.cc:8242 #, gcc-internal-format, gfc-internal-format msgid "" "Intrinsic function NULL at %L cannot be an actual argument to STORAGE_SIZE, " @@ -74953,7 +75144,7 @@ msgstr "" #. Since the extension field is 8 bit wide, we can only have #. up to 255 extension levels. -#: fortran/class.cc:811 fortran/decl.cc:4106 fortran/decl.cc:10866 +#: fortran/class.cc:811 fortran/decl.cc:4106 fortran/decl.cc:10878 #, gcc-internal-format msgid "Maximum extension level reached with type %qs at %L" msgstr "" @@ -75003,12 +75194,12 @@ msgstr "" msgid "Initialization string at %L was truncated to fit the variable (%wd/%wd)" msgstr "" -#: fortran/data.cc:220 fortran/resolve.cc:5568 +#: fortran/data.cc:220 fortran/resolve.cc:5604 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L is less than one" msgstr "" -#: fortran/data.cc:226 fortran/resolve.cc:5598 +#: fortran/data.cc:226 fortran/resolve.cc:5634 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L exceeds the string length" msgstr "" @@ -75204,7 +75395,7 @@ msgstr "" msgid "deferred type parameter at %C" msgstr "" -#: fortran/decl.cc:1166 fortran/resolve.cc:14128 +#: fortran/decl.cc:1166 fortran/resolve.cc:14246 #, gcc-internal-format, gfc-internal-format msgid "Scalar INTEGER expression expected at %L" msgstr "" @@ -75604,7 +75795,7 @@ msgstr "" msgid "Pointer initialization at %C requires %<=>%>, not %<=%>" msgstr "" -#: fortran/decl.cc:3089 fortran/decl.cc:11040 +#: fortran/decl.cc:3089 fortran/decl.cc:11052 #, gcc-internal-format, gfc-internal-format msgid "Expected an initialization expression at %C" msgstr "" @@ -75988,7 +76179,7 @@ msgstr "" msgid "CONTIGUOUS attribute at %C" msgstr "" -#: fortran/decl.cc:5858 fortran/decl.cc:9389 +#: fortran/decl.cc:5858 fortran/decl.cc:9401 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED at %C only allowed in specification part of a module" msgstr "" @@ -76258,12 +76449,12 @@ msgstr "" msgid "Procedure %qs at %L already has basic type of %s" msgstr "" -#: fortran/decl.cc:7292 fortran/decl.cc:7480 fortran/decl.cc:11524 +#: fortran/decl.cc:7292 fortran/decl.cc:7480 fortran/decl.cc:11536 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in PROCEDURE statement at %C" msgstr "" -#: fortran/decl.cc:7341 fortran/decl.cc:11424 +#: fortran/decl.cc:7341 fortran/decl.cc:11436 #, gcc-internal-format msgid "Expected %<::%> after binding-attributes at %C" msgstr "" @@ -76288,7 +76479,7 @@ msgstr "" msgid "PROCEDURE at %C must be in a generic interface" msgstr "" -#: fortran/decl.cc:7451 fortran/decl.cc:10164 +#: fortran/decl.cc:7451 fortran/decl.cc:10176 #, gcc-internal-format, gfc-internal-format msgid "double colon in MODULE PROCEDURE statement at %L" msgstr "" @@ -76451,682 +76642,682 @@ msgstr "" msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C" msgstr "" -#: fortran/decl.cc:8650 +#: fortran/decl.cc:8657 #, gcc-internal-format, gfc-internal-format msgid "Unexpected END statement at %C" msgstr "" -#: fortran/decl.cc:8659 +#: fortran/decl.cc:8666 #, gcc-internal-format, gfc-internal-format msgid "END statement instead of %s statement at %L" msgstr "" #. We would have required END [something]. -#: fortran/decl.cc:8668 +#: fortran/decl.cc:8675 #, gcc-internal-format, gfc-internal-format msgid "%s statement expected at %L" msgstr "" -#: fortran/decl.cc:8679 +#: fortran/decl.cc:8686 #, gcc-internal-format, gfc-internal-format msgid "Expecting %s statement at %L" msgstr "" -#: fortran/decl.cc:8699 +#: fortran/decl.cc:8711 #, gcc-internal-format msgid "Expected block name of %qs in %s statement at %L" msgstr "" -#: fortran/decl.cc:8716 +#: fortran/decl.cc:8728 #, gcc-internal-format, gfc-internal-format msgid "Expected terminating name at %C" msgstr "" -#: fortran/decl.cc:8730 fortran/decl.cc:8738 +#: fortran/decl.cc:8742 fortran/decl.cc:8750 #, gcc-internal-format msgid "Expected label %qs for %s statement at %C" msgstr "" -#: fortran/decl.cc:8837 +#: fortran/decl.cc:8849 #, gcc-internal-format, gfc-internal-format msgid "Missing array specification at %L in DIMENSION statement" msgstr "" -#: fortran/decl.cc:8845 +#: fortran/decl.cc:8857 #, gcc-internal-format, gfc-internal-format msgid "Dimensions specified for %s at %L after its initialization" msgstr "" -#: fortran/decl.cc:8853 +#: fortran/decl.cc:8865 #, gcc-internal-format, gfc-internal-format msgid "Missing array specification at %L in CODIMENSION statement" msgstr "" -#: fortran/decl.cc:8862 +#: fortran/decl.cc:8874 #, gcc-internal-format, gfc-internal-format msgid "Array specification must be deferred at %L" msgstr "" -#: fortran/decl.cc:8967 +#: fortran/decl.cc:8979 #, gcc-internal-format, gfc-internal-format msgid "Unexpected character in variable list at %C" msgstr "" -#: fortran/decl.cc:9004 +#: fortran/decl.cc:9016 #, gcc-internal-format msgid "Expected %<(%> at %C" msgstr "" -#: fortran/decl.cc:9018 fortran/decl.cc:9058 +#: fortran/decl.cc:9030 fortran/decl.cc:9070 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C" msgstr "" -#: fortran/decl.cc:9034 +#: fortran/decl.cc:9046 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer at %C must be an integer" msgstr "" -#: fortran/decl.cc:9038 +#: fortran/decl.cc:9050 #, gcc-internal-format, gfc-internal-format msgid "" "Cray pointer at %C has %d bytes of precision; memory addresses require %d " "bytes" msgstr "" -#: fortran/decl.cc:9044 +#: fortran/decl.cc:9056 #, gcc-internal-format, gfc-internal-format msgid "Expected \",\" at %C" msgstr "" -#: fortran/decl.cc:9083 +#: fortran/decl.cc:9095 #, gcc-internal-format msgid "Cannot set Cray pointee array spec." msgstr "" -#: fortran/decl.cc:9087 +#: fortran/decl.cc:9099 #, gcc-internal-format, gfc-internal-format msgid "Duplicate array spec for Cray pointee at %C" msgstr "" -#: fortran/decl.cc:9107 +#: fortran/decl.cc:9119 #, gcc-internal-format, gfc-internal-format msgid "Expected \")\" at %C" msgstr "" -#: fortran/decl.cc:9119 +#: fortran/decl.cc:9131 #, gcc-internal-format msgid "Expected %<,%> or end of statement at %C" msgstr "" -#: fortran/decl.cc:9145 +#: fortran/decl.cc:9157 #, gcc-internal-format, gfc-internal-format msgid "INTENT is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.cc:9177 +#: fortran/decl.cc:9189 #, gcc-internal-format, gfc-internal-format msgid "OPTIONAL is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.cc:9196 +#: fortran/decl.cc:9208 #, gcc-internal-format msgid "Cray pointer declaration at %C requires %<-fcray-pointer%> flag" msgstr "" -#: fortran/decl.cc:9235 +#: fortran/decl.cc:9247 #, gcc-internal-format, gfc-internal-format msgid "CONTIGUOUS statement at %C" msgstr "" -#: fortran/decl.cc:9333 +#: fortran/decl.cc:9345 #, gcc-internal-format, gfc-internal-format msgid "" "Access specification of the %s operator at %C has already been specified" msgstr "" -#: fortran/decl.cc:9349 +#: fortran/decl.cc:9361 #, gcc-internal-format, gfc-internal-format msgid "" "Access specification of the .%s. operator at %C has already been specified" msgstr "" -#: fortran/decl.cc:9397 +#: fortran/decl.cc:9409 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED statement at %C" msgstr "" -#: fortran/decl.cc:9431 +#: fortran/decl.cc:9443 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in PROTECTED statement at %C" msgstr "" -#: fortran/decl.cc:9458 fortran/decl.cc:9483 +#: fortran/decl.cc:9470 fortran/decl.cc:9495 #, gcc-internal-format, gfc-internal-format msgid "" "PRIVATE statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.cc:9504 fortran/decl.cc:9524 +#: fortran/decl.cc:9516 fortran/decl.cc:9536 #, gcc-internal-format, gfc-internal-format msgid "" "PUBLIC statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.cc:9546 +#: fortran/decl.cc:9558 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C in PARAMETER statement" msgstr "" -#: fortran/decl.cc:9553 +#: fortran/decl.cc:9565 #, gcc-internal-format, gfc-internal-format msgid "Expected = sign in PARAMETER statement at %C" msgstr "" -#: fortran/decl.cc:9559 +#: fortran/decl.cc:9571 #, gcc-internal-format, gfc-internal-format msgid "Expected expression at %C in PARAMETER statement" msgstr "" -#: fortran/decl.cc:9579 +#: fortran/decl.cc:9591 #, gcc-internal-format, gfc-internal-format msgid "Initializing already initialized variable at %C" msgstr "" #. With legacy PARAMETER statements, don't expect a terminating ')'. -#: fortran/decl.cc:9604 +#: fortran/decl.cc:9616 #, gcc-internal-format, gfc-internal-format msgid "PARAMETER without '()' at %C" msgstr "" -#: fortran/decl.cc:9620 +#: fortran/decl.cc:9632 #, gcc-internal-format, gfc-internal-format msgid "Unexpected characters in PARAMETER statement at %C" msgstr "" -#: fortran/decl.cc:9639 fortran/decl.cc:9695 +#: fortran/decl.cc:9651 fortran/decl.cc:9707 #, gcc-internal-format msgid "%s at %C is a DEC extension, enable with %<-fdec-static%>" msgstr "" -#: fortran/decl.cc:9674 +#: fortran/decl.cc:9686 #, gcc-internal-format, gfc-internal-format msgid "Expected entity-list in AUTOMATIC statement at %C" msgstr "" -#: fortran/decl.cc:9681 +#: fortran/decl.cc:9693 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in AUTOMATIC statement at %C" msgstr "" -#: fortran/decl.cc:9730 +#: fortran/decl.cc:9742 #, gcc-internal-format, gfc-internal-format msgid "Expected entity-list in STATIC statement at %C" msgstr "" -#: fortran/decl.cc:9737 +#: fortran/decl.cc:9749 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in STATIC statement at %C" msgstr "" -#: fortran/decl.cc:9756 +#: fortran/decl.cc:9768 #, gcc-internal-format, gfc-internal-format msgid "Blanket SAVE statement at %C follows previous SAVE statement" msgstr "" -#: fortran/decl.cc:9767 +#: fortran/decl.cc:9779 #, gcc-internal-format, gfc-internal-format msgid "SAVE statement at %C follows blanket SAVE statement" msgstr "" -#: fortran/decl.cc:9802 +#: fortran/decl.cc:9814 #, gcc-internal-format msgid "SAVE of COMMON block %qs at %C is not allowed in a BLOCK construct" msgstr "" -#: fortran/decl.cc:9824 +#: fortran/decl.cc:9836 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in SAVE statement at %C" msgstr "" -#: fortran/decl.cc:9841 +#: fortran/decl.cc:9853 #, gcc-internal-format, gfc-internal-format msgid "VALUE is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.cc:9845 +#: fortran/decl.cc:9857 #, gcc-internal-format, gfc-internal-format msgid "VALUE statement at %C" msgstr "" -#: fortran/decl.cc:9883 +#: fortran/decl.cc:9895 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in VALUE statement at %C" msgstr "" -#: fortran/decl.cc:9895 +#: fortran/decl.cc:9907 #, gcc-internal-format, gfc-internal-format msgid "VOLATILE statement at %C" msgstr "" -#: fortran/decl.cc:9922 +#: fortran/decl.cc:9934 #, gcc-internal-format msgid "" "Specifying VOLATILE for coarray variable %qs at %C, which is use-/host-" "associated" msgstr "" -#: fortran/decl.cc:9947 +#: fortran/decl.cc:9959 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in VOLATILE statement at %C" msgstr "" -#: fortran/decl.cc:9959 +#: fortran/decl.cc:9971 #, gcc-internal-format, gfc-internal-format msgid "ASYNCHRONOUS statement at %C" msgstr "" -#: fortran/decl.cc:10003 +#: fortran/decl.cc:10015 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in ASYNCHRONOUS statement at %C" msgstr "" -#: fortran/decl.cc:10028 +#: fortran/decl.cc:10040 #, gcc-internal-format, gfc-internal-format msgid "MODULE PROCEDURE declaration at %C" msgstr "" -#: fortran/decl.cc:10139 +#: fortran/decl.cc:10151 #, gcc-internal-format, gfc-internal-format msgid "MODULE PROCEDURE at %C must be in a generic module interface" msgstr "" -#: fortran/decl.cc:10197 +#: fortran/decl.cc:10209 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE" msgstr "" -#: fortran/decl.cc:10246 +#: fortran/decl.cc:10258 #, gcc-internal-format, gfc-internal-format msgid "Ambiguous symbol in TYPE definition at %C" msgstr "" -#: fortran/decl.cc:10255 +#: fortran/decl.cc:10267 #, gcc-internal-format msgid "Symbol %qs at %C has not been previously defined" msgstr "" -#: fortran/decl.cc:10261 +#: fortran/decl.cc:10273 #, gcc-internal-format msgid "%qs in EXTENDS expression at %C is not a derived type" msgstr "" -#: fortran/decl.cc:10268 +#: fortran/decl.cc:10280 #, gcc-internal-format msgid "%qs cannot be extended at %C because it is BIND(C)" msgstr "" -#: fortran/decl.cc:10275 +#: fortran/decl.cc:10287 #, gcc-internal-format msgid "%qs cannot be extended at %C because it is a SEQUENCE type" msgstr "" -#: fortran/decl.cc:10298 +#: fortran/decl.cc:10310 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C can only be PRIVATE in the specification part of a module" msgstr "" -#: fortran/decl.cc:10310 +#: fortran/decl.cc:10322 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C can only be PUBLIC in the specification part of a module" msgstr "" -#: fortran/decl.cc:10331 +#: fortran/decl.cc:10343 #, gcc-internal-format, gfc-internal-format msgid "ABSTRACT type at %C" msgstr "" -#: fortran/decl.cc:10377 +#: fortran/decl.cc:10389 #, gcc-internal-format, gfc-internal-format msgid "Failed to create structure type '%s' at %C" msgstr "" -#: fortran/decl.cc:10383 +#: fortran/decl.cc:10395 #, gcc-internal-format msgid "Type definition of %qs at %C was already defined at %L" msgstr "" -#: fortran/decl.cc:10430 +#: fortran/decl.cc:10442 #, gcc-internal-format, gfc-internal-format msgid "Junk after MAP statement at %C" msgstr "" -#: fortran/decl.cc:10463 +#: fortran/decl.cc:10475 #, gcc-internal-format, gfc-internal-format msgid "Junk after UNION statement at %C" msgstr "" -#: fortran/decl.cc:10498 +#: fortran/decl.cc:10510 #, gcc-internal-format msgid "%s at %C is a DEC extension, enable with %<-fdec-structure%>" msgstr "" -#: fortran/decl.cc:10512 +#: fortran/decl.cc:10524 #, gcc-internal-format, gfc-internal-format msgid "Structure name expected in non-nested structure declaration at %C" msgstr "" -#: fortran/decl.cc:10530 +#: fortran/decl.cc:10542 #, gcc-internal-format, gfc-internal-format msgid "Junk after non-nested STRUCTURE statement at %C" msgstr "" -#: fortran/decl.cc:10537 +#: fortran/decl.cc:10549 #, gcc-internal-format msgid "Structure name %qs at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/decl.cc:10700 +#: fortran/decl.cc:10712 #, gcc-internal-format, gfc-internal-format msgid "Expected :: in TYPE definition at %C" msgstr "" -#: fortran/decl.cc:10713 +#: fortran/decl.cc:10725 #, gcc-internal-format, gfc-internal-format msgid "Mangled derived type definition at %C" msgstr "" -#: fortran/decl.cc:10742 +#: fortran/decl.cc:10754 #, gcc-internal-format msgid "Type name %qs at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/decl.cc:10753 +#: fortran/decl.cc:10765 #, gcc-internal-format msgid "Derived type name %qs at %C already has a basic type of %s" msgstr "" -#: fortran/decl.cc:10756 +#: fortran/decl.cc:10768 #, gcc-internal-format msgid "Derived type name %qs at %C already has a basic type" msgstr "" -#: fortran/decl.cc:10771 +#: fortran/decl.cc:10783 #, gcc-internal-format msgid "Dummy argument %qs at %L cannot be a derived type at %C" msgstr "" -#: fortran/decl.cc:10780 +#: fortran/decl.cc:10792 #, gcc-internal-format msgid "Derived type definition of %qs at %C has already been defined" msgstr "" -#: fortran/decl.cc:10843 +#: fortran/decl.cc:10855 #, gcc-internal-format, gfc-internal-format msgid "Garbage after PARAMETERIZED TYPE declaration at %C" msgstr "" -#: fortran/decl.cc:10926 +#: fortran/decl.cc:10938 #, gcc-internal-format, gfc-internal-format msgid "Cray Pointee at %C cannot be assumed shape array" msgstr "" -#: fortran/decl.cc:10946 +#: fortran/decl.cc:10958 #, gcc-internal-format, gfc-internal-format msgid "ENUM and ENUMERATOR at %C" msgstr "" -#: fortran/decl.cc:10978 +#: fortran/decl.cc:10990 #, gcc-internal-format, gfc-internal-format msgid "Enumerator exceeds the C integer type at %C" msgstr "" -#: fortran/decl.cc:11057 +#: fortran/decl.cc:11069 #, gcc-internal-format, gfc-internal-format msgid "ENUMERATOR %L not initialized with integer expression" msgstr "" -#: fortran/decl.cc:11105 +#: fortran/decl.cc:11117 #, gcc-internal-format, gfc-internal-format msgid "ENUM definition statement expected before %C" msgstr "" -#: fortran/decl.cc:11141 +#: fortran/decl.cc:11153 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in ENUMERATOR definition at %C" msgstr "" -#: fortran/decl.cc:11188 fortran/decl.cc:11203 +#: fortran/decl.cc:11200 fortran/decl.cc:11215 #, gcc-internal-format, gfc-internal-format msgid "Duplicate access-specifier at %C" msgstr "" -#: fortran/decl.cc:11223 +#: fortran/decl.cc:11235 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal NOPASS at %C" msgstr "" -#: fortran/decl.cc:11243 +#: fortran/decl.cc:11255 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal PASS at %C" msgstr "" -#: fortran/decl.cc:11270 +#: fortran/decl.cc:11282 #, gcc-internal-format, gfc-internal-format msgid "Duplicate POINTER attribute at %C" msgstr "" -#: fortran/decl.cc:11288 +#: fortran/decl.cc:11300 #, gcc-internal-format, gfc-internal-format msgid "Duplicate NON_OVERRIDABLE at %C" msgstr "" -#: fortran/decl.cc:11304 +#: fortran/decl.cc:11316 #, gcc-internal-format, gfc-internal-format msgid "Duplicate DEFERRED at %C" msgstr "" -#: fortran/decl.cc:11317 +#: fortran/decl.cc:11329 #, gcc-internal-format, gfc-internal-format msgid "Expected access-specifier at %C" msgstr "" -#: fortran/decl.cc:11319 +#: fortran/decl.cc:11331 #, gcc-internal-format, gfc-internal-format msgid "Expected binding attribute at %C" msgstr "" -#: fortran/decl.cc:11327 +#: fortran/decl.cc:11339 #, gcc-internal-format, gfc-internal-format msgid "NON_OVERRIDABLE and DEFERRED cannot both appear at %C" msgstr "" -#: fortran/decl.cc:11340 +#: fortran/decl.cc:11352 #, gcc-internal-format, gfc-internal-format msgid "POINTER attribute is required for procedure pointer component at %C" msgstr "" -#: fortran/decl.cc:11382 +#: fortran/decl.cc:11394 #, gcc-internal-format msgid "Interface-name expected after %<(%> at %C" msgstr "" -#: fortran/decl.cc:11388 +#: fortran/decl.cc:11400 #, gcc-internal-format msgid "%<)%> expected at %C" msgstr "" -#: fortran/decl.cc:11408 +#: fortran/decl.cc:11420 #, gcc-internal-format, gfc-internal-format msgid "Interface must be specified for DEFERRED binding at %C" msgstr "" -#: fortran/decl.cc:11413 +#: fortran/decl.cc:11425 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE(interface) at %C should be declared DEFERRED" msgstr "" -#: fortran/decl.cc:11436 +#: fortran/decl.cc:11448 #, gcc-internal-format, gfc-internal-format msgid "Expected binding name at %C" msgstr "" -#: fortran/decl.cc:11440 +#: fortran/decl.cc:11452 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE list at %C" msgstr "" -#: fortran/decl.cc:11452 +#: fortran/decl.cc:11464 #, gcc-internal-format msgid "%<=> target%> is invalid for DEFERRED binding at %C" msgstr "" -#: fortran/decl.cc:11458 +#: fortran/decl.cc:11470 #, gcc-internal-format msgid "%<::%> needed in PROCEDURE binding with explicit target at %C" msgstr "" -#: fortran/decl.cc:11468 +#: fortran/decl.cc:11480 #, gcc-internal-format msgid "Expected binding target after %<=>%> at %C" msgstr "" -#: fortran/decl.cc:11485 +#: fortran/decl.cc:11497 #, gcc-internal-format msgid "Type %qs containing DEFERRED binding at %C is not ABSTRACT" msgstr "" -#: fortran/decl.cc:11496 +#: fortran/decl.cc:11508 #, gcc-internal-format msgid "" "There is already a procedure with binding name %qs for the derived type %qs " "at %C" msgstr "" -#: fortran/decl.cc:11547 +#: fortran/decl.cc:11559 #, gcc-internal-format, gfc-internal-format msgid "GENERIC at %C must be inside a derived-type CONTAINS" msgstr "" -#: fortran/decl.cc:11567 +#: fortran/decl.cc:11579 #, gcc-internal-format msgid "Expected %<::%> at %C" msgstr "" -#: fortran/decl.cc:11579 +#: fortran/decl.cc:11591 #, gcc-internal-format, gfc-internal-format msgid "Expected generic name or operator descriptor at %C" msgstr "" -#: fortran/decl.cc:11600 +#: fortran/decl.cc:11612 #, gcc-internal-format, gfc-internal-format msgid "Malformed GENERIC statement at %C" msgstr "" -#: fortran/decl.cc:11611 +#: fortran/decl.cc:11623 #, gcc-internal-format msgid "Expected %<=>%> at %C" msgstr "" -#: fortran/decl.cc:11647 +#: fortran/decl.cc:11659 #, gcc-internal-format msgid "" "There's already a non-generic procedure with binding name %qs for the " "derived type %qs at %C" msgstr "" -#: fortran/decl.cc:11655 +#: fortran/decl.cc:11667 #, gcc-internal-format msgid "Binding at %C must have the same access as already defined binding %qs" msgstr "" -#: fortran/decl.cc:11703 +#: fortran/decl.cc:11715 #, gcc-internal-format, gfc-internal-format msgid "Expected specific binding name at %C" msgstr "" -#: fortran/decl.cc:11713 +#: fortran/decl.cc:11725 #, gcc-internal-format msgid "%qs already defined as specific binding for the generic %qs at %C" msgstr "" -#: fortran/decl.cc:11731 +#: fortran/decl.cc:11743 #, gcc-internal-format, gfc-internal-format msgid "Junk after GENERIC binding at %C" msgstr "" -#: fortran/decl.cc:11766 +#: fortran/decl.cc:11778 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside a derived type CONTAINS section" msgstr "" -#: fortran/decl.cc:11778 +#: fortran/decl.cc:11790 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type declaration with FINAL at %C must be in the specification part " "of a MODULE" msgstr "" -#: fortran/decl.cc:11800 +#: fortran/decl.cc:11812 #, gcc-internal-format, gfc-internal-format msgid "Empty FINAL at %C" msgstr "" -#: fortran/decl.cc:11807 +#: fortran/decl.cc:11819 #, gcc-internal-format, gfc-internal-format msgid "Expected module procedure name at %C" msgstr "" -#: fortran/decl.cc:11817 +#: fortran/decl.cc:11829 #, gcc-internal-format msgid "Expected %<,%> at %C" msgstr "" -#: fortran/decl.cc:11823 +#: fortran/decl.cc:11835 #, gcc-internal-format msgid "Unknown procedure name %qs at %C" msgstr "" -#: fortran/decl.cc:11836 +#: fortran/decl.cc:11848 #, gcc-internal-format msgid "%qs at %C is already defined as FINAL procedure" msgstr "" -#: fortran/decl.cc:11910 +#: fortran/decl.cc:11922 #, gcc-internal-format, gfc-internal-format msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C" msgstr "" -#: fortran/decl.cc:11956 +#: fortran/decl.cc:11968 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C" msgstr "" -#: fortran/decl.cc:11977 +#: fortran/decl.cc:11989 #, gcc-internal-format msgid "" "%<GCC unroll%> directive requires a non-negative integral constant less than " "or equal to %u at %C" msgstr "" -#: fortran/decl.cc:11991 +#: fortran/decl.cc:12003 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ UNROLL directive at %C" msgstr "" -#: fortran/decl.cc:12055 +#: fortran/decl.cc:12067 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ IVDEP directive at %C" msgstr "" -#: fortran/decl.cc:12072 +#: fortran/decl.cc:12084 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ VECTOR directive at %C" msgstr "" -#: fortran/decl.cc:12089 +#: fortran/decl.cc:12101 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ NOVECTOR directive at %C" msgstr "" @@ -77177,12 +77368,12 @@ msgstr "" msgid "show_expr(): Don't know how to show expr" msgstr "" -#: fortran/dump-parse-tree.cc:3893 +#: fortran/dump-parse-tree.cc:3928 #, gcc-internal-format msgid "show_code_node(): Bad statement code" msgstr "" -#: fortran/dump-parse-tree.cc:4356 fortran/dump-parse-tree.cc:4450 +#: fortran/dump-parse-tree.cc:4391 fortran/dump-parse-tree.cc:4485 #, gcc-internal-format msgid "Cannot convert %qs to interoperable type at %L" msgstr "" @@ -77507,161 +77698,161 @@ msgstr "" msgid "Variable type is UNKNOWN in assignment at %L" msgstr "" -#: fortran/expr.cc:3841 +#: fortran/expr.cc:3847 #, gcc-internal-format, gfc-internal-format msgid "NULL appears on right-hand side in assignment at %L" msgstr "" -#: fortran/expr.cc:3851 +#: fortran/expr.cc:3857 #, gcc-internal-format, gfc-internal-format msgid "POINTER-valued function appears on right-hand side of assignment at %L" msgstr "" -#: fortran/expr.cc:3894 +#: fortran/expr.cc:3900 #, gcc-internal-format msgid "BOZ literal constant near %L cannot be assigned to a %qs variable" msgstr "" -#: fortran/expr.cc:3901 +#: fortran/expr.cc:3907 #, gcc-internal-format, gfc-internal-format msgid "" "The assignment to a KIND or LEN component of a parameterized type at %L is " "not allowed" msgstr "" -#: fortran/expr.cc:3932 +#: fortran/expr.cc:3938 #, gcc-internal-format, gfc-internal-format msgid "" "Incompatible types in DATA statement at %L; attempted conversion of %s to %s" msgstr "" -#: fortran/expr.cc:3976 +#: fortran/expr.cc:3982 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target is not a POINTER at %L" msgstr "" -#: fortran/expr.cc:3984 +#: fortran/expr.cc:3990 #, gcc-internal-format msgid "" "%qs in the pointer assignment at %L cannot be an l-value since it is a " "procedure" msgstr "" -#: fortran/expr.cc:4008 +#: fortran/expr.cc:4014 #, gcc-internal-format msgid "Expected bounds specification for %qs at %L" msgstr "" -#: fortran/expr.cc:4013 +#: fortran/expr.cc:4019 #, gcc-internal-format msgid "Bounds specification for %qs in pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4042 +#: fortran/expr.cc:4048 #, gcc-internal-format, gfc-internal-format msgid "Stride must not be present at %L" msgstr "" -#: fortran/expr.cc:4048 fortran/expr.cc:4068 +#: fortran/expr.cc:4054 fortran/expr.cc:4074 #, gcc-internal-format msgid "" "Rank remapping requires a list of %<lower-bound : upper-bound%> " "specifications at %L" msgstr "" -#: fortran/expr.cc:4056 fortran/expr.cc:4075 +#: fortran/expr.cc:4062 fortran/expr.cc:4081 #, gcc-internal-format msgid "" "Expected list of %<lower-bound :%> or list of %<lower-bound : upper-bound%> " "specifications at %L" msgstr "" -#: fortran/expr.cc:4102 +#: fortran/expr.cc:4108 #, gcc-internal-format, gfc-internal-format msgid "Pointer object at %L shall not have a coindex" msgstr "" -#: fortran/expr.cc:4123 +#: fortran/expr.cc:4129 #, gcc-internal-format, gfc-internal-format msgid "Invalid procedure pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4148 +#: fortran/expr.cc:4154 #, gcc-internal-format msgid "" "Function result %qs is invalid as proc-target in procedure pointer " "assignment at %L" msgstr "" -#: fortran/expr.cc:4157 +#: fortran/expr.cc:4163 #, gcc-internal-format msgid "Abstract interface %qs is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4167 +#: fortran/expr.cc:4173 #, gcc-internal-format msgid "Statement function %qs is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4173 +#: fortran/expr.cc:4179 #, gcc-internal-format msgid "Internal procedure %qs is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4180 +#: fortran/expr.cc:4186 #, gcc-internal-format msgid "Intrinsic %qs at %L is invalid in procedure pointer assignment" msgstr "" -#: fortran/expr.cc:4188 +#: fortran/expr.cc:4194 #, gcc-internal-format msgid "" "Nonintrinsic elemental procedure %qs is invalid in procedure pointer " "assignment at %L" msgstr "" -#: fortran/expr.cc:4211 +#: fortran/expr.cc:4217 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in the procedure pointer assignment at %L: mismatch in the calling " "convention" msgstr "" -#: fortran/expr.cc:4264 +#: fortran/expr.cc:4270 #, gcc-internal-format msgid "" "Interface mismatch in procedure pointer assignment at %L: %qs is not a " "subroutine" msgstr "" -#: fortran/expr.cc:4274 fortran/expr.cc:4289 +#: fortran/expr.cc:4280 fortran/expr.cc:4295 #, gcc-internal-format msgid "Explicit interface required for component %qs at %L: %s" msgstr "" -#: fortran/expr.cc:4280 fortran/expr.cc:4295 fortran/resolve.cc:2764 +#: fortran/expr.cc:4286 fortran/expr.cc:4301 fortran/resolve.cc:2764 #, gcc-internal-format msgid "Explicit interface required for %qs at %L: %s" msgstr "" -#: fortran/expr.cc:4307 +#: fortran/expr.cc:4313 #, gcc-internal-format, gfc-internal-format msgid "Interface mismatch in procedure pointer assignment at %L: %s" msgstr "" -#: fortran/expr.cc:4316 +#: fortran/expr.cc:4322 #, gcc-internal-format msgid "" "Procedure pointer target %qs at %L must be either an intrinsic, host or use " "associated, referenced or have the EXTERNAL attribute" msgstr "" -#: fortran/expr.cc:4329 +#: fortran/expr.cc:4335 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target cannot be a constant at %L" msgstr "" -#: fortran/expr.cc:4343 +#: fortran/expr.cc:4349 #, gcc-internal-format, gfc-internal-format msgid "" "Data-pointer-object at %L must be unlimited polymorphic, or of a type with " @@ -77669,46 +77860,46 @@ msgid "" "polymorphic target" msgstr "" -#: fortran/expr.cc:4348 +#: fortran/expr.cc:4354 #, gcc-internal-format, gfc-internal-format msgid "" "Different types in pointer assignment at %L; attempted assignment of %s to %s" msgstr "" -#: fortran/expr.cc:4356 +#: fortran/expr.cc:4362 #, gcc-internal-format, gfc-internal-format msgid "Different kind type parameters in pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4363 +#: fortran/expr.cc:4369 #, gcc-internal-format, gfc-internal-format msgid "Different ranks in pointer assignment at %L" msgstr "" -#: fortran/expr.cc:4384 +#: fortran/expr.cc:4390 #, gcc-internal-format, gfc-internal-format msgid "" "Rank remapping target is smaller than size of the pointer (%ld < %ld) at %L" msgstr "" -#: fortran/expr.cc:4400 +#: fortran/expr.cc:4406 #, gcc-internal-format, gfc-internal-format msgid "" "The assumed rank target at %L is an experimental F202y feature. Use option -" "std=f202y to enable" msgstr "" -#: fortran/expr.cc:4412 +#: fortran/expr.cc:4418 #, gcc-internal-format, gfc-internal-format msgid "Rank remapping target must be rank 1 or simply contiguous at %L" msgstr "" -#: fortran/expr.cc:4416 +#: fortran/expr.cc:4422 #, gcc-internal-format, gfc-internal-format msgid "Rank remapping target is not rank 1 at %L" msgstr "" -#: fortran/expr.cc:4423 +#: fortran/expr.cc:4429 #, gcc-internal-format, gfc-internal-format msgid "" "The data-target at %L is an assumed rank object and so the data-pointer-" @@ -77716,7 +77907,7 @@ msgid "" "dimension)" msgstr "" -#: fortran/expr.cc:4432 +#: fortran/expr.cc:4438 #, gcc-internal-format, gfc-internal-format msgid "The assumed rank data-target at %L must be contiguous" msgstr "" @@ -77724,222 +77915,222 @@ msgstr "" #. The test above might need to be extend when F08, Note 5.4 has to be #. interpreted in the way that target and pointer with the same coindex #. are allowed. -#: fortran/expr.cc:4456 fortran/expr.cc:4582 +#: fortran/expr.cc:4462 fortran/expr.cc:4588 #, gcc-internal-format, gfc-internal-format msgid "Data target at %L shall not have a coindex" msgstr "" -#: fortran/expr.cc:4459 +#: fortran/expr.cc:4465 #, gcc-internal-format, gfc-internal-format msgid "" "Target expression in pointer assignment at %L must deliver a pointer result" msgstr "" -#: fortran/expr.cc:4473 +#: fortran/expr.cc:4479 #, gcc-internal-format, gfc-internal-format msgid "" "Zero-sized array detected at %L where an entity with the TARGET attribute is " "expected" msgstr "" -#: fortran/expr.cc:4479 fortran/expr.cc:4494 +#: fortran/expr.cc:4485 fortran/expr.cc:4500 #, gcc-internal-format, gfc-internal-format msgid "" "Pointer assignment target in initialization expression does not have the " "TARGET attribute at %L" msgstr "" -#: fortran/expr.cc:4510 +#: fortran/expr.cc:4516 #, gcc-internal-format, gfc-internal-format msgid "" "Every subscript of target specification at %L must be a constant expression" msgstr "" -#: fortran/expr.cc:4521 +#: fortran/expr.cc:4527 #, gcc-internal-format, gfc-internal-format msgid "" "Substring starting and ending points of target specification at %L must be " "constant expressions" msgstr "" -#: fortran/expr.cc:4537 +#: fortran/expr.cc:4543 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target is neither TARGET nor POINTER at %L" msgstr "" -#: fortran/expr.cc:4552 +#: fortran/expr.cc:4558 #, gcc-internal-format, gfc-internal-format msgid "Bad target in pointer assignment in PURE procedure at %L" msgstr "" -#: fortran/expr.cc:4561 +#: fortran/expr.cc:4567 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment with vector subscript on rhs at %L" msgstr "" -#: fortran/expr.cc:4569 +#: fortran/expr.cc:4575 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target has PROTECTED attribute at %L" msgstr "" -#: fortran/expr.cc:4597 fortran/expr.cc:4602 +#: fortran/expr.cc:4603 fortran/expr.cc:4608 #, gcc-internal-format, gfc-internal-format msgid "Assignment to contiguous pointer from non-contiguous target at %L" msgstr "" -#: fortran/expr.cc:4642 +#: fortran/expr.cc:4648 #, gcc-internal-format, gfc-internal-format msgid "Pointer at %L in pointer assignment might outlive the pointer target" msgstr "" -#: fortran/expr.cc:4722 fortran/resolve.cc:1573 +#: fortran/expr.cc:4728 fortran/resolve.cc:1573 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must not be ALLOCATABLE" msgstr "" -#: fortran/expr.cc:4728 +#: fortran/expr.cc:4734 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must have the TARGET attribute" msgstr "" -#: fortran/expr.cc:4743 fortran/resolve.cc:1579 +#: fortran/expr.cc:4749 fortran/resolve.cc:1579 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must have the SAVE attribute" msgstr "" -#: fortran/expr.cc:4755 +#: fortran/expr.cc:4761 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure pointer initialization target at %L may not be a procedure pointer" msgstr "" -#: fortran/expr.cc:4761 +#: fortran/expr.cc:4767 #, gcc-internal-format msgid "" "Internal procedure %qs is invalid in procedure pointer initialization at %L" msgstr "" -#: fortran/expr.cc:4768 +#: fortran/expr.cc:4774 #, gcc-internal-format msgid "" "Dummy procedure %qs is invalid in procedure pointer initialization at %L" msgstr "" -#: fortran/expr.cc:5252 +#: fortran/expr.cc:5258 #, gcc-internal-format msgid "" "generate_isocbinding_initializer(): bad iso_c_binding type, expected " "%<c_ptr%> or %<c_funptr%>" msgstr "" -#: fortran/expr.cc:6385 +#: fortran/expr.cc:6391 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: Pointer functions in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6393 +#: fortran/expr.cc:6399 #, gcc-internal-format, gfc-internal-format msgid "Non-variable expression in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6401 +#: fortran/expr.cc:6407 #, gcc-internal-format msgid "Named constant %qs in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6412 +#: fortran/expr.cc:6418 #, gcc-internal-format msgid "%qs in variable definition context (%s) at %L is not a variable" msgstr "" -#: fortran/expr.cc:6423 +#: fortran/expr.cc:6429 #, gcc-internal-format, gfc-internal-format msgid "Non-POINTER in pointer association context (%s) at %L" msgstr "" -#: fortran/expr.cc:6432 +#: fortran/expr.cc:6438 #, gcc-internal-format, gfc-internal-format msgid "Type inaccessible in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6445 +#: fortran/expr.cc:6451 #, gcc-internal-format, gfc-internal-format msgid "LOCK_TYPE in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6458 +#: fortran/expr.cc:6464 #, gcc-internal-format, gfc-internal-format msgid "LOCK_EVENT in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6489 +#: fortran/expr.cc:6495 #, gcc-internal-format msgid "%qs parameter inquiry for %qs in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6506 +#: fortran/expr.cc:6512 #, gcc-internal-format msgid "" "Dummy argument %qs with INTENT(IN) in pointer association context (%s) at %L" msgstr "" -#: fortran/expr.cc:6516 +#: fortran/expr.cc:6522 #, gcc-internal-format msgid "" "Dummy argument %qs with INTENT(IN) in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6532 +#: fortran/expr.cc:6538 #, gcc-internal-format msgid "" "Variable %qs is PROTECTED and cannot appear in a pointer association context " "(%s) at %L" msgstr "" -#: fortran/expr.cc:6540 +#: fortran/expr.cc:6546 #, gcc-internal-format msgid "" "Variable %qs is PROTECTED and cannot appear in a variable definition context " "(%s) at %L" msgstr "" -#: fortran/expr.cc:6555 +#: fortran/expr.cc:6561 #, gcc-internal-format msgid "" "Variable %qs cannot appear in a variable definition context (%s) at %L in " "PURE procedure" msgstr "" -#: fortran/expr.cc:6615 fortran/expr.cc:6636 +#: fortran/expr.cc:6621 fortran/expr.cc:6642 #, gcc-internal-format msgid "" "%qs at %L associated to vector-indexed target cannot be used in a variable " "definition context (%s)" msgstr "" -#: fortran/expr.cc:6620 +#: fortran/expr.cc:6626 #, gcc-internal-format msgid "" "%qs at %L associated to expression cannot be used in a variable definition " "context (%s)" msgstr "" -#: fortran/expr.cc:6629 +#: fortran/expr.cc:6635 #, gcc-internal-format msgid "" "%qs at %L associated to pointer function target being used in a variable " "definition context (%s)" msgstr "" -#: fortran/expr.cc:6648 +#: fortran/expr.cc:6654 #, gcc-internal-format msgid "" "Associate-name %qs cannot appear in a variable definition context (%s) at %L " "because its target at %L cannot, either" msgstr "" -#: fortran/expr.cc:6690 +#: fortran/expr.cc:6696 #, gcc-internal-format, gfc-internal-format msgid "" "Elements with the same value at %L and %L in vector subscript in a variable " @@ -77963,7 +78154,7 @@ msgstr "" #: fortran/frontend-passes.cc:874 fortran/trans-array.cc:1565 #: fortran/trans-array.cc:7434 fortran/trans-array.cc:9248 -#: fortran/trans-intrinsic.cc:8570 +#: fortran/trans-intrinsic.cc:8576 #, gcc-internal-format, gfc-internal-format msgid "Creating array temporary at %L" msgstr "" @@ -78074,7 +78265,7 @@ msgstr "" msgid "Interchanging loops at %L" msgstr "" -#: fortran/frontend-passes.cc:5827 +#: fortran/frontend-passes.cc:5828 #, gcc-internal-format, gfc-internal-format msgid "%s between %L and %L" msgstr "" @@ -78198,12 +78389,12 @@ msgstr "" msgid "Second argument of defined assignment at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.cc:1042 fortran/resolve.cc:19107 +#: fortran/interface.cc:1042 fortran/resolve.cc:19225 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.cc:1049 fortran/resolve.cc:19125 +#: fortran/interface.cc:1049 fortran/resolve.cc:19243 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L must be INTENT(IN)" msgstr "" @@ -78346,7 +78537,7 @@ msgid "Interface mismatch in dummy procedure at %L conflicts with %L: %s" msgstr "" #: fortran/interface.cc:2484 fortran/interface.cc:2500 -#: fortran/interface.cc:2573 +#: fortran/interface.cc:2590 #, gcc-internal-format msgid "Interface mismatch in dummy procedure %qs at %L: %s" msgstr "" @@ -78361,55 +78552,60 @@ msgstr "" msgid "Passing global function %qs declared at %L as subroutine at %L" msgstr "" -#: fortran/interface.cc:2540 +#: fortran/interface.cc:2539 +#, gcc-internal-format, gfc-internal-format +msgid "Mismatch between subroutine and function at %L" +msgstr "" + +#: fortran/interface.cc:2548 #, gcc-internal-format msgid "Type mismatch at %L passing global function %qs declared at %L (%s/%s)" msgstr "" -#: fortran/interface.cc:2584 +#: fortran/interface.cc:2601 #, gcc-internal-format msgid "" "Actual argument to contiguous pointer dummy %qs at %L must be simply " "contiguous" msgstr "" -#: fortran/interface.cc:2607 +#: fortran/interface.cc:2624 #, gcc-internal-format, gfc-internal-format msgid "" "Type mismatch between actual argument at %L and actual argument at %L (%s/" "%s)." msgstr "" -#: fortran/interface.cc:2617 +#: fortran/interface.cc:2634 #, gcc-internal-format msgid "Type mismatch in argument %qs at %L; passed %s to %s" msgstr "" -#: fortran/interface.cc:2627 +#: fortran/interface.cc:2644 #, gcc-internal-format msgid "" "Assumed-type actual argument at %L requires that dummy argument %qs is of " "assumed type" msgstr "" -#: fortran/interface.cc:2641 +#: fortran/interface.cc:2658 #, gcc-internal-format msgid "" "Assumed-type actual argument at %L corresponding to assumed-rank dummy " "argument %qs must be assumed-shape or assumed-rank" msgstr "" -#: fortran/interface.cc:2658 +#: fortran/interface.cc:2675 #, gcc-internal-format msgid "Actual argument to %qs at %L must be polymorphic" msgstr "" -#: fortran/interface.cc:2668 +#: fortran/interface.cc:2685 #, gcc-internal-format msgid "Actual argument to %qs at %L must have the same declared type" msgstr "" -#: fortran/interface.cc:2683 +#: fortran/interface.cc:2700 #, gcc-internal-format msgid "" "Actual argument to %qs at %L must be unlimited polymorphic since the formal " @@ -78417,38 +78613,38 @@ msgid "" "12.5.2.5]" msgstr "" -#: fortran/interface.cc:2699 +#: fortran/interface.cc:2716 #, gcc-internal-format msgid "Actual argument to %qs at %L must be a coarray" msgstr "" -#: fortran/interface.cc:2721 +#: fortran/interface.cc:2738 #, gcc-internal-format msgid "Corank mismatch in argument %qs at %L (%d and %d)" msgstr "" -#: fortran/interface.cc:2739 +#: fortran/interface.cc:2756 #, gcc-internal-format msgid "" "Actual argument to %qs at %L must be simply contiguous or an element of such " "an array" msgstr "" -#: fortran/interface.cc:2754 +#: fortran/interface.cc:2771 #, gcc-internal-format msgid "" "Actual argument to non-INTENT(INOUT) dummy %qs at %L, which is LOCK_TYPE or " "has a LOCK_TYPE component" msgstr "" -#: fortran/interface.cc:2769 +#: fortran/interface.cc:2786 #, gcc-internal-format msgid "" "Actual argument to non-INTENT(INOUT) dummy %qs at %L, which is EVENT_TYPE or " "has a EVENT_TYPE component" msgstr "" -#: fortran/interface.cc:2788 +#: fortran/interface.cc:2805 #, gcc-internal-format msgid "" "Dummy argument %qs has to be a pointer, assumed-shape or assumed-rank array " @@ -78456,250 +78652,250 @@ msgid "" "contiguous and both are ASYNCHRONOUS or VOLATILE" msgstr "" -#: fortran/interface.cc:2801 +#: fortran/interface.cc:2818 #, gcc-internal-format msgid "" "Passing coarray at %L to allocatable, noncoarray, INTENT(OUT) dummy argument " "%qs" msgstr "" -#: fortran/interface.cc:2808 +#: fortran/interface.cc:2825 #, gcc-internal-format msgid "" "Passing coarray at %L to allocatable, noncoarray dummy argument %qs, which " "is invalid if the allocation status is modified" msgstr "" -#: fortran/interface.cc:2895 +#: fortran/interface.cc:2912 #, gcc-internal-format msgid "Polymorphic scalar passed to array dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:2906 +#: fortran/interface.cc:2923 #, gcc-internal-format, gfc-internal-format msgid "" "Element of assumed-shape or pointer array as actual argument at %L cannot " "correspond to actual argument at %L" msgstr "" -#: fortran/interface.cc:2911 +#: fortran/interface.cc:2928 #, gcc-internal-format msgid "" "Element of assumed-shape or pointer array passed to array dummy argument %qs " "at %L" msgstr "" -#: fortran/interface.cc:2924 +#: fortran/interface.cc:2941 #, gcc-internal-format msgid "" "Extension: Scalar non-default-kind, non-C_CHAR-kind CHARACTER actual " "argument with array dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:2932 +#: fortran/interface.cc:2949 #, gcc-internal-format msgid "" "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument %qs " "at %L" msgstr "" -#: fortran/interface.cc:3321 +#: fortran/interface.cc:3338 #, gcc-internal-format msgid "Keyword argument %qs at %L is invalid in a statement function" msgstr "" -#: fortran/interface.cc:3344 +#: fortran/interface.cc:3361 #, gcc-internal-format msgid "Keyword argument %qs at %L is not in the procedure; did you mean %qs?" msgstr "" -#: fortran/interface.cc:3348 +#: fortran/interface.cc:3365 #, gcc-internal-format msgid "Keyword argument %qs at %L is not in the procedure" msgstr "" -#: fortran/interface.cc:3357 +#: fortran/interface.cc:3374 #, gcc-internal-format msgid "" "Keyword argument %qs at %L is already associated with another actual argument" msgstr "" -#: fortran/interface.cc:3367 +#: fortran/interface.cc:3384 #, gcc-internal-format, gfc-internal-format msgid "More actual than formal arguments in procedure call at %L" msgstr "" -#: fortran/interface.cc:3380 +#: fortran/interface.cc:3397 #, gcc-internal-format, gfc-internal-format msgid "Missing alternate return specifier in subroutine call at %L" msgstr "" -#: fortran/interface.cc:3394 +#: fortran/interface.cc:3415 #, gcc-internal-format, gfc-internal-format msgid "Unexpected alternate return specifier in subroutine call at %L" msgstr "" -#: fortran/interface.cc:3417 +#: fortran/interface.cc:3438 #, gcc-internal-format msgid "" "Intrinsic %<NULL()%> without %<MOLD%> argument at %L passed to assumed-rank " "dummy %qs" msgstr "" -#: fortran/interface.cc:3430 +#: fortran/interface.cc:3451 #, gcc-internal-format msgid "" "The assumed-size dummy %qs is being passed at %L to an assumed-rank dummy %qs" msgstr "" -#: fortran/interface.cc:3441 +#: fortran/interface.cc:3462 #, gcc-internal-format msgid "" "Intrinsic %<NULL()%> without %<MOLD%> argument at %L passed to assumed-" "length dummy %qs" msgstr "" -#: fortran/interface.cc:3481 +#: fortran/interface.cc:3502 #, gcc-internal-format msgid "Unexpected NULL() intrinsic at %L to dummy %qs" msgstr "" -#: fortran/interface.cc:3484 +#: fortran/interface.cc:3505 #, gcc-internal-format msgid "Fortran 2008: Null pointer at %L to non-pointer dummy %qs" msgstr "" -#: fortran/interface.cc:3510 +#: fortran/interface.cc:3531 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument at %L to assumed-type dummy has type parameters or is of " "derived type with type-bound or FINAL procedures" msgstr "" -#: fortran/interface.cc:3522 +#: fortran/interface.cc:3543 #, gcc-internal-format, gfc-internal-format msgid "" "Unlimited polymorphic actual argument at %L is not matched with either an " "unlimited polymorphic or assumed type dummy argument" msgstr "" -#: fortran/interface.cc:3546 +#: fortran/interface.cc:3567 #, gcc-internal-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and pointer or " "allocatable dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:3553 +#: fortran/interface.cc:3574 #, gcc-internal-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and assumed-" "shape dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:3568 +#: fortran/interface.cc:3589 #, gcc-internal-format msgid "" "Actual argument at %L to allocatable or pointer dummy argument %qs must have " "a deferred length type parameter if and only if the dummy has one" msgstr "" -#: fortran/interface.cc:3591 +#: fortran/interface.cc:3612 #, gcc-internal-format msgid "" "Character length of actual argument shorter than of dummy argument %qs (%lu/" "%lu) at %L" msgstr "" -#: fortran/interface.cc:3601 fortran/interface.cc:3606 +#: fortran/interface.cc:3622 fortran/interface.cc:3627 #, gcc-internal-format msgid "" "Actual argument contains too few elements for dummy argument %qs (%lu/%lu) " "at %L" msgstr "" -#: fortran/interface.cc:3632 +#: fortran/interface.cc:3653 #, gcc-internal-format msgid "Expected a procedure pointer for argument %qs at %L" msgstr "" -#: fortran/interface.cc:3649 +#: fortran/interface.cc:3670 #, gcc-internal-format msgid "Expected a procedure for argument %qs at %L" msgstr "" -#: fortran/interface.cc:3716 +#: fortran/interface.cc:3737 #, gcc-internal-format msgid "Actual argument for %qs cannot be an assumed-size array at %L" msgstr "" -#: fortran/interface.cc:3745 +#: fortran/interface.cc:3766 #, gcc-internal-format msgid "" "Actual argument to assumed-rank INTENT(OUT) dummy %qs at %L cannot be of " "unknown size" msgstr "" -#: fortran/interface.cc:3760 +#: fortran/interface.cc:3781 #, gcc-internal-format msgid "Actual argument for %qs at %L must be a pointer" msgstr "" -#: fortran/interface.cc:3769 +#: fortran/interface.cc:3790 #, gcc-internal-format msgid "Fortran 2008: Non-pointer actual argument at %L to pointer dummy %qs" msgstr "" -#: fortran/interface.cc:3778 +#: fortran/interface.cc:3799 #, gcc-internal-format msgid "" "Actual argument for %qs at %L must be a pointer or a valid target for the " "dummy pointer in a pointer assignment statement" msgstr "" -#: fortran/interface.cc:3792 +#: fortran/interface.cc:3813 #, gcc-internal-format msgid "Coindexed actual argument at %L to pointer dummy %qs" msgstr "" -#: fortran/interface.cc:3806 +#: fortran/interface.cc:3827 #, gcc-internal-format msgid "" "Coindexed actual argument at %L to allocatable dummy %qs requires INTENT(IN)" msgstr "" -#: fortran/interface.cc:3821 +#: fortran/interface.cc:3842 #, gcc-internal-format msgid "" "Coindexed ASYNCHRONOUS or VOLATILE actual argument at %L requires that dummy " "%qs has neither ASYNCHRONOUS nor VOLATILE" msgstr "" -#: fortran/interface.cc:3836 +#: fortran/interface.cc:3857 #, gcc-internal-format msgid "" "Coindexed actual argument at %L with allocatable ultimate component to dummy " "%qs requires either VALUE or INTENT(IN)" msgstr "" -#: fortran/interface.cc:3849 +#: fortran/interface.cc:3870 #, gcc-internal-format msgid "Actual CLASS array argument for %qs must be a full array at %L" msgstr "" -#: fortran/interface.cc:3860 +#: fortran/interface.cc:3881 #, gcc-internal-format msgid "Actual argument for %qs must be ALLOCATABLE at %L" msgstr "" -#: fortran/interface.cc:3871 +#: fortran/interface.cc:3892 #, gcc-internal-format msgid "" "Actual argument for %qs at %L is a function result and the dummy argument is " "ALLOCATABLE" msgstr "" -#: fortran/interface.cc:3909 +#: fortran/interface.cc:3930 #, gcc-internal-format msgid "" "Array-section actual argument with vector subscripts at %L is incompatible " @@ -78707,341 +78903,341 @@ msgid "" "dummy argument %qs" msgstr "" -#: fortran/interface.cc:3929 +#: fortran/interface.cc:3950 #, gcc-internal-format msgid "" "Assumed-shape actual argument at %L is incompatible with the non-assumed-" "shape dummy argument %qs due to VOLATILE attribute" msgstr "" -#: fortran/interface.cc:3947 +#: fortran/interface.cc:3968 #, gcc-internal-format msgid "" "Array-section actual argument at %L is incompatible with the non-assumed-" "shape dummy argument %qs due to VOLATILE attribute" msgstr "" -#: fortran/interface.cc:3968 +#: fortran/interface.cc:3989 #, gcc-internal-format msgid "" "Pointer-array actual argument at %L requires an assumed-shape or pointer-" "array dummy argument %qs due to VOLATILE attribute" msgstr "" -#: fortran/interface.cc:3996 +#: fortran/interface.cc:4017 #, gcc-internal-format, gfc-internal-format msgid "Missing alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.cc:4009 +#: fortran/interface.cc:4030 #, gcc-internal-format msgid "Missing actual argument for argument %qs at %L" msgstr "" -#: fortran/interface.cc:4137 +#: fortran/interface.cc:4158 #, gcc-internal-format msgid "compare_actual_expr(): Bad component code" msgstr "" -#: fortran/interface.cc:4166 +#: fortran/interface.cc:4187 #, gcc-internal-format msgid "check_some_aliasing(): List mismatch" msgstr "" -#: fortran/interface.cc:4192 +#: fortran/interface.cc:4213 #, gcc-internal-format msgid "check_some_aliasing(): corrupted data" msgstr "" -#: fortran/interface.cc:4202 +#: fortran/interface.cc:4223 #, gcc-internal-format msgid "" "Same actual argument associated with INTENT(%s) argument %qs and INTENT(%s) " "argument %qs at %L" msgstr "" -#: fortran/interface.cc:4232 +#: fortran/interface.cc:4253 #, gcc-internal-format msgid "check_intents(): List mismatch" msgstr "" -#: fortran/interface.cc:4252 +#: fortran/interface.cc:4273 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure argument at %L is local to a PURE procedure and has the POINTER " "attribute" msgstr "" -#: fortran/interface.cc:4264 +#: fortran/interface.cc:4285 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L in PURE procedure is passed to an INTENT(%s) " "argument" msgstr "" -#: fortran/interface.cc:4274 +#: fortran/interface.cc:4295 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L in PURE procedure is passed to a POINTER " "dummy argument" msgstr "" -#: fortran/interface.cc:4285 +#: fortran/interface.cc:4306 #, gcc-internal-format msgid "" "Coindexed polymorphic actual argument at %L is passed polymorphic dummy " "argument %qs" msgstr "" -#: fortran/interface.cc:4327 +#: fortran/interface.cc:4348 #, gcc-internal-format msgid "" "Procedure %qs called at %L is not explicitly declared; did you mean %qs?" msgstr "" -#: fortran/interface.cc:4331 fortran/interface.cc:4341 +#: fortran/interface.cc:4352 fortran/interface.cc:4362 #, gcc-internal-format msgid "Procedure %qs called at %L is not explicitly declared" msgstr "" -#: fortran/interface.cc:4337 +#: fortran/interface.cc:4358 #, gcc-internal-format msgid "Procedure %qs called with an implicit interface at %L" msgstr "" -#: fortran/interface.cc:4350 +#: fortran/interface.cc:4371 #, gcc-internal-format msgid "" "The pointer object %qs at %L must have an explicit function interface or be " "declared as array" msgstr "" -#: fortran/interface.cc:4358 +#: fortran/interface.cc:4379 #, gcc-internal-format msgid "" "The allocatable object %qs at %L must have an explicit function interface or " "be declared as array" msgstr "" -#: fortran/interface.cc:4366 +#: fortran/interface.cc:4387 #, gcc-internal-format msgid "Allocatable function %qs at %L must have an explicit function interface" msgstr "" -#: fortran/interface.cc:4383 +#: fortran/interface.cc:4404 #, gcc-internal-format, gfc-internal-format msgid "Explicit interface required for polymorphic argument at %L" msgstr "" -#: fortran/interface.cc:4392 +#: fortran/interface.cc:4413 #, gcc-internal-format msgid "Keyword argument requires explicit interface for procedure %qs at %L" msgstr "" -#: fortran/interface.cc:4401 +#: fortran/interface.cc:4422 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type argument %s at %L requires an explicit interface" msgstr "" -#: fortran/interface.cc:4416 +#: fortran/interface.cc:4437 #, gcc-internal-format msgid "" "Actual argument of LOCK_TYPE or with LOCK_TYPE component at %L requires an " "explicit interface for procedure %qs" msgstr "" -#: fortran/interface.cc:4431 +#: fortran/interface.cc:4452 #, gcc-internal-format msgid "" "Actual argument of EVENT_TYPE or with EVENT_TYPE component at %L requires an " "explicit interface for procedure %qs" msgstr "" -#: fortran/interface.cc:4441 +#: fortran/interface.cc:4462 #, gcc-internal-format, gfc-internal-format msgid "MOLD argument to NULL required at %L" msgstr "" -#: fortran/interface.cc:4449 +#: fortran/interface.cc:4470 #, gcc-internal-format, gfc-internal-format msgid "" "Passing intrinsic NULL as actual argument at %L requires an explicit " "interface" msgstr "" -#: fortran/interface.cc:4459 +#: fortran/interface.cc:4480 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank argument requires an explicit interface at %L" msgstr "" -#: fortran/interface.cc:4501 +#: fortran/interface.cc:4522 #, gcc-internal-format msgid "Procedure pointer component %qs called with an implicit interface at %L" msgstr "" -#: fortran/interface.cc:4512 +#: fortran/interface.cc:4533 #, gcc-internal-format msgid "" "Keyword argument requires explicit interface for procedure pointer component " "%qs at %L" msgstr "" -#: fortran/interface.cc:4597 +#: fortran/interface.cc:4618 #, gcc-internal-format, gfc-internal-format msgid "" "MOLD= required in NULL() argument at %L: Ambiguity between specific " "functions %s and %s" msgstr "" -#: fortran/interface.cc:4667 +#: fortran/interface.cc:4688 #, gcc-internal-format msgid "Unable to find symbol %qs" msgstr "" -#: fortran/interface.cc:5051 +#: fortran/interface.cc:5072 #, gcc-internal-format msgid "Entity %qs at %L is already present in the interface" msgstr "" -#: fortran/interface.cc:5168 +#: fortran/interface.cc:5189 #, gcc-internal-format msgid "gfc_add_interface(): Bad interface type" msgstr "" -#: fortran/interface.cc:5262 +#: fortran/interface.cc:5283 #, gcc-internal-format msgid "Cannot overwrite GENERIC %qs at %L" msgstr "" -#: fortran/interface.cc:5274 +#: fortran/interface.cc:5295 #, gcc-internal-format msgid "%qs at %L overrides a procedure binding declared NON_OVERRIDABLE" msgstr "" -#: fortran/interface.cc:5282 +#: fortran/interface.cc:5303 #, gcc-internal-format msgid "%qs at %L must not be DEFERRED as it overrides a non-DEFERRED binding" msgstr "" -#: fortran/interface.cc:5290 +#: fortran/interface.cc:5311 #, gcc-internal-format msgid "%qs at %L overrides a PURE procedure and must also be PURE" msgstr "" -#: fortran/interface.cc:5299 +#: fortran/interface.cc:5320 #, gcc-internal-format msgid "%qs at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL" msgstr "" -#: fortran/interface.cc:5305 +#: fortran/interface.cc:5326 #, gcc-internal-format msgid "" "%qs at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, " "either" msgstr "" -#: fortran/interface.cc:5314 +#: fortran/interface.cc:5335 #, gcc-internal-format msgid "%qs at %L overrides a SUBROUTINE and must also be a SUBROUTINE" msgstr "" -#: fortran/interface.cc:5325 +#: fortran/interface.cc:5346 #, gcc-internal-format msgid "%qs at %L overrides a FUNCTION and must also be a FUNCTION" msgstr "" -#: fortran/interface.cc:5333 +#: fortran/interface.cc:5354 #, gcc-internal-format msgid "Result mismatch for the overriding procedure %qs at %L: %s" msgstr "" -#: fortran/interface.cc:5344 +#: fortran/interface.cc:5365 #, gcc-internal-format msgid "%qs at %L overrides a PUBLIC procedure and must not be PRIVATE" msgstr "" -#: fortran/interface.cc:5374 +#: fortran/interface.cc:5395 #, gcc-internal-format msgid "" "Dummy argument %qs of %qs at %L should be named %qs as to match the " "corresponding argument of the overridden procedure" msgstr "" -#: fortran/interface.cc:5385 +#: fortran/interface.cc:5406 #, gcc-internal-format msgid "Argument mismatch for the overriding procedure %qs at %L: %s" msgstr "" -#: fortran/interface.cc:5394 +#: fortran/interface.cc:5415 #, gcc-internal-format msgid "" "%qs at %L must have the same number of formal arguments as the overridden " "procedure" msgstr "" -#: fortran/interface.cc:5403 +#: fortran/interface.cc:5424 #, gcc-internal-format msgid "%qs at %L overrides a NOPASS binding and must also be NOPASS" msgstr "" -#: fortran/interface.cc:5414 +#: fortran/interface.cc:5435 #, gcc-internal-format msgid "%qs at %L overrides a binding with PASS and must also be PASS" msgstr "" -#: fortran/interface.cc:5421 +#: fortran/interface.cc:5442 #, gcc-internal-format msgid "" "Passed-object dummy argument of %qs at %L must be at the same position as " "the passed-object dummy argument of the overridden procedure" msgstr "" -#: fortran/interface.cc:5442 +#: fortran/interface.cc:5463 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be of type %s" msgstr "" -#: fortran/interface.cc:5449 +#: fortran/interface.cc:5470 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be of KIND = %d" msgstr "" -#: fortran/interface.cc:5456 +#: fortran/interface.cc:5477 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be a scalar" msgstr "" -#: fortran/interface.cc:5460 +#: fortran/interface.cc:5481 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be an ASSUMED SHAPE ARRAY" msgstr "" -#: fortran/interface.cc:5464 +#: fortran/interface.cc:5485 #, gcc-internal-format, gfc-internal-format msgid "DTIO character argument at %L must have assumed length" msgstr "" -#: fortran/interface.cc:5468 +#: fortran/interface.cc:5489 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must have INTENT %s" msgstr "" -#: fortran/interface.cc:5526 fortran/interface.cc:5572 +#: fortran/interface.cc:5547 fortran/interface.cc:5593 #, gcc-internal-format, gfc-internal-format msgid "Alternate return at %L is not permitted in a DTIO procedure" msgstr "" -#: fortran/interface.cc:5538 +#: fortran/interface.cc:5559 #, gcc-internal-format msgid "DTIO procedure %qs at %L must be a subroutine" msgstr "" -#: fortran/interface.cc:5550 +#: fortran/interface.cc:5571 #, gcc-internal-format msgid "Too few dummy arguments in DTIO procedure %qs at %L" msgstr "" -#: fortran/interface.cc:5557 +#: fortran/interface.cc:5578 #, gcc-internal-format msgid "Too many dummy arguments in DTIO procedure %qs at %L" msgstr "" @@ -79188,63 +79384,63 @@ msgstr "" msgid "init_arglist(): too many arguments" msgstr "" -#: fortran/intrinsic.cc:5065 +#: fortran/intrinsic.cc:5068 #, gcc-internal-format msgid "Invalid standard code on intrinsic %qs (%d)" msgstr "" -#: fortran/intrinsic.cc:5074 +#: fortran/intrinsic.cc:5077 #, gcc-internal-format msgid "Intrinsic %qs (%s) used at %L" msgstr "" -#: fortran/intrinsic.cc:5146 +#: fortran/intrinsic.cc:5149 #, gcc-internal-format msgid "Function %qs as initialization expression at %L" msgstr "" -#: fortran/intrinsic.cc:5165 +#: fortran/intrinsic.cc:5168 #, gcc-internal-format msgid "" "Transformational function %qs at %L is invalid in an initialization " "expression" msgstr "" -#: fortran/intrinsic.cc:5241 +#: fortran/intrinsic.cc:5244 #, gcc-internal-format, gfc-internal-format msgid "" "Elemental function as initialization expression with non-integer/non-" "character arguments at %L" msgstr "" -#: fortran/intrinsic.cc:5332 +#: fortran/intrinsic.cc:5335 #, gcc-internal-format msgid "" "Subroutine call to intrinsic %qs in DO CONCURRENT block at %L is not PURE" msgstr "" -#: fortran/intrinsic.cc:5339 +#: fortran/intrinsic.cc:5342 #, gcc-internal-format msgid "Subroutine call to intrinsic %qs at %L is not PURE" msgstr "" -#: fortran/intrinsic.cc:5442 +#: fortran/intrinsic.cc:5445 #, gcc-internal-format, gfc-internal-format msgid "Extension: Conversion from %s to %s at %L" msgstr "" -#: fortran/intrinsic.cc:5463 +#: fortran/intrinsic.cc:5466 #, gcc-internal-format, gfc-internal-format msgid "Nonstandard conversion from %s to %s at %L" msgstr "" -#: fortran/intrinsic.cc:5481 fortran/intrinsic.cc:5498 +#: fortran/intrinsic.cc:5484 fortran/intrinsic.cc:5501 #, gcc-internal-format, gfc-internal-format msgid "Possible change of value in conversion from %s to %s at %L" msgstr "" #. If HOLLERITH is involved, all bets are off. -#: fortran/intrinsic.cc:5486 fortran/intrinsic.cc:5506 +#: fortran/intrinsic.cc:5489 fortran/intrinsic.cc:5509 #, gcc-internal-format, gfc-internal-format msgid "Conversion from %s to %s at %L" msgstr "" @@ -79252,24 +79448,24 @@ msgstr "" #. Use of -fdec-char-conversions allows assignment of character data #. to non-character variables. This not permitted for nonconstant #. strings. -#: fortran/intrinsic.cc:5573 fortran/resolve.cc:12283 +#: fortran/intrinsic.cc:5576 fortran/resolve.cc:12421 #, gcc-internal-format, gfc-internal-format msgid "Cannot convert %s to %s at %L" msgstr "" -#: fortran/intrinsic.cc:5578 +#: fortran/intrinsic.cc:5581 #, gcc-internal-format msgid "Cannot convert %qs to %qs at %L" msgstr "" -#: fortran/intrinsic.cc:5671 +#: fortran/intrinsic.cc:5674 #, gcc-internal-format msgid "" "%qs declared at %L may shadow the intrinsic of the same name. In order to " "call the intrinsic, explicit INTRINSIC declarations may be required." msgstr "" -#: fortran/intrinsic.cc:5677 +#: fortran/intrinsic.cc:5680 #, gcc-internal-format msgid "" "%qs declared at %L is also the name of an intrinsic. It can only be called " @@ -79719,7 +79915,7 @@ msgstr "" msgid "UNIT number in CLOSE statement at %L must be non-negative" msgstr "" -#: fortran/io.cc:2846 fortran/match.cc:3471 +#: fortran/io.cc:2846 fortran/match.cc:3626 #, gcc-internal-format, gfc-internal-format msgid "%s statement not allowed in PURE procedure at %C" msgstr "" @@ -79820,7 +80016,7 @@ msgid "" "defined input/output procedure" msgstr "" -#: fortran/io.cc:3422 fortran/resolve.cc:16912 +#: fortran/io.cc:3422 fortran/resolve.cc:17030 #, gcc-internal-format msgid "" "NAMELIST object %qs in namelist %qs at %L with ALLOCATABLE or POINTER " @@ -79992,7 +80188,14 @@ msgstr "" msgid "check_charlen_present(): length not set" msgstr "" -#: fortran/iresolve.cc:3323 +#: fortran/iresolve.cc:3218 +#, gcc-internal-format, gfc-internal-format +msgid "" +"GET_TEAM at %L needs USE of the intrinsic module ISO_FORTRAN_ENV to define " +"its result type TEAM_TYPE" +msgstr "" + +#: fortran/iresolve.cc:3349 #, gcc-internal-format, gfc-internal-format msgid "TODO: unlimited polymorphic MOLD in TRANSFER intrinsic at %L" msgstr "" @@ -80024,7 +80227,7 @@ msgstr "" msgid "Integer too large at %C" msgstr "" -#: fortran/match.cc:553 fortran/parse.cc:1550 +#: fortran/match.cc:553 fortran/parse.cc:1549 #, gcc-internal-format, gfc-internal-format msgid "Too many digits in statement label at %C" msgstr "" @@ -80178,662 +80381,684 @@ msgstr "" msgid "Label %qs after %L doesn't match IF label %qs" msgstr "" -#: fortran/match.cc:1841 +#: fortran/match.cc:1834 +#, gcc-internal-format, gfc-internal-format +msgid "Duplicate %s attribute in %C" +msgstr "" + +#: fortran/match.cc:1899 #, gcc-internal-format, gfc-internal-format msgid "Image control statement CRITICAL at %C in PURE procedure" msgstr "" -#: fortran/match.cc:1847 +#: fortran/match.cc:1905 #, gcc-internal-format, gfc-internal-format msgid "Image control statement CRITICAL at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:1854 +#: fortran/match.cc:1912 #, gcc-internal-format, gfc-internal-format msgid "CRITICAL statement at %C" msgstr "" -#: fortran/match.cc:1866 +#: fortran/match.cc:1924 #, gcc-internal-format, gfc-internal-format msgid "Nested CRITICAL block at %C" msgstr "" -#: fortran/match.cc:1918 -#, gcc-internal-format, gfc-internal-format -msgid "Expected association list at %C" +#: fortran/match.cc:1975 +#, gcc-internal-format +msgid "" +"Codimension decl name %qs in association at %L must not be the same as a " +"selector" msgstr "" -#: fortran/match.cc:1930 +#: fortran/match.cc:1996 #, gcc-internal-format, gfc-internal-format msgid "Expected associate name at %C" msgstr "" -#: fortran/match.cc:1940 +#: fortran/match.cc:2006 #, gcc-internal-format, gfc-internal-format msgid "Bad bounds remapping list at %C" msgstr "" -#: fortran/match.cc:1946 +#: fortran/match.cc:2012 #, gcc-internal-format, gfc-internal-format msgid "" "The bounds remapping list at %C is an experimental F202y feature. Use " "std=f202y to enable" msgstr "" -#: fortran/match.cc:1952 +#: fortran/match.cc:2043 #, gcc-internal-format, gfc-internal-format -msgid "Expected association at %C" +msgid "Invalid association target at %C" msgstr "" -#: fortran/match.cc:1963 +#: fortran/match.cc:2057 #, gcc-internal-format, gfc-internal-format -msgid "Invalid association target at %C" +msgid "Selector in coarray association as %C shall be a named coarray" msgstr "" -#: fortran/match.cc:1974 +#: fortran/match.cc:2067 #, gcc-internal-format msgid "Duplicate name %qs in association at %C" msgstr "" -#: fortran/match.cc:1982 +#: fortran/match.cc:2094 +#, gcc-internal-format, gfc-internal-format +msgid "Selector at %L duplicates selector at %L" +msgstr "" + +#: fortran/match.cc:2104 #, gcc-internal-format, gfc-internal-format msgid "Association target at %C must not be coindexed" msgstr "" -#: fortran/match.cc:1989 +#: fortran/match.cc:2111 #, gcc-internal-format, gfc-internal-format msgid "Association target at %L cannot be a BOZ literal constant" msgstr "" -#: fortran/match.cc:2009 +#: fortran/match.cc:2131 #, gcc-internal-format, gfc-internal-format msgid "" "The associate name %s with an assumed rank target at %L must have a bounds " "remapping list (list of lbound:ubound for each dimension)" msgstr "" -#: fortran/match.cc:2018 +#: fortran/match.cc:2140 #, gcc-internal-format, gfc-internal-format msgid "The assumed rank target at %C must be contiguous" msgstr "" -#: fortran/match.cc:2037 +#: fortran/match.cc:2159 #, gcc-internal-format msgid "Expected %<)%> or %<,%> at %C" msgstr "" -#: fortran/match.cc:2055 +#: fortran/match.cc:2188 +#, gcc-internal-format, gfc-internal-format +msgid "Expected association list at %C" +msgstr "" + +#: fortran/match.cc:2197 +#, gcc-internal-format, gfc-internal-format +msgid "Expected association at %C" +msgstr "" + +#: fortran/match.cc:2209 #, gcc-internal-format, gfc-internal-format msgid "Junk after ASSOCIATE statement at %C" msgstr "" -#: fortran/match.cc:2177 +#: fortran/match.cc:2331 #, gcc-internal-format msgid "Derived type %qs at %L may not be ABSTRACT" msgstr "" -#: fortran/match.cc:2256 fortran/match.cc:2328 fortran/match.cc:2351 +#: fortran/match.cc:2410 fortran/match.cc:2482 fortran/match.cc:2505 #, gcc-internal-format, gfc-internal-format msgid "Invalid type-spec at %C" msgstr "" -#: fortran/match.cc:2446 +#: fortran/match.cc:2600 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in FORALL iterator at %C" msgstr "" -#: fortran/match.cc:2722 +#: fortran/match.cc:2876 #, gcc-internal-format, gfc-internal-format msgid "DO CONCURRENT construct at %C" msgstr "" -#: fortran/match.cc:2826 +#: fortran/match.cc:2980 #, gcc-internal-format, gfc-internal-format msgid "DEFAULT (NONE) specified more than once in DO CONCURRENT at %C" msgstr "" -#: fortran/match.cc:2915 +#: fortran/match.cc:3069 #, gcc-internal-format, gfc-internal-format msgid "Expected reduction operator or function name at %C" msgstr "" -#: fortran/match.cc:2935 fortran/openmp.cc:2439 fortran/openmp.cc:2475 +#: fortran/match.cc:3089 fortran/openmp.cc:2439 fortran/openmp.cc:2475 #: fortran/openmp.cc:2885 fortran/openmp.cc:2910 #, gcc-internal-format msgid "Expected %<:%> at %C" msgstr "" -#: fortran/match.cc:2945 +#: fortran/match.cc:3099 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name in reduction list at %C" msgstr "" -#: fortran/match.cc:2964 +#: fortran/match.cc:3118 #, gcc-internal-format, gfc-internal-format msgid "Expected ',' or ')' in reduction list at %C" msgstr "" -#: fortran/match.cc:2970 +#: fortran/match.cc:3124 #, gcc-internal-format, gfc-internal-format msgid "REDUCE locality spec at %L" msgstr "" -#: fortran/match.cc:2977 +#: fortran/match.cc:3131 #, gcc-internal-format, gfc-internal-format msgid "Locality spec at %L" msgstr "" -#: fortran/match.cc:3112 +#: fortran/match.cc:3266 #, gcc-internal-format msgid "Name %qs in %s statement at %C is unknown" msgstr "" -#: fortran/match.cc:3120 +#: fortran/match.cc:3274 #, gcc-internal-format msgid "Name %qs in %s statement at %C is not a construct name" msgstr "" -#: fortran/match.cc:3132 +#: fortran/match.cc:3286 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaves CRITICAL construct" msgstr "" #. F2008, C821 & C845. -#: fortran/match.cc:3140 +#: fortran/match.cc:3294 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaves DO CONCURRENT construct" msgstr "" -#: fortran/match.cc:3152 +#: fortran/match.cc:3306 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not within a construct" msgstr "" -#: fortran/match.cc:3155 +#: fortran/match.cc:3309 #, gcc-internal-format msgid "%s statement at %C is not within construct %qs" msgstr "" -#: fortran/match.cc:3181 +#: fortran/match.cc:3336 #, gcc-internal-format msgid "CYCLE statement at %C is not applicable to non-loop construct %qs" msgstr "" -#: fortran/match.cc:3186 +#: fortran/match.cc:3341 #, gcc-internal-format, gfc-internal-format msgid "EXIT statement with no do-construct-name at %C" msgstr "" -#: fortran/match.cc:3192 +#: fortran/match.cc:3347 #, gcc-internal-format msgid "%s statement at %C is not applicable to construct %qs" msgstr "" -#: fortran/match.cc:3200 +#: fortran/match.cc:3355 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaving OpenACC structured block" msgstr "" -#: fortran/match.cc:3201 +#: fortran/match.cc:3356 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaving OpenMP structured block" msgstr "" -#: fortran/match.cc:3241 +#: fortran/match.cc:3396 #, gcc-internal-format, gfc-internal-format msgid "EXIT statement at %C terminating !$ACC LOOP loop" msgstr "" -#: fortran/match.cc:3247 +#: fortran/match.cc:3402 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C to non-innermost tiled !$ACC LOOP loop" msgstr "" -#: fortran/match.cc:3249 +#: fortran/match.cc:3404 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C to non-innermost collapsed !$ACC LOOP loop" msgstr "" -#: fortran/match.cc:3296 +#: fortran/match.cc:3451 #, gcc-internal-format, gfc-internal-format msgid "EXIT statement at %C terminating !$OMP DO loop" msgstr "" -#: fortran/match.cc:3301 +#: fortran/match.cc:3456 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C to non-innermost collapsed !$OMP DO loop" msgstr "" -#: fortran/match.cc:3406 +#: fortran/match.cc:3561 #, gcc-internal-format, gfc-internal-format msgid "Blank required in %s statement near %C" msgstr "" -#: fortran/match.cc:3429 +#: fortran/match.cc:3584 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %C cannot be negative" msgstr "" -#: fortran/match.cc:3435 +#: fortran/match.cc:3590 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %C contains too many digits" msgstr "" -#: fortran/match.cc:3451 +#: fortran/match.cc:3606 #, gcc-internal-format, gfc-internal-format msgid "QUIET= specifier for %s at %L" msgstr "" -#: fortran/match.cc:3465 +#: fortran/match.cc:3620 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C in PURE procedure" msgstr "" -#: fortran/match.cc:3481 +#: fortran/match.cc:3636 #, gcc-internal-format, gfc-internal-format msgid "Image control statement STOP at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:3486 +#: fortran/match.cc:3641 #, gcc-internal-format, gfc-internal-format msgid "Image control statement STOP at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:3498 +#: fortran/match.cc:3653 #, gcc-internal-format, gfc-internal-format msgid "" "STOP code at %L must be a scalar CHARACTER constant or " "digit[digit[digit[digit[digit]]]]" msgstr "" -#: fortran/match.cc:3510 +#: fortran/match.cc:3665 #, gcc-internal-format, gfc-internal-format msgid "" "STOP code at %L must be a scalar default CHARACTER or INTEGER constant " "expression" msgstr "" -#: fortran/match.cc:3517 +#: fortran/match.cc:3672 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be either INTEGER or CHARACTER type" msgstr "" -#: fortran/match.cc:3524 +#: fortran/match.cc:3679 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be scalar" msgstr "" -#: fortran/match.cc:3531 +#: fortran/match.cc:3686 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be default character KIND=%d" msgstr "" -#: fortran/match.cc:3538 +#: fortran/match.cc:3693 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be default integer KIND=%d" msgstr "" -#: fortran/match.cc:3550 fortran/resolve.cc:13424 +#: fortran/match.cc:3705 fortran/resolve.cc:13545 #, gcc-internal-format, gfc-internal-format msgid "QUIET specifier at %L must be a scalar LOGICAL" msgstr "" -#: fortran/match.cc:3600 +#: fortran/match.cc:3755 #, gcc-internal-format, gfc-internal-format msgid "PAUSE statement at %C" msgstr "" -#: fortran/match.cc:3621 +#: fortran/match.cc:3776 #, gcc-internal-format, gfc-internal-format msgid "ERROR STOP statement at %C" msgstr "" -#: fortran/match.cc:3647 +#: fortran/match.cc:3802 #, gcc-internal-format, gfc-internal-format msgid "Image control statement EVENT %s at %C in PURE procedure" msgstr "" -#: fortran/match.cc:3662 +#: fortran/match.cc:3817 #, gcc-internal-format, gfc-internal-format msgid "Image control statement EVENT %s at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:3669 +#: fortran/match.cc:3824 #, gcc-internal-format, gfc-internal-format msgid "Image control statement EVENT %s at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:3699 fortran/match.cc:4041 fortran/match.cc:4253 -#: fortran/match.cc:4805 fortran/match.cc:5177 +#: fortran/match.cc:3854 fortran/match.cc:4341 fortran/match.cc:4553 +#: fortran/match.cc:5105 fortran/match.cc:5477 #, gcc-internal-format, gfc-internal-format msgid "Redundant STAT tag found at %L" msgstr "" -#: fortran/match.cc:3720 fortran/match.cc:4062 fortran/match.cc:4273 -#: fortran/match.cc:4837 fortran/match.cc:5202 +#: fortran/match.cc:3875 fortran/match.cc:4362 fortran/match.cc:4573 +#: fortran/match.cc:5137 fortran/match.cc:5502 #, gcc-internal-format, gfc-internal-format msgid "Redundant ERRMSG tag found at %L" msgstr "" -#: fortran/match.cc:3741 +#: fortran/match.cc:3896 #, gcc-internal-format, gfc-internal-format msgid "Redundant UNTIL_COUNT tag found at %L" msgstr "" -#: fortran/match.cc:3807 +#: fortran/match.cc:3962 #, gcc-internal-format, gfc-internal-format msgid "EVENT POST statement at %C" msgstr "" -#: fortran/match.cc:3817 +#: fortran/match.cc:3972 #, gcc-internal-format, gfc-internal-format msgid "EVENT WAIT statement at %C" msgstr "" -#: fortran/match.cc:3829 +#: fortran/match.cc:3984 #, gcc-internal-format, gfc-internal-format msgid "FAIL IMAGE statement at %C" msgstr "" -#: fortran/match.cc:3853 +#: fortran/match.cc:4010 #, gcc-internal-format, gfc-internal-format msgid "FORM TEAM statement at %C" msgstr "" -#: fortran/match.cc:3892 +#: fortran/match.cc:4098 #, gcc-internal-format, gfc-internal-format msgid "CHANGE TEAM statement at %C" msgstr "" -#: fortran/match.cc:3922 -#, gcc-internal-format, gfc-internal-format -msgid "END TEAM statement at %C" -msgstr "" - -#: fortran/match.cc:3946 +#: fortran/match.cc:4215 #, gcc-internal-format, gfc-internal-format msgid "SYNC TEAM statement at %C" msgstr "" -#: fortran/match.cc:3989 +#: fortran/match.cc:4289 #, gcc-internal-format, gfc-internal-format msgid "Image control statement %s at %C in PURE procedure" msgstr "" -#: fortran/match.cc:4004 +#: fortran/match.cc:4304 #, gcc-internal-format, gfc-internal-format msgid "Image control statement %s at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:4011 +#: fortran/match.cc:4311 #, gcc-internal-format, gfc-internal-format msgid "Image control statement %s at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:4083 +#: fortran/match.cc:4383 #, gcc-internal-format, gfc-internal-format msgid "Redundant ACQUIRED_LOCK tag found at %L" msgstr "" -#: fortran/match.cc:4148 +#: fortran/match.cc:4448 #, gcc-internal-format, gfc-internal-format msgid "LOCK statement at %C" msgstr "" -#: fortran/match.cc:4158 +#: fortran/match.cc:4458 #, gcc-internal-format, gfc-internal-format msgid "UNLOCK statement at %C" msgstr "" -#: fortran/match.cc:4183 +#: fortran/match.cc:4483 #, gcc-internal-format, gfc-internal-format msgid "Image control statement SYNC at %C in PURE procedure" msgstr "" -#: fortran/match.cc:4189 +#: fortran/match.cc:4489 #, gcc-internal-format, gfc-internal-format msgid "SYNC statement at %C" msgstr "" -#: fortran/match.cc:4201 +#: fortran/match.cc:4501 #, gcc-internal-format, gfc-internal-format msgid "Image control statement SYNC at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:4207 +#: fortran/match.cc:4507 #, gcc-internal-format, gfc-internal-format msgid "Image control statement SYNC at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:4387 +#: fortran/match.cc:4687 #, gcc-internal-format, gfc-internal-format msgid "ASSIGN statement at %C" msgstr "" -#: fortran/match.cc:4431 +#: fortran/match.cc:4731 #, gcc-internal-format, gfc-internal-format msgid "Assigned GOTO statement at %C" msgstr "" -#: fortran/match.cc:4475 fortran/match.cc:4526 +#: fortran/match.cc:4775 fortran/match.cc:4826 #, gcc-internal-format, gfc-internal-format msgid "Statement label list in GOTO at %C cannot be empty" msgstr "" -#: fortran/match.cc:4536 +#: fortran/match.cc:4836 #, gcc-internal-format, gfc-internal-format msgid "Computed GOTO at %C" msgstr "" -#: fortran/match.cc:4611 +#: fortran/match.cc:4911 #, gcc-internal-format, gfc-internal-format msgid "Error in type-spec at %L" msgstr "" -#: fortran/match.cc:4624 +#: fortran/match.cc:4924 #, gcc-internal-format, gfc-internal-format msgid "typespec in ALLOCATE at %L" msgstr "" -#: fortran/match.cc:4647 +#: fortran/match.cc:4947 #, gcc-internal-format, gfc-internal-format msgid "" "The type parameter spec list in the type-spec at %L cannot contain DEFERRED " "parameters" msgstr "" -#: fortran/match.cc:4677 fortran/match.cc:5115 +#: fortran/match.cc:4977 fortran/match.cc:5415 #, gcc-internal-format, gfc-internal-format msgid "Unexpected constant at %C" msgstr "" -#: fortran/match.cc:4687 +#: fortran/match.cc:4987 #, gcc-internal-format, gfc-internal-format msgid "Bad allocate-object at %C for a PURE procedure" msgstr "" -#: fortran/match.cc:4702 +#: fortran/match.cc:5002 #, gcc-internal-format, gfc-internal-format msgid "Incompatible allocate-object at %C for CHARACTER type-spec at %L" msgstr "" -#: fortran/match.cc:4724 +#: fortran/match.cc:5024 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATE of coarray at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:4729 +#: fortran/match.cc:5029 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATE of coarray at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:4751 +#: fortran/match.cc:5051 #, gcc-internal-format, gfc-internal-format msgid "" "Allocate-object at %L is neither a data pointer nor an allocatable variable" msgstr "" -#: fortran/match.cc:4763 +#: fortran/match.cc:5063 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with typespec" msgstr "" -#: fortran/match.cc:4771 +#: fortran/match.cc:5071 #, gcc-internal-format, gfc-internal-format msgid "" "Kind type parameter for entity at %L differs from the kind type parameter of " "the typespec" msgstr "" -#: fortran/match.cc:4788 +#: fortran/match.cc:5088 #, gcc-internal-format, gfc-internal-format msgid "Shape specification for allocatable scalar at %C" msgstr "" -#: fortran/match.cc:4815 +#: fortran/match.cc:5115 #, gcc-internal-format, gfc-internal-format msgid "STAT tag at %L cannot be a constant" msgstr "" -#: fortran/match.cc:4831 +#: fortran/match.cc:5131 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG tag at %L" msgstr "" -#: fortran/match.cc:4854 +#: fortran/match.cc:5154 #, gcc-internal-format, gfc-internal-format msgid "SOURCE tag at %L" msgstr "" -#: fortran/match.cc:4860 +#: fortran/match.cc:5160 #, gcc-internal-format, gfc-internal-format msgid "Redundant SOURCE tag found at %L" msgstr "" -#: fortran/match.cc:4867 +#: fortran/match.cc:5167 #, gcc-internal-format, gfc-internal-format msgid "SOURCE tag at %L conflicts with the typespec at %L" msgstr "" -#: fortran/match.cc:4873 +#: fortran/match.cc:5173 #, gcc-internal-format, gfc-internal-format msgid "SOURCE tag at %L with more than a single allocate object" msgstr "" -#: fortran/match.cc:4891 +#: fortran/match.cc:5191 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L" msgstr "" -#: fortran/match.cc:4897 +#: fortran/match.cc:5197 #, gcc-internal-format, gfc-internal-format msgid "Redundant MOLD tag found at %L" msgstr "" -#: fortran/match.cc:4904 +#: fortran/match.cc:5204 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L conflicts with the typespec at %L" msgstr "" -#: fortran/match.cc:4930 +#: fortran/match.cc:5230 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L conflicts with SOURCE tag at %L" msgstr "" -#: fortran/match.cc:4938 +#: fortran/match.cc:5238 #, gcc-internal-format, gfc-internal-format msgid "" "Allocate-object at %L with a deferred type parameter requires either a type-" "spec or SOURCE tag or a MOLD tag" msgstr "" -#: fortran/match.cc:4950 +#: fortran/match.cc:5250 #, gcc-internal-format, gfc-internal-format msgid "" "Unlimited polymorphic allocate-object at %L requires either a type-spec or " "SOURCE tag or a MOLD tag" msgstr "" -#: fortran/match.cc:5017 +#: fortran/match.cc:5317 #, gcc-internal-format, gfc-internal-format msgid "Pointer object at %C shall not be coindexed" msgstr "" -#: fortran/match.cc:5032 +#: fortran/match.cc:5332 #, gcc-internal-format, gfc-internal-format msgid "NULLIFY does not allow bounds remapping for pointer object at %C" msgstr "" -#: fortran/match.cc:5127 +#: fortran/match.cc:5427 #, gcc-internal-format, gfc-internal-format msgid "Illegal allocate-object at %C for a PURE procedure" msgstr "" -#: fortran/match.cc:5137 +#: fortran/match.cc:5437 #, gcc-internal-format, gfc-internal-format msgid "DEALLOCATE of coarray at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:5144 +#: fortran/match.cc:5444 #, gcc-internal-format, gfc-internal-format msgid "DEALLOCATE of coarray at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:5160 +#: fortran/match.cc:5460 #, gcc-internal-format, gfc-internal-format msgid "" "Allocate-object at %C is not a nonprocedure pointer nor an allocatable " "variable" msgstr "" -#: fortran/match.cc:5197 +#: fortran/match.cc:5497 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG at %L" msgstr "" -#: fortran/match.cc:5254 +#: fortran/match.cc:5554 #, gcc-internal-format, gfc-internal-format msgid "Image control statement RETURN at %C in CRITICAL block" msgstr "" -#: fortran/match.cc:5260 +#: fortran/match.cc:5560 #, gcc-internal-format, gfc-internal-format msgid "Image control statement RETURN at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.cc:5269 +#: fortran/match.cc:5569 +#, gcc-internal-format, gfc-internal-format +msgid "Image control statement RETURN at %C in CHANGE TEAM-END TEAM block" +msgstr "" + +#: fortran/match.cc:5578 #, gcc-internal-format, gfc-internal-format msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE" msgstr "" -#: fortran/match.cc:5300 +#: fortran/match.cc:5609 #, gcc-internal-format, gfc-internal-format msgid "RETURN statement in main program at %C" msgstr "" -#: fortran/match.cc:5328 +#: fortran/match.cc:5637 #, gcc-internal-format, gfc-internal-format msgid "Expected component reference at %C" msgstr "" -#: fortran/match.cc:5337 +#: fortran/match.cc:5646 #, gcc-internal-format, gfc-internal-format msgid "Junk after CALL at %C" msgstr "" -#: fortran/match.cc:5348 +#: fortran/match.cc:5657 #, gcc-internal-format, gfc-internal-format msgid "Expected type-bound procedure or procedure pointer component at %C" msgstr "" -#: fortran/match.cc:5446 +#: fortran/match.cc:5755 #, gcc-internal-format, gfc-internal-format msgid "" "A BOZ literal constant at %L cannot appear as an actual argument in a " "subroutine reference" msgstr "" -#: fortran/match.cc:5587 +#: fortran/match.cc:5896 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in common block name at %C" msgstr "" @@ -80841,69 +81066,69 @@ msgstr "" #. If we find an error, just print it and continue, #. cause it's just semantic, and we can see if there #. are more errors. -#: fortran/match.cc:5662 +#: fortran/match.cc:5971 #, gcc-internal-format msgid "" "Variable %qs at %L in common block %qs at %C must be declared with a C " "interoperable kind since common block %qs is bind(c)" msgstr "" -#: fortran/match.cc:5671 +#: fortran/match.cc:5980 #, gcc-internal-format msgid "" "Variable %qs in common block %qs at %C cannot be bind(c) since it is not " "global" msgstr "" -#: fortran/match.cc:5678 +#: fortran/match.cc:5987 #, gcc-internal-format msgid "Symbol %qs at %C is already in a COMMON block" msgstr "" -#: fortran/match.cc:5686 +#: fortran/match.cc:5995 #, gcc-internal-format msgid "Initialized symbol %qs at %C can only be COMMON in BLOCK DATA" msgstr "" -#: fortran/match.cc:5697 +#: fortran/match.cc:6006 #, gcc-internal-format msgid "" "Symbol %qs at %C is USE associated from module %qs and cannot occur in COMMON" msgstr "" -#: fortran/match.cc:5712 +#: fortran/match.cc:6021 #, gcc-internal-format msgid "Array specification for symbol %qs in COMMON at %C must be explicit" msgstr "" -#: fortran/match.cc:5719 +#: fortran/match.cc:6028 #, gcc-internal-format msgid "Symbol %qs in COMMON at %C cannot be a coarray" msgstr "" -#: fortran/match.cc:5729 +#: fortran/match.cc:6038 #, gcc-internal-format msgid "Symbol %qs in COMMON at %C cannot be a POINTER array" msgstr "" -#: fortran/match.cc:5775 +#: fortran/match.cc:6084 #, gcc-internal-format msgid "" "Symbol %qs, in COMMON block %qs at %C is being indirectly equivalenced to " "another COMMON block %qs" msgstr "" -#: fortran/match.cc:5837 +#: fortran/match.cc:6146 #, gcc-internal-format, gfc-internal-format msgid "BLOCK DATA construct at %L" msgstr "" -#: fortran/match.cc:5950 +#: fortran/match.cc:6259 #, gcc-internal-format msgid "Namelist group name %qs at %C already has a basic type of %s" msgstr "" -#: fortran/match.cc:5960 +#: fortran/match.cc:6269 #, gcc-internal-format msgid "" "Namelist group name %qs at %C already is USE associated and cannot be " @@ -80913,197 +81138,197 @@ msgstr "" #. It is required that members of a namelist be declared #. before the namelist. We check this by checking if the #. symbol has a defined type for IMPLICIT NONE. -#: fortran/match.cc:5985 +#: fortran/match.cc:6294 #, gcc-internal-format msgid "" "Symbol %qs in namelist %qs at %C must be declared before the namelist is " "declared." msgstr "" -#: fortran/match.cc:6005 +#: fortran/match.cc:6314 #, gcc-internal-format msgid "Derived type %qs at %L conflicts with namelist object %qs at %C" msgstr "" -#: fortran/match.cc:6025 +#: fortran/match.cc:6334 #, gcc-internal-format msgid "Assumed size array %qs in namelist %qs at %C is not allowed" msgstr "" -#: fortran/match.cc:6168 +#: fortran/match.cc:6477 #, gcc-internal-format, gfc-internal-format msgid "Derived type component %C is not a permitted EQUIVALENCE member" msgstr "" -#: fortran/match.cc:6176 +#: fortran/match.cc:6485 #, gcc-internal-format, gfc-internal-format msgid "Array reference in EQUIVALENCE at %C cannot be an array section" msgstr "" -#: fortran/match.cc:6209 +#: fortran/match.cc:6518 #, gcc-internal-format, gfc-internal-format msgid "EQUIVALENCE at %C requires two or more objects" msgstr "" -#: fortran/match.cc:6223 +#: fortran/match.cc:6532 #, gcc-internal-format, gfc-internal-format msgid "" "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C" msgstr "" -#: fortran/match.cc:6236 +#: fortran/match.cc:6545 #, gcc-internal-format, gfc-internal-format msgid "Expecting a comma in EQUIVALENCE at %C" msgstr "" -#: fortran/match.cc:6241 +#: fortran/match.cc:6550 #, gcc-internal-format, gfc-internal-format msgid "EQUIVALENCE statement at %C" msgstr "" -#: fortran/match.cc:6334 +#: fortran/match.cc:6643 #, gcc-internal-format, gfc-internal-format msgid "Invalid use of statement function argument at %L" msgstr "" -#: fortran/match.cc:6401 +#: fortran/match.cc:6710 #, gcc-internal-format, gfc-internal-format msgid "Statement function at %L is recursive" msgstr "" -#: fortran/match.cc:6407 +#: fortran/match.cc:6716 #, gcc-internal-format msgid "Statement function %qs at %L conflicts with function name" msgstr "" -#: fortran/match.cc:6421 +#: fortran/match.cc:6730 #, gcc-internal-format, gfc-internal-format msgid "Statement function at %L cannot appear within an INTERFACE" msgstr "" -#: fortran/match.cc:6426 +#: fortran/match.cc:6735 #, gcc-internal-format, gfc-internal-format msgid "Statement function at %C" msgstr "" -#: fortran/match.cc:6553 fortran/match.cc:6571 fortran/match.cc:6592 +#: fortran/match.cc:6862 fortran/match.cc:6880 fortran/match.cc:6901 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE selector at %L cannot be %s" msgstr "" -#: fortran/match.cc:6602 fortran/match.cc:6608 +#: fortran/match.cc:6911 fortran/match.cc:6917 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE selector at %L must be scalar" msgstr "" -#: fortran/match.cc:6617 +#: fortran/match.cc:6926 #, gcc-internal-format, gfc-internal-format msgid "Expected initialization expression in CASE at %C" msgstr "" -#: fortran/match.cc:6649 +#: fortran/match.cc:6958 #, gcc-internal-format msgid "Expected block name %qs of SELECT construct at %C" msgstr "" -#: fortran/match.cc:7029 +#: fortran/match.cc:7338 #, gcc-internal-format, gfc-internal-format msgid "SELECT TYPE at %C cannot appear in this scope" msgstr "" -#: fortran/match.cc:7057 +#: fortran/match.cc:7366 #, gcc-internal-format, gfc-internal-format msgid "parse error in SELECT TYPE statement at %C" msgstr "" -#: fortran/match.cc:7082 +#: fortran/match.cc:7391 #, gcc-internal-format, gfc-internal-format msgid "" "Selector in SELECT TYPE at %C is not a named variable; use associate-name=>" msgstr "" -#: fortran/match.cc:7270 +#: fortran/match.cc:7579 #, gcc-internal-format, gfc-internal-format msgid "SELECT RANK statement at %C" msgstr "" -#: fortran/match.cc:7311 fortran/match.cc:7365 +#: fortran/match.cc:7620 fortran/match.cc:7674 #, gcc-internal-format, gfc-internal-format msgid "The SELECT RANK selector at %C must be an assumed rank variable" msgstr "" -#: fortran/match.cc:7375 +#: fortran/match.cc:7684 #, gcc-internal-format, gfc-internal-format msgid "parse error in SELECT RANK statement at %C" msgstr "" -#: fortran/match.cc:7411 +#: fortran/match.cc:7720 #, gcc-internal-format, gfc-internal-format msgid "Unexpected CASE statement at %C" msgstr "" -#: fortran/match.cc:7463 +#: fortran/match.cc:7772 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CASE specification at %C" msgstr "" -#: fortran/match.cc:7481 +#: fortran/match.cc:7790 #, gcc-internal-format, gfc-internal-format msgid "Unexpected TYPE IS statement at %C" msgstr "" -#: fortran/match.cc:7513 +#: fortran/match.cc:7822 #, gcc-internal-format, gfc-internal-format msgid "" "The type-spec shall not specify a sequence derived type or a type with the " "BIND attribute in SELECT TYPE at %C [F2003:C815]" msgstr "" -#: fortran/match.cc:7524 +#: fortran/match.cc:7833 #, gcc-internal-format, gfc-internal-format msgid "" "All the LEN type parameters in the TYPE IS statement at %C must be ASSUMED" msgstr "" -#: fortran/match.cc:7535 +#: fortran/match.cc:7844 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in TYPE IS specification at %C" msgstr "" -#: fortran/match.cc:7611 +#: fortran/match.cc:7920 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CLASS IS specification at %C" msgstr "" -#: fortran/match.cc:7631 +#: fortran/match.cc:7940 #, gcc-internal-format, gfc-internal-format msgid "Unexpected RANK statement at %C" msgstr "" -#: fortran/match.cc:7677 +#: fortran/match.cc:7986 #, gcc-internal-format, gfc-internal-format msgid "" "The SELECT RANK CASE expression at %C must be a scalar, integer constant" msgstr "" -#: fortran/match.cc:7686 +#: fortran/match.cc:7995 #, gcc-internal-format, gfc-internal-format msgid "" "The value of the SELECT RANK CASE expression at %C must not be less than " "zero or greater than %d" msgstr "" -#: fortran/match.cc:7713 +#: fortran/match.cc:8022 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in RANK specification at %C" msgstr "" -#: fortran/match.cc:7835 +#: fortran/match.cc:8144 #, gcc-internal-format, gfc-internal-format msgid "ELSEWHERE statement at %C not enclosed in WHERE block" msgstr "" -#: fortran/match.cc:7873 +#: fortran/match.cc:8182 #, gcc-internal-format msgid "Label %qs at %C doesn't match WHERE label %qs" msgstr "" @@ -82087,7 +82312,7 @@ msgid "" "DEPEND clause at %L of OMP DEPOBJ construct shall have only a single locator" msgstr "" -#: fortran/openmp.cc:5536 fortran/openmp.cc:10390 +#: fortran/openmp.cc:5536 fortran/openmp.cc:10386 #, gcc-internal-format, gfc-internal-format msgid "" "MESSAGE clause at %L requires a scalar default-kind CHARACTER expression" @@ -82124,12 +82349,12 @@ msgstr "" msgid "Unexpected junk after $OMP FLUSH statement at %C" msgstr "" -#: fortran/openmp.cc:6013 fortran/openmp.cc:13208 +#: fortran/openmp.cc:6013 fortran/openmp.cc:13204 #, gcc-internal-format, gfc-internal-format msgid "Redefinition of predefined %s !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:6017 fortran/openmp.cc:13212 +#: fortran/openmp.cc:6017 fortran/openmp.cc:13208 #, gcc-internal-format, gfc-internal-format msgid "Redefinition of predefined !$OMP DECLARE REDUCTION at %L" msgstr "" @@ -82634,7 +82859,7 @@ msgstr "" msgid "%s clause at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.cc:8219 fortran/openmp.cc:10425 +#: fortran/openmp.cc:8219 fortran/openmp.cc:10421 #, gcc-internal-format, gfc-internal-format msgid "INTEGER expression of %s clause at %L must be positive" msgstr "" @@ -82654,7 +82879,7 @@ msgstr "" msgid "Cray pointee object %qs of derived type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8251 fortran/openmp.cc:10248 +#: fortran/openmp.cc:8251 fortran/openmp.cc:10244 #, gcc-internal-format msgid "POINTER object %qs of polymorphic type in %s clause at %L" msgstr "" @@ -82669,7 +82894,7 @@ msgstr "" msgid "Cray pointee object %qs of polymorphic type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8271 fortran/openmp.cc:9682 fortran/openmp.cc:9983 +#: fortran/openmp.cc:8271 fortran/openmp.cc:9682 fortran/openmp.cc:9967 #, gcc-internal-format msgid "Assumed size array %qs in %s clause at %L" msgstr "" @@ -82679,22 +82904,22 @@ msgstr "" msgid "Assumed rank array %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8290 fortran/openmp.cc:9970 +#: fortran/openmp.cc:8290 fortran/openmp.cc:9954 #, gcc-internal-format msgid "POINTER object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8295 fortran/openmp.cc:10252 +#: fortran/openmp.cc:8295 fortran/openmp.cc:10248 #, gcc-internal-format msgid "Cray pointer object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8300 fortran/openmp.cc:10255 +#: fortran/openmp.cc:8300 fortran/openmp.cc:10251 #, gcc-internal-format msgid "Cray pointee object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8305 fortran/openmp.cc:10243 +#: fortran/openmp.cc:8305 fortran/openmp.cc:10239 #, gcc-internal-format msgid "ALLOCATABLE object %qs in %s clause at %L" msgstr "" @@ -82828,8 +83053,8 @@ msgstr "" msgid "ORDER clause must not be used together with ORDERED at %L" msgstr "" -#: fortran/openmp.cc:8630 fortran/openmp.cc:8641 fortran/resolve.cc:12061 -#: fortran/resolve.cc:13670 +#: fortran/openmp.cc:8630 fortran/openmp.cc:8641 fortran/resolve.cc:12199 +#: fortran/resolve.cc:13788 #, gcc-internal-format, gfc-internal-format msgid "IF clause at %L requires a scalar LOGICAL expression" msgstr "" @@ -82913,7 +83138,7 @@ msgid "" "mapped" msgstr "" -#: fortran/openmp.cc:8908 fortran/openmp.cc:12763 +#: fortran/openmp.cc:8908 fortran/openmp.cc:12759 #, gcc-internal-format msgid "Object %qs is not a variable at %L" msgstr "" @@ -82940,7 +83165,7 @@ msgstr "" #: fortran/openmp.cc:8958 fortran/openmp.cc:8970 fortran/openmp.cc:8991 #: fortran/openmp.cc:9003 fortran/openmp.cc:9065 fortran/openmp.cc:9073 #: fortran/openmp.cc:9094 fortran/openmp.cc:9105 fortran/openmp.cc:9117 -#: fortran/openmp.cc:9352 fortran/openmp.cc:12787 +#: fortran/openmp.cc:9352 fortran/openmp.cc:12783 #, gcc-internal-format msgid "Symbol %qs present on multiple clauses at %L" msgstr "" @@ -82985,7 +83210,7 @@ msgstr "" msgid "%qs appears more than once in %<allocate%> at %L" msgstr "" -#: fortran/openmp.cc:9216 fortran/trans-openmp.cc:7432 +#: fortran/openmp.cc:9216 fortran/trans-openmp.cc:8309 #, gcc-internal-format msgid "" "%qs specified in %<allocate%> clause at %L but not in an explicit " @@ -83189,669 +83414,666 @@ msgstr "" msgid "%qs in %s clause at %L is a zero size array section" msgstr "" -#: fortran/openmp.cc:9688 -#, gcc-internal-format -msgid "" -"List item %qs with allocatable components is not permitted in map clause at " -"%L" -msgstr "" - -#: fortran/openmp.cc:9698 -#, gcc-internal-format, gfc-internal-format -msgid "Mapping polymorphic list item at %L is unspecified behavior" -msgstr "" - -#: fortran/openmp.cc:9734 +#: fortran/openmp.cc:9718 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET%s with map-type other than TO, FROM, TOFROM, or ALLOC on MAP clause " "at %L" msgstr "" -#: fortran/openmp.cc:9765 +#: fortran/openmp.cc:9749 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET ENTER DATA with map-type other than TO, TOFROM or ALLOC on MAP clause " "at %L" msgstr "" -#: fortran/openmp.cc:9794 +#: fortran/openmp.cc:9778 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET EXIT DATA with map-type other than FROM, TOFROM, RELEASE, or DELETE " "on MAP clause at %L" msgstr "" -#: fortran/openmp.cc:9810 fortran/openmp.cc:9954 +#: fortran/openmp.cc:9794 fortran/openmp.cc:9938 #, gcc-internal-format msgid "THREADPRIVATE object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:9813 fortran/openmp.cc:9957 +#: fortran/openmp.cc:9797 fortran/openmp.cc:9941 #, gcc-internal-format msgid "Cray pointee %qs in %s clause at %L" msgstr "" #. Non-TARGET (i.e. DISPATCH) requires a C_PTR. -#: fortran/openmp.cc:9827 +#: fortran/openmp.cc:9811 #, gcc-internal-format msgid "List item %qs in %s clause at %L must be of TYPE(C_PTR)" msgstr "" -#: fortran/openmp.cc:9886 +#: fortran/openmp.cc:9870 #, gcc-internal-format msgid "Memspace %qs at %L in USES_ALLOCATORS must be a predefined memory space" msgstr "" -#: fortran/openmp.cc:9894 +#: fortran/openmp.cc:9878 #, gcc-internal-format msgid "" "Allocator %qs at %L in USES_ALLOCATORS must be a scalar integer of kind " "%<omp_allocator_handle_kind%>" msgstr "" -#: fortran/openmp.cc:9902 +#: fortran/openmp.cc:9886 #, gcc-internal-format msgid "" "Allocator %qs at %L in USES_ALLOCATORS must either a variable or a " "predefined allocator" msgstr "" -#: fortran/openmp.cc:9907 +#: fortran/openmp.cc:9891 #, gcc-internal-format msgid "" "A memory space or traits array may not be specified for predefined allocator " "%qs at %L" msgstr "" -#: fortran/openmp.cc:9918 +#: fortran/openmp.cc:9902 #, gcc-internal-format msgid "" "Traits array %qs in USES_ALLOCATORS %L must be a one-dimensional named " "constant array of type %<omp_alloctrait%>" msgstr "" -#: fortran/openmp.cc:9948 +#: fortran/openmp.cc:9932 #, gcc-internal-format msgid "" "%<inscan%> and non-%<inscan%> %<reduction%> clauses on the same construct at " "%L" msgstr "" -#: fortran/openmp.cc:9960 +#: fortran/openmp.cc:9944 #, gcc-internal-format msgid "Associate name %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:9967 +#: fortran/openmp.cc:9951 #, gcc-internal-format msgid "Procedure pointer %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:9973 +#: fortran/openmp.cc:9957 #, gcc-internal-format msgid "Cray pointer %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:9986 +#: fortran/openmp.cc:9970 #, gcc-internal-format msgid "Variable %qs in %s clause is used in NAMELIST statement at %L" msgstr "" #. case OMP_LIST_REDUCTION: -#: fortran/openmp.cc:9996 +#: fortran/openmp.cc:9980 #, gcc-internal-format msgid "INTENT(IN) POINTER %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:10007 +#: fortran/openmp.cc:9991 #, gcc-internal-format msgid "DETACH event handle %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:10029 -#, gcc-internal-format, gfc-internal-format -msgid "FIRSTPRIVATE with polymorphic list item at %L is unspecified behavior" +#: fortran/openmp.cc:10016 +#, gcc-internal-format +msgid "" +"Sorry, list item %qs at %L with allocatable components is not yet supported " +"in %s clause" msgstr "" -#: fortran/openmp.cc:10058 +#: fortran/openmp.cc:10022 +#, gcc-internal-format +msgid "" +"Polymorphic list item %qs at %L in %s clause has unspecified behavior and " +"unsupported" +msgstr "" + +#: fortran/openmp.cc:10054 #, gcc-internal-format, gfc-internal-format msgid "Only DEFAULT permitted as reduction-modifier in REDUCTION clause at %L" msgstr "" -#: fortran/openmp.cc:10151 +#: fortran/openmp.cc:10147 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DECLARE REDUCTION %s not found for type %s at %L" msgstr "" -#: fortran/openmp.cc:10179 +#: fortran/openmp.cc:10175 #, gcc-internal-format, gfc-internal-format msgid "LINEAR clause modifier used on DO or SIMD construct at %L" msgstr "" -#: fortran/openmp.cc:10185 +#: fortran/openmp.cc:10181 #, gcc-internal-format, gfc-internal-format msgid "" "LINEAR clause modifier other than VAL used on DO or SIMD construct at %L" msgstr "" -#: fortran/openmp.cc:10193 +#: fortran/openmp.cc:10189 #, gcc-internal-format msgid "LINEAR variable %qs must be INTEGER at %L" msgstr "" -#: fortran/openmp.cc:10198 +#: fortran/openmp.cc:10194 #, gcc-internal-format msgid "LINEAR dummy argument %qs with VALUE attribute with %s modifier at %L" msgstr "" -#: fortran/openmp.cc:10209 +#: fortran/openmp.cc:10205 #, gcc-internal-format msgid "" "%qs in LINEAR clause at %L requires a scalar integer linear-step expression" msgstr "" -#: fortran/openmp.cc:10226 +#: fortran/openmp.cc:10222 #, gcc-internal-format msgid "" "%qs in LINEAR clause at %L requires a constant integer linear-step " "expression or dummy argument specified in UNIFORM clause" msgstr "" -#: fortran/openmp.cc:10260 +#: fortran/openmp.cc:10256 #, gcc-internal-format msgid "%s clause variable %qs at %L is neither a POINTER nor an array" msgstr "" -#: fortran/openmp.cc:10320 +#: fortran/openmp.cc:10316 #, gcc-internal-format, gfc-internal-format msgid "NUM_TEAMS lower bound at %L larger than upper bound at %L" msgstr "" -#: fortran/openmp.cc:10333 +#: fortran/openmp.cc:10329 #, gcc-internal-format, gfc-internal-format msgid "Value of HINT clause at %L shall be a valid constant hint expression" msgstr "" -#: fortran/openmp.cc:10343 +#: fortran/openmp.cc:10339 #, gcc-internal-format, gfc-internal-format msgid "" "DIST_SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.cc:10353 +#: fortran/openmp.cc:10349 #, gcc-internal-format msgid "" "%<GRAINSIZE%> clause at %L must not be used together with %<NUM_TASKS%> " "clause" msgstr "" -#: fortran/openmp.cc:10356 +#: fortran/openmp.cc:10352 #, gcc-internal-format msgid "" "%<REDUCTION%> clause at %L must not be used together with %<NOGROUP%> clause" msgstr "" -#: fortran/openmp.cc:10360 +#: fortran/openmp.cc:10356 #, gcc-internal-format msgid "%<FULL%> clause at %C must not be used together with %<PARTIAL%> clause" msgstr "" -#: fortran/openmp.cc:10383 +#: fortran/openmp.cc:10379 #, gcc-internal-format, gfc-internal-format msgid "Incompatible use of TILE and COLLAPSE at %L" msgstr "" -#: fortran/openmp.cc:10407 +#: fortran/openmp.cc:10403 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET DATA must contain at least one MAP, USE_DEVICE_PTR, or " "USE_DEVICE_ADDR clause at %L" msgstr "" -#: fortran/openmp.cc:10410 +#: fortran/openmp.cc:10406 #, gcc-internal-format, gfc-internal-format msgid "%s must contain at least one MAP clause at %L" msgstr "" -#: fortran/openmp.cc:10420 +#: fortran/openmp.cc:10416 #, gcc-internal-format, gfc-internal-format msgid "SIZES requires constant expression at %L" msgstr "" -#: fortran/openmp.cc:10436 +#: fortran/openmp.cc:10432 #, gcc-internal-format msgid "" "%qs at %L should be a scalar of type integer(kind=omp_event_handle_kind)" msgstr "" -#: fortran/openmp.cc:10441 +#: fortran/openmp.cc:10437 #, gcc-internal-format, gfc-internal-format msgid "The event handle at %L must not be an array element" msgstr "" -#: fortran/openmp.cc:10445 +#: fortran/openmp.cc:10441 #, gcc-internal-format, gfc-internal-format msgid "The event handle at %L must not be part of a derived type or class" msgstr "" -#: fortran/openmp.cc:10449 +#: fortran/openmp.cc:10445 #, gcc-internal-format msgid "" "%<DETACH%> clause at %L must not be used together with %<MERGEABLE%> clause" msgstr "" -#: fortran/openmp.cc:10456 +#: fortran/openmp.cc:10452 #, gcc-internal-format msgid "%<host_data%> construct at %L requires %<use_device%> clause" msgstr "" -#: fortran/openmp.cc:10610 +#: fortran/openmp.cc:10606 #, gcc-internal-format, gfc-internal-format msgid "Expected IF at %L in atomic compare capture" msgstr "" -#: fortran/openmp.cc:10618 +#: fortran/openmp.cc:10614 #, gcc-internal-format, gfc-internal-format msgid "Expected ELSE at %L in atomic compare capture" msgstr "" -#: fortran/openmp.cc:10730 +#: fortran/openmp.cc:10726 #, gcc-internal-format msgid "" "Expected %<==%>, %<.EQ.%> or %<.EQV.%> atomic comparison expression at %L" msgstr "" -#: fortran/openmp.cc:10736 +#: fortran/openmp.cc:10732 #, gcc-internal-format, gfc-internal-format msgid "Expected scalar intrinsic variable at %L in atomic comparison" msgstr "" -#: fortran/openmp.cc:10744 +#: fortran/openmp.cc:10740 #, gcc-internal-format, gfc-internal-format msgid "Expected scalar intrinsic expression at %L in atomic comparison" msgstr "" -#: fortran/openmp.cc:10752 +#: fortran/openmp.cc:10748 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L" msgstr "" -#: fortran/openmp.cc:10761 +#: fortran/openmp.cc:10757 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC statement must assign an expression of intrinsic type at %L" msgstr "" -#: fortran/openmp.cc:10768 +#: fortran/openmp.cc:10764 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC with ALLOCATABLE variable at %L" msgstr "" -#: fortran/openmp.cc:10785 +#: fortran/openmp.cc:10781 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC READ statement must read from a scalar variable of intrinsic " "type at %L" msgstr "" -#: fortran/openmp.cc:10790 +#: fortran/openmp.cc:10786 #, gcc-internal-format, gfc-internal-format msgid "" "expr in !$OMP ATOMIC WRITE assignment var = expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.cc:10802 +#: fortran/openmp.cc:10798 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC capture-statement must set a scalar variable of intrinsic type " "at %L" msgstr "" -#: fortran/openmp.cc:10810 +#: fortran/openmp.cc:10806 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC capture-statement requires a scalar variable of intrinsic type " "at %L" msgstr "" -#: fortran/openmp.cc:10820 +#: fortran/openmp.cc:10816 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC CAPTURE capture statement reads from different variable than " "update statement writes into at %L" msgstr "" -#: fortran/openmp.cc:10836 +#: fortran/openmp.cc:10832 #, gcc-internal-format msgid "" "For !$OMP ATOMIC COMPARE, the first operand in comparison at %L must be the " "variable %qs that the update statement writes into at %L" msgstr "" -#: fortran/openmp.cc:10844 +#: fortran/openmp.cc:10840 #, gcc-internal-format, gfc-internal-format msgid "" "expr in !$OMP ATOMIC COMPARE assignment var = expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.cc:10862 +#: fortran/openmp.cc:10858 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC UPDATE at %L with FAIL clause requires either the COMPARE " "clause or using the intrinsic MIN/MAX procedure" msgstr "" -#: fortran/openmp.cc:10889 +#: fortran/openmp.cc:10885 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., ." "EQV. or .NEQV. at %L" msgstr "" -#: fortran/openmp.cc:10937 +#: fortran/openmp.cc:10933 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment must be var = var op expr or var = expr op var at %L" msgstr "" -#: fortran/openmp.cc:10951 +#: fortran/openmp.cc:10947 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC var = var op expr not mathematically equivalent to var = var op " "(expr) at %L" msgstr "" -#: fortran/openmp.cc:10984 +#: fortran/openmp.cc:10980 #, gcc-internal-format, gfc-internal-format msgid "" "expr in !$OMP ATOMIC assignment var = var op expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.cc:11008 +#: fortran/openmp.cc:11004 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment intrinsic IAND, IOR or IEOR must have two arguments " "at %L" msgstr "" -#: fortran/openmp.cc:11015 +#: fortran/openmp.cc:11011 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment intrinsic must be MIN, MAX, IAND, IOR or IEOR at %L" msgstr "" -#: fortran/openmp.cc:11038 +#: fortran/openmp.cc:11034 #, gcc-internal-format msgid "" "!$OMP ATOMIC intrinsic arguments except one must not reference %qs at %L" msgstr "" -#: fortran/openmp.cc:11045 +#: fortran/openmp.cc:11041 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L" msgstr "" -#: fortran/openmp.cc:11053 +#: fortran/openmp.cc:11049 #, gcc-internal-format msgid "First or last !$OMP ATOMIC intrinsic argument must be %qs at %L" msgstr "" -#: fortran/openmp.cc:11071 +#: fortran/openmp.cc:11067 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment must have an operator or intrinsic on right hand " "side at %L" msgstr "" -#: fortran/openmp.cc:11076 +#: fortran/openmp.cc:11072 #, gcc-internal-format, gfc-internal-format msgid "unexpected !$OMP ATOMIC expression at %L" msgstr "" -#: fortran/openmp.cc:11184 +#: fortran/openmp.cc:11180 #, gcc-internal-format, gfc-internal-format msgid "" "With INSCAN at %L, expected loop body with !$OMP SCAN between two structured " "block sequences" msgstr "" -#: fortran/openmp.cc:11191 +#: fortran/openmp.cc:11187 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP SCAN at %L with zero executable statements in preceding structured " "block sequence" msgstr "" -#: fortran/openmp.cc:11198 +#: fortran/openmp.cc:11194 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP SCAN at %L with zero executable statements in succeeding structured " "block sequence" msgstr "" -#: fortran/openmp.cc:11414 +#: fortran/openmp.cc:11410 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain loop in intervening code at %L" msgstr "" -#: fortran/openmp.cc:11495 +#: fortran/openmp.cc:11491 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP directive in intervening code at %L" msgstr "" -#: fortran/openmp.cc:11507 fortran/openmp.cc:11533 +#: fortran/openmp.cc:11503 fortran/openmp.cc:11529 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP API call in intervening code at %L" msgstr "" -#: fortran/openmp.cc:12056 +#: fortran/openmp.cc:12052 #, gcc-internal-format, gfc-internal-format msgid "SIZES clause is required on !$OMP TILE construct at %L" msgstr "" -#: fortran/openmp.cc:12083 +#: fortran/openmp.cc:12079 #, gcc-internal-format, gfc-internal-format msgid "%s cannot be a DO WHILE or DO without loop control at %L" msgstr "" -#: fortran/openmp.cc:12089 +#: fortran/openmp.cc:12085 #, gcc-internal-format, gfc-internal-format msgid "%s cannot be a DO CONCURRENT loop at %L" msgstr "" -#: fortran/openmp.cc:12099 +#: fortran/openmp.cc:12095 #, gcc-internal-format, gfc-internal-format msgid "" "Generated loop of UNROLL construct at %L without PARTIAL clause does not " "have canonical form" msgstr "" -#: fortran/openmp.cc:12106 +#: fortran/openmp.cc:12102 #, gcc-internal-format, gfc-internal-format msgid "" "UNROLL construct at %L with PARTIAL clause generates just one loop with " "canonical form but %d loops are needed" msgstr "" -#: fortran/openmp.cc:12121 +#: fortran/openmp.cc:12117 #, gcc-internal-format, gfc-internal-format msgid "" "TILE construct at %L generates %d loops with canonical form but %d loops are " "needed" msgstr "" -#: fortran/openmp.cc:12132 +#: fortran/openmp.cc:12128 #, gcc-internal-format msgid "Imperfectly nested loop using generated loops" msgstr "" -#: fortran/openmp.cc:12144 +#: fortran/openmp.cc:12140 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable must be of type integer at %L" msgstr "" -#: fortran/openmp.cc:12151 +#: fortran/openmp.cc:12147 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable must not be THREADPRIVATE at %L" msgstr "" -#: fortran/openmp.cc:12166 +#: fortran/openmp.cc:12162 #, gcc-internal-format, gfc-internal-format msgid "" "%s iteration variable present on clause other than PRIVATE, LASTPRIVATE or " "ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:12170 +#: fortran/openmp.cc:12166 #, gcc-internal-format, gfc-internal-format msgid "" "%s iteration variable present on clause other than PRIVATE, LASTPRIVATE, " "ALLOCATE or LINEAR at %L" msgstr "" -#: fortran/openmp.cc:12177 +#: fortran/openmp.cc:12173 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable used in more than one loop at %L" msgstr "" -#: fortran/openmp.cc:12183 +#: fortran/openmp.cc:12179 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable at %L is bound in intervening code" msgstr "" -#: fortran/openmp.cc:12192 +#: fortran/openmp.cc:12188 #, gcc-internal-format, gfc-internal-format msgid "%s loop start expression not in canonical form at %L" msgstr "" -#: fortran/openmp.cc:12199 +#: fortran/openmp.cc:12195 #, gcc-internal-format, gfc-internal-format msgid "%s loop start expression at %L uses variable bound in intervening code" msgstr "" -#: fortran/openmp.cc:12208 +#: fortran/openmp.cc:12204 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression not in canonical form at %L" msgstr "" -#: fortran/openmp.cc:12215 +#: fortran/openmp.cc:12211 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression at %L uses variable bound in intervening code" msgstr "" -#: fortran/openmp.cc:12222 +#: fortran/openmp.cc:12218 #, gcc-internal-format, gfc-internal-format msgid "%s loop bounds reference different iteration variables at %L" msgstr "" -#: fortran/openmp.cc:12228 +#: fortran/openmp.cc:12224 #, gcc-internal-format, gfc-internal-format msgid "%s loop increment not in canonical form at %L" msgstr "" -#: fortran/openmp.cc:12235 +#: fortran/openmp.cc:12231 #, gcc-internal-format, gfc-internal-format msgid "" "%s loop increment expression at %L uses variable bound in intervening code" msgstr "" -#: fortran/openmp.cc:12246 +#: fortran/openmp.cc:12242 #, gcc-internal-format msgid "Non-rectangular loops from generated loops unsupported" msgstr "" #. Parse error, can't recover from this. -#: fortran/openmp.cc:12262 +#: fortran/openmp.cc:12258 #, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for collapsed %s (level %d) at %L" msgstr "" -#: fortran/openmp.cc:12274 +#: fortran/openmp.cc:12270 #, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with ORDERED clause at %L" msgstr "" -#: fortran/openmp.cc:12281 +#: fortran/openmp.cc:12277 #, gcc-internal-format, gfc-internal-format msgid "" "%s inner loops must be perfectly nested with REDUCTION INSCAN clause at %L" msgstr "" -#: fortran/openmp.cc:12288 +#: fortran/openmp.cc:12284 #, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested at %L" msgstr "" -#: fortran/openmp.cc:12542 fortran/openmp.cc:12555 +#: fortran/openmp.cc:12538 fortran/openmp.cc:12551 #, gcc-internal-format, gfc-internal-format msgid "The %s directive cannot be specified within a %s region at %L" msgstr "" -#: fortran/openmp.cc:12574 +#: fortran/openmp.cc:12570 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP cannot be a DO WHILE or DO without loop control at %L" msgstr "" -#: fortran/openmp.cc:12580 +#: fortran/openmp.cc:12576 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP cannot be a DO CONCURRENT loop at %L" msgstr "" -#: fortran/openmp.cc:12586 +#: fortran/openmp.cc:12582 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP iteration variable must be of type integer at %L" msgstr "" -#: fortran/openmp.cc:12602 +#: fortran/openmp.cc:12598 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP %s loops don't form rectangular iteration space at %L" msgstr "" -#: fortran/openmp.cc:12614 +#: fortran/openmp.cc:12610 #, gcc-internal-format, gfc-internal-format msgid "%s !$ACC LOOP loops not perfectly nested at %L" msgstr "" -#: fortran/openmp.cc:12624 fortran/openmp.cc:12633 +#: fortran/openmp.cc:12620 fortran/openmp.cc:12629 #, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for %s !$ACC LOOP at %L" msgstr "" -#: fortran/openmp.cc:12649 +#: fortran/openmp.cc:12645 #, gcc-internal-format, gfc-internal-format msgid "" "Tiled loop cannot be parallelized across gangs, workers and vectors at the " "same time at %L" msgstr "" -#: fortran/openmp.cc:12670 +#: fortran/openmp.cc:12666 #, gcc-internal-format, gfc-internal-format msgid "TILE requires constant expression at %L" msgstr "" -#: fortran/openmp.cc:12770 +#: fortran/openmp.cc:12766 #, gcc-internal-format msgid "Array sections: %qs not allowed in !$ACC DECLARE at %L" msgstr "" -#: fortran/openmp.cc:12817 +#: fortran/openmp.cc:12813 #, gcc-internal-format msgid "" "NAME %qs does not refer to a subroutine or function in !$ACC ROUTINE " "( NAME ) at %L" msgstr "" -#: fortran/openmp.cc:12823 +#: fortran/openmp.cc:12819 #, gcc-internal-format msgid "NAME %qs invalid in !$ACC ROUTINE ( NAME ) at %L" msgstr "" -#: fortran/openmp.cc:12910 +#: fortran/openmp.cc:12906 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP TARGET region at %L with a nested TEAMS at %L may not contain any " @@ -83859,113 +84081,113 @@ msgid "" "construct" msgstr "" -#: fortran/openmp.cc:12914 +#: fortran/openmp.cc:12910 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP TARGET region at %L with a nested TEAMS may not contain any other " "statement, declaration or directive outside of the single TEAMS construct" msgstr "" -#: fortran/openmp.cc:12932 +#: fortran/openmp.cc:12928 #, gcc-internal-format msgid "" "%<OMP DISPATCH%> directive at %L must be followed by a procedure call with " "optional assignment" msgstr "" -#: fortran/openmp.cc:12939 +#: fortran/openmp.cc:12935 #, gcc-internal-format msgid "" "%<OMP DISPATCH%> directive at %L cannot be followed by a procedure pointer" msgstr "" -#: fortran/openmp.cc:13034 +#: fortran/openmp.cc:13030 #, gcc-internal-format, gfc-internal-format msgid "OMP TARGET UPDATE at %L requires at least one TO or FROM clause" msgstr "" -#: fortran/openmp.cc:13048 +#: fortran/openmp.cc:13044 #, gcc-internal-format, gfc-internal-format msgid "" "OMP CRITICAL at %L with HINT clause requires a NAME, except when " "omp_sync_hint_none is used" msgstr "" -#: fortran/openmp.cc:13054 +#: fortran/openmp.cc:13050 #, gcc-internal-format msgid "" "Unexpected !$OMP SCAN at %L outside loop construct with %<inscan%> REDUCTION " "clause" msgstr "" -#: fortran/openmp.cc:13083 +#: fortran/openmp.cc:13079 #, gcc-internal-format msgid "!$OMP DECLARE SIMD should refer to containing procedure %qs at %L" msgstr "" -#: fortran/openmp.cc:13119 +#: fortran/openmp.cc:13115 #, gcc-internal-format, gfc-internal-format msgid "Expected constant non-negative scalar integer offset expression at %L" msgstr "" -#: fortran/openmp.cc:13122 +#: fortran/openmp.cc:13118 #, gcc-internal-format msgid "" "For range-based %<adjust_args%>, a constant positive scalar integer " "expression is required at %L" msgstr "" -#: fortran/openmp.cc:13136 +#: fortran/openmp.cc:13132 #, gcc-internal-format, gfc-internal-format msgid "Expected dummy parameter name or a positive integer at %L" msgstr "" -#: fortran/openmp.cc:13162 +#: fortran/openmp.cc:13158 #, gcc-internal-format, gfc-internal-format msgid "" "Variable other than OMP_PRIV or OMP_ORIG used in INITIALIZER clause of !$OMP " "DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:13170 +#: fortran/openmp.cc:13166 #, gcc-internal-format, gfc-internal-format msgid "" "Variable other than OMP_OUT or OMP_IN used in combiner of !$OMP DECLARE " "REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:13199 +#: fortran/openmp.cc:13195 #, gcc-internal-format, gfc-internal-format msgid "Invalid operator for !$OMP DECLARE REDUCTION %s at %L" msgstr "" -#: fortran/openmp.cc:13221 +#: fortran/openmp.cc:13217 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER length in !$OMP DECLARE REDUCTION %s not constant at %L" msgstr "" -#: fortran/openmp.cc:13237 +#: fortran/openmp.cc:13233 #, gcc-internal-format, gfc-internal-format msgid "" "Subroutine call with alternate returns in combiner of !$OMP DECLARE " "REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:13252 +#: fortran/openmp.cc:13248 #, gcc-internal-format, gfc-internal-format msgid "" "Subroutine call with alternate returns in INITIALIZER clause of !$OMP " "DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:13262 +#: fortran/openmp.cc:13258 #, gcc-internal-format, gfc-internal-format msgid "" "One of actual subroutine arguments in INITIALIZER clause of !$OMP DECLARE " "REDUCTION must be OMP_PRIV at %L" msgstr "" -#: fortran/openmp.cc:13270 +#: fortran/openmp.cc:13266 #, gcc-internal-format, gfc-internal-format msgid "" "Missing INITIALIZER clause for !$OMP DECLARE REDUCTION of derived type " @@ -84078,23 +84300,23 @@ msgstr "" msgid "command-line option %<-fno-builtin-%s%> is not valid for Fortran" msgstr "" -#: fortran/parse.cc:665 +#: fortran/parse.cc:664 #, gcc-internal-format, gfc-internal-format msgid "Unclassifiable statement at %C" msgstr "" -#: fortran/parse.cc:729 +#: fortran/parse.cc:728 #, gcc-internal-format, gfc-internal-format msgid "" "OpenACC directives other than ROUTINE may not appear in PURE procedures at %C" msgstr "" -#: fortran/parse.cc:795 +#: fortran/parse.cc:794 #, gcc-internal-format, gfc-internal-format msgid "Unclassifiable OpenACC directive at %C" msgstr "" -#: fortran/parse.cc:827 +#: fortran/parse.cc:826 #, gcc-internal-format msgid "" "%qs directive at %L must either have a variable argument or, if associated " @@ -84102,7 +84324,7 @@ msgid "" "construct" msgstr "" -#: fortran/parse.cc:839 +#: fortran/parse.cc:838 #, gcc-internal-format msgid "" "Structure-component expression at %L in %qs directive not permitted in " @@ -84110,7 +84332,7 @@ msgid "" "be preceded by an executable statement or OpenMP construct" msgstr "" -#: fortran/parse.cc:865 +#: fortran/parse.cc:864 #, gcc-internal-format msgid "" "%qs directive at %L associated with an ALLOCATE stmt must be preceded by an " @@ -84118,66 +84340,66 @@ msgid "" "have the allocatable or pointer attribute" msgstr "" -#: fortran/parse.cc:1055 fortran/parse.cc:1366 +#: fortran/parse.cc:1054 fortran/parse.cc:1365 #, gcc-internal-format, gfc-internal-format msgid "" "OpenMP directive at %C is not pure and thus may not appear in a PURE " "procedure" msgstr "" -#: fortran/parse.cc:1333 +#: fortran/parse.cc:1332 #, gcc-internal-format, gfc-internal-format msgid "Unclassifiable OpenMP directive at %C" msgstr "" -#: fortran/parse.cc:1353 +#: fortran/parse.cc:1352 #, gcc-internal-format msgid "" "OpenMP ERROR directive at %L with %<at(execution)%> clause in a PURE " "procedure" msgstr "" -#: fortran/parse.cc:1491 +#: fortran/parse.cc:1490 #, gcc-internal-format, gfc-internal-format msgid "Unclassifiable GCC directive at %C" msgstr "" -#: fortran/parse.cc:1493 +#: fortran/parse.cc:1492 #, gcc-internal-format, gfc-internal-format msgid "Unclassifiable GCC directive at %C, ignored" msgstr "" -#: fortran/parse.cc:1553 fortran/parse.cc:1780 +#: fortran/parse.cc:1552 fortran/parse.cc:1779 #, gcc-internal-format, gfc-internal-format msgid "Zero is not a valid statement label at %C" msgstr "" -#: fortran/parse.cc:1560 fortran/parse.cc:1772 +#: fortran/parse.cc:1559 fortran/parse.cc:1771 #, gcc-internal-format, gfc-internal-format msgid "Non-numeric character in statement label at %C" msgstr "" -#: fortran/parse.cc:1572 fortran/parse.cc:1821 +#: fortran/parse.cc:1571 fortran/parse.cc:1820 #, gcc-internal-format, gfc-internal-format msgid "Semicolon at %C needs to be preceded by statement" msgstr "" -#: fortran/parse.cc:1579 fortran/parse.cc:1836 +#: fortran/parse.cc:1578 fortran/parse.cc:1835 #, gcc-internal-format, gfc-internal-format msgid "Statement label without statement at %L" msgstr "" -#: fortran/parse.cc:1642 fortran/parse.cc:1823 +#: fortran/parse.cc:1641 fortran/parse.cc:1822 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Semicolon at %C without preceding statement" msgstr "" -#: fortran/parse.cc:1665 fortran/parse.cc:1799 +#: fortran/parse.cc:1664 fortran/parse.cc:1798 #, gcc-internal-format, gfc-internal-format msgid "Bad continuation line at %C" msgstr "" -#: fortran/parse.cc:2151 +#: fortran/parse.cc:2150 #, gcc-internal-format, gfc-internal-format msgid "FORMAT statement at %L does not have a statement label" msgstr "" @@ -84187,82 +84409,82 @@ msgstr "" msgid "gfc_ascii_statement(): Bad statement code" msgstr "" -#: fortran/parse.cc:3247 +#: fortran/parse.cc:3249 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement at %C" msgstr "" -#: fortran/parse.cc:3404 +#: fortran/parse.cc:3408 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C cannot follow %s statement at %L" msgstr "" -#: fortran/parse.cc:3421 +#: fortran/parse.cc:3425 #, gcc-internal-format msgid "Unexpected end of file in %qs" msgstr "" -#: fortran/parse.cc:3456 +#: fortran/parse.cc:3460 #, gcc-internal-format msgid "Derived-type %qs with SEQUENCE must not have a CONTAINS section at %C" msgstr "" -#: fortran/parse.cc:3459 +#: fortran/parse.cc:3463 #, gcc-internal-format msgid "Derived-type %qs with BIND(C) must not have a CONTAINS section at %C" msgstr "" -#: fortran/parse.cc:3479 +#: fortran/parse.cc:3483 #, gcc-internal-format, gfc-internal-format msgid "Components in TYPE at %C must precede CONTAINS" msgstr "" -#: fortran/parse.cc:3483 +#: fortran/parse.cc:3487 #, gcc-internal-format, gfc-internal-format msgid "Type-bound procedure at %C" msgstr "" -#: fortran/parse.cc:3491 +#: fortran/parse.cc:3495 #, gcc-internal-format, gfc-internal-format msgid "GENERIC binding at %C" msgstr "" -#: fortran/parse.cc:3499 +#: fortran/parse.cc:3503 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure declaration at %C" msgstr "" -#: fortran/parse.cc:3511 +#: fortran/parse.cc:3515 #, gcc-internal-format, gfc-internal-format msgid "Derived type definition at %C with empty CONTAINS section" msgstr "" -#: fortran/parse.cc:3521 fortran/parse.cc:3976 +#: fortran/parse.cc:3525 fortran/parse.cc:3980 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement in TYPE at %C must be inside a MODULE" msgstr "" -#: fortran/parse.cc:3528 +#: fortran/parse.cc:3532 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C must precede procedure bindings" msgstr "" -#: fortran/parse.cc:3535 fortran/parse.cc:3989 +#: fortran/parse.cc:3539 fortran/parse.cc:3993 #, gcc-internal-format, gfc-internal-format msgid "Duplicate PRIVATE statement at %C" msgstr "" -#: fortran/parse.cc:3545 +#: fortran/parse.cc:3549 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE statement at %C must precede CONTAINS" msgstr "" -#: fortran/parse.cc:3549 +#: fortran/parse.cc:3553 #, gcc-internal-format, gfc-internal-format msgid "Already inside a CONTAINS block at %C" msgstr "" -#: fortran/parse.cc:3668 +#: fortran/parse.cc:3672 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s at %L of type LOCK_TYPE must have a codimension or be a " @@ -84270,27 +84492,27 @@ msgid "" "pointer attribute" msgstr "" -#: fortran/parse.cc:3674 +#: fortran/parse.cc:3678 #, gcc-internal-format, gfc-internal-format msgid "" "Pointer component %s at %L has a noncoarray subcomponent of type LOCK_TYPE, " "which must have a codimension or be a subcomponent of a coarray" msgstr "" -#: fortran/parse.cc:3679 +#: fortran/parse.cc:3683 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L of type LOCK_TYPE must have a codimension" msgstr "" -#: fortran/parse.cc:3683 +#: fortran/parse.cc:3687 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L must have a codimension as it has a " "noncoarray subcomponent of type LOCK_TYPE" msgstr "" -#: fortran/parse.cc:3688 +#: fortran/parse.cc:3692 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type LOCK_TYPE or with subcomponent of type " @@ -84299,7 +84521,7 @@ msgid "" "subcomponent exists)" msgstr "" -#: fortran/parse.cc:3695 +#: fortran/parse.cc:3699 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type LOCK_TYPE or with subcomponent of type " @@ -84308,7 +84530,7 @@ msgid "" "codimension or a coarray subcomponent)" msgstr "" -#: fortran/parse.cc:3705 +#: fortran/parse.cc:3709 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s at %L of type EVENT_TYPE must have a codimension or be a " @@ -84316,27 +84538,27 @@ msgid "" "pointer attribute" msgstr "" -#: fortran/parse.cc:3711 +#: fortran/parse.cc:3715 #, gcc-internal-format, gfc-internal-format msgid "" "Pointer component %s at %L has a noncoarray subcomponent of type EVENT_TYPE, " "which must have a codimension or be a subcomponent of a coarray" msgstr "" -#: fortran/parse.cc:3716 +#: fortran/parse.cc:3720 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L of type EVENT_TYPE must have a codimension" msgstr "" -#: fortran/parse.cc:3720 +#: fortran/parse.cc:3724 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L must have a codimension as it has a " "noncoarray subcomponent of type EVENT_TYPE" msgstr "" -#: fortran/parse.cc:3725 +#: fortran/parse.cc:3729 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type EVENT_TYPE or with subcomponent of " @@ -84345,7 +84567,7 @@ msgid "" "subcomponent exists)" msgstr "" -#: fortran/parse.cc:3732 +#: fortran/parse.cc:3736 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type EVENT_TYPE or with subcomponent of " @@ -84354,201 +84576,206 @@ msgid "" "codimension or a coarray subcomponent)" msgstr "" -#: fortran/parse.cc:3784 +#: fortran/parse.cc:3788 #, gcc-internal-format, gfc-internal-format msgid "failed to create map component '%s'" msgstr "" -#: fortran/parse.cc:3817 +#: fortran/parse.cc:3821 #, gcc-internal-format, gfc-internal-format msgid "failed to create union component '%s'" msgstr "" -#: fortran/parse.cc:3872 +#: fortran/parse.cc:3876 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in nested structure declaration at %C" msgstr "" -#: fortran/parse.cc:3959 +#: fortran/parse.cc:3963 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside CONTAINS" msgstr "" -#: fortran/parse.cc:3967 +#: fortran/parse.cc:3971 #, gcc-internal-format, gfc-internal-format msgid "Derived type definition at %C without components" msgstr "" -#: fortran/parse.cc:3983 +#: fortran/parse.cc:3987 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C must precede structure components" msgstr "" -#: fortran/parse.cc:4000 +#: fortran/parse.cc:4004 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE statement at %C must precede structure components" msgstr "" -#: fortran/parse.cc:4006 +#: fortran/parse.cc:4010 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE attribute at %C already specified in TYPE statement" msgstr "" -#: fortran/parse.cc:4011 +#: fortran/parse.cc:4015 #, gcc-internal-format, gfc-internal-format msgid "Duplicate SEQUENCE statement at %C" msgstr "" -#: fortran/parse.cc:4021 +#: fortran/parse.cc:4025 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS block in derived type definition at %C" msgstr "" -#: fortran/parse.cc:4079 +#: fortran/parse.cc:4083 #, gcc-internal-format, gfc-internal-format msgid "ENUM declaration at %C has no ENUMERATORS" msgstr "" -#: fortran/parse.cc:4166 +#: fortran/parse.cc:4170 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in INTERFACE block at %C" msgstr "" -#: fortran/parse.cc:4191 +#: fortran/parse.cc:4195 #, gcc-internal-format msgid "" "Name %qs of ABSTRACT INTERFACE at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/parse.cc:4222 +#: fortran/parse.cc:4226 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement at %C in INTERFACE body" msgstr "" -#: fortran/parse.cc:4240 +#: fortran/parse.cc:4244 #, gcc-internal-format msgid "" "INTERFACE procedure %qs at %L has the same name as the enclosing procedure" msgstr "" -#: fortran/parse.cc:4379 +#: fortran/parse.cc:4383 #, gcc-internal-format, gfc-internal-format msgid "%s statement is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/parse.cc:4411 +#: fortran/parse.cc:4415 #, gcc-internal-format, gfc-internal-format msgid "%s statement is not allowed inside of BLOCK DATA at %C" msgstr "" -#: fortran/parse.cc:4495 +#: fortran/parse.cc:4499 #, gcc-internal-format, gfc-internal-format msgid "%s statement must appear in a MODULE" msgstr "" -#: fortran/parse.cc:4503 +#: fortran/parse.cc:4507 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C follows another accessibility specification" msgstr "" -#: fortran/parse.cc:4555 +#: fortran/parse.cc:4559 #, gcc-internal-format msgid "Bad kind expression for function %qs at %L" msgstr "" -#: fortran/parse.cc:4559 +#: fortran/parse.cc:4563 #, gcc-internal-format msgid "The type for function %qs at %L is not accessible" msgstr "" -#: fortran/parse.cc:4619 +#: fortran/parse.cc:4623 #, gcc-internal-format, gfc-internal-format msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE" msgstr "" -#: fortran/parse.cc:4641 +#: fortran/parse.cc:4645 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in WHERE block at %C" msgstr "" -#: fortran/parse.cc:4700 +#: fortran/parse.cc:4704 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in FORALL block at %C" msgstr "" -#: fortran/parse.cc:4751 +#: fortran/parse.cc:4755 #, gcc-internal-format, gfc-internal-format msgid "ELSE IF statement at %C cannot follow ELSE statement at %L" msgstr "" -#: fortran/parse.cc:4769 +#: fortran/parse.cc:4773 #, gcc-internal-format, gfc-internal-format msgid "Duplicate ELSE statements at %L and %C" msgstr "" -#: fortran/parse.cc:4830 +#: fortran/parse.cc:4834 #, gcc-internal-format, gfc-internal-format msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C" msgstr "" -#: fortran/parse.cc:4914 +#: fortran/parse.cc:4918 #, gcc-internal-format, gfc-internal-format msgid "" "Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at " "%C" msgstr "" -#: fortran/parse.cc:4990 +#: fortran/parse.cc:4994 #, gcc-internal-format, gfc-internal-format msgid "Expected RANK or RANK DEFAULT following SELECT RANK at %C" msgstr "" -#: fortran/parse.cc:5054 +#: fortran/parse.cc:5058 #, gcc-internal-format msgid "Variable %qs at %C cannot be redefined inside loop beginning at %L" msgstr "" -#: fortran/parse.cc:5087 +#: fortran/parse.cc:5091 #, gcc-internal-format, gfc-internal-format msgid "End of nonblock DO statement at %C is within another block" msgstr "" -#: fortran/parse.cc:5097 +#: fortran/parse.cc:5101 #, gcc-internal-format, gfc-internal-format msgid "End of nonblock DO statement at %C is interwoven with another DO loop" msgstr "" -#: fortran/parse.cc:5123 +#: fortran/parse.cc:5127 #, gcc-internal-format, gfc-internal-format msgid "CRITICAL block inside of OpenACC region at %C" msgstr "" -#: fortran/parse.cc:5124 +#: fortran/parse.cc:5128 #, gcc-internal-format, gfc-internal-format msgid "CRITICAL block inside of OpenMP region at %C" msgstr "" -#: fortran/parse.cc:5150 +#: fortran/parse.cc:5154 #, gcc-internal-format, gfc-internal-format msgid "Statement label in END CRITICAL at %C does not match CRITICAL label" msgstr "" -#: fortran/parse.cc:5219 fortran/parse.cc:6162 +#: fortran/parse.cc:5223 fortran/parse.cc:6210 #, gcc-internal-format, gfc-internal-format msgid "BLOCK construct at %C" msgstr "" -#: fortran/parse.cc:5254 +#: fortran/parse.cc:5445 #, gcc-internal-format, gfc-internal-format msgid "ASSOCIATE construct at %C" msgstr "" -#: fortran/parse.cc:5567 +#: fortran/parse.cc:5489 +#, gcc-internal-format, gfc-internal-format +msgid "CHANGE TEAM construct at %C" +msgstr "" + +#: fortran/parse.cc:5615 #, gcc-internal-format, gfc-internal-format msgid "Statement label in ENDDO at %C doesn't match DO label" msgstr "" -#: fortran/parse.cc:5583 +#: fortran/parse.cc:5631 #, gcc-internal-format, gfc-internal-format msgid "Named block DO at %L requires matching ENDDO name" msgstr "" @@ -84561,168 +84788,168 @@ msgstr "" #. and the "end metadirective" which is required in a #. "begin metadirective" construct, or perhaps the #. "end metadirective" is missing entirely. -#: fortran/parse.cc:5817 fortran/parse.cc:6314 +#: fortran/parse.cc:5865 fortran/parse.cc:6362 #, gcc-internal-format, gfc-internal-format msgid "Expected OMP END METADIRECTIVE at %C" msgstr "" -#: fortran/parse.cc:5827 fortran/parse.cc:6330 fortran/parse.cc:6348 +#: fortran/parse.cc:5875 fortran/parse.cc:6378 fortran/parse.cc:6396 #, gcc-internal-format, gfc-internal-format msgid "Duplicated NOWAIT clause on %s and %s at %C" msgstr "" -#: fortran/parse.cc:5931 fortran/parse.cc:5993 +#: fortran/parse.cc:5979 fortran/parse.cc:6041 #, gcc-internal-format, gfc-internal-format msgid "OpenACC directive inside of CRITICAL block at %C" msgstr "" -#: fortran/parse.cc:5968 +#: fortran/parse.cc:6016 #, gcc-internal-format, gfc-internal-format msgid "Expecting %s at %C" msgstr "" -#: fortran/parse.cc:6012 +#: fortran/parse.cc:6060 #, gcc-internal-format, gfc-internal-format msgid "Expected DO loop at %C" msgstr "" -#: fortran/parse.cc:6032 +#: fortran/parse.cc:6080 #, gcc-internal-format, gfc-internal-format msgid "Redundant !$ACC END LOOP at %C" msgstr "" -#: fortran/parse.cc:6082 +#: fortran/parse.cc:6130 #, gcc-internal-format, gfc-internal-format msgid "%s statements at %L and %L have both no list item but only one may" msgstr "" -#: fortran/parse.cc:6102 +#: fortran/parse.cc:6150 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE or %s statement" msgstr "" -#: fortran/parse.cc:6105 +#: fortran/parse.cc:6153 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE statement after %s" msgstr "" -#: fortran/parse.cc:6341 +#: fortran/parse.cc:6389 #, gcc-internal-format, gfc-internal-format msgid "Name after !$omp critical and !$omp end critical does not match at %C" msgstr "" -#: fortran/parse.cc:6405 +#: fortran/parse.cc:6453 #, gcc-internal-format msgid "" "%<OMP DISPATCH%> directive must be followed by a procedure call with " "optional assignment at %C" msgstr "" -#: fortran/parse.cc:6416 +#: fortran/parse.cc:6464 #, gcc-internal-format, gfc-internal-format msgid "Duplicated NOWAIT clause on !$OMP DISPATCH and !$OMP END DISPATCH at %C" msgstr "" -#: fortran/parse.cc:6488 +#: fortran/parse.cc:6536 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in OMP METADIRECTIVE block at %C" msgstr "" -#: fortran/parse.cc:6529 +#: fortran/parse.cc:6577 #, gcc-internal-format, gfc-internal-format msgid "" "Variants in a metadirective at %L have different associations; consider " "using a BLOCK construct or BEGIN/END METADIRECTIVE" msgstr "" -#: fortran/parse.cc:6534 +#: fortran/parse.cc:6582 #, gcc-internal-format, gfc-internal-format msgid "" "Variants in a metadirective at %L have different associations; consider " "using a BLOCK construct" msgstr "" -#: fortran/parse.cc:6584 +#: fortran/parse.cc:6633 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C cannot terminate a non-block DO loop" msgstr "" -#: fortran/parse.cc:6598 +#: fortran/parse.cc:6647 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %C after the first executable statement" msgstr "" -#: fortran/parse.cc:6714 +#: fortran/parse.cc:6767 #, gcc-internal-format msgid "%<GCC unroll%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6717 +#: fortran/parse.cc:6770 #, gcc-internal-format msgid "%<GCC ivdep%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6720 +#: fortran/parse.cc:6773 #, gcc-internal-format msgid "%<GCC vector%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6723 +#: fortran/parse.cc:6776 #, gcc-internal-format msgid "%<GCC novector%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6839 +#: fortran/parse.cc:6892 #, gcc-internal-format msgid "Contained procedure %qs at %C is already ambiguous" msgstr "" -#: fortran/parse.cc:6896 +#: fortran/parse.cc:6949 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in CONTAINS section at %C" msgstr "" -#: fortran/parse.cc:6921 +#: fortran/parse.cc:6974 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS statement without FUNCTION or SUBROUTINE statement at %L" msgstr "" -#: fortran/parse.cc:7035 +#: fortran/parse.cc:7088 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS statement at %C is already in a contained program unit" msgstr "" -#: fortran/parse.cc:7087 +#: fortran/parse.cc:7140 #, gcc-internal-format msgid "Global binding name %qs at %L is already being used as a %s at %L" msgstr "" -#: fortran/parse.cc:7091 +#: fortran/parse.cc:7144 #, gcc-internal-format msgid "Global name %qs at %L is already being used as a %s at %L" msgstr "" -#: fortran/parse.cc:7097 +#: fortran/parse.cc:7150 #, gcc-internal-format msgid "Global binding name %qs at %L is already being used at %L" msgstr "" -#: fortran/parse.cc:7100 +#: fortran/parse.cc:7153 #, gcc-internal-format msgid "Global name %qs at %L is already being used at %L" msgstr "" -#: fortran/parse.cc:7122 +#: fortran/parse.cc:7175 #, gcc-internal-format, gfc-internal-format msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L" msgstr "" -#: fortran/parse.cc:7148 +#: fortran/parse.cc:7201 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in BLOCK DATA at %C" msgstr "" -#: fortran/parse.cc:7251 +#: fortran/parse.cc:7304 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in MODULE at %C" msgstr "" @@ -84730,7 +84957,7 @@ msgstr "" #. If we see a duplicate main program, shut down. If the second #. instance is an implied main program, i.e. data decls or executable #. statements, we're in for lots of errors. -#: fortran/parse.cc:7768 +#: fortran/parse.cc:7821 #, gcc-internal-format, gfc-internal-format msgid "Two main PROGRAMs at %L and %C" msgstr "" @@ -85650,14 +85877,14 @@ msgid "" "recursively in procedure %qs. Declare it RECURSIVE or use %<-frecursive%>" msgstr "" -#: fortran/resolve.cc:1994 fortran/resolve.cc:7143 +#: fortran/resolve.cc:1994 fortran/resolve.cc:7179 #, gcc-internal-format msgid "" "Non-RECURSIVE procedure %qs at %L is possibly calling itself recursively. " "Declare it RECURSIVE or use %<-frecursive%>" msgstr "" -#: fortran/resolve.cc:2053 fortran/resolve.cc:11574 fortran/resolve.cc:13597 +#: fortran/resolve.cc:2053 fortran/resolve.cc:11708 fortran/resolve.cc:13715 #, gcc-internal-format, gfc-internal-format msgid "Label %d referenced at %L is never defined" msgstr "" @@ -85790,47 +86017,47 @@ msgstr "" msgid "Function %qs at %L has no IMPLICIT type; did you mean %qs?" msgstr "" -#: fortran/resolve.cc:3129 fortran/resolve.cc:19037 +#: fortran/resolve.cc:3129 fortran/resolve.cc:19155 #, gcc-internal-format msgid "Function %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.cc:3261 +#: fortran/resolve.cc:3283 #, gcc-internal-format, gfc-internal-format msgid "Reference to impure function at %L inside a DO CONCURRENT" msgstr "" -#: fortran/resolve.cc:3271 +#: fortran/resolve.cc:3294 #, gcc-internal-format msgid "Reference to impure function %qs at %L inside a FORALL %s" msgstr "" -#: fortran/resolve.cc:3278 +#: fortran/resolve.cc:3301 #, gcc-internal-format msgid "Reference to impure function %qs at %L inside a DO CONCURRENT %s" msgstr "" -#: fortran/resolve.cc:3285 +#: fortran/resolve.cc:3308 #, gcc-internal-format msgid "Reference to impure function %qs at %L within a PURE procedure" msgstr "" -#: fortran/resolve.cc:3352 +#: fortran/resolve.cc:3375 #, gcc-internal-format msgid "Unexpected junk after %qs at %L" msgstr "" -#: fortran/resolve.cc:3363 +#: fortran/resolve.cc:3386 #, gcc-internal-format msgid "%qs at %L is not a function" msgstr "" -#: fortran/resolve.cc:3371 fortran/resolve.cc:3930 +#: fortran/resolve.cc:3394 fortran/resolve.cc:3966 #, gcc-internal-format msgid "ABSTRACT INTERFACE %qs must not be referenced at %L" msgstr "" -#: fortran/resolve.cc:3383 +#: fortran/resolve.cc:3406 #, gcc-internal-format msgid "" "ABSTRACT INTERFACE %qs at %L must not have an assumed character length " @@ -85838,498 +86065,498 @@ msgid "" msgstr "" #. Internal procedures are taken care of in resolve_contained_fntype. -#: fortran/resolve.cc:3426 +#: fortran/resolve.cc:3449 #, gcc-internal-format msgid "" "Function %qs is declared CHARACTER(*) and cannot be used at %L since it is " "not a dummy argument" msgstr "" -#: fortran/resolve.cc:3447 +#: fortran/resolve.cc:3470 #, gcc-internal-format, gfc-internal-format msgid "Different argument lists in external dummy function %s at %L and %L" msgstr "" -#: fortran/resolve.cc:3486 +#: fortran/resolve.cc:3509 #, gcc-internal-format msgid "resolve_function(): bad function type" msgstr "" -#: fortran/resolve.cc:3500 +#: fortran/resolve.cc:3523 #, gcc-internal-format, gfc-internal-format msgid "" "A BOZ literal constant at %L cannot appear as an actual argument in a " "function reference" msgstr "" -#: fortran/resolve.cc:3516 +#: fortran/resolve.cc:3539 #, gcc-internal-format msgid "" "User defined non-ELEMENTAL function %qs at %L not allowed in WORKSHARE " "construct" msgstr "" -#: fortran/resolve.cc:3578 +#: fortran/resolve.cc:3601 #, gcc-internal-format msgid "" "ENTRY %qs at %L cannot be called recursively, as function %qs is not " "RECURSIVE" msgstr "" -#: fortran/resolve.cc:3582 +#: fortran/resolve.cc:3605 #, gcc-internal-format msgid "Function %qs at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.cc:3640 +#: fortran/resolve.cc:3663 #, gcc-internal-format msgid "Using function %qs at %L is deprecated" msgstr "" -#: fortran/resolve.cc:3666 +#: fortran/resolve.cc:3701 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call at %L in a DO CONCURRENT block is not PURE" msgstr "" -#: fortran/resolve.cc:3674 +#: fortran/resolve.cc:3710 #, gcc-internal-format msgid "Subroutine call to %qs in FORALL block at %L is not PURE" msgstr "" -#: fortran/resolve.cc:3680 +#: fortran/resolve.cc:3716 #, gcc-internal-format msgid "Subroutine call to %qs in DO CONCURRENT block at %L is not PURE" msgstr "" -#: fortran/resolve.cc:3686 +#: fortran/resolve.cc:3722 #, gcc-internal-format msgid "Subroutine call to %qs at %L is not PURE" msgstr "" -#: fortran/resolve.cc:3754 +#: fortran/resolve.cc:3790 #, gcc-internal-format msgid "There is no specific subroutine for the generic %qs at %L" msgstr "" -#: fortran/resolve.cc:3763 +#: fortran/resolve.cc:3799 #, gcc-internal-format msgid "" "Generic subroutine %qs at %L is not consistent with an intrinsic subroutine " "interface" msgstr "" -#: fortran/resolve.cc:3798 +#: fortran/resolve.cc:3834 #, gcc-internal-format msgid "" "Subroutine %qs at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.cc:3843 +#: fortran/resolve.cc:3879 #, gcc-internal-format msgid "Unable to resolve the specific subroutine %qs at %L" msgstr "" -#: fortran/resolve.cc:3901 +#: fortran/resolve.cc:3937 #, gcc-internal-format msgid "%qs at %L has a type, which is not consistent with the CALL at %L" msgstr "" -#: fortran/resolve.cc:3940 +#: fortran/resolve.cc:3976 #, gcc-internal-format msgid "" "ENTRY %qs at %L cannot be called recursively, as subroutine %qs is not " "RECURSIVE" msgstr "" -#: fortran/resolve.cc:3944 +#: fortran/resolve.cc:3980 #, gcc-internal-format msgid "" "SUBROUTINE %qs at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.cc:3995 +#: fortran/resolve.cc:4031 #, gcc-internal-format, gfc-internal-format msgid "Different argument lists in external dummy subroutine %s at %L and %L" msgstr "" -#: fortran/resolve.cc:4026 +#: fortran/resolve.cc:4062 #, gcc-internal-format msgid "resolve_subroutine(): bad function type" msgstr "" -#: fortran/resolve.cc:4043 +#: fortran/resolve.cc:4079 #, gcc-internal-format msgid "Using subroutine %qs at %L is deprecated" msgstr "" -#: fortran/resolve.cc:4070 +#: fortran/resolve.cc:4106 #, gcc-internal-format, gfc-internal-format msgid "Shapes for operands at %L and %L are not conformable" msgstr "" -#: fortran/resolve.cc:4122 +#: fortran/resolve.cc:4158 #, gcc-internal-format msgid "logical_to_bitwise(): Bad intrinsic" msgstr "" -#: fortran/resolve.cc:4225 +#: fortran/resolve.cc:4261 #, gcc-internal-format msgid "Impure function %qs at %L might not be evaluated" msgstr "" -#: fortran/resolve.cc:4229 +#: fortran/resolve.cc:4265 #, gcc-internal-format, gfc-internal-format msgid "Impure function at %L might not be evaluated" msgstr "" -#: fortran/resolve.cc:4324 +#: fortran/resolve.cc:4360 #, gcc-internal-format msgid "BOZ literal constant at %L cannot be an operand of unary operator %qs" msgstr "" -#: fortran/resolve.cc:4332 +#: fortran/resolve.cc:4368 #, gcc-internal-format, gfc-internal-format msgid "Negation of unsigned expression at %L not permitted " msgstr "" -#: fortran/resolve.cc:4353 +#: fortran/resolve.cc:4389 #, gcc-internal-format msgid "Operands at %L and %L cannot appear as operands of binary operator %qs" msgstr "" -#: fortran/resolve.cc:4363 +#: fortran/resolve.cc:4399 #, gcc-internal-format, gfc-internal-format msgid "Invalid context for NULL() pointer at %L" msgstr "" -#: fortran/resolve.cc:4381 +#: fortran/resolve.cc:4417 #, gcc-internal-format msgid "Operand of unary numeric operator %qs at %L is %s" msgstr "" -#: fortran/resolve.cc:4396 fortran/resolve.cc:4430 +#: fortran/resolve.cc:4432 fortran/resolve.cc:4466 #, gcc-internal-format msgid "Operands of binary numeric operator %qs at %L are %s/%s" msgstr "" -#: fortran/resolve.cc:4410 fortran/resolve.cc:4599 fortran/resolve.cc:4768 +#: fortran/resolve.cc:4446 fortran/resolve.cc:4635 fortran/resolve.cc:4804 #, gcc-internal-format, gfc-internal-format msgid "Inconsistent ranks for operator at %L and %L" msgstr "" -#: fortran/resolve.cc:4422 +#: fortran/resolve.cc:4458 #, gcc-internal-format msgid "" "Unexpected derived-type entities in binary intrinsic numeric operator %qs at " "%L" msgstr "" -#: fortran/resolve.cc:4446 +#: fortran/resolve.cc:4482 #, gcc-internal-format, gfc-internal-format msgid "Operands of string concatenation operator at %L are %s/%s" msgstr "" -#: fortran/resolve.cc:4489 +#: fortran/resolve.cc:4525 #, gcc-internal-format msgid "Operands of logical operator %qs at %L are %s/%s" msgstr "" -#: fortran/resolve.cc:4512 +#: fortran/resolve.cc:4548 #, gcc-internal-format, gfc-internal-format msgid "Operand of .not. operator at %L is %s" msgstr "" -#: fortran/resolve.cc:4527 +#: fortran/resolve.cc:4563 #, gcc-internal-format, gfc-internal-format msgid "COMPLEX quantities cannot be compared at %L" msgstr "" -#: fortran/resolve.cc:4557 fortran/resolve.cc:4572 +#: fortran/resolve.cc:4593 fortran/resolve.cc:4608 #, gcc-internal-format, gfc-internal-format msgid "" "BOZ literal constant near %L cannot appear as an operand of a relational " "operator" msgstr "" -#: fortran/resolve.cc:4607 +#: fortran/resolve.cc:4643 #, gcc-internal-format, gfc-internal-format msgid "Inconsistent types for operator at %L and %L: %s and %s" msgstr "" -#: fortran/resolve.cc:4631 +#: fortran/resolve.cc:4667 #, gcc-internal-format, gfc-internal-format msgid "Equality comparison for %s at %L" msgstr "" -#: fortran/resolve.cc:4633 +#: fortran/resolve.cc:4669 #, gcc-internal-format, gfc-internal-format msgid "Inequality comparison for %s at %L" msgstr "" -#: fortran/resolve.cc:4646 +#: fortran/resolve.cc:4682 #, gcc-internal-format, gfc-internal-format msgid "Logicals at %L must be compared with %s instead of %s" msgstr "" -#: fortran/resolve.cc:4654 +#: fortran/resolve.cc:4690 #, gcc-internal-format msgid "Operands of comparison operator %qs at %L are %s/%s" msgstr "" -#: fortran/resolve.cc:4669 +#: fortran/resolve.cc:4705 #, gcc-internal-format msgid "Unknown operator %qs at %L; did you mean %qs?" msgstr "" -#: fortran/resolve.cc:4672 +#: fortran/resolve.cc:4708 #, gcc-internal-format msgid "Unknown operator %qs at %L" msgstr "" -#: fortran/resolve.cc:4677 +#: fortran/resolve.cc:4713 #, gcc-internal-format msgid "Operand of user operator %qs at %L is %s" msgstr "" -#: fortran/resolve.cc:4684 +#: fortran/resolve.cc:4720 #, gcc-internal-format msgid "Operands of user operator %qs at %L are %s/%s" msgstr "" -#: fortran/resolve.cc:4698 +#: fortran/resolve.cc:4734 #, gcc-internal-format msgid "resolve_operator(): Bad intrinsic" msgstr "" -#: fortran/resolve.cc:4796 +#: fortran/resolve.cc:4832 #, gcc-internal-format, gfc-internal-format msgid "Inconsistent coranks for operator at %L and %L" msgstr "" -#: fortran/resolve.cc:4995 +#: fortran/resolve.cc:5031 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:5000 +#: fortran/resolve.cc:5036 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in codimension %d" msgstr "" -#: fortran/resolve.cc:5010 +#: fortran/resolve.cc:5046 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:5015 +#: fortran/resolve.cc:5051 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in codimension %d" msgstr "" -#: fortran/resolve.cc:5036 +#: fortran/resolve.cc:5072 #, gcc-internal-format, gfc-internal-format msgid "Illegal stride of zero at %L" msgstr "" -#: fortran/resolve.cc:5053 +#: fortran/resolve.cc:5089 #, gcc-internal-format, gfc-internal-format msgid "" "Lower array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:5061 +#: fortran/resolve.cc:5097 #, gcc-internal-format, gfc-internal-format msgid "" "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:5077 +#: fortran/resolve.cc:5113 #, gcc-internal-format, gfc-internal-format msgid "" "Upper array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:5086 +#: fortran/resolve.cc:5122 #, gcc-internal-format, gfc-internal-format msgid "" "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:5102 +#: fortran/resolve.cc:5138 #, gcc-internal-format msgid "check_dimension(): Bad array reference" msgstr "" -#: fortran/resolve.cc:5125 +#: fortran/resolve.cc:5161 #, gcc-internal-format, gfc-internal-format msgid "Rightmost upper bound of assumed size array section not specified at %L" msgstr "" -#: fortran/resolve.cc:5135 +#: fortran/resolve.cc:5171 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.cc:5143 +#: fortran/resolve.cc:5179 #, gcc-internal-format, gfc-internal-format msgid "Coindex rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.cc:5159 +#: fortran/resolve.cc:5195 #, gcc-internal-format, gfc-internal-format msgid "Coindex of codimension %d must be a scalar at %L" msgstr "" -#: fortran/resolve.cc:5187 +#: fortran/resolve.cc:5223 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5193 +#: fortran/resolve.cc:5229 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/resolve.cc:5199 +#: fortran/resolve.cc:5235 #, gcc-internal-format, gfc-internal-format msgid "REAL array index at %L" msgstr "" -#: fortran/resolve.cc:5239 +#: fortran/resolve.cc:5275 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5246 +#: fortran/resolve.cc:5282 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be of INTEGER type" msgstr "" -#: fortran/resolve.cc:5307 +#: fortran/resolve.cc:5343 #, gcc-internal-format, gfc-internal-format msgid "Invalid array reference of a non-array entity at %L" msgstr "" -#: fortran/resolve.cc:5322 +#: fortran/resolve.cc:5358 #, gcc-internal-format msgid "find_array_spec(): unused as(1)" msgstr "" -#: fortran/resolve.cc:5334 +#: fortran/resolve.cc:5370 #, gcc-internal-format msgid "find_array_spec(): unused as(2)" msgstr "" -#: fortran/resolve.cc:5379 +#: fortran/resolve.cc:5415 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L is an array of rank %d" msgstr "" -#: fortran/resolve.cc:5470 +#: fortran/resolve.cc:5506 #, gcc-internal-format, gfc-internal-format msgid "TEAM_NUMBER argument at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5477 +#: fortran/resolve.cc:5513 #, gcc-internal-format, gfc-internal-format msgid "TEAM_NUMBER argument at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/resolve.cc:5491 +#: fortran/resolve.cc:5527 #, gcc-internal-format, gfc-internal-format msgid "TEAM argument at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5500 +#: fortran/resolve.cc:5536 #, gcc-internal-format, gfc-internal-format msgid "" "TEAM argument at %L must be of TEAM_TYPE from the intrinsic module " "ISO_FORTRAN_ENV, found %s" msgstr "" -#: fortran/resolve.cc:5514 +#: fortran/resolve.cc:5550 #, gcc-internal-format, gfc-internal-format msgid "STAT argument at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5521 +#: fortran/resolve.cc:5557 #, gcc-internal-format, gfc-internal-format msgid "STAT argument at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/resolve.cc:5530 +#: fortran/resolve.cc:5566 #, gcc-internal-format, gfc-internal-format msgid "STAT's expression at %L must be a variable" msgstr "" -#: fortran/resolve.cc:5552 +#: fortran/resolve.cc:5588 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.cc:5559 +#: fortran/resolve.cc:5595 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5581 +#: fortran/resolve.cc:5617 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.cc:5588 +#: fortran/resolve.cc:5624 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5608 +#: fortran/resolve.cc:5644 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L is too large" msgstr "" -#: fortran/resolve.cc:5799 +#: fortran/resolve.cc:5835 #, gcc-internal-format msgid "resolve_ref(): Bad array reference" msgstr "" -#: fortran/resolve.cc:5813 +#: fortran/resolve.cc:5849 #, gcc-internal-format, gfc-internal-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the POINTER attribute at %L" msgstr "" -#: fortran/resolve.cc:5823 +#: fortran/resolve.cc:5859 #, gcc-internal-format, gfc-internal-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the ALLOCATABLE attribute at %L" msgstr "" -#: fortran/resolve.cc:5871 +#: fortran/resolve.cc:5907 #, gcc-internal-format, gfc-internal-format msgid "" "Two or more part references with nonzero rank must not be specified at %L" msgstr "" -#: fortran/resolve.cc:5983 +#: fortran/resolve.cc:6019 #, gcc-internal-format msgid "gfc_expression_rank(): Two array specs" msgstr "" -#: fortran/resolve.cc:6012 +#: fortran/resolve.cc:6048 #, gcc-internal-format msgid "Illegal coarray index" msgstr "" -#: fortran/resolve.cc:6060 +#: fortran/resolve.cc:6096 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute may only be used as actual " "argument" msgstr "" -#: fortran/resolve.cc:6070 +#: fortran/resolve.cc:6106 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L may only be used as actual argument" msgstr "" @@ -86338,14 +86565,14 @@ msgstr "" #. for all inquiry functions in resolve_function; the reason is #. that the function-name resolution happens too late in that #. function. -#: fortran/resolve.cc:6080 +#: fortran/resolve.cc:6116 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-type variable %s at %L as actual argument to an inquiry function " "shall be the first argument" msgstr "" -#: fortran/resolve.cc:6101 +#: fortran/resolve.cc:6137 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank variable %s at %L may only be used as actual argument" msgstr "" @@ -86354,457 +86581,450 @@ msgstr "" #. for all inquiry functions in resolve_function; the reason is #. that the function-name resolution happens too late in that #. function. -#: fortran/resolve.cc:6111 +#: fortran/resolve.cc:6147 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-rank variable %s at %L as actual argument to an inquiry function " "shall be the first argument" msgstr "" -#: fortran/resolve.cc:6122 +#: fortran/resolve.cc:6158 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute shall not have a subobject " "reference" msgstr "" -#: fortran/resolve.cc:6131 +#: fortran/resolve.cc:6167 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L shall not have a subobject reference" msgstr "" -#: fortran/resolve.cc:6148 +#: fortran/resolve.cc:6184 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank variable %s at %L shall not have a subobject reference" msgstr "" -#: fortran/resolve.cc:6209 +#: fortran/resolve.cc:6245 #, gcc-internal-format msgid "Scalar variable %qs has an array reference at %L" msgstr "" -#: fortran/resolve.cc:6365 +#: fortran/resolve.cc:6401 #, gcc-internal-format msgid "" "Variable %qs, used in a specification expression, is referenced at %L before " "the ENTRY statement in which it is a parameter" msgstr "" -#: fortran/resolve.cc:6370 +#: fortran/resolve.cc:6406 #, gcc-internal-format msgid "" "Variable %qs is used at %L before the ENTRY statement in which it is a " "parameter" msgstr "" -#: fortran/resolve.cc:6444 +#: fortran/resolve.cc:6480 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic subobject of coindexed object at %L" msgstr "" -#: fortran/resolve.cc:6457 +#: fortran/resolve.cc:6493 #, gcc-internal-format, gfc-internal-format msgid "Coindexed object with polymorphic allocatable subcomponent at %L" msgstr "" -#: fortran/resolve.cc:6470 +#: fortran/resolve.cc:6506 #, gcc-internal-format msgid "Using variable %qs at %L is deprecated" msgstr "" -#: fortran/resolve.cc:6526 fortran/resolve.cc:6614 fortran/resolve.cc:6638 +#: fortran/resolve.cc:6562 fortran/resolve.cc:6650 fortran/resolve.cc:6674 #, gcc-internal-format, gfc-internal-format msgid "Invalid array reference at %L" msgstr "" -#: fortran/resolve.cc:6723 +#: fortran/resolve.cc:6759 #, gcc-internal-format msgid "" "%qs at %L is host associated at %L into a contained procedure with an " "internal procedure of the same name" msgstr "" -#: fortran/resolve.cc:6902 fortran/resolve.cc:7054 +#: fortran/resolve.cc:6938 fortran/resolve.cc:7090 #, gcc-internal-format, gfc-internal-format msgid "Error in typebound call at %L" msgstr "" -#: fortran/resolve.cc:7018 +#: fortran/resolve.cc:7054 #, gcc-internal-format, gfc-internal-format msgid "Passed-object at %L must be scalar" msgstr "" -#: fortran/resolve.cc:7025 +#: fortran/resolve.cc:7061 #, gcc-internal-format msgid "" "Base object for procedure-pointer component call at %L is of ABSTRACT type " "%qs" msgstr "" -#: fortran/resolve.cc:7064 +#: fortran/resolve.cc:7100 #, gcc-internal-format msgid "Base object for type-bound procedure call at %L is of ABSTRACT type %qs" msgstr "" -#: fortran/resolve.cc:7073 +#: fortran/resolve.cc:7109 #, gcc-internal-format, gfc-internal-format msgid "Base object for NOPASS type-bound procedure call at %L must be scalar" msgstr "" #. Nothing matching found! -#: fortran/resolve.cc:7268 +#: fortran/resolve.cc:7304 #, gcc-internal-format msgid "" "Found no matching specific binding for the call to the GENERIC %qs at %L" msgstr "" -#: fortran/resolve.cc:7302 +#: fortran/resolve.cc:7338 #, gcc-internal-format msgid "%qs at %L should be a SUBROUTINE" msgstr "" -#: fortran/resolve.cc:7355 +#: fortran/resolve.cc:7391 #, gcc-internal-format msgid "%qs at %L should be a FUNCTION" msgstr "" -#: fortran/resolve.cc:7896 +#: fortran/resolve.cc:7932 #, gcc-internal-format msgid "gfc_resolve_expr(): Bad expression type" msgstr "" -#: fortran/resolve.cc:7929 +#: fortran/resolve.cc:7965 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be a scalar" msgstr "" -#: fortran/resolve.cc:7939 +#: fortran/resolve.cc:7975 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be integer" msgstr "" -#: fortran/resolve.cc:7943 fortran/resolve.cc:7950 +#: fortran/resolve.cc:7979 fortran/resolve.cc:7986 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be INTEGER" msgstr "" -#: fortran/resolve.cc:8005 +#: fortran/resolve.cc:8041 #, gcc-internal-format, gfc-internal-format msgid "Step expression in DO loop at %L cannot be zero" msgstr "" -#: fortran/resolve.cc:8028 +#: fortran/resolve.cc:8064 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L will be executed zero times" msgstr "" -#: fortran/resolve.cc:8045 +#: fortran/resolve.cc:8081 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L is undefined as it overflows" msgstr "" -#: fortran/resolve.cc:8051 +#: fortran/resolve.cc:8087 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L is undefined as it underflows" msgstr "" -#: fortran/resolve.cc:8111 +#: fortran/resolve.cc:8147 #, gcc-internal-format msgid "" "Variable %qs referenced in concurrent-header at %L must not appear in LOCAL " "locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8147 +#: fortran/resolve.cc:8183 #, gcc-internal-format msgid "" "Variable %qs at %L not specified in a locality spec of DO CONCURRENT at %L " "but required due to DEFAULT (NONE)" msgstr "" -#: fortran/resolve.cc:8199 +#: fortran/resolve.cc:8235 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name in %s locality spec at %L" msgstr "" -#: fortran/resolve.cc:8208 +#: fortran/resolve.cc:8244 #, gcc-internal-format msgid "Variable %qs at %L has already been specified in a locality-spec" msgstr "" -#: fortran/resolve.cc:8218 +#: fortran/resolve.cc:8254 #, gcc-internal-format msgid "Index variable %qs at %L cannot be specified in a locality-spec" msgstr "" -#: fortran/resolve.cc:8231 +#: fortran/resolve.cc:8267 #, gcc-internal-format msgid "OPTIONAL attribute not permitted for %qs in %s locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8238 +#: fortran/resolve.cc:8274 #, gcc-internal-format msgid "Assumed-size array not permitted for %qs in %s locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8251 +#: fortran/resolve.cc:8287 #, gcc-internal-format msgid "ALLOCATABLE attribute not permitted for %qs in %s locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8256 +#: fortran/resolve.cc:8292 #, gcc-internal-format msgid "" "Nonpointer polymorphic dummy argument not permitted for %qs in %s locality-" "spec at %L" msgstr "" -#: fortran/resolve.cc:8261 +#: fortran/resolve.cc:8297 #, gcc-internal-format msgid "Coarray not permitted for %qs in %s locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8267 +#: fortran/resolve.cc:8303 #, gcc-internal-format msgid "Finalizable type not permitted for %qs in %s locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8272 +#: fortran/resolve.cc:8308 #, gcc-internal-format msgid "" "Type with ultimate allocatable component not permitted for %qs in %s " "locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8280 +#: fortran/resolve.cc:8316 #, gcc-internal-format msgid "" "ASYNCHRONOUS attribute not permitted for %qs in REDUCE locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8284 +#: fortran/resolve.cc:8320 #, gcc-internal-format msgid "VOLATILE attribute not permitted for %qs in REDUCE locality-spec at %L" msgstr "" -#: fortran/resolve.cc:8338 +#: fortran/resolve.cc:8374 #, gcc-internal-format msgid "Expected numeric type for %qs in REDUCE at %L, got %s" msgstr "" -#: fortran/resolve.cc:8347 +#: fortran/resolve.cc:8383 #, gcc-internal-format msgid "Expected logical type for %qs in REDUCE at %L, got %qs" msgstr "" -#: fortran/resolve.cc:8365 +#: fortran/resolve.cc:8401 #, gcc-internal-format msgid "" "Expected INTEGER, REAL or CHARACTER type for %qs in REDUCE with MIN/MAX at " "%L, got %s" msgstr "" -#: fortran/resolve.cc:8374 +#: fortran/resolve.cc:8410 #, gcc-internal-format msgid "" "Expected integer type for %qs in REDUCE with IAND/IOR/IEOR at %L, got %s" msgstr "" -#: fortran/resolve.cc:8412 +#: fortran/resolve.cc:8448 #, gcc-internal-format msgid "Variable %qs in locality-spec at %L is not used" msgstr "" -#: fortran/resolve.cc:8429 -#, gcc-internal-format -msgid "" -"Sorry, LOCAL and LOCAL_INIT are not yet supported for %<do concurrent%> " -"constructs at %L" -msgstr "" - -#: fortran/resolve.cc:8450 +#: fortran/resolve.cc:8479 #, gcc-internal-format, gfc-internal-format msgid "FORALL index-name at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:8455 +#: fortran/resolve.cc:8484 #, gcc-internal-format, gfc-internal-format msgid "FORALL start expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:8462 +#: fortran/resolve.cc:8491 #, gcc-internal-format, gfc-internal-format msgid "FORALL end expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:8470 +#: fortran/resolve.cc:8499 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L must be a scalar %s" msgstr "" -#: fortran/resolve.cc:8475 +#: fortran/resolve.cc:8504 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L cannot be zero" msgstr "" -#: fortran/resolve.cc:8488 +#: fortran/resolve.cc:8517 #, gcc-internal-format msgid "FORALL index %qs may not appear in triplet specification at %L" msgstr "" -#: fortran/resolve.cc:8593 fortran/resolve.cc:8899 +#: fortran/resolve.cc:8622 fortran/resolve.cc:8928 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L must be ALLOCATABLE or a POINTER" msgstr "" -#: fortran/resolve.cc:8601 fortran/resolve.cc:8862 +#: fortran/resolve.cc:8630 fortran/resolve.cc:8891 #, gcc-internal-format, gfc-internal-format msgid "Coindexed allocatable object at %L" msgstr "" -#: fortran/resolve.cc:8719 +#: fortran/resolve.cc:8748 #, gcc-internal-format, gfc-internal-format msgid "" "Source-expr at %L must be scalar or have the same rank as the allocate-" "object at %L" msgstr "" -#: fortran/resolve.cc:8750 +#: fortran/resolve.cc:8779 #, gcc-internal-format, gfc-internal-format msgid "Source-expr at %L and allocate-object at %L must have the same shape" msgstr "" -#: fortran/resolve.cc:8914 +#: fortran/resolve.cc:8943 #, gcc-internal-format, gfc-internal-format msgid "The intrinsic NULL cannot be used as source-expr at %L" msgstr "" -#: fortran/resolve.cc:8922 +#: fortran/resolve.cc:8951 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with source-expr at %L" msgstr "" -#: fortran/resolve.cc:8934 +#: fortran/resolve.cc:8963 #, gcc-internal-format, gfc-internal-format msgid "" "The allocate-object at %L and the source-expr at %L shall have the same kind " "type parameter" msgstr "" -#: fortran/resolve.cc:8948 +#: fortran/resolve.cc:8977 #, gcc-internal-format, gfc-internal-format msgid "" "The source-expr at %L shall neither be of type LOCK_TYPE nor have a " "LOCK_TYPE component if allocate-object at %L is a coarray" msgstr "" -#: fortran/resolve.cc:8973 +#: fortran/resolve.cc:9002 #, gcc-internal-format, gfc-internal-format msgid "" "The source-expr at %L shall neither be of type EVENT_TYPE nor have a " "EVENT_TYPE component if allocate-object at %L is a coarray" msgstr "" -#: fortran/resolve.cc:8986 +#: fortran/resolve.cc:9015 #, gcc-internal-format, gfc-internal-format msgid "" "Allocating %s of ABSTRACT base type at %L requires a type-spec or source-expr" msgstr "" -#: fortran/resolve.cc:9000 +#: fortran/resolve.cc:9029 #, gcc-internal-format msgid "" "The type parameter in ALLOCATE statement with type-spec shall be an asterisk " "as allocate object %qs at %L is a dummy argument with assumed type parameter" msgstr "" -#: fortran/resolve.cc:9020 +#: fortran/resolve.cc:9049 #, gcc-internal-format, gfc-internal-format msgid "" "Allocating %s at %L with type-spec requires the same character-length " "parameter as in the declaration" msgstr "" -#: fortran/resolve.cc:9104 fortran/resolve.cc:9119 +#: fortran/resolve.cc:9133 fortran/resolve.cc:9148 #, gcc-internal-format, gfc-internal-format msgid "Array specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:9111 +#: fortran/resolve.cc:9140 #, gcc-internal-format, gfc-internal-format msgid "" "Array specification or array-valued SOURCE= expression required in ALLOCATE " "statement at %L" msgstr "" -#: fortran/resolve.cc:9136 +#: fortran/resolve.cc:9165 #, gcc-internal-format, gfc-internal-format msgid "Coarray specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:9146 fortran/resolve.cc:9248 +#: fortran/resolve.cc:9175 fortran/resolve.cc:9277 #, gcc-internal-format, gfc-internal-format msgid "Bad coarray specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:9152 +#: fortran/resolve.cc:9181 #, gcc-internal-format, gfc-internal-format msgid "Upper cobound is less than lower cobound at %L" msgstr "" -#: fortran/resolve.cc:9164 +#: fortran/resolve.cc:9193 #, gcc-internal-format, gfc-internal-format msgid "Upper cobound is less than lower cobound of 1 at %L" msgstr "" -#: fortran/resolve.cc:9175 fortran/resolve.cc:9203 +#: fortran/resolve.cc:9204 fortran/resolve.cc:9232 #, gcc-internal-format, gfc-internal-format msgid "Bad array specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:9222 +#: fortran/resolve.cc:9251 #, gcc-internal-format msgid "" "%qs must not appear in the array specification at %L in the same ALLOCATE " "statement where it is itself allocated" msgstr "" -#: fortran/resolve.cc:9237 +#: fortran/resolve.cc:9266 #, gcc-internal-format msgid "Expected %<*%> in coindex specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:9279 +#: fortran/resolve.cc:9308 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.cc:9308 +#: fortran/resolve.cc:9337 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.cc:9321 +#: fortran/resolve.cc:9350 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG at %L is useless without a STAT tag" msgstr "" -#: fortran/resolve.cc:9335 +#: fortran/resolve.cc:9364 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG variable at %L shall be a scalar default CHARACTER variable" msgstr "" -#: fortran/resolve.cc:9364 +#: fortran/resolve.cc:9393 #, gcc-internal-format, gfc-internal-format msgid "Errmsg-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.cc:9396 +#: fortran/resolve.cc:9425 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L also appears at %L" msgstr "" -#: fortran/resolve.cc:9402 fortran/resolve.cc:9408 +#: fortran/resolve.cc:9431 fortran/resolve.cc:9437 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L is subobject of object at %L" msgstr "" @@ -86813,394 +87033,416 @@ msgstr "" #. element in the list. Either way, we must #. issue an error and get the next case from P. #. FIXME: Sort P and Q by line number. -#: fortran/resolve.cc:9636 +#: fortran/resolve.cc:9665 #, gcc-internal-format, gfc-internal-format msgid "CASE label at %L overlaps with CASE label at %L" msgstr "" -#: fortran/resolve.cc:9687 +#: fortran/resolve.cc:9716 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of type %s" msgstr "" -#: fortran/resolve.cc:9698 +#: fortran/resolve.cc:9727 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of kind %d" msgstr "" -#: fortran/resolve.cc:9711 +#: fortran/resolve.cc:9740 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be scalar" msgstr "" -#: fortran/resolve.cc:9757 +#: fortran/resolve.cc:9786 #, gcc-internal-format, gfc-internal-format msgid "" "Selection expression in computed GOTO statement at %L must be a scalar " "integer expression" msgstr "" -#: fortran/resolve.cc:9778 +#: fortran/resolve.cc:9807 #, gcc-internal-format, gfc-internal-format msgid "Argument of SELECT statement at %L cannot be %s" msgstr "" -#: fortran/resolve.cc:9788 +#: fortran/resolve.cc:9817 #, gcc-internal-format, gfc-internal-format msgid "Argument of SELECT statement at %L must be a scalar expression" msgstr "" -#: fortran/resolve.cc:9806 fortran/resolve.cc:9814 +#: fortran/resolve.cc:9835 fortran/resolve.cc:9843 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L is not in the range of %s" msgstr "" -#: fortran/resolve.cc:9876 fortran/resolve.cc:10710 +#: fortran/resolve.cc:9905 fortran/resolve.cc:10739 #, gcc-internal-format, gfc-internal-format msgid "" "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" msgstr "" -#: fortran/resolve.cc:9902 +#: fortran/resolve.cc:9931 #, gcc-internal-format, gfc-internal-format msgid "Logical range in CASE statement at %L is not allowed" msgstr "" -#: fortran/resolve.cc:9915 +#: fortran/resolve.cc:9944 #, gcc-internal-format, gfc-internal-format msgid "Constant logical value in CASE statement is repeated at %L" msgstr "" -#: fortran/resolve.cc:9930 +#: fortran/resolve.cc:9959 #, gcc-internal-format, gfc-internal-format msgid "Range specification at %L can never be matched" msgstr "" -#: fortran/resolve.cc:10033 +#: fortran/resolve.cc:10062 #, gcc-internal-format, gfc-internal-format msgid "Logical SELECT CASE block at %L has more that two cases" msgstr "" -#: fortran/resolve.cc:10095 +#: fortran/resolve.cc:10124 #, gcc-internal-format, gfc-internal-format msgid "" "(F202y)Missing or invalid bound in ASSOCIATE rank remapping of associate " "name %s at %L" msgstr "" -#: fortran/resolve.cc:10111 +#: fortran/resolve.cc:10140 #, gcc-internal-format msgid "Associating entity %qs at %L is a procedure pointer" msgstr "" -#: fortran/resolve.cc:10120 +#: fortran/resolve.cc:10149 #, gcc-internal-format msgid "Derived type %qs cannot be used as a variable at %L" msgstr "" -#: fortran/resolve.cc:10137 +#: fortran/resolve.cc:10166 #, gcc-internal-format msgid "Associating entity %qs at %L is a procedure name" msgstr "" -#: fortran/resolve.cc:10153 +#: fortran/resolve.cc:10182 #, gcc-internal-format, gfc-internal-format msgid "Associating selector-expression at %L yields a procedure" msgstr "" -#: fortran/resolve.cc:10207 +#: fortran/resolve.cc:10236 #, gcc-internal-format, gfc-internal-format msgid "Selector at %L cannot be NULL()" msgstr "" -#: fortran/resolve.cc:10212 +#: fortran/resolve.cc:10241 #, gcc-internal-format, gfc-internal-format msgid "Selector at %L has no type" msgstr "" -#: fortran/resolve.cc:10271 +#: fortran/resolve.cc:10300 #, gcc-internal-format msgid "Associate-name %qs at %L is used as array" msgstr "" -#: fortran/resolve.cc:10282 +#: fortran/resolve.cc:10311 #, gcc-internal-format, gfc-internal-format msgid "CLASS selector at %L needs a temporary which is not yet implemented" msgstr "" -#: fortran/resolve.cc:10569 +#: fortran/resolve.cc:10598 #, gcc-internal-format, gfc-internal-format msgid "Selector shall be polymorphic in SELECT TYPE statement at %L" msgstr "" -#: fortran/resolve.cc:10618 fortran/resolve.cc:10630 +#: fortran/resolve.cc:10647 fortran/resolve.cc:10659 #, gcc-internal-format, gfc-internal-format msgid "Selector at %L must not be coindexed" msgstr "" -#: fortran/resolve.cc:10659 +#: fortran/resolve.cc:10688 #, gcc-internal-format, gfc-internal-format msgid "TYPE IS at %L overlaps with TYPE IS at %L" msgstr "" -#: fortran/resolve.cc:10672 +#: fortran/resolve.cc:10701 #, gcc-internal-format msgid "Derived type %qs at %L must be extensible" msgstr "" -#: fortran/resolve.cc:10685 +#: fortran/resolve.cc:10714 #, gcc-internal-format msgid "Derived type %qs at %L must be an extension of %qs" msgstr "" -#: fortran/resolve.cc:10688 +#: fortran/resolve.cc:10717 #, gcc-internal-format msgid "Unexpected intrinsic type %qs at %L" msgstr "" -#: fortran/resolve.cc:10698 +#: fortran/resolve.cc:10727 #, gcc-internal-format, gfc-internal-format msgid "" "The type-spec at %L shall specify that each length type parameter is assumed" msgstr "" -#: fortran/resolve.cc:10949 +#: fortran/resolve.cc:10978 #, gcc-internal-format, gfc-internal-format msgid "Double CLASS IS block in SELECT TYPE statement at %L" msgstr "" -#: fortran/resolve.cc:11082 +#: fortran/resolve.cc:11111 #, gcc-internal-format, gfc-internal-format msgid "RANK DEFAULT at %L is repeated at %L" msgstr "" -#: fortran/resolve.cc:11091 +#: fortran/resolve.cc:11120 #, gcc-internal-format, gfc-internal-format msgid "RANK (*) at %L is repeated at %L" msgstr "" -#: fortran/resolve.cc:11094 +#: fortran/resolve.cc:11123 #, gcc-internal-format, gfc-internal-format msgid "RANK (%i) at %L is repeated at %L" msgstr "" -#: fortran/resolve.cc:11104 +#: fortran/resolve.cc:11133 #, gcc-internal-format, gfc-internal-format msgid "" "RANK (*) at %L cannot be used with the pointer or allocatable selector at %L" msgstr "" -#: fortran/resolve.cc:11213 +#: fortran/resolve.cc:11242 #, gcc-internal-format, gfc-internal-format msgid "Invalid context for NULL () intrinsic at %L" msgstr "" -#: fortran/resolve.cc:11267 +#: fortran/resolve.cc:11296 #, gcc-internal-format, gfc-internal-format msgid "DTIO %s procedure at %L must be recursive" msgstr "" -#: fortran/resolve.cc:11277 +#: fortran/resolve.cc:11306 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot be polymorphic unless it is processed by " "a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:11290 +#: fortran/resolve.cc:11319 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have POINTER components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:11299 +#: fortran/resolve.cc:11328 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have procedure pointer components" msgstr "" -#: fortran/resolve.cc:11306 +#: fortran/resolve.cc:11335 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have ALLOCATABLE components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:11317 +#: fortran/resolve.cc:11346 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have PRIVATE components" msgstr "" -#: fortran/resolve.cc:11323 +#: fortran/resolve.cc:11352 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have PRIVATE components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:11341 +#: fortran/resolve.cc:11370 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot be a full reference to an assumed-size " "array" msgstr "" -#: fortran/resolve.cc:11392 +#: fortran/resolve.cc:11421 #, gcc-internal-format, gfc-internal-format msgid "Lock variable at %L must be a scalar of type LOCK_TYPE" msgstr "" -#: fortran/resolve.cc:11402 +#: fortran/resolve.cc:11431 #, gcc-internal-format, gfc-internal-format msgid "Event variable at %L must be a scalar of type EVENT_TYPE" msgstr "" -#: fortran/resolve.cc:11406 +#: fortran/resolve.cc:11435 #, gcc-internal-format, gfc-internal-format msgid "Event variable argument at %L must be a coarray or coindexed" msgstr "" -#: fortran/resolve.cc:11409 +#: fortran/resolve.cc:11438 #, gcc-internal-format, gfc-internal-format msgid "Event variable argument at %L must be a coarray but not coindexed" msgstr "" -#: fortran/resolve.cc:11416 fortran/resolve.cc:11538 +#: fortran/resolve.cc:11445 fortran/resolve.cc:11672 #, gcc-internal-format, gfc-internal-format msgid "STAT= argument at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.cc:11428 fortran/resolve.cc:11550 +#: fortran/resolve.cc:11457 fortran/resolve.cc:11684 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG= argument at %L must be a scalar CHARACTER variable" msgstr "" -#: fortran/resolve.cc:11440 +#: fortran/resolve.cc:11469 #, gcc-internal-format, gfc-internal-format msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable" msgstr "" -#: fortran/resolve.cc:11453 +#: fortran/resolve.cc:11482 #, gcc-internal-format, gfc-internal-format msgid "UNTIL_COUNT= argument at %L must be a scalar INTEGER expression" msgstr "" -#: fortran/resolve.cc:11514 +#: fortran/resolve.cc:11495 +#, gcc-internal-format, gfc-internal-format +msgid "" +"TEAM argument at %L must be a scalar expression of type TEAM_TYPE from the " +"intrinsic module ISO_FORTRAN_ENV" +msgstr "" + +#: fortran/resolve.cc:11509 +#, gcc-internal-format, gfc-internal-format +msgid "%s argument at %L must be a scalar %s variable of at least kind %d" +msgstr "" + +#: fortran/resolve.cc:11530 +#, gcc-internal-format, gfc-internal-format +msgid "%s argument at %L must be a scalar %s of at least kind %d" +msgstr "" + +#: fortran/resolve.cc:11648 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must be a scalar or rank-1 INTEGER expression" msgstr "" -#: fortran/resolve.cc:11518 fortran/resolve.cc:11528 +#: fortran/resolve.cc:11652 fortran/resolve.cc:11662 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must between 1 and num_images()" msgstr "" -#: fortran/resolve.cc:11581 +#: fortran/resolve.cc:11715 #, gcc-internal-format, gfc-internal-format msgid "" "Statement at %L is not a valid branch target statement for the branch " "statement at %L" msgstr "" -#: fortran/resolve.cc:11591 +#: fortran/resolve.cc:11724 #, gcc-internal-format, gfc-internal-format msgid "Branch at %L may result in an infinite loop" msgstr "" #. Note: A label at END CRITICAL does not leave the CRITICAL #. construct as END CRITICAL is still part of it. -#: fortran/resolve.cc:11608 fortran/resolve.cc:11631 +#: fortran/resolve.cc:11742 fortran/resolve.cc:11769 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves CRITICAL construct for label at %L" msgstr "" -#: fortran/resolve.cc:11612 fortran/resolve.cc:11637 +#: fortran/resolve.cc:11746 fortran/resolve.cc:11775 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves DO CONCURRENT construct for label at %L" msgstr "" +#: fortran/resolve.cc:11750 +#, gcc-internal-format, gfc-internal-format +msgid "GOTO statement at %L leaves CHANGE TEAM construct for label at %L" +msgstr "" + #. The label is not in an enclosing block, so illegal. This was #. allowed in Fortran 66, so we allow it as extension. No #. further checks are necessary in this case. -#: fortran/resolve.cc:11652 +#: fortran/resolve.cc:11790 #, gcc-internal-format, gfc-internal-format msgid "Label at %L is not in the same block as the GOTO statement at %L" msgstr "" -#: fortran/resolve.cc:11724 +#: fortran/resolve.cc:11862 #, gcc-internal-format, gfc-internal-format msgid "WHERE mask at %L has inconsistent shape" msgstr "" -#: fortran/resolve.cc:11740 +#: fortran/resolve.cc:11878 #, gcc-internal-format, gfc-internal-format msgid "WHERE assignment target at %L has inconsistent shape" msgstr "" -#: fortran/resolve.cc:11753 fortran/resolve.cc:11845 +#: fortran/resolve.cc:11891 fortran/resolve.cc:11983 #, gcc-internal-format, gfc-internal-format msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L" msgstr "" -#: fortran/resolve.cc:11763 fortran/resolve.cc:11855 +#: fortran/resolve.cc:11901 fortran/resolve.cc:11993 #, gcc-internal-format, gfc-internal-format msgid "Unsupported statement inside WHERE at %L" msgstr "" -#: fortran/resolve.cc:11794 +#: fortran/resolve.cc:11932 #, gcc-internal-format, gfc-internal-format msgid "Assignment to a FORALL index variable at %L" msgstr "" -#: fortran/resolve.cc:11803 +#: fortran/resolve.cc:11941 #, gcc-internal-format msgid "" "The FORALL with index %qs is not used on the left side of the assignment at " "%L and so might cause multiple assignment to this object" msgstr "" -#: fortran/resolve.cc:11960 +#: fortran/resolve.cc:12098 #, gcc-internal-format, gfc-internal-format msgid "FORALL construct at %L" msgstr "" -#: fortran/resolve.cc:11981 +#: fortran/resolve.cc:12119 #, gcc-internal-format, gfc-internal-format msgid "FORALL index-name at %L must be a scalar variable of type integer" msgstr "" -#: fortran/resolve.cc:11991 +#: fortran/resolve.cc:12129 #, gcc-internal-format, gfc-internal-format msgid "An outer FORALL construct already has an index with this name %L" msgstr "" -#: fortran/resolve.cc:12069 +#: fortran/resolve.cc:12207 #, gcc-internal-format, gfc-internal-format msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" msgstr "" -#: fortran/resolve.cc:12190 +#: fortran/resolve.cc:12328 #, gcc-internal-format msgid "gfc_resolve_blocks(): Bad block type" msgstr "" -#: fortran/resolve.cc:12270 +#: fortran/resolve.cc:12408 #, gcc-internal-format, gfc-internal-format msgid "" "Variable in the ordinary assignment at %L is a procedure pointer component" msgstr "" -#: fortran/resolve.cc:12290 +#: fortran/resolve.cc:12428 #, gcc-internal-format, gfc-internal-format msgid "Cannot assign %s to %s at %L" msgstr "" -#: fortran/resolve.cc:12338 +#: fortran/resolve.cc:12476 #, gcc-internal-format msgid "CHARACTER expression will be truncated in assignment (%wd/%wd) at %L" msgstr "" -#: fortran/resolve.cc:12370 +#: fortran/resolve.cc:12508 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed expression at %L is assigned to a derived type variable with a " @@ -87208,7 +87450,7 @@ msgid "" msgstr "" #. F2008, C1283 (4). -#: fortran/resolve.cc:12376 +#: fortran/resolve.cc:12514 #, gcc-internal-format, gfc-internal-format msgid "" "In a pure subprogram an INTENT(IN) dummy argument shall not be used as the " @@ -87217,43 +87459,43 @@ msgid "" "component selection." msgstr "" -#: fortran/resolve.cc:12388 +#: fortran/resolve.cc:12526 #, gcc-internal-format, gfc-internal-format msgid "Assignment to coindexed variable at %L in a PURE procedure" msgstr "" -#: fortran/resolve.cc:12420 +#: fortran/resolve.cc:12558 #, gcc-internal-format, gfc-internal-format msgid "Assignment to polymorphic coarray at %L is not permitted" msgstr "" -#: fortran/resolve.cc:12424 +#: fortran/resolve.cc:12562 #, gcc-internal-format, gfc-internal-format msgid "Assignment to an allocatable polymorphic variable at %L" msgstr "" -#: fortran/resolve.cc:12429 +#: fortran/resolve.cc:12567 #, gcc-internal-format msgid "" "Assignment to an allocatable polymorphic variable at %L requires %<-frealloc-" "lhs%>" msgstr "" -#: fortran/resolve.cc:12436 +#: fortran/resolve.cc:12574 #, gcc-internal-format msgid "" "Nonallocatable variable must not be polymorphic in intrinsic assignment at " "%L - check that there is a matching specific subroutine for %<=%> operator" msgstr "" -#: fortran/resolve.cc:12447 +#: fortran/resolve.cc:12585 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed variable must not have an allocatable ultimate component in " "assignment at %L" msgstr "" -#: fortran/resolve.cc:12836 +#: fortran/resolve.cc:12974 #, gcc-internal-format, gfc-internal-format msgid "" "TODO: type-bound defined assignment(s) at %L not done because multiple part " @@ -87262,93 +87504,82 @@ msgstr "" #. Even if standard does not support this feature, continue to build #. the two statements to avoid upsetting frontend_passes.c. -#: fortran/resolve.cc:13150 +#: fortran/resolve.cc:13288 #, gcc-internal-format, gfc-internal-format msgid "Pointer procedure assignment at %L" msgstr "" -#: fortran/resolve.cc:13162 +#: fortran/resolve.cc:13300 #, gcc-internal-format, gfc-internal-format msgid "" "The function result on the lhs of the assignment at %L must have the pointer " "attribute." msgstr "" -#: fortran/resolve.cc:13258 -#, gcc-internal-format -msgid "" -"TEAM argument to %qs at %L must be a scalar expression of type TEAM_TYPE" -msgstr "" - -#: fortran/resolve.cc:13457 -#, gcc-internal-format, gfc-internal-format -msgid "TEAM NUMBER argument to FORM TEAM at %L must be a scalar INTEGER" -msgstr "" - -#: fortran/resolve.cc:13493 +#: fortran/resolve.cc:13611 #, gcc-internal-format, gfc-internal-format msgid "ASSIGNED GOTO statement at %L requires a scalar INTEGER variable" msgstr "" -#: fortran/resolve.cc:13497 +#: fortran/resolve.cc:13615 #, gcc-internal-format msgid "Variable %qs has not been assigned a target label at %L" msgstr "" -#: fortran/resolve.cc:13508 +#: fortran/resolve.cc:13626 #, gcc-internal-format, gfc-internal-format msgid "" "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier" msgstr "" -#: fortran/resolve.cc:13564 +#: fortran/resolve.cc:13682 #, gcc-internal-format, gfc-internal-format msgid "Expected intrinsic assignment in OMP WORKSHARE at %L" msgstr "" -#: fortran/resolve.cc:13606 +#: fortran/resolve.cc:13724 #, gcc-internal-format, gfc-internal-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" msgstr "" -#: fortran/resolve.cc:13653 +#: fortran/resolve.cc:13771 #, gcc-internal-format, gfc-internal-format msgid "Invalid NULL at %L" msgstr "" -#: fortran/resolve.cc:13657 +#: fortran/resolve.cc:13775 #, gcc-internal-format, gfc-internal-format msgid "" "Arithmetic IF statement at %L requires a scalar REAL or INTEGER expression" msgstr "" -#: fortran/resolve.cc:13718 +#: fortran/resolve.cc:13836 #, gcc-internal-format msgid "gfc_resolve_code(): No expression on DO WHILE" msgstr "" -#: fortran/resolve.cc:13723 +#: fortran/resolve.cc:13841 #, gcc-internal-format, gfc-internal-format msgid "" "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.cc:13807 +#: fortran/resolve.cc:13925 #, gcc-internal-format, gfc-internal-format msgid "FORALL mask clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.cc:13919 +#: fortran/resolve.cc:14037 #, gcc-internal-format msgid "gfc_resolve_code(): Bad statement code" msgstr "" -#: fortran/resolve.cc:13940 +#: fortran/resolve.cc:14058 #, gcc-internal-format msgid "Using parameter %qs declared at %L is deprecated" msgstr "" -#: fortran/resolve.cc:14036 +#: fortran/resolve.cc:14154 #, gcc-internal-format msgid "" "Variable %qs with binding label %qs at %L uses the same global identifier as " @@ -87357,7 +87588,7 @@ msgstr "" #. This can only happen if the variable is defined in a module - if it #. isn't the same module, reject it. -#: fortran/resolve.cc:14050 +#: fortran/resolve.cc:14168 #, gcc-internal-format msgid "" "Variable %qs from module %qs with binding label %qs at %L uses the same " @@ -87367,1169 +87598,1169 @@ msgstr "" #. Print an error if the procedure is defined multiple times; we have to #. exclude references to the same procedure via module association or #. multiple checks for the same procedure. -#: fortran/resolve.cc:14069 +#: fortran/resolve.cc:14187 #, gcc-internal-format msgid "" "Procedure %qs with binding label %qs at %L uses the same global identifier " "as entity at %L" msgstr "" -#: fortran/resolve.cc:14155 +#: fortran/resolve.cc:14273 #, gcc-internal-format, gfc-internal-format msgid "String length at %L is too large" msgstr "" -#: fortran/resolve.cc:14393 +#: fortran/resolve.cc:14511 #, gcc-internal-format msgid "Allocatable array %qs at %L must have a deferred shape or assumed rank" msgstr "" -#: fortran/resolve.cc:14397 +#: fortran/resolve.cc:14515 #, gcc-internal-format msgid "Scalar object %qs at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:14405 +#: fortran/resolve.cc:14523 #, gcc-internal-format msgid "Array pointer %qs at %L must have a deferred shape or assumed rank" msgstr "" -#: fortran/resolve.cc:14416 +#: fortran/resolve.cc:14534 #, gcc-internal-format msgid "Array %qs at %L cannot have a deferred shape" msgstr "" -#: fortran/resolve.cc:14434 +#: fortran/resolve.cc:14552 #, gcc-internal-format msgid "Type %qs of CLASS variable %qs at %L is not extensible" msgstr "" -#: fortran/resolve.cc:14448 +#: fortran/resolve.cc:14566 #, gcc-internal-format msgid "CLASS variable %qs at %L must be dummy, allocatable or pointer" msgstr "" -#: fortran/resolve.cc:14481 +#: fortran/resolve.cc:14599 #, gcc-internal-format msgid "" "The type %qs cannot be host associated at %L because it is blocked by an " "incompatible object of the same name declared at %L" msgstr "" -#: fortran/resolve.cc:14503 +#: fortran/resolve.cc:14621 #, gcc-internal-format msgid "" "Implied SAVE for module variable %qs at %L, needed due to the default " "initialization" msgstr "" -#: fortran/resolve.cc:14536 +#: fortran/resolve.cc:14654 #, gcc-internal-format msgid "" "Entity %qs at %L has a deferred type parameter and requires either the " "POINTER or ALLOCATABLE attribute" msgstr "" -#: fortran/resolve.cc:14550 +#: fortran/resolve.cc:14668 #, gcc-internal-format msgid "Automatic object %qs at %L cannot have the SAVE attribute" msgstr "" #. F08:C541. The shape of an array defined in a main program or module #. * needs to be constant. -#: fortran/resolve.cc:14572 +#: fortran/resolve.cc:14690 #, gcc-internal-format msgid "The module or main program array %qs at %L must have constant shape" msgstr "" -#: fortran/resolve.cc:14597 +#: fortran/resolve.cc:14715 #, gcc-internal-format, gfc-internal-format msgid "" "Entity with assumed character length at %L must be a dummy argument or a " "PARAMETER" msgstr "" -#: fortran/resolve.cc:14618 +#: fortran/resolve.cc:14736 #, gcc-internal-format msgid "%qs at %L must have constant character length in this context" msgstr "" -#: fortran/resolve.cc:14625 +#: fortran/resolve.cc:14743 #, gcc-internal-format msgid "COMMON variable %qs at %L must have constant character length" msgstr "" -#: fortran/resolve.cc:14673 +#: fortran/resolve.cc:14791 #, gcc-internal-format msgid "Allocatable %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14676 +#: fortran/resolve.cc:14794 #, gcc-internal-format msgid "External %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14679 +#: fortran/resolve.cc:14797 #, gcc-internal-format msgid "Dummy %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14682 +#: fortran/resolve.cc:14800 #, gcc-internal-format msgid "Intrinsic %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14685 +#: fortran/resolve.cc:14803 #, gcc-internal-format msgid "Function result %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14688 +#: fortran/resolve.cc:14806 #, gcc-internal-format msgid "Automatic array %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14730 +#: fortran/resolve.cc:14848 #, gcc-internal-format, gfc-internal-format msgid "%s at %L" msgstr "" -#: fortran/resolve.cc:14762 +#: fortran/resolve.cc:14880 #, gcc-internal-format msgid "Character-valued statement function %qs at %L must have constant length" msgstr "" -#: fortran/resolve.cc:14785 +#: fortran/resolve.cc:14903 #, gcc-internal-format msgid "" "%qs is of a PRIVATE type and cannot be a dummy argument of %qs, which is " "PUBLIC at %L" msgstr "" -#: fortran/resolve.cc:14807 +#: fortran/resolve.cc:14925 #, gcc-internal-format msgid "" "Procedure %qs in PUBLIC interface %qs at %L takes dummy arguments of %qs " "which is PRIVATE" msgstr "" -#: fortran/resolve.cc:14825 +#: fortran/resolve.cc:14943 #, gcc-internal-format msgid "Function %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:14837 +#: fortran/resolve.cc:14955 #, gcc-internal-format msgid "External object %qs at %L may not have an initializer" msgstr "" -#: fortran/resolve.cc:14847 +#: fortran/resolve.cc:14965 #, gcc-internal-format msgid "ELEMENTAL function %qs at %L must have a scalar result" msgstr "" -#: fortran/resolve.cc:14857 +#: fortran/resolve.cc:14975 #, gcc-internal-format msgid "" "Statement function %qs at %L may not have pointer or allocatable attribute" msgstr "" -#: fortran/resolve.cc:14876 +#: fortran/resolve.cc:14994 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be array-valued" msgstr "" -#: fortran/resolve.cc:14880 +#: fortran/resolve.cc:14998 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be pointer-valued" msgstr "" -#: fortran/resolve.cc:14884 +#: fortran/resolve.cc:15002 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be pure" msgstr "" -#: fortran/resolve.cc:14888 +#: fortran/resolve.cc:15006 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be recursive" msgstr "" -#: fortran/resolve.cc:14901 +#: fortran/resolve.cc:15019 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L" msgstr "" -#: fortran/resolve.cc:14912 +#: fortran/resolve.cc:15030 #, gcc-internal-format msgid "Procedure pointer %qs at %L shall not be elemental" msgstr "" -#: fortran/resolve.cc:14918 +#: fortran/resolve.cc:15036 #, gcc-internal-format msgid "Dummy procedure %qs at %L shall not be elemental" msgstr "" -#: fortran/resolve.cc:14938 +#: fortran/resolve.cc:15056 #, gcc-internal-format msgid "" "Function result variable %qs at %L of elemental function %qs shall not have " "an ALLOCATABLE or POINTER attribute" msgstr "" -#: fortran/resolve.cc:14995 +#: fortran/resolve.cc:15113 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with SAVE attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:15001 +#: fortran/resolve.cc:15119 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with INTENT attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:15007 +#: fortran/resolve.cc:15125 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with RESULT attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:15015 +#: fortran/resolve.cc:15133 #, gcc-internal-format msgid "EXTERNAL attribute conflicts with FUNCTION attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:15021 +#: fortran/resolve.cc:15139 #, gcc-internal-format msgid "Procedure pointer result %qs at %L is missing the pointer attribute" msgstr "" -#: fortran/resolve.cc:15064 +#: fortran/resolve.cc:15182 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in ELEMENTAL attribute between MODULE PROCEDURE at %L and its " "interface in %s" msgstr "" -#: fortran/resolve.cc:15072 +#: fortran/resolve.cc:15190 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface " "in %s" msgstr "" -#: fortran/resolve.cc:15080 +#: fortran/resolve.cc:15198 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in RECURSIVE attribute between MODULE PROCEDURE at %L and its " "interface in %s" msgstr "" -#: fortran/resolve.cc:15089 +#: fortran/resolve.cc:15207 #, gcc-internal-format msgid "" "%s between the MODULE PROCEDURE declaration in MODULE %qs and the " "declaration at %L in (SUB)MODULE %qs" msgstr "" -#: fortran/resolve.cc:15113 +#: fortran/resolve.cc:15231 #, gcc-internal-format msgid "Interface of %qs at %L must be explicit" msgstr "" -#: fortran/resolve.cc:15183 +#: fortran/resolve.cc:15301 #, gcc-internal-format msgid "FINAL procedure %qs at %L is not a SUBROUTINE" msgstr "" -#: fortran/resolve.cc:15192 +#: fortran/resolve.cc:15310 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure at %L must have exactly one argument" msgstr "" -#: fortran/resolve.cc:15200 fortran/resolve.cc:15217 +#: fortran/resolve.cc:15318 fortran/resolve.cc:15335 #, gcc-internal-format msgid "Argument of FINAL procedure at %L must be of type %qs" msgstr "" -#: fortran/resolve.cc:15208 +#: fortran/resolve.cc:15326 #, gcc-internal-format, gfc-internal-format msgid "" "FINAL procedure at %L with assumed rank argument must be the only finalizer " "with the same kind/type (F2018: C790)" msgstr "" -#: fortran/resolve.cc:15225 +#: fortran/resolve.cc:15343 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be a POINTER" msgstr "" -#: fortran/resolve.cc:15231 +#: fortran/resolve.cc:15349 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:15237 +#: fortran/resolve.cc:15355 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be OPTIONAL" msgstr "" -#: fortran/resolve.cc:15245 +#: fortran/resolve.cc:15363 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)" msgstr "" -#: fortran/resolve.cc:15254 +#: fortran/resolve.cc:15372 #, gcc-internal-format, gfc-internal-format msgid "Non-scalar FINAL procedure at %L should have assumed shape argument" msgstr "" -#: fortran/resolve.cc:15276 +#: fortran/resolve.cc:15394 #, gcc-internal-format msgid "FINAL procedure %qs declared at %L has the same rank (%d) as %qs" msgstr "" -#: fortran/resolve.cc:15313 +#: fortran/resolve.cc:15431 #, gcc-internal-format msgid "" "Only array FINAL procedures declared for derived type %qs defined at %L, " "suggest also scalar one unless an assumed rank finalizer has been declared" msgstr "" -#: fortran/resolve.cc:15354 +#: fortran/resolve.cc:15472 #, gcc-internal-format msgid "%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for GENERIC %qs at %L" msgstr "" -#: fortran/resolve.cc:15390 +#: fortran/resolve.cc:15508 #, gcc-internal-format msgid "%qs and %qs for GENERIC %qs at %L are ambiguous" msgstr "" -#: fortran/resolve.cc:15449 +#: fortran/resolve.cc:15567 #, gcc-internal-format msgid "Undefined specific binding %qs as target of GENERIC %qs at %L" msgstr "" -#: fortran/resolve.cc:15461 +#: fortran/resolve.cc:15579 #, gcc-internal-format msgid "GENERIC %qs at %L must target a specific binding, %qs is GENERIC, too" msgstr "" -#: fortran/resolve.cc:15489 +#: fortran/resolve.cc:15607 #, gcc-internal-format msgid "GENERIC %qs at %L cannot overwrite specific binding with the same name" msgstr "" -#: fortran/resolve.cc:15545 +#: fortran/resolve.cc:15663 #, gcc-internal-format, gfc-internal-format msgid "Type-bound operator at %L cannot be NOPASS" msgstr "" -#: fortran/resolve.cc:15757 +#: fortran/resolve.cc:15875 #, gcc-internal-format msgid "" "%qs must be a module procedure or an external procedure with an explicit " "interface at %L" msgstr "" -#: fortran/resolve.cc:15800 +#: fortran/resolve.cc:15918 #, gcc-internal-format msgid "Procedure %qs with PASS(%s) at %L has no argument %qs" msgstr "" -#: fortran/resolve.cc:15814 +#: fortran/resolve.cc:15932 #, gcc-internal-format msgid "Procedure %qs with PASS at %L must have at least one argument" msgstr "" -#: fortran/resolve.cc:15828 fortran/resolve.cc:16370 +#: fortran/resolve.cc:15946 fortran/resolve.cc:16488 #, gcc-internal-format msgid "Non-polymorphic passed-object dummy argument of %qs at %L" msgstr "" -#: fortran/resolve.cc:15837 +#: fortran/resolve.cc:15955 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived-type %qs" msgstr "" -#: fortran/resolve.cc:15847 +#: fortran/resolve.cc:15965 #, gcc-internal-format msgid "" "Argument %qs of %qs with PASS(%s) at %L must be of the parametric derived-" "type %qs" msgstr "" -#: fortran/resolve.cc:15889 +#: fortran/resolve.cc:16007 #, gcc-internal-format msgid "" "All LEN type parameters of the passed dummy argument %qs of %qs at %L must " "be ASSUMED." msgstr "" -#: fortran/resolve.cc:15899 +#: fortran/resolve.cc:16017 #, gcc-internal-format msgid "Passed-object dummy argument of %qs at %L must be scalar" msgstr "" -#: fortran/resolve.cc:15905 +#: fortran/resolve.cc:16023 #, gcc-internal-format msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:15911 +#: fortran/resolve.cc:16029 #, gcc-internal-format msgid "Passed-object dummy argument of %qs at %L must not be POINTER" msgstr "" -#: fortran/resolve.cc:15940 +#: fortran/resolve.cc:16058 #, gcc-internal-format msgid "Procedure %qs at %L has the same name as a component of %qs" msgstr "" -#: fortran/resolve.cc:15950 +#: fortran/resolve.cc:16068 #, gcc-internal-format msgid "Procedure %qs at %L has the same name as an inherited component of %qs" msgstr "" -#: fortran/resolve.cc:16045 +#: fortran/resolve.cc:16163 #, gcc-internal-format msgid "" "Derived-type %qs declared at %L must be ABSTRACT because %qs is DEFERRED and " "not overridden" msgstr "" -#: fortran/resolve.cc:16150 +#: fortran/resolve.cc:16268 #, gcc-internal-format msgid "Coarray component %qs at %L must be allocatable with deferred shape" msgstr "" -#: fortran/resolve.cc:16159 +#: fortran/resolve.cc:16277 #, gcc-internal-format msgid "" "Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" msgstr "" -#: fortran/resolve.cc:16169 +#: fortran/resolve.cc:16287 #, gcc-internal-format msgid "" "Component %qs at %L with coarray component shall be a nonpointer, " "nonallocatable scalar" msgstr "" -#: fortran/resolve.cc:16194 +#: fortran/resolve.cc:16312 #, gcc-internal-format msgid "" "Component %qs at %L has the CONTIGUOUS attribute but is not an array pointer" msgstr "" -#: fortran/resolve.cc:16205 +#: fortran/resolve.cc:16323 #, gcc-internal-format msgid "Component %qs of BIND(C) type at %L must have length one" msgstr "" -#: fortran/resolve.cc:16303 +#: fortran/resolve.cc:16421 #, gcc-internal-format msgid "Procedure pointer component %qs with PASS(%s) at %L has no argument %qs" msgstr "" -#: fortran/resolve.cc:16317 +#: fortran/resolve.cc:16435 #, gcc-internal-format msgid "" "Procedure pointer component %qs with PASS at %L must have at least one " "argument" msgstr "" -#: fortran/resolve.cc:16333 +#: fortran/resolve.cc:16451 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived type %qs" msgstr "" -#: fortran/resolve.cc:16343 +#: fortran/resolve.cc:16461 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L must be scalar" msgstr "" -#: fortran/resolve.cc:16352 +#: fortran/resolve.cc:16470 #, gcc-internal-format msgid "" "Argument %qs of %qs with PASS(%s) at %L may not have the POINTER attribute" msgstr "" -#: fortran/resolve.cc:16361 +#: fortran/resolve.cc:16479 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:16403 +#: fortran/resolve.cc:16521 #, gcc-internal-format msgid "" "Component %qs of %qs at %L has the same name as an inherited type-bound " "procedure" msgstr "" -#: fortran/resolve.cc:16416 +#: fortran/resolve.cc:16534 #, gcc-internal-format msgid "" "Character length of component %qs needs to be a constant specification " "expression at %L" msgstr "" -#: fortran/resolve.cc:16427 +#: fortran/resolve.cc:16545 #, gcc-internal-format msgid "" "Character length expression of component %qs at %L must be of INTEGER type, " "found %s" msgstr "" -#: fortran/resolve.cc:16440 +#: fortran/resolve.cc:16558 #, gcc-internal-format msgid "" "Character component %qs of %qs at %L with deferred length must be a POINTER " "or ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:16473 +#: fortran/resolve.cc:16591 #, gcc-internal-format msgid "" "the component %qs is a PRIVATE type and cannot be a component of %qs, which " "is PUBLIC at %L" msgstr "" -#: fortran/resolve.cc:16481 +#: fortran/resolve.cc:16599 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic component %s at %L in SEQUENCE or BIND(C) type %s" msgstr "" -#: fortran/resolve.cc:16490 +#: fortran/resolve.cc:16608 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s of SEQUENCE type declared at %L does not have the SEQUENCE " "attribute" msgstr "" -#: fortran/resolve.cc:16576 +#: fortran/resolve.cc:16694 #, gcc-internal-format, gfc-internal-format msgid "Conflicting initializers in union at %L and %L" msgstr "" -#: fortran/resolve.cc:16668 +#: fortran/resolve.cc:16786 #, gcc-internal-format msgid "" "As extending type %qs at %L has a coarray component, parent type %qs shall " "also have one" msgstr "" -#: fortran/resolve.cc:16681 +#: fortran/resolve.cc:16799 #, gcc-internal-format msgid "Non-extensible derived-type %qs at %L must not be ABSTRACT" msgstr "" -#: fortran/resolve.cc:16751 +#: fortran/resolve.cc:16869 #, gcc-internal-format msgid "" "Parameterized type %qs does not have a component corresponding to parameter " "%qs at %L" msgstr "" -#: fortran/resolve.cc:16783 +#: fortran/resolve.cc:16901 #, gcc-internal-format msgid "" "Generic name %qs of function %qs at %L being the same name as derived type " "at %L" msgstr "" -#: fortran/resolve.cc:16797 +#: fortran/resolve.cc:16915 #, gcc-internal-format msgid "Derived type %qs at %L has not been declared" msgstr "" -#: fortran/resolve.cc:16865 +#: fortran/resolve.cc:16983 #, gcc-internal-format msgid "Assumed size array %qs in namelist %qs at %L is not allowed" msgstr "" -#: fortran/resolve.cc:16871 +#: fortran/resolve.cc:16989 #, gcc-internal-format msgid "NAMELIST array object %qs with assumed shape in namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:16877 +#: fortran/resolve.cc:16995 #, gcc-internal-format msgid "NAMELIST array object %qs with nonconstant shape in namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:16885 +#: fortran/resolve.cc:17003 #, gcc-internal-format msgid "" "NAMELIST object %qs with nonconstant character length in namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:16902 +#: fortran/resolve.cc:17020 #, gcc-internal-format msgid "" "NAMELIST object %qs was declared PRIVATE and cannot be member of PUBLIC " "namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:16924 +#: fortran/resolve.cc:17042 #, gcc-internal-format msgid "" "NAMELIST object %qs has use-associated PRIVATE components and cannot be " "member of namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:16935 +#: fortran/resolve.cc:17053 #, gcc-internal-format msgid "" "NAMELIST object %qs has PRIVATE components and cannot be a member of PUBLIC " "namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:16962 +#: fortran/resolve.cc:17080 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with NAMELIST attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:16981 +#: fortran/resolve.cc:17099 #, gcc-internal-format msgid "Parameter array %qs at %L cannot be automatic or of deferred shape" msgstr "" -#: fortran/resolve.cc:16997 +#: fortran/resolve.cc:17115 #, gcc-internal-format msgid "" "Implicitly typed PARAMETER %qs at %L doesn't match a later IMPLICIT type" msgstr "" -#: fortran/resolve.cc:17008 +#: fortran/resolve.cc:17126 #, gcc-internal-format, gfc-internal-format msgid "Incompatible derived type in PARAMETER at %L" msgstr "" -#: fortran/resolve.cc:17016 +#: fortran/resolve.cc:17134 #, gcc-internal-format msgid "CLASS variable %qs at %L cannot have the PARAMETER attribute" msgstr "" -#: fortran/resolve.cc:17068 +#: fortran/resolve.cc:17186 #, gcc-internal-format msgid "" "Entity %qs at %L has a deferred LEN parameter %qs and requires either the " "POINTER or ALLOCATABLE attribute" msgstr "" -#: fortran/resolve.cc:17080 +#: fortran/resolve.cc:17198 #, gcc-internal-format msgid "" "The AUTOMATIC object %qs at %L must not have the SAVE attribute or be a " "variable declared in the main program, a module or a submodule(F08/C513)" msgstr "" -#: fortran/resolve.cc:17087 +#: fortran/resolve.cc:17205 #, gcc-internal-format msgid "" "The object %qs at %L with ASSUMED type parameters must be a dummy or a " "SELECT TYPE selector(F08/4.2)" msgstr "" -#: fortran/resolve.cc:17146 +#: fortran/resolve.cc:17264 #, gcc-internal-format, gfc-internal-format msgid "" "Sorry, allocatable/pointer components in polymorphic (CLASS) type coarrays " "at %L are unsupported" msgstr "" -#: fortran/resolve.cc:17159 +#: fortran/resolve.cc:17277 #, gcc-internal-format msgid "" "%<omp_all_memory%>, declared at %L, may only be used in the OpenMP DEPEND " "clause" msgstr "" -#: fortran/resolve.cc:17224 +#: fortran/resolve.cc:17342 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L" msgstr "" -#: fortran/resolve.cc:17227 +#: fortran/resolve.cc:17345 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L" msgstr "" -#: fortran/resolve.cc:17333 +#: fortran/resolve.cc:17451 #, gcc-internal-format msgid "" "%qs at %L has the CONTIGUOUS attribute but is not an array pointer or an " "assumed-shape or assumed-rank array" msgstr "" -#: fortran/resolve.cc:17354 +#: fortran/resolve.cc:17472 #, gcc-internal-format, gfc-internal-format msgid "Bad specification for assumed size array at %L" msgstr "" -#: fortran/resolve.cc:17368 +#: fortran/resolve.cc:17486 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.cc:17371 +#: fortran/resolve.cc:17489 #, gcc-internal-format, gfc-internal-format msgid "Assumed shape array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.cc:17383 +#: fortran/resolve.cc:17501 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.cc:17390 +#: fortran/resolve.cc:17508 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-rank array at %L may not have the VALUE or CODIMENSION attribute" msgstr "" -#: fortran/resolve.cc:17403 +#: fortran/resolve.cc:17521 #, gcc-internal-format, gfc-internal-format msgid "Symbol at %L is not a DUMMY variable" msgstr "" -#: fortran/resolve.cc:17409 +#: fortran/resolve.cc:17527 #, gcc-internal-format msgid "" "%qs at %L cannot have the VALUE attribute because it is not a dummy argument" msgstr "" -#: fortran/resolve.cc:17419 +#: fortran/resolve.cc:17537 #, gcc-internal-format msgid "" "Character dummy variable %qs at %L with VALUE attribute must have constant " "length" msgstr "" -#: fortran/resolve.cc:17428 +#: fortran/resolve.cc:17546 #, gcc-internal-format msgid "" "C interoperable character dummy variable %qs at %L with VALUE attribute must " "have length one" msgstr "" -#: fortran/resolve.cc:17441 fortran/resolve.cc:17618 +#: fortran/resolve.cc:17559 fortran/resolve.cc:17736 #, gcc-internal-format msgid "The derived type %qs at %L is of type %qs, which has not been defined" msgstr "" -#: fortran/resolve.cc:17455 +#: fortran/resolve.cc:17573 #, gcc-internal-format, gfc-internal-format msgid "Variable %s at %L with NO_ARG_CHECK attribute shall be a dummy argument" msgstr "" -#: fortran/resolve.cc:17464 +#: fortran/resolve.cc:17582 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute shall be of type TYPE(*) or of " "an numeric intrinsic type" msgstr "" -#: fortran/resolve.cc:17473 +#: fortran/resolve.cc:17591 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute may not have the ALLOCATABLE, " "CODIMENSION, POINTER or VALUE attribute" msgstr "" -#: fortran/resolve.cc:17481 +#: fortran/resolve.cc:17599 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute may not have the INTENT(OUT) " "attribute" msgstr "" -#: fortran/resolve.cc:17488 +#: fortran/resolve.cc:17606 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute shall either be a scalar or an " "assumed-size array" msgstr "" -#: fortran/resolve.cc:17508 +#: fortran/resolve.cc:17626 #, gcc-internal-format, gfc-internal-format msgid "Assumed type of variable %s at %L is only permitted for dummy variables" msgstr "" -#: fortran/resolve.cc:17515 +#: fortran/resolve.cc:17633 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-type variable %s at %L may not have the ALLOCATABLE, CODIMENSION, " "POINTER or VALUE attribute" msgstr "" -#: fortran/resolve.cc:17522 +#: fortran/resolve.cc:17640 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute" msgstr "" -#: fortran/resolve.cc:17529 +#: fortran/resolve.cc:17647 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L shall not be an explicit-shape array" msgstr "" -#: fortran/resolve.cc:17555 +#: fortran/resolve.cc:17673 #, gcc-internal-format msgid "" "Variable %qs at %L cannot be BIND(C) because it is neither a COMMON block " "nor declared at the module level scope" msgstr "" -#: fortran/resolve.cc:17565 +#: fortran/resolve.cc:17683 #, gcc-internal-format msgid "BIND(C) Variable %qs at %L must have length one" msgstr "" -#: fortran/resolve.cc:17644 +#: fortran/resolve.cc:17762 #, gcc-internal-format msgid "PUBLIC %s %qs at %L of PRIVATE derived type %qs" msgstr "" -#: fortran/resolve.cc:17659 +#: fortran/resolve.cc:17777 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L of type LOCK_TYPE or with subcomponent of type LOCK_TYPE " "must be a coarray" msgstr "" -#: fortran/resolve.cc:17672 +#: fortran/resolve.cc:17790 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L of type EVENT_TYPE or with subcomponent of type EVENT_TYPE " "must be a coarray" msgstr "" -#: fortran/resolve.cc:17690 +#: fortran/resolve.cc:17808 #, gcc-internal-format msgid "" "The INTENT(OUT) dummy argument %qs at %L is ASSUMED SIZE and so cannot have " "a default initializer" msgstr "" -#: fortran/resolve.cc:17702 +#: fortran/resolve.cc:17820 #, gcc-internal-format msgid "Dummy argument %qs at %L of LOCK_TYPE shall not be INTENT(OUT)" msgstr "" -#: fortran/resolve.cc:17711 +#: fortran/resolve.cc:17829 #, gcc-internal-format msgid "Dummy argument %qs at %L of EVENT_TYPE shall not be INTENT(OUT)" msgstr "" -#: fortran/resolve.cc:17724 +#: fortran/resolve.cc:17842 #, gcc-internal-format msgid "" "Function result %qs at %L shall not be a coarray or have a coarray component" msgstr "" -#: fortran/resolve.cc:17733 +#: fortran/resolve.cc:17851 #, gcc-internal-format msgid "" "Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" msgstr "" -#: fortran/resolve.cc:17746 +#: fortran/resolve.cc:17864 #, gcc-internal-format msgid "" "Variable %qs at %L with coarray component shall be a nonpointer, " "nonallocatable scalar, which is not a coarray" msgstr "" -#: fortran/resolve.cc:17762 +#: fortran/resolve.cc:17880 #, gcc-internal-format msgid "" "Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy " "argument" msgstr "" -#: fortran/resolve.cc:17770 +#: fortran/resolve.cc:17888 #, gcc-internal-format msgid "" "Coarray variable %qs at %L shall not have codimensions with deferred shape " "without allocatable" msgstr "" -#: fortran/resolve.cc:17778 +#: fortran/resolve.cc:17896 #, gcc-internal-format msgid "Allocatable coarray variable %qs at %L must have deferred shape" msgstr "" -#: fortran/resolve.cc:17791 +#: fortran/resolve.cc:17909 #, gcc-internal-format msgid "" "Variable %qs at %L is INTENT(OUT) and can thus not be an allocatable coarray " "or have coarray components" msgstr "" -#: fortran/resolve.cc:17800 +#: fortran/resolve.cc:17918 #, gcc-internal-format msgid "Coarray dummy variable %qs at %L not allowed in BIND(C) procedure %qs" msgstr "" -#: fortran/resolve.cc:17816 +#: fortran/resolve.cc:17934 #, gcc-internal-format msgid "" "LOGICAL dummy argument %qs at %L with non-C_Bool kind in BIND(C) procedure " "%qs" msgstr "" -#: fortran/resolve.cc:17822 +#: fortran/resolve.cc:17940 #, gcc-internal-format msgid "" "LOGICAL result variable %qs at %L with non-C_Bool kind in BIND(C) procedure " "%qs" msgstr "" -#: fortran/resolve.cc:17847 +#: fortran/resolve.cc:17965 #, gcc-internal-format msgid "Namelist %qs cannot be an argument to subroutine or function at %L" msgstr "" -#: fortran/resolve.cc:17907 +#: fortran/resolve.cc:18025 #, gcc-internal-format, gfc-internal-format msgid "Threadprivate at %L isn't SAVEd" msgstr "" -#: fortran/resolve.cc:17919 +#: fortran/resolve.cc:18037 #, gcc-internal-format msgid "!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd" msgstr "" -#: fortran/resolve.cc:18030 +#: fortran/resolve.cc:18148 #, gcc-internal-format, gfc-internal-format msgid "Expecting definable entity near %L" msgstr "" -#: fortran/resolve.cc:18038 +#: fortran/resolve.cc:18156 #, gcc-internal-format msgid "BLOCK DATA element %qs at %L must be in COMMON" msgstr "" -#: fortran/resolve.cc:18045 +#: fortran/resolve.cc:18163 #, gcc-internal-format msgid "DATA array %qs at %L must be specified in a previous declaration" msgstr "" -#: fortran/resolve.cc:18052 +#: fortran/resolve.cc:18170 #, gcc-internal-format msgid "DATA element %qs at %L cannot have a coindex" msgstr "" -#: fortran/resolve.cc:18068 +#: fortran/resolve.cc:18186 #, gcc-internal-format msgid "DATA element %qs at %L is a pointer and so must be a full array" msgstr "" -#: fortran/resolve.cc:18075 +#: fortran/resolve.cc:18193 #, gcc-internal-format, gfc-internal-format msgid "" "DATA object near %L has the pointer attribute and the corresponding DATA " "value is not a valid initial-data-target" msgstr "" -#: fortran/resolve.cc:18084 +#: fortran/resolve.cc:18202 #, gcc-internal-format msgid "DATA element %qs at %L cannot have the ALLOCATABLE attribute" msgstr "" -#: fortran/resolve.cc:18146 +#: fortran/resolve.cc:18264 #, gcc-internal-format, gfc-internal-format msgid "Nonconstant array section at %L in DATA statement" msgstr "" -#: fortran/resolve.cc:18159 +#: fortran/resolve.cc:18277 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more variables than values" msgstr "" -#: fortran/resolve.cc:18235 +#: fortran/resolve.cc:18353 #, gcc-internal-format, gfc-internal-format msgid "Non-constant character length at %L in DATA statement" msgstr "" -#: fortran/resolve.cc:18263 +#: fortran/resolve.cc:18381 #, gcc-internal-format, gfc-internal-format msgid "" "start of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.cc:18271 +#: fortran/resolve.cc:18389 #, gcc-internal-format, gfc-internal-format msgid "" "end of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.cc:18279 +#: fortran/resolve.cc:18397 #, gcc-internal-format, gfc-internal-format msgid "" "step of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.cc:18286 +#: fortran/resolve.cc:18404 #, gcc-internal-format, gfc-internal-format msgid "step of implied-do loop at %L shall not be zero" msgstr "" -#: fortran/resolve.cc:18411 +#: fortran/resolve.cc:18529 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more values than variables" msgstr "" -#: fortran/resolve.cc:18577 +#: fortran/resolve.cc:18695 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but not used" msgstr "" -#: fortran/resolve.cc:18583 +#: fortran/resolve.cc:18701 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but cannot be used" msgstr "" -#: fortran/resolve.cc:18667 +#: fortran/resolve.cc:18785 #, gcc-internal-format msgid "" "Derived type variable %qs at %L must have SEQUENCE attribute to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:18676 +#: fortran/resolve.cc:18794 #, gcc-internal-format msgid "" "Derived type variable %qs at %L cannot have ALLOCATABLE components to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:18684 +#: fortran/resolve.cc:18802 #, gcc-internal-format msgid "" "Derived type variable %qs at %L with default initialization cannot be in " "EQUIVALENCE with a variable in COMMON" msgstr "" -#: fortran/resolve.cc:18700 +#: fortran/resolve.cc:18818 #, gcc-internal-format msgid "" "Derived type variable %qs at %L with pointer component(s) cannot be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:18803 +#: fortran/resolve.cc:18921 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.cc:18818 +#: fortran/resolve.cc:18936 #, gcc-internal-format, gfc-internal-format msgid "" "Either all or none of the objects in the EQUIVALENCE set at %L shall have " "the PROTECTED attribute" msgstr "" -#: fortran/resolve.cc:18843 +#: fortran/resolve.cc:18961 #, gcc-internal-format msgid "" "COMMON block member %qs at %L cannot be an EQUIVALENCE object in the pure " "procedure %qs" msgstr "" -#: fortran/resolve.cc:18852 +#: fortran/resolve.cc:18970 #, gcc-internal-format msgid "Named constant %qs at %L cannot be an EQUIVALENCE object" msgstr "" #. Since the pair of objects is not of the same type, mixed or #. non-default sequences can be rejected. -#: fortran/resolve.cc:18882 +#: fortran/resolve.cc:19000 #, gcc-internal-format, gfc-internal-format msgid "" "Sequence %s with mixed components in EQUIVALENCE statement at %L with " "different type objects" msgstr "" -#: fortran/resolve.cc:18892 +#: fortran/resolve.cc:19010 #, gcc-internal-format, gfc-internal-format msgid "" "Non-default type object or sequence %s in EQUIVALENCE statement at %L with " "objects of different type" msgstr "" -#: fortran/resolve.cc:18902 +#: fortran/resolve.cc:19020 #, gcc-internal-format msgid "" "Non-CHARACTER object %qs in default CHARACTER EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.cc:18909 +#: fortran/resolve.cc:19027 #, gcc-internal-format msgid "Non-NUMERIC object %qs in default NUMERIC EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.cc:18927 +#: fortran/resolve.cc:19045 #, gcc-internal-format msgid "" "Array %qs at %L with non-constant bounds cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:18938 +#: fortran/resolve.cc:19056 #, gcc-internal-format msgid "Structure component %qs at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:18949 +#: fortran/resolve.cc:19067 #, gcc-internal-format, gfc-internal-format msgid "Substring at %L has length zero" msgstr "" -#: fortran/resolve.cc:18980 +#: fortran/resolve.cc:19098 #, gcc-internal-format msgid "Self reference in character length expression for %qs at %L" msgstr "" -#: fortran/resolve.cc:19047 +#: fortran/resolve.cc:19165 #, gcc-internal-format msgid "PUBLIC function %qs at %L of PRIVATE type %qs" msgstr "" -#: fortran/resolve.cc:19060 +#: fortran/resolve.cc:19178 #, gcc-internal-format msgid "ENTRY %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.cc:19082 +#: fortran/resolve.cc:19200 #, gcc-internal-format msgid "User operator procedure %qs at %L must be a FUNCTION" msgstr "" -#: fortran/resolve.cc:19092 +#: fortran/resolve.cc:19210 #, gcc-internal-format msgid "User operator procedure %qs at %L cannot be assumed character length" msgstr "" -#: fortran/resolve.cc:19100 +#: fortran/resolve.cc:19218 #, gcc-internal-format msgid "User operator procedure %qs at %L must have at least one argument" msgstr "" -#: fortran/resolve.cc:19114 +#: fortran/resolve.cc:19232 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.cc:19132 +#: fortran/resolve.cc:19250 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.cc:19139 +#: fortran/resolve.cc:19257 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L must have, at most, two arguments" msgstr "" -#: fortran/resolve.cc:19221 +#: fortran/resolve.cc:19339 #, gcc-internal-format msgid "Contained procedure %qs at %L of a PURE procedure must also be PURE" msgstr "" @@ -88804,190 +89035,190 @@ msgstr "" msgid "in gfc_simplify_exp(): Bad type" msgstr "" -#: fortran/simplify.cc:3267 +#: fortran/simplify.cc:3269 #, gcc-internal-format msgid "gfc_simplify_floor(): Bad kind" msgstr "" -#: fortran/simplify.cc:3384 +#: fortran/simplify.cc:3386 #, gcc-internal-format, gfc-internal-format msgid "Argument of IACHAR at %L must be of length one" msgstr "" -#: fortran/simplify.cc:3392 +#: fortran/simplify.cc:3394 #, gcc-internal-format, gfc-internal-format msgid "Argument of IACHAR function at %L outside of range 0..127" msgstr "" -#: fortran/simplify.cc:3553 +#: fortran/simplify.cc:3555 #, gcc-internal-format, gfc-internal-format msgid "Sum of second and third arguments of IBITS exceeds bit size at %L" msgstr "" -#: fortran/simplify.cc:3579 +#: fortran/simplify.cc:3581 #, gcc-internal-format msgid "IBITS: Bad bit" msgstr "" -#: fortran/simplify.cc:3646 +#: fortran/simplify.cc:3648 #, gcc-internal-format, gfc-internal-format msgid "Argument of ICHAR at %L must be of length one" msgstr "" #. Left shift, as in SHIFTL. -#: fortran/simplify.cc:4007 fortran/simplify.cc:4015 +#: fortran/simplify.cc:4009 fortran/simplify.cc:4017 #, gcc-internal-format, gfc-internal-format msgid "Second argument of %s is negative at %L" msgstr "" -#: fortran/simplify.cc:4027 +#: fortran/simplify.cc:4029 #, gcc-internal-format, gfc-internal-format msgid "Magnitude of second argument of %s exceeds bit size at %L" msgstr "" -#: fortran/simplify.cc:4159 +#: fortran/simplify.cc:4161 #, gcc-internal-format, gfc-internal-format msgid "" "Magnitude of second argument of ISHFTC exceeds BIT_SIZE of first argument at " "%C" msgstr "" -#: fortran/simplify.cc:4162 +#: fortran/simplify.cc:4164 #, gcc-internal-format, gfc-internal-format msgid "Absolute value of SHIFT shall be less than or equal to SIZE at %C" msgstr "" -#: fortran/simplify.cc:4509 fortran/simplify.cc:4642 +#: fortran/simplify.cc:4511 fortran/simplify.cc:4644 #, gcc-internal-format, gfc-internal-format msgid "DIM argument at %L is out of bounds" msgstr "" -#: fortran/simplify.cc:4975 +#: fortran/simplify.cc:4977 #, gcc-internal-format, gfc-internal-format msgid "Argument of LOG at %L cannot be less than or equal to zero" msgstr "" -#: fortran/simplify.cc:4988 +#: fortran/simplify.cc:4990 #, gcc-internal-format, gfc-internal-format msgid "Complex argument of LOG at %L cannot be zero" msgstr "" -#: fortran/simplify.cc:4999 +#: fortran/simplify.cc:5001 #, gcc-internal-format msgid "gfc_simplify_log: bad type" msgstr "" -#: fortran/simplify.cc:5016 +#: fortran/simplify.cc:5018 #, gcc-internal-format, gfc-internal-format msgid "Argument of LOG10 at %L cannot be less than or equal to zero" msgstr "" -#: fortran/simplify.cc:5448 +#: fortran/simplify.cc:5450 #, gcc-internal-format msgid "simplify_min_max(): Bad type in arglist" msgstr "" -#: fortran/simplify.cc:6371 fortran/simplify.cc:6379 +#: fortran/simplify.cc:6373 fortran/simplify.cc:6381 #, gcc-internal-format msgid "Argument %qs of MOD at %L shall not be zero" msgstr "" -#: fortran/simplify.cc:6385 +#: fortran/simplify.cc:6387 #, gcc-internal-format msgid "gfc_simplify_mod(): Bad arguments" msgstr "" -#: fortran/simplify.cc:6424 fortran/simplify.cc:6432 +#: fortran/simplify.cc:6426 fortran/simplify.cc:6434 #, gcc-internal-format msgid "Argument %qs of MODULO at %L shall not be zero" msgstr "" -#: fortran/simplify.cc:6438 +#: fortran/simplify.cc:6440 #, gcc-internal-format msgid "gfc_simplify_modulo(): Bad arguments" msgstr "" -#: fortran/simplify.cc:6510 +#: fortran/simplify.cc:6512 #, gcc-internal-format, gfc-internal-format msgid "Result of NEAREST is NaN at %L" msgstr "" -#: fortran/simplify.cc:7304 +#: fortran/simplify.cc:7299 #, gcc-internal-format, gfc-internal-format msgid "Argument NCOPIES of REPEAT intrinsic is negative at %L" msgstr "" -#: fortran/simplify.cc:7360 +#: fortran/simplify.cc:7355 #, gcc-internal-format, gfc-internal-format msgid "Argument NCOPIES of REPEAT intrinsic is too large at %L" msgstr "" -#: fortran/simplify.cc:7397 +#: fortran/simplify.cc:7392 #, gcc-internal-format, gfc-internal-format msgid "" "Evaluation of string longer than 2**28 at %L deferred to runtime, expect bugs" msgstr "" -#: fortran/simplify.cc:7455 +#: fortran/simplify.cc:7450 #, gcc-internal-format, gfc-internal-format msgid "" "The SHAPE array for the RESHAPE intrinsic at %L has a negative value %d for " "dimension %d" msgstr "" -#: fortran/simplify.cc:7480 +#: fortran/simplify.cc:7475 #, gcc-internal-format, gfc-internal-format msgid "Shapes of ORDER at %L and SHAPE at %L are different" msgstr "" -#: fortran/simplify.cc:7494 +#: fortran/simplify.cc:7489 #, gcc-internal-format, gfc-internal-format msgid "Sizes of ORDER at %L and SHAPE at %L are different" msgstr "" -#: fortran/simplify.cc:7509 +#: fortran/simplify.cc:7504 #, gcc-internal-format, gfc-internal-format msgid "" "Element with a value of %d in ORDER at %L must be in the range [1, ..., %d] " "for the RESHAPE intrinsic near %L" msgstr "" -#: fortran/simplify.cc:7520 +#: fortran/simplify.cc:7515 #, gcc-internal-format, gfc-internal-format msgid "ORDER at %L is not a permutation of the size of SHAPE at %L" msgstr "" -#: fortran/simplify.cc:7582 +#: fortran/simplify.cc:7577 #, gcc-internal-format, gfc-internal-format msgid "Reshaped array too large at %C" msgstr "" -#: fortran/simplify.cc:7703 +#: fortran/simplify.cc:7698 #, gcc-internal-format, gfc-internal-format msgid "Result of SCALE overflows its kind at %L" msgstr "" -#: fortran/simplify.cc:8223 +#: fortran/simplify.cc:8218 #, gcc-internal-format, gfc-internal-format msgid "DIM argument (%d) to intrinsic SIZE at %L out of range (1:%d)" msgstr "" -#: fortran/simplify.cc:8352 +#: fortran/simplify.cc:8347 #, gcc-internal-format msgid "Bad type in gfc_simplify_sign" msgstr "" -#: fortran/simplify.cc:8381 +#: fortran/simplify.cc:8376 #, gcc-internal-format msgid "in gfc_simplify_sin(): Bad type" msgstr "" -#: fortran/simplify.cc:8519 fortran/simplify.cc:8802 +#: fortran/simplify.cc:8514 fortran/simplify.cc:8797 #, gcc-internal-format msgid "Failure getting length of a constant array." msgstr "" -#: fortran/simplify.cc:8529 +#: fortran/simplify.cc:8524 #, gcc-internal-format msgid "" "The number of elements (%d) in the array constructor at %L requires an " @@ -88995,36 +89226,36 @@ msgid "" "option." msgstr "" -#: fortran/simplify.cc:8596 +#: fortran/simplify.cc:8591 #, gcc-internal-format, gfc-internal-format msgid "Simplification of SPREAD at %C not yet implemented" msgstr "" -#: fortran/simplify.cc:8620 +#: fortran/simplify.cc:8615 #, gcc-internal-format, gfc-internal-format msgid "Argument of SQRT at %L has a negative value" msgstr "" -#: fortran/simplify.cc:8636 +#: fortran/simplify.cc:8631 #, gcc-internal-format, gfc-internal-format msgid "invalid argument of SQRT at %L" msgstr "" -#: fortran/simplify.cc:8983 +#: fortran/simplify.cc:8979 #, gcc-internal-format, gfc-internal-format msgid "" "Out of bounds in IMAGE_INDEX at %L for dimension %d, SUB has %ld and COARRAY " "lower bound is %ld)" msgstr "" -#: fortran/simplify.cc:9006 +#: fortran/simplify.cc:9002 #, gcc-internal-format, gfc-internal-format msgid "" "Out of bounds in IMAGE_INDEX at %L for dimension %d, SUB has %ld and COARRAY " "upper bound is %ld)" msgstr "" -#: fortran/simplify.cc:9549 +#: fortran/simplify.cc:9544 #, gcc-internal-format msgid "" "Character %qs in string at %L cannot be converted into character kind %d" @@ -89486,7 +89717,7 @@ msgstr "" msgid "Overlapping unequal initializers in EQUIVALENCE at %C" msgstr "" -#: fortran/trans-array.cc:2466 fortran/trans-expr.cc:10457 +#: fortran/trans-array.cc:2466 fortran/trans-expr.cc:10442 #, gcc-internal-format, gfc-internal-format msgid "" "The structure constructor at %L has been finalized. This feature was removed " @@ -89634,89 +89865,89 @@ msgstr "" msgid "intrinsic variable which isn't a procedure" msgstr "" -#: fortran/trans-decl.cc:4705 fortran/trans-decl.cc:8144 +#: fortran/trans-decl.cc:4699 fortran/trans-decl.cc:8139 #, gcc-internal-format msgid "Return value of function %qs at %L not set" msgstr "" -#: fortran/trans-decl.cc:5237 +#: fortran/trans-decl.cc:5231 #, gcc-internal-format msgid "Deferred type parameter not yet supported" msgstr "" -#: fortran/trans-decl.cc:5549 +#: fortran/trans-decl.cc:5543 #, gcc-internal-format msgid "backend decl for module variable %qs already exists" msgstr "" -#: fortran/trans-decl.cc:5562 +#: fortran/trans-decl.cc:5556 #, gcc-internal-format msgid "Unused PRIVATE module variable %qs declared at %L" msgstr "" -#: fortran/trans-decl.cc:6248 +#: fortran/trans-decl.cc:6242 #, gcc-internal-format msgid "Symbol %qs at %L has the WEAK attribute but is a dummy argument" msgstr "" -#: fortran/trans-decl.cc:6251 +#: fortran/trans-decl.cc:6245 #, gcc-internal-format msgid "Symbol %qs at %L has the WEAK attribute but is a local variable" msgstr "" -#: fortran/trans-decl.cc:6266 +#: fortran/trans-decl.cc:6260 #, gcc-internal-format msgid "Dummy argument %qs at %L was declared INTENT(OUT) but was not set" msgstr "" -#: fortran/trans-decl.cc:6272 +#: fortran/trans-decl.cc:6266 #, gcc-internal-format msgid "" "Derived-type dummy argument %qs at %L was declared INTENT(OUT) but was not " "set and does not have a default initializer" msgstr "" -#: fortran/trans-decl.cc:6283 fortran/trans-decl.cc:6434 +#: fortran/trans-decl.cc:6277 fortran/trans-decl.cc:6428 #, gcc-internal-format msgid "Unused dummy argument %qs at %L" msgstr "" -#: fortran/trans-decl.cc:6299 +#: fortran/trans-decl.cc:6293 #, gcc-internal-format msgid "Unused module variable %qs which has been explicitly imported at %L" msgstr "" -#: fortran/trans-decl.cc:6318 +#: fortran/trans-decl.cc:6312 #, gcc-internal-format msgid "Unused variable %qs declared at %L" msgstr "" -#: fortran/trans-decl.cc:6367 +#: fortran/trans-decl.cc:6361 #, gcc-internal-format msgid "Unused parameter %qs declared at %L" msgstr "" -#: fortran/trans-decl.cc:6371 +#: fortran/trans-decl.cc:6365 #, gcc-internal-format msgid "Unused parameter %qs which has been explicitly imported at %L" msgstr "" -#: fortran/trans-decl.cc:6401 +#: fortran/trans-decl.cc:6395 #, gcc-internal-format msgid "Return value %qs of function %qs declared at %L not set" msgstr "" -#: fortran/trans-decl.cc:6999 +#: fortran/trans-decl.cc:6994 #, gcc-internal-format, gfc-internal-format msgid "Sorry, !$ACC DECLARE at %L is not allowed in BLOCK construct" msgstr "" -#: fortran/trans-decl.cc:7198 fortran/trans-expr.cc:6117 +#: fortran/trans-decl.cc:7193 fortran/trans-expr.cc:6115 #, gcc-internal-format msgid "Unsigned not yet implemented" msgstr "" -#: fortran/trans-decl.cc:8316 +#: fortran/trans-decl.cc:8311 #, gcc-internal-format msgid "" "Symbol %qs at %L is declared in a BLOCK DATA program unit but is not in a " @@ -89747,17 +89978,17 @@ msgid "" "supported" msgstr "" -#: fortran/trans-expr.cc:4279 +#: fortran/trans-expr.cc:4277 #, gcc-internal-format msgid "Unknown intrinsic op" msgstr "" -#: fortran/trans-expr.cc:5865 +#: fortran/trans-expr.cc:5863 #, gcc-internal-format, gfc-internal-format msgid "Unknown argument list function at %L" msgstr "" -#: fortran/trans-expr.cc:11055 +#: fortran/trans-expr.cc:11040 #, gcc-internal-format, gfc-internal-format msgid "" "If bounds remapping is specified at %L, the pointer target shall not be NULL" @@ -89768,18 +89999,18 @@ msgstr "" msgid "Intrinsic function %qs (%d) not recognized" msgstr "" -#: fortran/trans-intrinsic.cc:1897 fortran/trans-intrinsic.cc:2446 -#: fortran/trans-intrinsic.cc:2649 +#: fortran/trans-intrinsic.cc:1899 fortran/trans-intrinsic.cc:2447 +#: fortran/trans-intrinsic.cc:2650 #, gcc-internal-format msgid "%<dim%> argument of %s intrinsic at %L is not a valid dimension index" msgstr "" -#: fortran/trans-intrinsic.cc:12702 fortran/trans-stmt.cc:1107 +#: fortran/trans-intrinsic.cc:12709 fortran/trans-stmt.cc:1164 #, gcc-internal-format, gfc-internal-format msgid "Sorry, the event component of derived type at %L is not yet supported" msgstr "" -#: fortran/trans-intrinsic.cc:12709 +#: fortran/trans-intrinsic.cc:12716 #, gcc-internal-format, gfc-internal-format msgid "The event variable at %L shall not be coindexed" msgstr "" @@ -89794,54 +90025,61 @@ msgstr "" msgid "Bad IO basetype (%d)" msgstr "" -#: fortran/trans-openmp.cc:881 fortran/trans-openmp.cc:1398 +#: fortran/trans-openmp.cc:932 fortran/trans-openmp.cc:1449 #, gcc-internal-format msgid "Sorry, polymorphic arrays not yet supported for firstprivate" msgstr "" -#: fortran/trans-openmp.cc:1552 +#: fortran/trans-openmp.cc:1604 #, gcc-internal-format msgid "implicit mapping of assumed size array %qD" msgstr "" -#: fortran/trans-openmp.cc:1558 +#: fortran/trans-openmp.cc:2149 #, gcc-internal-format -msgid "Implicit mapping of polymorphic variable %qD is unspecified behavior" +msgid "" +"Mapping of unlimited polymorphic list item %qD is unspecified behavior and " +"unsupported" msgstr "" -#: fortran/trans-openmp.cc:3376 +#: fortran/trans-openmp.cc:2154 +#, gcc-internal-format +msgid "Mapping of polymorphic list item %qD is unspecified behavior" +msgstr "" + +#: fortran/trans-openmp.cc:4176 #, gcc-internal-format msgid "optional class parameter" msgstr "" -#: fortran/trans-openmp.cc:3793 +#: fortran/trans-openmp.cc:4640 #, gcc-internal-format msgid "unhandled expression type" msgstr "" -#: fortran/trans-openmp.cc:4073 +#: fortran/trans-openmp.cc:4949 #, gcc-internal-format msgid "unhandled expression" msgstr "" -#: fortran/trans-openmp.cc:4195 +#: fortran/trans-openmp.cc:5072 #, gcc-internal-format msgid "%<uses_allocators%> clause with traits and memory spaces" msgstr "" -#: fortran/trans-openmp.cc:5173 +#: fortran/trans-openmp.cc:6050 #, gcc-internal-format msgid "%<!$OMP %s%> at %L requires %<-fopenmp-allocators%>" msgstr "" -#: fortran/trans-openmp.cc:5176 +#: fortran/trans-openmp.cc:6053 #, gcc-internal-format msgid "" "All files that might deallocate such a variable must be compiled with %<-" "fopenmp-allocators%>" msgstr "" -#: fortran/trans-openmp.cc:5179 +#: fortran/trans-openmp.cc:6056 #, gcc-internal-format msgid "" "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, " @@ -89849,74 +90087,74 @@ msgid "" "components allocated with an OpenMP allocator" msgstr "" -#: fortran/trans-openmp.cc:5756 fortran/trans-openmp.cc:5776 +#: fortran/trans-openmp.cc:6633 fortran/trans-openmp.cc:6653 #, gcc-internal-format msgid "non-rectangular loop nest with non-constant step for %qs" msgstr "" -#: fortran/trans-openmp.cc:5778 +#: fortran/trans-openmp.cc:6655 #, gcc-internal-format msgid "Used here" msgstr "" -#: fortran/trans-openmp.cc:8344 +#: fortran/trans-openmp.cc:9221 #, gcc-internal-format msgid "gfc_trans_omp_workshare(): Bad statement code" msgstr "" -#: fortran/trans-openmp.cc:8754 +#: fortran/trans-openmp.cc:9631 #, gcc-internal-format msgid "The base name for %<declare variant%> must be specified at %L" msgstr "" -#: fortran/trans-openmp.cc:8765 +#: fortran/trans-openmp.cc:9642 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L does not match the name of the current procedure" msgstr "" -#: fortran/trans-openmp.cc:8768 +#: fortran/trans-openmp.cc:9645 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L must not be an entry name" msgstr "" -#: fortran/trans-openmp.cc:8771 +#: fortran/trans-openmp.cc:9648 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L must not be a generic name" msgstr "" -#: fortran/trans-openmp.cc:8774 +#: fortran/trans-openmp.cc:9651 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L must not be a procedure pointer" msgstr "" -#: fortran/trans-openmp.cc:8777 +#: fortran/trans-openmp.cc:9654 #, gcc-internal-format, gfc-internal-format msgid "The base procedure at %L must have an explicit interface" msgstr "" -#: fortran/trans-openmp.cc:8813 +#: fortran/trans-openmp.cc:9690 #, gcc-internal-format msgid "Cannot find symbol %qs" msgstr "" -#: fortran/trans-openmp.cc:8825 +#: fortran/trans-openmp.cc:9702 #, gcc-internal-format msgid "variant %qs at %L is not a function or subroutine" msgstr "" -#: fortran/trans-openmp.cc:8867 +#: fortran/trans-openmp.cc:9744 #, gcc-internal-format msgid "variant %qs and base %qs at %L have incompatible types: %s" msgstr "" -#: fortran/trans-openmp.cc:8873 +#: fortran/trans-openmp.cc:9750 #, gcc-internal-format msgid "" "%<append_args%> clause implies that %qs has %d dummy arguments of integer " "type with %<omp_interop_kind%> kind" msgstr "" -#: fortran/trans-openmp.cc:8899 +#: fortran/trans-openmp.cc:9776 #, gcc-internal-format msgid "" "%qs at %L must be a nonpointer, nonallocatable scalar integer dummy argument " @@ -89924,72 +90162,72 @@ msgid "" "at %L" msgstr "" -#: fortran/trans-openmp.cc:8909 +#: fortran/trans-openmp.cc:9786 #, gcc-internal-format msgid "" "%qs at %L with OPTIONAL attribute not support when utilized with the " "%<append_args%> clause at %L" msgstr "" -#: fortran/trans-openmp.cc:8919 +#: fortran/trans-openmp.cc:9796 #, gcc-internal-format msgid "" "%qs at %L has %d but requires %d %<omp_interop_kind%> kind dummy arguments " "as it is utilized with the %<append_args%> clause at %L" msgstr "" -#: fortran/trans-openmp.cc:8934 +#: fortran/trans-openmp.cc:9811 #, gcc-internal-format msgid "" "the %qs clause can only be specified if the %<dispatch%> selector of the " "construct selector set appears in the %<match%> clause at %L" msgstr "" -#: fortran/trans-openmp.cc:9035 fortran/trans-openmp.cc:9074 +#: fortran/trans-openmp.cc:9912 fortran/trans-openmp.cc:9951 #, gcc-internal-format, gfc-internal-format msgid "Expected positive argument index at %L" msgstr "" -#: fortran/trans-openmp.cc:9046 +#: fortran/trans-openmp.cc:9923 #, gcc-internal-format, gfc-internal-format msgid "Argument index at %L exceeds number of arguments %d" msgstr "" -#: fortran/trans-openmp.cc:9084 +#: fortran/trans-openmp.cc:9961 #, gcc-internal-format, gfc-internal-format msgid "Upper argument index smaller than lower one at %L" msgstr "" -#: fortran/trans-openmp.cc:9110 +#: fortran/trans-openmp.cc:9987 #, gcc-internal-format msgid "List item %qs at %L, declared at %L, is not a dummy argument" msgstr "" -#: fortran/trans-openmp.cc:9124 +#: fortran/trans-openmp.cc:10001 #, gcc-internal-format msgid "" "Argument %qs at %L to list item in %<need_device_ptr%> at %L must be a " "scalar of TYPE(C_PTR)" msgstr "" -#: fortran/trans-openmp.cc:9131 +#: fortran/trans-openmp.cc:10008 #, gcc-internal-format msgid "Consider using %<need_device_addr%> instead" msgstr "" -#: fortran/trans-openmp.cc:9138 +#: fortran/trans-openmp.cc:10015 #, gcc-internal-format msgid "" "Argument %qs at %L to list item in %<need_device_addr%> at %L must not have " "the VALUE attribute" msgstr "" -#: fortran/trans-openmp.cc:9147 +#: fortran/trans-openmp.cc:10024 #, gcc-internal-format msgid "%qs at %L is specified more than once" msgstr "" -#: fortran/trans-openmp.cc:9164 +#: fortran/trans-openmp.cc:10041 #, gcc-internal-format msgid "%<need_device_addr%> not yet supported" msgstr "" @@ -89999,21 +90237,35 @@ msgstr "" msgid "An alternate return at %L without a * dummy argument" msgstr "" -#: fortran/trans-stmt.cc:908 +#: fortran/trans-stmt.cc:965 #, gcc-internal-format, gfc-internal-format msgid "Sorry, the lock component of derived type at %L is not yet supported" msgstr "" -#: fortran/trans-stmt.cc:1370 +#: fortran/trans-stmt.cc:1426 #, gcc-internal-format, gfc-internal-format msgid "Sorry, only support for integer kind %d implemented for image-set at %L" msgstr "" -#: fortran/trans-stmt.cc:3807 +#: fortran/trans-stmt.cc:3901 #, gcc-internal-format msgid "gfc_trans_select(): Bad type for case expr." msgstr "" +#: fortran/trans-stmt.cc:5264 +#, gcc-internal-format +msgid "" +"Sorry, %s specifier at %L for assumed-size array %qs is not yet supported" +msgstr "" + +#. Cf. PR fortran/ +#: fortran/trans-stmt.cc:5301 +#, gcc-internal-format +msgid "" +"Sorry, LOCAL specifier at %L for %qs of derived type with default " +"initializer is not yet supported" +msgstr "" + #: fortran/trans-types.cc:619 #, gcc-internal-format msgid "" @@ -90086,7 +90338,7 @@ msgstr "" msgid "gfc_validate_kind(): Got bad kind" msgstr "" -#: fortran/trans.cc:2663 +#: fortran/trans.cc:2671 #, gcc-internal-format msgid "gfc_trans_code(): Bad statement code" msgstr "" @@ -90317,7 +90569,7 @@ msgstr "" msgid "two or more sections for %s" msgstr "" -#: lto/lto-partition.cc:1122 +#: lto/lto-partition.cc:1123 #, gcc-internal-format msgid "min partition size cannot be greater than max partition size" msgstr "" @@ -91736,7 +91988,7 @@ msgid "unused name %qE" msgstr "" #: rust/resolve/rust-ast-resolve-expr.cc:134 -#: rust/resolve/rust-late-name-resolver-2.0.cc:233 +#: rust/resolve/rust-late-name-resolver-2.0.cc:268 #, gcc-internal-format, gfc-internal-format msgid "are you trying to break %s? how dare you?" msgstr "" diff --git a/gcc/po/sv.po b/gcc/po/sv.po index 10c543e..b7fd55b 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -29,10 +29,10 @@ # thunk snutt msgid "" msgstr "" -"Project-Id-Version: gcc 15.1-b20250316\n" +"Project-Id-Version: gcc 15.1-b20250406\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2025-04-04 20:42+0000\n" -"PO-Revision-Date: 2025-04-06 09:20+0200\n" +"PO-Revision-Date: 2025-04-20 20:30+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -1328,13 +1328,12 @@ msgstr "Använd WIP-lÃ¥nekontrolleraren." #: rust/lang.opt:217 #, no-c-format msgid "-frust-edition=[unwind|abort] Panic strategy to compile crate with" -msgstr "" +msgstr "-frust-edition=[unwind|abort] Panikstrategi att kompilera lÃ¥dan med" #: rust/lang.opt:230 -#, fuzzy, no-c-format -#| msgid "Select the eBPF ISA version to target in code generation." +#, no-c-format msgid "Enable the overflow checks in code generation" -msgstr "Välj eBPF ISA-versionen att ha som mÃ¥l i kodgenereringen." +msgstr "Aktivera spillkontroller i kodgenereringen" #: c-family/c.opt:71 #, no-c-format @@ -1841,10 +1840,9 @@ msgstr "Varna för aritmetiska konverteringar som bör undvikas pÃ¥ operander dà # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118985 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118979 #: c-family/c.opt:669 -#, fuzzy, no-c-format -#| msgid "Warn about deprecated space between and suffix in a user-defined literal operator." +#, no-c-format msgid "Warn about deprecated space between \"\" and suffix in a user-defined literal operator." -msgstr "Varna för förÃ¥ldrade mellanrum mellan och suffix i en användardefinierad literal operator." +msgstr "Varna för förÃ¥ldrade mellanrum mellan \"\" och suffix i en användardefinierad literal operator." #: c-family/c.opt:673 #, no-c-format @@ -8332,10 +8330,9 @@ msgid "Support USER_MSR built-in functions and code generation." msgstr "Stöd inbyggda USER_MSR-funktioner och -kodgenerering." #: config/i386/i386.opt:1368 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1-512 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1-256 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX10.1-512-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX10.1-256-funktioner och -kodgenerering." #: config/i386/i386.opt:1373 config/i386/i386.opt:1378 #, no-c-format @@ -8343,16 +8340,14 @@ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10 msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX10.1-512-funktioner och -kodgenerering." #: config/i386/i386.opt:1383 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX10.1-512 and AVX10.2-512 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX10.1-512 and AVX10.2 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX10.1-512- och AVX10.2-512-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX10.1-512- och AVX10.2-funktioner och -kodgenerering." #: config/i386/i386.opt:1388 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX10.1-512, AVX10.2-512 and AMX-AVX512 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX10.1-512, AVX10.2 and AMX-AVX512 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX10.1-512-, AVX10.2-512- och AMX-AVX512-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX10.1-512-, AVX10.2- och AMX-AVX512-funktioner och -kodgenerering." #: config/i386/i386.opt:1393 #, no-c-format @@ -8798,7 +8793,7 @@ msgstr "Denna flagga är pÃ¥ som standard för att undvika PR118012." #: config/avr/avr.opt:70 #, no-c-format msgid "Optimization. Allow to use nonzero_bits() in some insn conditions." -msgstr "" +msgstr "Optimering. TillÃ¥t användning av nonzero_bits() i nÃ¥gra instruktionsvillkor." #: config/avr/avr.opt:74 #, no-c-format @@ -9927,10 +9922,9 @@ msgid "Put everything in the regular TOC." msgstr "Placera allting i den vanliga TOC." #: config/rs6000/rs6000.opt:305 -#, fuzzy, no-c-format -#| msgid "invalid arguments for %<-fpatchable-function-entry%>" +#, no-c-format msgid "Emit NOPs before global and after local entry point for -fpatchable-function-entry." -msgstr "ogiltigt argument till %<-fpatchable-function-entry%>" +msgstr "Mata ut NOP:ar före globala och efter lokala ingÃ¥ngspunkter för -fpatchable-function-entry" #: config/rs6000/rs6000.opt:309 #, no-c-format @@ -10427,12 +10421,12 @@ msgstr "Avge kod för ISA-utökningen för räkning." #: config/alpha/alpha.opt:74 #, no-c-format msgid "Emit multi-thread and async-signal safe code for byte and word memory accesses." -msgstr "" +msgstr "Avge multitrÃ¥dat och asynk-signal-säker kod för byte- och ordminnesÃ¥tkomster." #: config/alpha/alpha.opt:78 #, no-c-format msgid "Emit multi-thread and async-signal safe code for partial memory accesses." -msgstr "" +msgstr "Avge multitrÃ¥dat och asynk-signal-säker kod för partiella minnesÃ¥tkomster." #: config/alpha/alpha.opt:82 #, no-c-format @@ -13350,16 +13344,14 @@ msgid "Warn when an optimization pass is disabled." msgstr "Varna när ett optimerarpass är avaktiverat." #: common.opt:617 -#, fuzzy, no-c-format -#| msgid "Treat all warnings as errors." +#, no-c-format msgid "Turn all warnings into errors." -msgstr "Behandla alla varningar som fel." +msgstr "Gör om alla varningar till fel." #: common.opt:621 -#, fuzzy, no-c-format -#| msgid "Treat specified warning as error." +#, no-c-format msgid "Turn the specified warning into an error." -msgstr "Behandla angivna varningar som fel." +msgstr "Gör om de angivna varningarna till ett fel." #: common.opt:625 #, no-c-format @@ -13427,16 +13419,14 @@ msgid "Warn if dereferencing a NULL pointer may lead to erroneous or undefined b msgstr "Varna om dereferering av en NULL-pekare kan leda till felaktigt eller odefinierat beteende." #: common.opt:698 -#, fuzzy, no-c-format -#| msgid "Warn about returning a pointer/reference to a local or temporary variable." +#, no-c-format msgid "Warn about passing a pointer/reference to a local or temporary variable to a musttail call argument." -msgstr "Varna för retur av en pekare/referens till en lokal eller temporär variabel." +msgstr "Varna för att skicka en pekare/referens till en lokal eller temporär variabel till ett argument till ett musttail-anrop." #: common.opt:702 -#, fuzzy, no-c-format -#| msgid "Warn about returning a pointer/reference to a local or temporary variable." +#, no-c-format msgid "Warn about pointer/reference to a local or temporary variable possibly escaping to a musttail call." -msgstr "Varna för retur av en pekare/referens till en lokal eller temporär variabel." +msgstr "Varna för pekare/referens till en lokal eller temporär variabel som möjligen kan rymma till ett musttail-anrop." #: common.opt:706 #, no-c-format @@ -13656,12 +13646,12 @@ msgstr "Varna när ett villkor har för mÃ¥nga termer och villkorstäckningsprof #: common.opt:898 #, no-c-format msgid "-fpath-coverage-limit=<number> Don't instrument functions path count exceeding <number>." -msgstr "" +msgstr "-fpath-coverage-limit=<antal> Instrumentera inte funktionvägsantal som överskrider <antal>." #: common.opt:903 #, no-c-format msgid "Warn if a function exceeds the number of paths (controlled by -fpath-coverage-limit) and path coverage give up instrumenting the function. The limit is approximate and conservative and coverage might give up even if the actual number is slightly below the limit." -msgstr "" +msgstr "Varna om en funktion överskrider antalet vägar (styrt av -fpath-coverage-limit) och vägtäckningen ger upp att instrumentera funktionen. Gränsen är ungefärlig och konservativ och täckningen kan ge upp även om det faktiska antalet är nÃ¥got under gränsen." #: common.opt:910 #, no-c-format @@ -14854,10 +14844,9 @@ msgid "Optimize sibling and tail recursive calls." msgstr "Optimera syskon- och svansrekursiva anrop." #: common.opt:2479 -#, fuzzy, no-c-format -#| msgid "Insert arc-based program profiling code." +#, no-c-format msgid "Insert path profiling code." -msgstr "Lägg in bÃ¥gbaserad programprofileringskod." +msgstr "Lägg vägprofileringskod." #: common.opt:2483 #, no-c-format @@ -16045,10 +16034,9 @@ msgid "Enable function profiling." msgstr "Aktivera funktionsprofilering." #: common.opt:3808 -#, fuzzy, no-c-format -#| msgid "Like -pedantic but issue them as errors." +#, no-c-format msgid "Like -pedantic but issue errors instead of warnings." -msgstr "Som -pedantic men ange dem som fel." +msgstr "Som -pedantic men ange fel istället för varningar." #: common.opt:3848 #, no-c-format @@ -18465,10 +18453,9 @@ msgstr "" " villkor/beslut (maskerat MC/DC) i utdata\n" #: gcov.cc:1104 -#, fuzzy, c-format -#| msgid " -p, --preserve-paths Preserve all pathname components\n" +#, c-format msgid " -e, --prime-paths Show prime path coverage summary\n" -msgstr " -p, --preserve-paths Bevara alla sökvägskomponenter\n" +msgstr " -e, --prime-paths Visa sammanfattning av primevägstäckning\n" #: gcov.cc:1105 #, c-format @@ -18478,6 +18465,10 @@ msgid "" " TYPE is 'covered', 'uncovered', or 'both'\n" " and defaults to 'uncovered'\n" msgstr "" +" --prime-paths-lines[=TYP] Inkludera vägar i utmatningens\n" +" radspÃ¥rningsläge — pÃ¥verkar inte json\n" +" TYP är â€coveredâ€, â€uncovered†eller â€bothâ€\n" +" och standardvärdet är â€uncoveredâ€\n" #: gcov.cc:1109 #, c-format @@ -18487,6 +18478,10 @@ msgid "" " TYPE is 'covered', 'uncovered', or 'both'\n" " and defaults to 'uncovered'\n" msgstr "" +" --prime-paths-source[=TYP] Inkludera vägar i utmatningens\n" +" källspÃ¥rningsläge — pÃ¥verkar inte json\n" +" TYP är â€coveredâ€, â€uncovered†eller â€bothâ€\n" +" och standardvärdet är â€uncoveredâ€\n" #: gcov.cc:1113 #, c-format @@ -18649,12 +18644,12 @@ msgstr "JSON-formatversion: %s\n" #: gcov.cc:1237 #, c-format msgid "invalid argument '%s' for '--prime-paths-lines'. Valid arguments are: 'covered', 'uncovered', 'both'\n" -msgstr "" +msgstr "felaktigt argument â€%s†till â€--prime-paths-linesâ€. Giltiga argument är: â€coveredâ€, â€uncoveredâ€, â€bothâ€\n" #: gcov.cc:1258 #, c-format msgid "invalid argument '%s' for '--prime-paths-source'. Valid arguments are: 'covered', 'uncovered', 'both'\n" -msgstr "" +msgstr "felaktigt argument â€%s†till â€--prime-paths-sourceâ€. Giltiga argument är: â€coveredâ€, â€uncoveredâ€, â€bothâ€\n" #: gcov.cc:1726 #, c-format @@ -18837,16 +18832,14 @@ msgid "No conditions\n" msgstr "Inga villkor\n" #: gcov.cc:3101 gcov.cc:3155 -#, fuzzy, c-format -#| msgid "Condition outcomes covered:%s of %d\n" +#, c-format msgid "Prime paths covered:%s of %d\n" -msgstr "Täckta villkorsresultat:%s av %d\n" +msgstr "Täckta primärvägar:%s av %d\n" #: gcov.cc:3105 gcov.cc:3159 -#, fuzzy, c-format -#| msgid "Display this information." +#, c-format msgid "No path information\n" -msgstr "Visa den här informationen." +msgstr "Ingen väginformation\n" #: gcov.cc:3379 #, c-format @@ -18901,12 +18894,12 @@ msgstr "ovillkorligt hopp %2d aldrig utfört\n" #: gcov.cc:3729 #, c-format msgid "path coverage omitted\n" -msgstr "" +msgstr "vägtäckning utesluten\n" #: gcov.cc:3731 #, c-format msgid "paths covered %u of %zu\n" -msgstr "" +msgstr "täckte %u vägar av %zu\n" #: gcov.cc:3806 #, c-format @@ -19296,10 +19289,8 @@ msgid "call may throw exception that does not propagate" msgstr "anropet kan kasta ett undantag som inte propagerar" #: tree-tailcall.cc:725 -#, fuzzy -#| msgid "call may throw exception that does not propagate" msgid "call may throw exception caught locally or perform cleanups" -msgstr "anropet kan kasta ett undantag som inte propagerar" +msgstr "anropet kan kasta ett undantag som fÃ¥ngas lokalt eller utför uppstädningar" #: tree-tailcall.cc:759 msgid "return value used after call" @@ -19318,10 +19309,8 @@ msgid "return value changed after call" msgstr "returvärdet ändrat efter anropet" #: tree-tailcall.cc:1012 -#, fuzzy -#| msgid "inside another call" msgid "internal call" -msgstr "inuti ett annat anrop" +msgstr "internt anrop" #: tree-tailcall.cc:1021 tree-tailcall.cc:1061 msgid "call and return value are different" @@ -19337,7 +19326,7 @@ msgstr "svansrekursion med pekare kan endast använda additioner" #: tree-tailcall.cc:1563 msgid "tail recursion with accumulation mixed with musttail non-recursive call" -msgstr "" +msgstr "svansrekursion med ackumulering blandad med ickerekursivt musttail-anrop" #: c-family/c-format.cc:434 msgid "format" @@ -21726,10 +21715,8 @@ msgid "elemental binary operation" msgstr "elementär binär operation" #: fortran/check.cc:70 -#, fuzzy -#| msgid " [see %<-fno-allow-invalid-boz%>]" msgid " [see %<-fallow-invalid-boz%>]" -msgstr " [se %<-fno-allow-invalid-boz%>]" +msgstr " [se %<-fallow-invalid-boz%>]" #: fortran/check.cc:482 msgid "BOZ constant truncated at %L" @@ -23218,10 +23205,9 @@ msgid "unknown rust compile-until %qs" msgstr "okänd rust compile-until %qs" #: rust/lang.opt:220 -#, fuzzy, gcc-internal-format -#| msgid "unknown attribute %qs" +#, gcc-internal-format msgid "unknown panic strategy %qs" -msgstr "okänt attribut %qs" +msgstr "okänd panikstrategi %qs" #: c-family/c.opt:43 c-family/c.opt:46 c-family/c.opt:191 #, gcc-internal-format @@ -23389,12 +23375,12 @@ msgstr "okänd lam-typ %qs" #: config/i386/i386.opt:1359 #, gcc-internal-format msgid "%<-mevex512%> will be deprecated in GCC 16 due to all machines 512 bit vector size supported" -msgstr "" +msgstr "%<-mevex512%> bör undvikas frÃ¥n GCC 16 pÃ¥ grund av att alla maskiners 512-bitarsvektorstorlekar stödjs" #: config/i386/i386.opt:1367 config/i386/i386.opt:1372 #, gcc-internal-format msgid "%<-mavx10.1%> is aliased to 512 bit since GCC14.3 and GCC15.1 while %<-mavx10.1-256%> and %<-mavx10.1-512%> will be deprecated in GCC 16 due to all machines 512 bit vector size supported" -msgstr "" +msgstr "%<-mavx10.1%> är ett alias för 512-bitar sedan GCC14.3 och GCC15.1 medan %<-mavx10.1-256%> och %<-mavx10.1-512%> bör undvikas i GCC 16 pÃ¥ grund av att alla maskiners 512-bitarsvektorstorlekar stödjs" #: config/avr/avr.opt:34 #, gcc-internal-format @@ -26496,7 +26482,7 @@ msgstr "%qD har fler än %u block, det begärda maximumet för %<-fharden-contro #: gimple-low.cc:110 #, gcc-internal-format msgid "reference to label %qD defined inside of %<assume%> attribute expression from outside of the attribute" -msgstr "" +msgstr "en referens till etiketten %qD definierad inuti attribututtrycket %<assume%> frÃ¥n utsidan av attributet" #: gimple-low.cc:112 cp/name-lookup.cc:9306 #, gcc-internal-format @@ -27984,8 +27970,7 @@ msgid "statement will never be executed" msgstr "satsen kommer aldrig utföras" #: gimplify.cc:2398 -#, fuzzy, gcc-internal-format -#| msgid "%qs cannot be initialized with%<-ftrivial-auto-var_init%>" +#, gcc-internal-format msgid "%qs cannot be initialized with %<-ftrivial-auto-var_init%>" msgstr "%qs fÃ¥r inte initieras med %<-ftrivial-auto-var_init%>" @@ -30530,7 +30515,7 @@ msgstr "pass %qs fanns inte men refereras av nytt pass %qs" #: path-coverage.cc:516 #, gcc-internal-format msgid "paths exceeding limit, giving up path coverage" -msgstr "" +msgstr "vägar överskrider gränsen, ger upp vägtäckning" #: plugin.cc:214 #, gcc-internal-format @@ -33044,40 +33029,37 @@ msgstr "Anväder snabbare algoritmer för switch-sänkning. Antalet switch-fall #: tree-tailcall.cc:220 #, gcc-internal-format msgid "address of label passed to %<musttail%> call argument" -msgstr "" +msgstr "adressen till en etikett skickad till %<musttail%>-anropsargument" #: tree-tailcall.cc:224 #, gcc-internal-format msgid "address of parameter %qD passed to %<musttail%> call argument" -msgstr "" +msgstr "adressen till parametern %qD skickad till %<musttail%>-anropsargument" #: tree-tailcall.cc:228 #, gcc-internal-format msgid "address of automatic variable %qD passed to %<musttail%> call argument" -msgstr "" +msgstr "adressen till den automatiska variabeln %qD skickad till %<musttail%>-anropsargument" #: tree-tailcall.cc:232 -#, fuzzy, gcc-internal-format -#| msgid "address of local variable %qD returned" +#, gcc-internal-format msgid "address of local variable passed to %<musttail%> call argument" -msgstr "adress till lokal variabel %qD returnerad" +msgstr "adress till en lokal variabel skickat som argument till ett %<musttail%>-anrop" #: tree-tailcall.cc:849 tree-tailcall.cc:879 -#, fuzzy, gcc-internal-format -#| msgid "address of local variable %qD returned" +#, gcc-internal-format msgid "address of local variable can escape to %<musttail%> call" -msgstr "adress till lokal variabel %qD returnerad" +msgstr "adressen till en lokal variabel kan rymma till ett %<musttail%>-anrop" #: tree-tailcall.cc:874 -#, fuzzy, gcc-internal-format -#| msgid "automatic variable %qE cannot be %<threadprivate%>" +#, gcc-internal-format msgid "address of automatic variable %qD can escape to %<musttail%> call" -msgstr "automatisk variabel %qE kan inte vara %<threadprivate%>" +msgstr "adressen till en automatisk variabel %qD kan rymma till ett %<musttail%>-anrop" #: tree-tailcall.cc:905 #, gcc-internal-format msgid "address of parameter %qD can escape to %<musttail%> call" -msgstr "" +msgstr "adressen till parametern %qD kan rymma till ett %<musttail%>-anrop" #: tree-vect-generic.cc:308 tree-vect-generic.cc:437 tree-vect-generic.cc:1939 #, gcc-internal-format @@ -39313,10 +39295,9 @@ msgid "stack clash guard size %<%d%> must be equal to probing interval %<%d%>" msgstr "stackkrockvaktsstorlek %<%d%> mÃ¥ste vara lika med testintervallet %<%d%>" #: config/aarch64/aarch64.cc:18902 -#, fuzzy, gcc-internal-format -#| msgid "support for mode %qs" +#, gcc-internal-format msgid "no support for %qs without %qs" -msgstr "stöd för läge %qs" +msgstr "inget stöd för %qs utan %qs" #: config/aarch64/aarch64.cc:18955 #, gcc-internal-format @@ -40514,10 +40495,9 @@ msgid "supported core architectures:%s" msgstr "stödda kärnarkitekturer:%s" #: config/avr/avr-passes.cc:4907 -#, fuzzy, gcc-internal-format -#| msgid "could not split insn" +#, gcc-internal-format msgid "failed to split insn" -msgstr "gick inte att dela instruktion" +msgstr "det gick inte att dela instruktionen" #. Reached the end of `avr_mcu_types'. This should actually never #. happen as options are provided by device-specs. It could be a @@ -41803,10 +41783,9 @@ msgid "%<target(\"rtd\")%> is ignored in 64bit mode" msgstr "%<target(\"rtd\")%> ignoreras i 64-bitsläge" #: config/i386/i386-options.cc:2693 -#, fuzzy, gcc-internal-format -#| msgid "%<-mno-evex512%> or %<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10.1-512 is available" +#, gcc-internal-format msgid "%<-mno-evex512%> or %<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10.1-512 is available in GCC 15, behavior will change to it will disable that part of AVX512 instructions since GCC 16" -msgstr "%<-mno-evex512%> eller %<-mno-avx512XXX%> kan inte avaktivera AVX10-instruktioner när AVX10.1-512 är tillgängligt" +msgstr "%<-mno-evex512%> eller %<-mno-avx512XXX%> kan inte avaktivera AVX10-instruktioner när AVX10.1-512 är tillgängligt i GCC 15, beteendet kommer ändras till att det kommer att avaktivera den delen av AVX512-instruktionerna frÃ¥n GCC 16." #. We should not emit 512 bit instructions under AVX10.1-256 #. when EVEX512 is enabled w/o any AVX512 features enabled. @@ -41822,16 +41801,14 @@ msgid "Vector size conflicts between AVX10.1 and AVX512, using 512 as max vector msgstr "Vektorstorleken stÃ¥r i konflikt mellan AVX10.1 och AVX512, använder 512 som maximal vektorstorlek" #: config/i386/i386-options.cc:2731 -#, fuzzy, gcc-internal-format -#| msgid "%<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10 is available" +#, gcc-internal-format msgid "%<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10 is available in GCC 15, behavior will change to it will disable that part of AVX512 instructions since GCC 16" -msgstr "%<-mno-avx512XXX%> kan inte avaktivera AVX10-instruktioner när AVX10 är tillgängligt" +msgstr "%<-mno-avx512XXX%> kan inte avaktivera AVX10-instruktioner när AVX10 är tillgängligt i GCC 15, beteendet kommer ändras till att det kommer att avaktivera den delen av AVX512-instruktionerna frÃ¥n GCC 16." #: config/i386/i386-options.cc:2743 -#, fuzzy, gcc-internal-format -#| msgid "%<-mno-avx10.1-256, -mno-avx10.1-512%> cannot disable AVX512 instructions when %<-mavx512XXX%>" +#, gcc-internal-format msgid "%<-mno-avx10.1-256, -mno-avx10.1-512%> cannot disable AVX512 instructions when %<-mavx512XXX%> in GCC 15, behavior will change to it will disable all the instructions in GCC 16" -msgstr "%<-mno-avx10.1-256, -mno-avx10.1-512%> kan inte avaktivera AVX512-instruktioner när %<-mavx512XXX%>" +msgstr "%<-mno-avx10.1-256, -mno-avx10.1-512%> kan inte avaktivera AVX512-instruktioner när %<-mavx512XXX%> i GCC 15, beteendet kommer ändras till att det kommer alla instruktionerna frÃ¥n GCC 16." #: config/i386/i386-options.cc:2790 #, gcc-internal-format @@ -47604,7 +47581,7 @@ msgstr "attributet %<fallthrough%> pÃ¥ toppnivÃ¥" #: c/c-parser.cc:2541 c/c-parser.cc:8296 #, gcc-internal-format msgid "attribute %<musttail%> mixed with other attributes on %<return%> statement" -msgstr "" +msgstr "attributet %<musttail%> blandat med andra attribut pÃ¥ satsen %<return%>" #: c/c-parser.cc:2557 c/c-parser.cc:4483 #, gcc-internal-format @@ -48012,10 +47989,9 @@ msgid "mixing OpenMP directives with attribute and pragma syntax on the same dec msgstr "OpenMP-direktiv blandas med attribut- och pragma-syntax pÃ¥ samma deklaration" #: c/c-parser.cc:7407 cp/parser.cc:15356 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not take any arguments" +#, gcc-internal-format msgid "%qs attribute does not take any arguments" -msgstr "attributet %qE tar inga argument" +msgstr "attributet %qs tar inga argument" #: c/c-parser.cc:7504 #, gcc-internal-format @@ -49193,17 +49169,15 @@ msgid "duplicate %<prefer_type%> modifier" msgstr "dubblerad %<prefer_type%>-modifierare" #: c/c-parser.cc:20841 cp/parser.cc:43138 -#, fuzzy, gcc-internal-format -#| msgid "Expected %<)%> or %<,%> at %C" +#, gcc-internal-format msgid "expected %<prefer_type%>, %<target%>, or %<targetsync%>" -msgstr "%<)%> eller %<,%> förväntades vid %C" +msgstr "%<prefer_type%>, %<target%> eller %<targetsync%> förväntades" #: c/c-parser.cc:20877 c/c-parser.cc:27149 cp/parser.cc:43175 #: cp/parser.cc:50578 -#, fuzzy, gcc-internal-format -#| msgid "Expected %<)%> or %<,%> at %C" +#, gcc-internal-format msgid "missing required %<target%> and/or %<targetsync%> modifier" -msgstr "%<)%> eller %<,%> förväntades vid %C" +msgstr "saknad nödvändig modifierare %<target%> och/eller %<targetsync%>" #: c/c-parser.cc:21118 cp/parser.cc:43470 #, gcc-internal-format @@ -60750,24 +60724,22 @@ msgstr "kan inte representera ytterligare importerade källplatser" #: cp/module.cc:12041 #, gcc-internal-format msgid "mismatching abi tags for %qD with tags %qE" -msgstr "" +msgstr "abi-taggarna stämmer inte för %qD med taggarna %qE" #: cp/module.cc:12045 #, gcc-internal-format msgid "mismatching abi tags for %qD with no tags" -msgstr "" +msgstr "abi-taggarna stämmer inte för %qD med inga taggar" #: cp/module.cc:12048 -#, fuzzy, gcc-internal-format -#| msgid "existing declaration %#qD" +#, gcc-internal-format msgid "existing declaration here with tags %qE" -msgstr "befintlig deklaration %#qD" +msgstr "befintlig deklaration här med taggarna %qE" #: cp/module.cc:12051 -#, fuzzy, gcc-internal-format -#| msgid "exporting declaration %qD with internal linkage" +#, gcc-internal-format msgid "existing declaration here with no tags" -msgstr "en exporterande deklaration %qD med intern länkklass" +msgstr "en befintlig deklaration här utan taggar" #: cp/module.cc:12193 #, gcc-internal-format @@ -61811,16 +61783,14 @@ msgid "%qE is not recognized as a module control-line" msgstr "%qE ser inte ut som en modulstyrrad" #: cp/parser.cc:3904 -#, fuzzy, gcc-internal-format -#| msgid "C++20 %qE only available with %<-fmodules-ts%>" +#, gcc-internal-format msgid "C++20 %qE only available with %<-fmodules%>" -msgstr "C++20 %qE är endast tillgängligt med %<-fmodules-ts%>" +msgstr "C++20 %qE är endast tillgängligt med %<-fmodules%>" #: cp/parser.cc:3907 -#, fuzzy, gcc-internal-format -#| msgid "C++20 %qE only available with %<-fmodules-ts%>, which is not yet enabled with %<-std=c++20%>" +#, gcc-internal-format msgid "C++20 %qE only available with %<-fmodules%>, which is not yet enabled with %<-std=c++20%>" -msgstr "C++20 %qE är endast tillgängligt med %<-fmodules-ts%>, som inte ännu aktiveras med %<-std=c++20%>" +msgstr "C++20 %qE är endast tillgängligt med %<-fmodules%>, som inte ännu aktiveras med %<-std=c++20%>" #: cp/parser.cc:3913 #, gcc-internal-format @@ -63040,10 +63010,9 @@ msgid "keyword %<export%> is deprecated, and is ignored" msgstr "nyckelordet %<export%> bör undvikas, och ignoreras" #: cp/parser.cc:18861 -#, fuzzy, gcc-internal-format -#| msgid "keyword %<export%> is enabled with %<-fmodules-ts%>" +#, gcc-internal-format msgid "keyword %<export%> is enabled with %<-fmodules%>" -msgstr "nyckelordet %<export%> är aktiverat med %<-fmodules-ts%>" +msgstr "nyckelordet %<export%> är aktiverat med %<-fmodules%>" #: cp/parser.cc:18966 #, gcc-internal-format @@ -63442,10 +63411,9 @@ msgid "types may not be defined in alias template declarations" msgstr "typer fÃ¥r inte definieras i aliasmalldeklarationer" #: cp/parser.cc:23293 -#, fuzzy, gcc-internal-format -#| msgid "Expected register or constant integer." +#, gcc-internal-format msgid "expected string-literal or constexpr in parentheses" -msgstr "Register eller konstant heltal förväntades." +msgstr "en strängliteral constexpr i parenteser förväntades" #: cp/parser.cc:23354 #, gcc-internal-format @@ -63660,10 +63628,9 @@ msgid "expected type-specifier" msgstr "typspecificerare förväntades" #: cp/parser.cc:26047 -#, fuzzy, gcc-internal-format -#| msgid "comparison between two arrays is deprecated in C++20" +#, gcc-internal-format msgid "omission of %<,%> before varargs %<...%> is deprecated in C++26" -msgstr "jämförelse mellan tvÃ¥ vektorer bör undvikas enligt C++20" +msgstr "att utelämna %<,%> före varargs %<...%> bör undvikas enligt C++26" #: cp/parser.cc:26254 #, gcc-internal-format @@ -63681,10 +63648,9 @@ msgid "%<this%> specifier in template parameter declaration" msgstr "specificeraren %<this%> i en mallparameterdeklaration" #: cp/parser.cc:26459 -#, fuzzy, gcc-internal-format -#| msgid "%<this%> specifier in template parameter declaration" +#, gcc-internal-format msgid "%<this%> specifier in a requires-expression parameter" -msgstr "specificeraren %<this%> i en mallparameterdeklaration" +msgstr "specificeraren %<this%> i en parameter till ett requires-uttryck" #: cp/parser.cc:26519 #, gcc-internal-format @@ -63812,10 +63778,9 @@ msgid "invalid class name in declaration of %qD" msgstr "ogiltigt klassnamn i deklaration av %qD" #: cp/parser.cc:28249 -#, fuzzy, gcc-internal-format -#| msgid "defining explicit specialization %qD in friend declaration" +#, gcc-internal-format msgid "declaration of partial specialization in unbraced export-declaration" -msgstr "definierar explicit specialisering %qD i vändeklaration" +msgstr "deklaration av en partiell specialisering i exportdeklaration utan klamrar" #: cp/parser.cc:28275 #, gcc-internal-format @@ -63871,10 +63836,9 @@ msgid "in C++03 a class-key must be used when declaring a friend" msgstr "i C++03 mÃ¥ste en klassnyckel användas när en vän deklareras" #: cp/parser.cc:28837 -#, fuzzy, gcc-internal-format -#| msgid "name-independent declarations only available with %<-std=c++2c%> or %<-std=gnu++2c%>" +#, gcc-internal-format msgid "variadic friends or friend type declarations with multiple types only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "namnoberoende deklarationer är endast tillgängliga med %<-std=c++2c%> eller %<-std=gnu++2c%>" +msgstr "deklarationer av variadiska vänner väntyp med flera typer är endast tillgängligt med %<-std=c++2c%> eller %<-std=gnu++2c%>" #: cp/parser.cc:28878 #, gcc-internal-format @@ -63922,10 +63886,9 @@ msgid "expected %<;%> at end of member declaration" msgstr "%<;%> förväntades vid slutet av medlemsdeklaration" #: cp/parser.cc:29407 -#, fuzzy, gcc-internal-format -#| msgid "defaulted %qD only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "%<delete%> reason only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "standarddefinierad %qD är endast tillgänglig med %<-std=c++20%> eller %<-std=gnu++20%>" +msgstr "orsaken till %<delete%> är endast tillgänglig med %<-std=c++2c%> eller %<-std=gnu++2c%>" #: cp/parser.cc:29430 #, gcc-internal-format @@ -63938,10 +63901,9 @@ msgid "a brace-enclosed initializer is not allowed here" msgstr "en klammeromsluten initierare är inte tillÃ¥ten här" #: cp/parser.cc:29596 -#, fuzzy, gcc-internal-format -#| msgid "method attributes must be specified at the end" +#, gcc-internal-format msgid "attributes on base specifiers are ignored" -msgstr "metodattribut mÃ¥ste anges pÃ¥ slutet" +msgstr "attribut pÃ¥ basspecificerare ignoreras" #: cp/parser.cc:29611 #, gcc-internal-format @@ -63994,16 +63956,14 @@ msgid "types may not be defined in exception-declarations" msgstr "typer fÃ¥r inte definieras i undantagsdeklarationer" #: cp/parser.cc:30200 -#, fuzzy, gcc-internal-format -#| msgid "%<inline%> in empty declaration" +#, gcc-internal-format msgid "%<alignas%> on exception declaration" -msgstr "%<inline%> i tom deklaration" +msgstr "%<alignas%> pÃ¥ en undantagsdeklaration" #: cp/parser.cc:30279 -#, fuzzy, gcc-internal-format -#| msgid "%qD cannot have default arguments" +#, gcc-internal-format msgid "%<co_yield%> cannot be used in default arguments" -msgstr "%qD kan inte ha standardargument" +msgstr "%<co_yield%> kan inte användas i standardargument" #: cp/parser.cc:30747 #, gcc-internal-format @@ -64572,16 +64532,14 @@ msgid "%<#pragma omp declare %s%> followed by %<#pragma omp declare %s%>" msgstr "%<#pragma omp declare %s%> följt av %<#pragma omp declare %s%>" #: cp/parser.cc:50289 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp declare %s%> must be followed by function declaration or definition" +#, gcc-internal-format msgid "%<#pragma omp dispatch%> must be followed by a direct function call with optional assignment" -msgstr "%<#pragma omp declare %s%> mÃ¥ste följas av en funktionsdeklaration eller -definition" +msgstr "%<#pragma omp dispatch%> mÃ¥ste följas av ett direkt funktionsanrop med en möjlig tilldelning" #: cp/parser.cc:50516 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a pointer variable" +#, gcc-internal-format msgid "%qD is not a C pointer" -msgstr "%qD är inte en pekarvariabel" +msgstr "%qD är inte en C-pekare" #: cp/parser.cc:50642 #, gcc-internal-format @@ -64644,10 +64602,9 @@ msgid "%qD does not refer to a namespace scope function" msgstr "%qD refererar inte till en funktion med namnrymdsräckvidd" #: cp/parser.cc:52924 cp/parser.cc:53459 -#, fuzzy, gcc-internal-format -#| msgid "compound-statement in %<constexpr%> function" +#, gcc-internal-format msgid "OpenMP directives may not appear in %<constexpr%> functions" -msgstr "sammansatt sats i en %<constexpr%>-funktion" +msgstr "OpenMP-direktiv fÃ¥r inte förekomma i %<constexpr%>-funktioner" #. cancel-and-throw is unimplemented. #: cp/parser.cc:53135 @@ -64859,16 +64816,12 @@ msgid "explicit specialization %q#D may be missing attributes" msgstr "explicit specialisering %q#D kan sakna attribut" #: cp/pt.cc:2802 -#, fuzzy -#| msgid "missing primary template attributes %s" msgid "missing primary template attributes %e" -msgstr "primära mallattribut %s saknas" +msgstr "primära mallattribut %e saknas" #: cp/pt.cc:2803 -#, fuzzy -#| msgid "missing primary template attribute %s" msgid "missing primary template attribute %e" -msgstr "primärt mallattribut %s saknas" +msgstr "primärt mallattribut %e saknas" #: cp/pt.cc:2896 cp/pt.cc:2956 #, gcc-internal-format @@ -65618,16 +65571,14 @@ msgid "property must be constant integer expression" msgstr "egenskapen mÃ¥ste vara ett konstant heltalsuttryck" #: cp/pt.cc:12466 -#, fuzzy, gcc-internal-format -#| msgid "explicit instantiation of non-class template %qD" +#, gcc-internal-format msgid "instantiating erroneous template" -msgstr "explicit instansieringar av mallen %q#D som inte är en klass" +msgstr "instansiering av felaktig mall" #: cp/pt.cc:12467 -#, fuzzy, gcc-internal-format -#| msgid "first specified here" +#, gcc-internal-format msgid "first error appeared here" -msgstr "först specificerad här" +msgstr "först felet uppstod här" #: cp/pt.cc:12818 #, gcc-internal-format @@ -65655,10 +65606,9 @@ msgid "mismatched argument pack lengths while expanding %qE" msgstr "argumentpaketlängder stämmer inte överens vid expansion av %qE" #: cp/pt.cc:14083 -#, fuzzy, gcc-internal-format -#| msgid "%qD is instantiated for an empty pack" +#, gcc-internal-format msgid "cannot index an empty pack" -msgstr "%qD instansieras för ett tomt paket" +msgstr "det gÃ¥r inte att indexera ett tomt paket" #: cp/pt.cc:14534 #, gcc-internal-format @@ -65759,10 +65709,9 @@ msgid "creating array of %qT" msgstr "skapar vektor av %qT" #: cp/pt.cc:17072 -#, fuzzy, gcc-internal-format -#| msgid "array %q+D assumed to have one element" +#, gcc-internal-format msgid "%qD expanded to more than one element" -msgstr "vektor %q+D antas ha ett element" +msgstr "%qD expanderde till mer än ett element" #: cp/pt.cc:17079 #, gcc-internal-format @@ -65984,10 +65933,9 @@ msgid "exception specification of %qD depends on itself" msgstr "explicit specifikation av %qD beror pÃ¥ sig själv" #: cp/pt.cc:27487 -#, fuzzy, gcc-internal-format -#| msgid "virt-specifiers in %qs not allowed outside a class definition" +#, gcc-internal-format msgid "exception specification of %qD is not available until end of class definition" -msgstr "virt-specificerare i %qs är inte tillÃ¥tet utanför en klassdefinition" +msgstr "undantagspecifikationen för %qD är inte tillgänglig förrän slutet av klassdefinitionen" #. [temp.explicit] #. @@ -66453,10 +66401,9 @@ msgid "%<auto{x}%> cannot be constrained" msgstr "%<auto{x}%> kan inte begränsas" #: cp/semantics.cc:3838 -#, fuzzy, gcc-internal-format -#| msgid "%<auto{x}%> only available with %<-std=c++2b%> or %<-std=gnu++2b%>" +#, gcc-internal-format msgid "%<auto{x}%> only available with %<-std=c++23%> or %<-std=gnu++23%>" -msgstr "%<auto{x}%> är endast tillgängligt med %<-std=c++2b%> eller %<-std=gnu++2b%>" +msgstr "%<auto{x}%> är endast tillgängligt med %<-std=c++23%> eller %<-std=gnu++23%>" #: cp/semantics.cc:4030 #, gcc-internal-format @@ -66559,22 +66506,19 @@ msgid "%qT is not an enumeration type" msgstr "%qT är inte ett uppräkningstyp" #: cp/semantics.cc:5094 -#, fuzzy, gcc-internal-format -#| msgid "%<__type_pack_element%> index is not an integral constant" +#, gcc-internal-format msgid "pack index is not an integral constant" -msgstr "indexet till %<__type_pack_element%> är inte en heltalskonstant" +msgstr "paketindexet är inte en heltalskonstant" #: cp/semantics.cc:5100 -#, fuzzy, gcc-internal-format -#| msgid "%<__type_pack_element%> index is negative" +#, gcc-internal-format msgid "pack index is negative" -msgstr "indexet till %<__type_pack_element%> är negativt" +msgstr "paketindexet är negativt" #: cp/semantics.cc:5106 -#, fuzzy, gcc-internal-format -#| msgid "%<__type_pack_element%> index is out of range" +#, gcc-internal-format msgid "pack index is out of range" -msgstr "indexet till %<__type_pack_element%> är utanför intervallet" +msgstr "paketindexet är utanför intervallet" #. Parameter packs can only be used in templates #: cp/semantics.cc:5243 @@ -66633,10 +66577,9 @@ msgid "user defined reduction with constructor initializer for base class %qT" msgstr "användardefinierad reduktion med konstruerarinitierare för basklassen %qT" #: cp/semantics.cc:7505 -#, fuzzy, gcc-internal-format -#| msgid "property must be a constant integer expression at %C" +#, gcc-internal-format msgid "expected string literal or constant integer expression instead of %qE" -msgstr "egenskapen mÃ¥ste vara ett konstant heltalsuttryck vid %C" +msgstr "en strängliteral eller ett konstant heltalsuttryck förväntades istället för %qE" #: cp/semantics.cc:7695 #, gcc-internal-format @@ -66885,40 +66828,34 @@ msgid "%<#pragma omp atomic update%> uses two different expressions for memory" msgstr "%<#pragma omp atomic update%> använder tvÃ¥ olika uttryck för minne" #: cp/semantics.cc:12248 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> message must be a string literal or object with %<size%> and %<data%> members" +#, gcc-internal-format msgid "constexpr string must be a string literal or object with %<size%> and %<data%> members" -msgstr "meddelandet i %<static_assert%> mÃ¥ste vara en strängliteral eller ett objekt med medlemmarna %<size%> och %<data%>" +msgstr "constexpr-strängen mÃ¥ste vara en strängliteral eller ett objekt med medlemmarna %<size%> och %<data%>" #: cp/semantics.cc:12264 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> message %<size()%> must be implicitly convertible to %<std::size_t%>" +#, gcc-internal-format msgid "constexpr string %<size()%> must be implicitly convertible to %<std::size_t%>" -msgstr "meddelandet %<size()%> till %<static_assert%> mÃ¥ste vara implicit konverterbart till %<std::size_t%>" +msgstr "constexpr-strängen %<size()%> mÃ¥ste vara implicit konverterbar till %<std::size_t%>" #: cp/semantics.cc:12273 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> message %<data()%> must be implicitly convertible to %<const char*%>" +#, gcc-internal-format msgid "constexpr string %<data()%> must be implicitly convertible to %<const char*%>" -msgstr "meddelandet %<data()%> till %<static_assert%> mÃ¥ste vara implicit konverterbart till %<const char*%>" +msgstr "constexpr-strängen %<data()%> mÃ¥ste vara implicit konverterbart till %<const char*%>" #: cp/semantics.cc:12311 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> message %<size()%> must be a constant expression" +#, gcc-internal-format msgid "constexpr string %<size()%> must be a constant expression" -msgstr "meddelandet %<size()%> till %<static_assert%> mÃ¥ste vara ett konstant uttryck" +msgstr "constexpr-strängen %<size()%> mÃ¥ste vara ett konstant uttryck" #: cp/semantics.cc:12319 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> message %<size()%> %qE too large" +#, gcc-internal-format msgid "constexpr string message %<size()%> %qE too large" -msgstr "meddelandet %<size()%> till %<static_assert%> %qE är för stort" +msgstr "constexpr-strängmeddelandet %<size()%> %qE är för stort" #: cp/semantics.cc:12346 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> message %<data()[%d]%> must be a constant expression" +#, gcc-internal-format msgid "constexpr string %<data()[%d]%> must be a constant expression" -msgstr "meddelandet %<data()[%d]%> till %<static_assert%> mÃ¥ste vara ett konstant uttryck" +msgstr "constexpr-strängen %<data()[%d]%> mÃ¥ste vara ett konstant uttryck" #: cp/semantics.cc:12372 #, fuzzy, gcc-internal-format @@ -70327,12 +70264,12 @@ msgstr "stat=-argumentet vid %L mÃ¥ste vara en heltalsvariabel av kind=4" #: fortran/check.cc:5174 #, gcc-internal-format, gfc-internal-format msgid "The MASK argument at %L, if present, must be a logical array with the same rank as ARRAY" -msgstr "" +msgstr "Argumentet MASK vid %L, om det finns, mÃ¥ste vara en logisk vektor med samma ordning som ARRAY" #: fortran/check.cc:5186 #, gcc-internal-format, gfc-internal-format msgid "MASK present at %L without IDENTITY" -msgstr "" +msgstr "MASK finns vid %L utan IDENTITY" #: fortran/check.cc:5190 #, fuzzy, gcc-internal-format, gfc-internal-format @@ -70343,7 +70280,7 @@ msgstr "Dim-argumentet vid %L mÃ¥ste vara skalärt" #: fortran/check.cc:5198 #, gcc-internal-format, gfc-internal-format msgid "The IDENTITY argument at %L, if present, must be a scalar with the same type as ARRAY" -msgstr "" +msgstr "Argumentet IDENTITY vid %L, om det finns, mÃ¥ste vara en skalär med samma ordning som ARRRAY" #: fortran/check.cc:5289 #, gcc-internal-format @@ -81721,7 +81658,7 @@ msgstr "Allokering %s av ABSTRACT bastyp vid %L behöver en typspecifikation ell #: fortran/resolve.cc:9000 #, gcc-internal-format msgid "The type parameter in ALLOCATE statement with type-spec shall be an asterisk as allocate object %qs at %L is a dummy argument with assumed type parameter" -msgstr "" +msgstr "Typparametern i satsen ALLOCATE med typspecifikationen skall vara en asterisk eftersom allokeringsobjektet %qs vid %L är ett attrappargumentparameter med antagen typ" #: fortran/resolve.cc:9020 #, gcc-internal-format, gfc-internal-format @@ -86476,11 +86413,6 @@ msgstr "försöker du göra sönder %s? hur vÃ¥gar du?" #~ msgid "%<init%> clause with modifier other than %<prefer_type%>, %<target%> or %<targetsync%>" #~ msgstr "en klausul %<init%> med en annan modifierare än %<prefer_type%>, %<target%> eller %<targetsync%>" -#, fuzzy, gcc-internal-format, gfc-internal-format -#~| msgid "Interface mismatch in dummy procedure %qs at %L: %s" -#~ msgid "Interface mismatch in dummy procedure at %L conflichts with %L: %s" -#~ msgstr "Gränssnitt stämmer inte överens i attrapprocedur %qs vid %L: %s" - #, c-format #~ msgid "bad I/O address 0x" #~ msgstr "felaktig I/O-adress 0x" diff --git a/gcc/profile-count.cc b/gcc/profile-count.cc index 8b9d8e1..374f06f 100644 --- a/gcc/profile-count.cc +++ b/gcc/profile-count.cc @@ -519,3 +519,26 @@ profile_probability::pow (int n) const } return ret; } +profile_count +profile_count::operator* (const sreal &num) const +{ + if (m_val == 0) + return *this; + if (!initialized_p ()) + return uninitialized (); + sreal scaled = num * m_val; + gcc_checking_assert (scaled >= 0); + profile_count ret; + if (m_val > max_count) + ret.m_val = max_count; + else + ret.m_val = scaled.to_nearest_int (); + ret.m_quality = MIN (m_quality, ADJUSTED); + return ret; +} + +profile_count +profile_count::operator*= (const sreal &num) +{ + return *this * num; +} diff --git a/gcc/profile-count.h b/gcc/profile-count.h index 015aee9..0e79fd2 100644 --- a/gcc/profile-count.h +++ b/gcc/profile-count.h @@ -1061,6 +1061,9 @@ public: return *this; } + profile_count operator* (const sreal &num) const; + profile_count operator*= (const sreal &num); + profile_count operator/ (int64_t den) const { return apply_scale (1, den); diff --git a/gcc/rust/ChangeLog b/gcc/rust/ChangeLog index 64053d4..453b9f7 100644 --- a/gcc/rust/ChangeLog +++ b/gcc/rust/ChangeLog @@ -1,3 +1,162 @@ +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * util/rust-lang-item.h: Add new manually_drop lang item. + * util/rust-lang-item.cc: Likewise. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * util/rust-attribute-values.h: Add RUSTFMT value. + * util/rust-attributes.cc: Define the attribute. + * util/rust-attributes.h (enum CompilerPass): Add EXTERNAL variant. + * expand/rust-macro-builtins.cc: Fix formatting. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * resolve/rust-early-name-resolver-2.0.cc (Early::visit_attributes): Remove assertion. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * util/rust-attribute-values.h: Add missing attributes. + * util/rust-attributes.cc: Likewise. + * util/rust-attributes.h (enum CompilerPass): Mention adding something for const + functions. + +2025-04-14 beamandala <mandalapubhavesh@gmail.com> + + * expand/rust-macro-builtins.cc (MacroBuiltin::builtin_transcribers): + Add entry for track_caller. + * util/rust-attribute-values.h: add `TRACK_CALLER` attribute. + * util/rust-attributes.cc: add `track_caller` attribute definition. + +2025-04-14 Owen Avery <powerboat9.gamer@gmail.com> + + * checks/errors/rust-const-checker.cc + (ConstChecker::visit): Visit the enum items of enums. + * resolve/rust-ast-resolve-item.cc + (ResolveItem::visit): Resolve enum discriminants during nr1.0. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * expand/rust-macro-builtins-format-args.cc (format_args_parse_arguments): Improve safety, + allow extra commas after end of argument list. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Call into + TokenTreeDesugar. + * expand/rust-token-tree-desugar.cc: New file. + * expand/rust-token-tree-desugar.h: New file. + * Make-lang.in: Compile them. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * expand/rust-macro-expand.cc (MacroExpander::match_n_matches): Do not + insert fragments and substack fragments if the matcher failed. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * rust-session-manager.cc (Session::compile_crate): Call the visitor later in the pipeline. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * ast/rust-ast.h (DelimTokenTree::get_locus): New function. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * ast/rust-expr.h (class RangeExpr): Add empty outer attributes and allow getting them + and setting them. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Return if module + is unloaded. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * typecheck/rust-hir-type-check-expr.cc (is_default_fn): New. + (emit_ambiguous_resolution_error): New. + (handle_multiple_candidates): Properly handle multiple candidates in + the case of specialization. + (TypeCheckExpr::visit): Call `handle_multiple_candidates`. + +2025-04-14 Andrew Pinski <quic_apinski@quicinc.com> + + PR rust/119342 + * rust-gcc.cc (block): Add comment on why chaining + the variables of the scope toether. + +2025-04-14 Andrew Pinski <quic_apinski@quicinc.com> + + PR rust/119341 + * rust-gcc.cc (function_type): Use range fors. + (function_type_variadic): Likewise. + (fill_in_fields): Likewise. + (statement_list): Likewise. + (block): Likewise. + (block_add_statements): Likewise. + (function_set_parameters): Likewise. + (write_global_definitions): Likewise. + +2025-04-14 Andrew Pinski <quic_apinski@quicinc.com> + + * rust-gcc.cc (Bvariable::get_tree): Use error_operand_p. + (pointer_type): Likewise. + (reference_type): Likewise. + (immutable_type): Likewise. + (function_type): Likewise. + (function_type_variadic): Likewise. + Cleanup the check for receiver.type first. + (function_ptr_type): Use error_operand_p. + (fill_in_fields): Likewise. + (fill_in_array): Likewise. + (named_type): Likewise. + (type_size): Likewise. + (type_alignment): Likewise. + (type_field_alignment): Likewise. + (type_field_offset): Likewise. + (zero_expression): Likewise. + (float_constant_expression): Likewise. + (convert_expression): Likewise. + (struct_field_expression): Likewise. + (compound_expression): Likewise. + (conditional_expression): Likewise. + (negation_expression): Likewise. + (arithmetic_or_logical_expression): Likewise. + (arithmetic_or_logical_expression_checked): Likewise. + (comparison_expression): Likewise. + (lazy_boolean_expression): Likewise. + (constructor_expression): Likewise. + (array_constructor_expression): Likewise. + (array_index_expression): Likewise. + (call_expression): Likewise. + (init_statement): Likewise. + (assignment_statement): Likewise. + (return_statement): Likewise. + (exception_handler_statement): Likewise. + (if_statement): Likewise. + (compound_statement): Likewise. + Tighten up the code, removing t variable. + (statement_list): Use error_operand_p. + (block): Likewise. + (block_add_statements): Likewise. + (convert_tree): Likewise. + (global_variable): Likewise. + (global_variable_set_init): Likewise. + (local_variable): Likewise. + (parameter_variable): Likewise. + (static_chain_variable): Likewise. + (temporary_variable): Likewise. + (function): Likewise. Tighten up the code. + (function_defer_statement): Use error_operand_p. + (function_set_parameters): Use error_operand_p. + (write_global_definitions): Use error_operand_p. + Tighten up the code around the loop. + +2025-04-14 Andrew Pinski <quic_apinski@quicinc.com> + + * rust-gcc.cc (is_floating_point): Use FLOAT_TYPE_P + instead of manually checking the type. + 2025-04-08 Matty Kuhn <matty.kuhn.1@gmail.com> * ast/rust-ast.h: (AST::Attribute): add empty_input function diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in index 4028b47..835e113 100644 --- a/gcc/rust/Make-lang.in +++ b/gcc/rust/Make-lang.in @@ -115,6 +115,7 @@ GRS_OBJS = \ rust/rust-macro-builtins-format-args.o \ rust/rust-macro-builtins-location.o \ rust/rust-macro-builtins-include.o \ + rust/rust-token-tree-desugar.o \ rust/rust-fmt.o \ rust/rust-hir.o \ rust/rust-hir-map.o \ diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index 09e0fce..91611ec 100644 --- a/gcc/rust/ast/rust-ast.h +++ b/gcc/rust/ast/rust-ast.h @@ -1018,6 +1018,7 @@ public: } DelimType get_delim_type () const { return delim_type; } + location_t get_locus () const { return locus; } }; /* Forward decl - definition moved to rust-expr.h as it requires LiteralExpr diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h index 84cdfdb..69538df 100644 --- a/gcc/rust/ast/rust-expr.h +++ b/gcc/rust/ast/rust-expr.h @@ -3004,6 +3004,10 @@ class RangeExpr : public ExprWithoutBlock { location_t locus; + // Some visitors still check for attributes on RangeExprs, and they will need + // to be supported in the future - so keep that for now + std::vector<Attribute> empty_attributes = {}; + protected: // outer attributes not allowed before range expressions RangeExpr (location_t locus) : locus (locus) {} @@ -3013,15 +3017,11 @@ public: std::vector<Attribute> &get_outer_attrs () override final { - // RangeExpr cannot have any outer attributes - rust_assert (false); + return empty_attributes; } // should never be called - error if called - void set_outer_attrs (std::vector<Attribute> /* new_attrs */) override - { - rust_assert (false); - } + void set_outer_attrs (std::vector<Attribute> /* new_attrs */) override {} Expr::Kind get_expr_kind () const override { return Expr::Kind::Range; } }; diff --git a/gcc/rust/checks/errors/rust-const-checker.cc b/gcc/rust/checks/errors/rust-const-checker.cc index 4904322..4c2257a 100644 --- a/gcc/rust/checks/errors/rust-const-checker.cc +++ b/gcc/rust/checks/errors/rust-const-checker.cc @@ -646,6 +646,9 @@ ConstChecker::visit (Enum &enum_item) { check_default_const_generics (enum_item.get_generic_params (), ConstGenericCtx::Enum); + + for (auto &item : enum_item.get_variants ()) + item->accept_vis (*this); } void diff --git a/gcc/rust/expand/rust-macro-builtins-format-args.cc b/gcc/rust/expand/rust-macro-builtins-format-args.cc index 8eb32d5..3e1249d 100644 --- a/gcc/rust/expand/rust-macro-builtins-format-args.cc +++ b/gcc/rust/expand/rust-macro-builtins-format-args.cc @@ -55,6 +55,8 @@ format_args_parse_arguments (AST::MacroInvocData &invoc) if (parser.peek_current_token ()->get_id () == STRING_LITERAL) format_expr = parser.parse_literal_expr (); + rust_assert (format_expr); + // TODO(Arthur): Clean this up - if we haven't parsed a string literal but a // macro invocation, what do we do here? return a tl::unexpected? auto format_str = static_cast<AST::LiteralExpr &> (*format_expr) @@ -81,6 +83,11 @@ format_args_parse_arguments (AST::MacroInvocData &invoc) { parser.skip_token (COMMA); + // Check in case of an extraneous comma in the args list, which is + // allowed - format_args!("fmt", arg, arg2,) + if (parser.peek_current_token ()->get_id () == last_token_id) + break; + if (parser.peek_current_token ()->get_id () == IDENTIFIER && parser.peek (1)->get_id () == EQUAL) { diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index 39c4c46..8b406ff 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -83,7 +83,6 @@ const BiMap<std::string, BuiltinMacro> MacroBuiltin::builtins = {{ {"Ord", BuiltinMacro::Ord}, {"PartialOrd", BuiltinMacro::PartialOrd}, {"Hash", BuiltinMacro::Hash}, - }}; AST::MacroTranscriberFunc @@ -137,6 +136,7 @@ std::unordered_map<std::string, AST::MacroTranscriberFunc> {"cfg_accessible", MacroBuiltin::sorry}, {"rustc_const_stable", MacroBuiltin::sorry}, {"rustc_const_unstable", MacroBuiltin::sorry}, + {"track_caller", MacroBuiltin::sorry}, /* Derive builtins do not need a real transcriber, but still need one. It should however never be called since builtin derive macros get expanded differently, and benefit from knowing on what kind of items they are diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc index cd17a3f..673b8fb 100644 --- a/gcc/rust/expand/rust-macro-expand.cc +++ b/gcc/rust/expand/rust-macro-expand.cc @@ -28,6 +28,7 @@ #include "rust-cfg-strip.h" #include "rust-early-name-resolver.h" #include "rust-proc-macro.h" +#include "rust-token-tree-desugar.h" namespace Rust { @@ -78,7 +79,10 @@ MacroExpander::expand_decl_macro (location_t invoc_locus, * trees. */ - AST::DelimTokenTree &invoc_token_tree = invoc.get_delim_tok_tree (); + AST::DelimTokenTree &invoc_token_tree_sugar = invoc.get_delim_tok_tree (); + + // We must first desugar doc comments into proper attributes + auto invoc_token_tree = AST::TokenTreeDesugar ().go (invoc_token_tree_sugar); // find matching arm AST::MacroRule *matched_rule = nullptr; @@ -621,9 +625,10 @@ MacroExpander::match_n_matches (Parser<MacroInvocLexer> &parser, // matched fragment get the offset in the token stream size_t offs_end = source.get_offs (); - sub_stack.insert_metavar ( - MatchedFragment (fragment->get_ident ().as_string (), - offs_begin, offs_end)); + if (valid_current_match) + sub_stack.insert_metavar ( + MatchedFragment (fragment->get_ident ().as_string (), + offs_begin, offs_end)); } break; @@ -650,15 +655,15 @@ MacroExpander::match_n_matches (Parser<MacroInvocLexer> &parser, } auto old_stack = sub_stack.pop (); - // nest metavars into repetitions - for (auto &ent : old_stack) - sub_stack.append_fragment (ent.first, std::move (ent.second)); - // If we've encountered an error once, stop trying to match more // repetitions if (!valid_current_match) break; + // nest metavars into repetitions + for (auto &ent : old_stack) + sub_stack.append_fragment (ent.first, std::move (ent.second)); + match_amount++; // Break early if we notice there's too many expressions already diff --git a/gcc/rust/expand/rust-token-tree-desugar.cc b/gcc/rust/expand/rust-token-tree-desugar.cc new file mode 100644 index 0000000..3b47180 --- /dev/null +++ b/gcc/rust/expand/rust-token-tree-desugar.cc @@ -0,0 +1,72 @@ +// Copyright (C) 2025 Free Software Foundation, Inc. + +// This file is part of GCC. + +// GCC is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 3, or (at your option) any later +// version. + +// GCC 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 +// for more details. + +// You should have received a copy of the GNU General Public License +// along with GCC; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include "rust-token-tree-desugar.h" +#include "rust-ast.h" +#include "rust-token.h" + +namespace Rust { +namespace AST { + +DelimTokenTree +TokenTreeDesugar::go (DelimTokenTree &tts) +{ + tts.accept_vis (*this); + + return DelimTokenTree (tts.get_delim_type (), std::move (desugared), + tts.get_locus ()); +} + +void +TokenTreeDesugar::append (TokenPtr &&new_token) +{ + desugared.emplace_back (std::make_unique<Token> (std::move (new_token))); +} + +void +TokenTreeDesugar::append (std::unique_ptr<TokenTree> &&new_token) +{ + desugared.emplace_back (std::move (new_token)); +} + +void +TokenTreeDesugar::visit (Token &tts) +{ + if (tts.get_id () == TokenId::OUTER_DOC_COMMENT + || tts.get_id () == TokenId::INNER_DOC_COMMENT) + { + append (Rust::Token::make (TokenId::HASH, tts.get_locus ())); + + if (tts.get_id () == TokenId::INNER_DOC_COMMENT) + append (Rust::Token::make (EXCLAM, tts.get_locus ())); + + append (Rust::Token::make (TokenId::LEFT_SQUARE, tts.get_locus ())); + append (Rust::Token::make_identifier (tts.get_locus (), "doc")); + append (Rust::Token::make (TokenId::EQUAL, tts.get_locus ())); + append (Rust::Token::make_string (tts.get_locus (), + std::string (tts.get_str ()))); + append (Rust::Token::make (TokenId::RIGHT_SQUARE, tts.get_locus ())); + } + else + { + append (tts.clone_token ()); + } +} + +}; // namespace AST +}; // namespace Rust diff --git a/gcc/rust/expand/rust-token-tree-desugar.h b/gcc/rust/expand/rust-token-tree-desugar.h new file mode 100644 index 0000000..ccba53b --- /dev/null +++ b/gcc/rust/expand/rust-token-tree-desugar.h @@ -0,0 +1,55 @@ +// Copyright (C) 2025 Free Software Foundation, Inc. + +// This file is part of GCC. + +// GCC is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 3, or (at your option) any later +// version. + +// GCC 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 +// for more details. + +// You should have received a copy of the GNU General Public License +// along with GCC; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#ifndef RUST_TOKEN_TREE_DESUGAR_H +#define RUST_TOKEN_TREE_DESUGAR_H + +#include "rust-ast-visitor.h" +#include "rust-system.h" +#include "rust-ast.h" + +namespace Rust { +namespace AST { + +/** + * Desugar a given token-tree before parsing it for a macro invocation. At the + * moment, the sole purpose of this desugar is to transform doc-comments into + * their attribute form (/// comment -> #[doc = "comment"]) + */ +class TokenTreeDesugar : public DefaultASTVisitor +{ +public: + TokenTreeDesugar () : desugared (std::vector<std::unique_ptr<TokenTree>> ()) + {} + + DelimTokenTree go (DelimTokenTree &tts); + +private: + std::vector<std::unique_ptr<TokenTree>> desugared; + void append (TokenPtr &&new_token); + void append (std::unique_ptr<TokenTree> &&new_token); + + using DefaultASTVisitor::visit; + + virtual void visit (Token &tts) override; +}; + +}; // namespace AST +}; // namespace Rust + +#endif //! RUST_TOKEN_TREE_DESUGAR_H diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index d584961..30f6d43 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -356,6 +356,8 @@ ResolveItem::visit (AST::EnumItemDiscriminant &item) auto cpath = canonical_prefix.append (decl); mappings.insert_canonical_path (item.get_node_id (), cpath); + + ResolveExpr::go (item.get_expr (), path, cpath); } void diff --git a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc index afaca1f..36456e1 100644 --- a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc @@ -325,10 +325,9 @@ Early::visit_attributes (std::vector<AST::Attribute> &attrs) auto pm_def = mappings.lookup_derive_proc_macro_def ( definition->get_node_id ()); - rust_assert (pm_def.has_value ()); - - mappings.insert_derive_proc_macro_invocation (trait, - pm_def.value ()); + if (pm_def.has_value ()) + mappings.insert_derive_proc_macro_invocation (trait, + pm_def.value ()); } } else if (Analysis::BuiltinAttributeMappings::get () diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 8863be7..ba37dee 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -113,7 +113,17 @@ TopLevel::visit (AST::Module &module) // This was copied from the old early resolver method // 'accumulate_escaped_macros' if (module.get_kind () == AST::Module::UNLOADED) - module.load_items (); + { + module.load_items (); + + // If the module was previously unloaded, then we don't want to visit it + // this time around as the CfgStrip hasn't run on its inner items yet. + // Skip it for now, mark the visitor as dirty and try again + + dirty = true; + + return; + } DefaultResolver::visit (module); diff --git a/gcc/rust/rust-gcc.cc b/gcc/rust/rust-gcc.cc index 72aef08..234721c 100644 --- a/gcc/rust/rust-gcc.cc +++ b/gcc/rust/rust-gcc.cc @@ -61,7 +61,7 @@ tree Bvariable::get_tree (location_t location) const { - if (this->t_ == error_mark_node) + if (error_operand_p (this->t_)) return error_mark_node; TREE_USED (this->t_) = 1; @@ -431,7 +431,7 @@ float_type (int bits) tree pointer_type (tree to_type) { - if (to_type == error_mark_node) + if (error_operand_p (to_type)) return error_mark_node; tree type = build_pointer_type (to_type); return type; @@ -442,7 +442,7 @@ pointer_type (tree to_type) tree reference_type (tree to_type) { - if (to_type == error_mark_node) + if (error_operand_p (to_type)) return error_mark_node; tree type = build_reference_type (to_type); return type; @@ -453,7 +453,7 @@ reference_type (tree to_type) tree immutable_type (tree base) { - if (base == error_mark_node) + if (error_operand_p (base)) return error_mark_node; tree constified = build_qualified_type (base, TYPE_QUAL_CONST); return constified; @@ -472,17 +472,16 @@ function_type (const typed_identifier &receiver, if (receiver.type != NULL_TREE) { tree t = receiver.type; - if (t == error_mark_node) + if (error_operand_p (t)) return error_mark_node; *pp = tree_cons (NULL_TREE, t, NULL_TREE); pp = &TREE_CHAIN (*pp); } - for (std::vector<typed_identifier>::const_iterator p = parameters.begin (); - p != parameters.end (); ++p) + for (const auto &p : parameters) { - tree t = p->type; - if (t == error_mark_node) + tree t = p.type; + if (error_operand_p (t)) return error_mark_node; *pp = tree_cons (NULL_TREE, t, NULL_TREE); pp = &TREE_CHAIN (*pp); @@ -502,11 +501,11 @@ function_type (const typed_identifier &receiver, gcc_assert (result_struct != NULL); result = result_struct; } - if (result == error_mark_node) + if (error_operand_p (result)) return error_mark_node; tree fntype = build_function_type (result, args); - if (fntype == error_mark_node) + if (error_operand_p (fntype)) return error_mark_node; return build_pointer_type (fntype); @@ -521,21 +520,16 @@ function_type_variadic (const typed_identifier &receiver, size_t n = parameters.size () + (receiver.type != NULL_TREE ? 1 : 0); tree *args = XALLOCAVEC (tree, n); size_t offs = 0; + if (error_operand_p (receiver.type)) + return error_mark_node; if (receiver.type != NULL_TREE) - { - tree t = receiver.type; - if (t == error_mark_node) - return error_mark_node; - - args[offs++] = t; - } + args[offs++] = receiver.type; - for (std::vector<typed_identifier>::const_iterator p = parameters.begin (); - p != parameters.end (); ++p) + for (const auto &p : parameters) { - tree t = p->type; - if (t == error_mark_node) + tree t = p.type; + if (error_operand_p (t)) return error_mark_node; args[offs++] = t; } @@ -550,11 +544,11 @@ function_type_variadic (const typed_identifier &receiver, gcc_assert (result_struct != NULL_TREE); result = result_struct; } - if (result == error_mark_node) + if (error_operand_p (result)) return error_mark_node; tree fntype = build_varargs_function_type_array (result, n, args); - if (fntype == error_mark_node) + if (error_operand_p (fntype)) return error_mark_node; return build_pointer_type (fntype); @@ -569,7 +563,7 @@ function_ptr_type (tree result_type, const std::vector<tree> ¶meters, for (auto ¶m : parameters) { - if (param == error_mark_node) + if (error_operand_p (param)) return error_mark_node; *pp = tree_cons (NULL_TREE, param, NULL_TREE); @@ -583,7 +577,7 @@ function_ptr_type (tree result_type, const std::vector<tree> ¶meters, result = void_type_node; tree fntype = build_function_type (result, args); - if (fntype == error_mark_node) + if (error_operand_p (fntype)) return error_mark_node; return build_pointer_type (fntype); @@ -613,14 +607,13 @@ fill_in_fields (tree fill, const std::vector<typed_identifier> &fields, { tree field_trees = NULL_TREE; tree *pp = &field_trees; - for (std::vector<typed_identifier>::const_iterator p = fields.begin (); - p != fields.end (); ++p) + for (const auto &p : fields) { - tree name_tree = get_identifier_from_string (p->name); - tree type_tree = p->type; - if (type_tree == error_mark_node) + tree name_tree = get_identifier_from_string (p.name); + tree type_tree = p.type; + if (error_operand_p (type_tree)) return error_mark_node; - tree field = build_decl (p->location, FIELD_DECL, name_tree, type_tree); + tree field = build_decl (p.location, FIELD_DECL, name_tree, type_tree); DECL_CONTEXT (field) = fill; *pp = field; pp = &DECL_CHAIN (field); @@ -652,7 +645,7 @@ array_type (tree element_type, tree length) tree fill_in_array (tree fill, tree element_type, tree length_tree) { - if (element_type == error_mark_node || length_tree == error_mark_node) + if (error_operand_p (element_type) || error_operand_p (length_tree)) return error_mark_node; gcc_assert (TYPE_SIZE (element_type) != NULL_TREE); @@ -684,7 +677,7 @@ fill_in_array (tree fill, tree element_type, tree length_tree) tree named_type (const std::string &name, tree type, location_t location) { - if (type == error_mark_node) + if (error_operand_p (type)) return error_mark_node; // The middle-end expects a basic type to have a name. In Rust every @@ -714,7 +707,7 @@ named_type (const std::string &name, tree type, location_t location) int64_t type_size (tree t) { - if (t == error_mark_node) + if (error_operand_p (t)) return 1; if (t == void_type_node) return 0; @@ -732,7 +725,7 @@ type_size (tree t) int64_t type_alignment (tree t) { - if (t == error_mark_node) + if (error_operand_p (t)) return 1; return TYPE_ALIGN_UNIT (t); } @@ -742,7 +735,7 @@ type_alignment (tree t) int64_t type_field_alignment (tree t) { - if (t == error_mark_node) + if (error_operand_p (t)) return 1; return rust_field_alignment (t); } @@ -752,7 +745,7 @@ type_field_alignment (tree t) int64_t type_field_offset (tree struct_tree, size_t index) { - if (struct_tree == error_mark_node) + if (error_operand_p (struct_tree)) return 0; gcc_assert (TREE_CODE (struct_tree) == RECORD_TYPE); tree field = TYPE_FIELDS (struct_tree); @@ -773,7 +766,7 @@ tree zero_expression (tree t) { tree ret; - if (t == error_mark_node) + if (error_operand_p (t)) ret = error_mark_node; else ret = build_zero_cst (t); @@ -794,7 +787,7 @@ tree float_constant_expression (tree t, mpfr_t val) { tree ret; - if (t == error_mark_node) + if (error_operand_p (t)) return error_mark_node; REAL_VALUE_TYPE r1; @@ -845,8 +838,7 @@ boolean_constant_expression (bool val) tree convert_expression (tree type_tree, tree expr_tree, location_t location) { - if (type_tree == error_mark_node || expr_tree == error_mark_node - || TREE_TYPE (expr_tree) == error_mark_node) + if (error_operand_p (type_tree) || error_operand_p (expr_tree)) return error_mark_node; tree ret; @@ -878,8 +870,7 @@ convert_expression (tree type_tree, tree expr_tree, location_t location) tree struct_field_expression (tree struct_tree, size_t index, location_t location) { - if (struct_tree == error_mark_node - || TREE_TYPE (struct_tree) == error_mark_node) + if (error_operand_p (struct_tree)) return error_mark_node; gcc_assert (TREE_CODE (TREE_TYPE (struct_tree)) == RECORD_TYPE || TREE_CODE (TREE_TYPE (struct_tree)) == UNION_TYPE); @@ -895,7 +886,7 @@ struct_field_expression (tree struct_tree, size_t index, location_t location) field = DECL_CHAIN (field); gcc_assert (field != NULL_TREE); } - if (TREE_TYPE (field) == error_mark_node) + if (error_operand_p (TREE_TYPE (field))) return error_mark_node; tree ret = fold_build3_loc (location, COMPONENT_REF, TREE_TYPE (field), struct_tree, field, NULL_TREE); @@ -909,7 +900,7 @@ struct_field_expression (tree struct_tree, size_t index, location_t location) tree compound_expression (tree stat, tree expr, location_t location) { - if (stat == error_mark_node || expr == error_mark_node) + if (error_operand_p (stat) || error_operand_p (expr)) return error_mark_node; tree ret = fold_build2_loc (location, COMPOUND_EXPR, TREE_TYPE (expr), stat, expr); @@ -923,8 +914,8 @@ tree conditional_expression (tree, tree type_tree, tree cond_expr, tree then_expr, tree else_expr, location_t location) { - if (type_tree == error_mark_node || cond_expr == error_mark_node - || then_expr == error_mark_node || else_expr == error_mark_node) + if (error_operand_p (type_tree) || error_operand_p (cond_expr) + || error_operand_p (then_expr) || error_operand_p (else_expr)) return error_mark_node; tree ret = build3_loc (location, COND_EXPR, type_tree, cond_expr, then_expr, else_expr); @@ -1021,12 +1012,12 @@ operator_to_tree_code (LazyBooleanOperator op) } } -/* Helper function for deciding if a tree is a floating point node. */ +/* Returns true if the type of EXP is a floating point type. + False otherwise. */ bool -is_floating_point (tree t) +is_floating_point (tree exp) { - auto tree_type = TREE_CODE (TREE_TYPE (t)); - return tree_type == REAL_TYPE || tree_type == COMPLEX_TYPE; + return FLOAT_TYPE_P (TREE_TYPE (exp)); } // Return an expression for the negation operation OP EXPR. @@ -1035,7 +1026,7 @@ negation_expression (NegationOperator op, tree expr_tree, location_t location) { /* Check if the expression is an error, in which case we return an error expression. */ - if (expr_tree == error_mark_node || TREE_TYPE (expr_tree) == error_mark_node) + if (error_operand_p (expr_tree)) return error_mark_node; /* For negation operators, the resulting type should be the same as its @@ -1071,7 +1062,7 @@ arithmetic_or_logical_expression (ArithmeticOrLogicalOperator op, tree left, { /* Check if either expression is an error, in which case we return an error expression. */ - if (left == error_mark_node || right == error_mark_node) + if (error_operand_p (left) || error_operand_p (right)) return error_mark_node; // unwrap the const decls if set @@ -1182,7 +1173,7 @@ arithmetic_or_logical_expression_checked (ArithmeticOrLogicalOperator op, { /* Check if either expression is an error, in which case we return an error expression. */ - if (left == error_mark_node || right == error_mark_node) + if (error_operand_p (left) || error_operand_p (right)) return error_mark_node; // FIXME: Add `if (!debug_mode)` @@ -1222,7 +1213,7 @@ comparison_expression (ComparisonOperator op, tree left_tree, tree right_tree, { /* Check if either expression is an error, in which case we return an error expression. */ - if (left_tree == error_mark_node || right_tree == error_mark_node) + if (error_operand_p (left_tree) || error_operand_p (right_tree)) return error_mark_node; /* For comparison operators, the resulting type should be boolean. */ @@ -1242,7 +1233,7 @@ lazy_boolean_expression (LazyBooleanOperator op, tree left_tree, { /* Check if either expression is an error, in which case we return an error expression. */ - if (left_tree == error_mark_node || right_tree == error_mark_node) + if (error_operand_p (left_tree) || error_operand_p (right_tree)) return error_mark_node; /* For lazy boolean operators, the resulting type should be the same as the @@ -1263,7 +1254,7 @@ constructor_expression (tree type_tree, bool is_variant, const std::vector<tree> &vals, int union_index, location_t location) { - if (type_tree == error_mark_node) + if (error_operand_p (type_tree)) return error_mark_node; vec<constructor_elt, va_gc> *init; @@ -1305,8 +1296,8 @@ constructor_expression (tree type_tree, bool is_variant, gcc_assert (field != NULL_TREE); field = DECL_CHAIN (field); } - if (TREE_TYPE (field) == error_mark_node || val == error_mark_node - || TREE_TYPE (val) == error_mark_node) + + if (TREE_TYPE (field) == error_mark_node || error_operand_p (val)) return error_mark_node; if (int_size_in_bytes (TREE_TYPE (field)) == 0) @@ -1336,8 +1327,7 @@ constructor_expression (tree type_tree, bool is_variant, { gcc_assert (field != NULL_TREE); tree val = (*p); - if (TREE_TYPE (field) == error_mark_node || val == error_mark_node - || TREE_TYPE (val) == error_mark_node) + if (TREE_TYPE (field) == error_mark_node || error_operand_p (val)) return error_mark_node; if (int_size_in_bytes (TREE_TYPE (field)) == 0) @@ -1376,7 +1366,7 @@ array_constructor_expression (tree type_tree, const std::vector<tree> &vals, location_t location) { - if (type_tree == error_mark_node) + if (error_operand_p (type_tree)) return error_mark_node; gcc_assert (indexes.size () == vals.size ()); @@ -1393,7 +1383,7 @@ array_constructor_expression (tree type_tree, tree index = size_int (indexes[i]); tree val = vals[i]; - if (index == error_mark_node || val == error_mark_node) + if (error_operand_p (index) || error_operand_p (val)) return error_mark_node; if (element_size == 0) @@ -1497,8 +1487,7 @@ array_initializer (tree fndecl, tree block, tree array_type, tree length, tree array_index_expression (tree array_tree, tree index_tree, location_t location) { - if (array_tree == error_mark_node || TREE_TYPE (array_tree) == error_mark_node - || index_tree == error_mark_node) + if (error_operand_p (array_tree) || error_operand_p (index_tree)) return error_mark_node; // A function call that returns a zero sized object will have been @@ -1520,7 +1509,7 @@ tree call_expression (tree fn, const std::vector<tree> &fn_args, tree chain_expr, location_t location) { - if (fn == error_mark_node || TREE_TYPE (fn) == error_mark_node) + if (error_operand_p (fn)) return error_mark_node; gcc_assert (FUNCTION_POINTER_TYPE_P (TREE_TYPE (fn))); @@ -1600,7 +1589,7 @@ tree init_statement (tree, Bvariable *var, tree init_tree) { tree var_tree = var->get_decl (); - if (var_tree == error_mark_node || init_tree == error_mark_node) + if (error_operand_p (var_tree) || error_operand_p (init_tree)) return error_mark_node; gcc_assert (TREE_CODE (var_tree) == VAR_DECL); @@ -1631,7 +1620,7 @@ init_statement (tree, Bvariable *var, tree init_tree) tree assignment_statement (tree lhs, tree rhs, location_t location) { - if (lhs == error_mark_node || rhs == error_mark_node) + if (error_operand_p (lhs) || error_operand_p (rhs)) return error_mark_node; // To avoid problems with GNU ld, we don't make zero-sized @@ -1656,14 +1645,14 @@ assignment_statement (tree lhs, tree rhs, location_t location) tree return_statement (tree fntree, tree val, location_t location) { - if (fntree == error_mark_node) + if (error_operand_p (fntree)) return error_mark_node; tree result = DECL_RESULT (fntree); - if (result == error_mark_node) + if (error_operand_p (result)) return error_mark_node; - if (val == error_mark_node) + if (error_operand_p (val)) return error_mark_node; tree set @@ -1681,8 +1670,8 @@ tree exception_handler_statement (tree try_stmt, tree except_stmt, tree finally_stmt, location_t location) { - if (try_stmt == error_mark_node || except_stmt == error_mark_node - || finally_stmt == error_mark_node) + if (error_operand_p (try_stmt) || error_operand_p (except_stmt) + || error_operand_p (finally_stmt)) return error_mark_node; if (except_stmt != NULL_TREE) @@ -1701,8 +1690,8 @@ tree if_statement (tree, tree cond_tree, tree then_tree, tree else_tree, location_t location) { - if (cond_tree == error_mark_node || then_tree == error_mark_node - || else_tree == error_mark_node) + if (error_operand_p (cond_tree) || error_operand_p (then_tree) + || error_operand_p (else_tree)) return error_mark_node; tree ret = build3_loc (location, COND_EXPR, void_type_node, cond_tree, then_tree, else_tree); @@ -1728,15 +1717,12 @@ exit_expression (tree cond_tree, location_t locus) tree compound_statement (tree s1, tree s2) { - tree stmt_list = NULL_TREE; - tree t = s1; - if (t == error_mark_node) - return error_mark_node; - append_to_statement_list (t, &stmt_list); - t = s2; - if (t == error_mark_node) + if (error_operand_p (s1) || error_operand_p (s2)) return error_mark_node; - append_to_statement_list (t, &stmt_list); + + tree stmt_list = NULL_TREE; + append_to_statement_list (s1, &stmt_list); + append_to_statement_list (s2, &stmt_list); // If neither statement has any side effects, stmt_list can be NULL // at this point. @@ -1752,11 +1738,9 @@ tree statement_list (const std::vector<tree> &statements) { tree stmt_list = NULL_TREE; - for (std::vector<tree>::const_iterator p = statements.begin (); - p != statements.end (); ++p) + for (tree t : statements) { - tree t = (*p); - if (t == error_mark_node) + if (error_operand_p (t)) return error_mark_node; append_to_statement_list (t, &stmt_list); } @@ -1808,12 +1792,13 @@ block (tree fndecl, tree enclosing, const std::vector<Bvariable *> &vars, *pp = block_tree; } + // Chain the variables of the scope together so they are all connected + // to the block. tree *pp = &BLOCK_VARS (block_tree); - for (std::vector<Bvariable *>::const_iterator pv = vars.begin (); - pv != vars.end (); ++pv) + for (Bvariable *bv : vars) { - *pp = (*pv)->get_decl (); - if (*pp != error_mark_node) + *pp = bv->get_decl (); + if (!error_operand_p (*pp)) pp = &DECL_CHAIN (*pp); } *pp = NULL_TREE; @@ -1832,11 +1817,9 @@ void block_add_statements (tree bind_tree, const std::vector<tree> &statements) { tree stmt_list = NULL_TREE; - for (std::vector<tree>::const_iterator p = statements.begin (); - p != statements.end (); ++p) + for (tree s : statements) { - tree s = (*p); - if (s != error_mark_node) + if (!error_operand_p (s)) append_to_statement_list (s, &stmt_list); } @@ -1914,8 +1897,7 @@ convert_tree (tree type_tree, tree expr_tree, location_t location) if (type_tree == TREE_TYPE (expr_tree)) return expr_tree; - if (type_tree == error_mark_node || expr_tree == error_mark_node - || TREE_TYPE (expr_tree) == error_mark_node) + if (error_operand_p (type_tree) || error_operand_p (expr_tree)) return error_mark_node; if (POINTER_TYPE_P (type_tree) || INTEGRAL_TYPE_P (type_tree) @@ -1944,7 +1926,7 @@ global_variable (const std::string &var_name, const std::string &asm_name, tree type_tree, bool is_external, bool is_hidden, bool in_unique_section, location_t location) { - if (type_tree == error_mark_node) + if (error_operand_p (type_tree)) return Bvariable::error_variable (); // The GNU linker does not like dynamic variables with zero size. @@ -1983,11 +1965,11 @@ global_variable (const std::string &var_name, const std::string &asm_name, void global_variable_set_init (Bvariable *var, tree expr_tree) { - if (expr_tree == error_mark_node) + if (error_operand_p (expr_tree)) return; gcc_assert (TREE_CONSTANT (expr_tree)); tree var_decl = var->get_decl (); - if (var_decl == error_mark_node) + if (error_operand_p (var_decl)) return; DECL_INITIAL (var_decl) = expr_tree; @@ -2008,7 +1990,7 @@ Bvariable * local_variable (tree function, const std::string &name, tree type_tree, Bvariable *decl_var, location_t location) { - if (type_tree == error_mark_node) + if (error_operand_p (type_tree)) return Bvariable::error_variable (); tree decl = build_decl (location, VAR_DECL, get_identifier_from_string (name), type_tree); @@ -2029,7 +2011,7 @@ Bvariable * parameter_variable (tree function, const std::string &name, tree type_tree, location_t location) { - if (type_tree == error_mark_node) + if (error_operand_p (type_tree)) return Bvariable::error_variable (); tree decl = build_decl (location, PARM_DECL, get_identifier_from_string (name), type_tree); @@ -2046,7 +2028,7 @@ Bvariable * static_chain_variable (tree fndecl, const std::string &name, tree type_tree, location_t location) { - if (type_tree == error_mark_node) + if (error_operand_p (type_tree)) return Bvariable::error_variable (); tree decl = build_decl (location, PARM_DECL, get_identifier_from_string (name), type_tree); @@ -2080,8 +2062,8 @@ temporary_variable (tree fndecl, tree bind_tree, tree type_tree, tree init_tree, tree *pstatement) { gcc_assert (fndecl != NULL_TREE); - if (type_tree == error_mark_node || init_tree == error_mark_node - || fndecl == error_mark_node) + if (error_operand_p (type_tree) || error_operand_p (init_tree) + || error_operand_p (fndecl)) { *pstatement = error_mark_node; return Bvariable::error_variable (); @@ -2198,13 +2180,13 @@ tree function (tree functype, const std::string &name, const std::string &asm_name, unsigned int flags, location_t location) { - if (functype != error_mark_node) - { - gcc_assert (FUNCTION_POINTER_TYPE_P (functype)); - functype = TREE_TYPE (functype); - } + if (error_operand_p (functype)) + return error_mark_node; + + gcc_assert (FUNCTION_POINTER_TYPE_P (functype)); + functype = TREE_TYPE (functype); tree id = get_identifier_from_string (name); - if (functype == error_mark_node || id == error_mark_node) + if (error_operand_p (id)) return error_mark_node; tree decl = build_decl (location, FUNCTION_DECL, id, functype); @@ -2242,8 +2224,8 @@ tree function_defer_statement (tree function, tree undefer_tree, tree defer_tree, location_t location) { - if (undefer_tree == error_mark_node || defer_tree == error_mark_node - || function == error_mark_node) + if (error_operand_p (undefer_tree) || error_operand_p (defer_tree) + || error_operand_p (function)) return error_mark_node; if (DECL_STRUCT_FUNCTION (function) == NULL) @@ -2275,16 +2257,15 @@ bool function_set_parameters (tree function, const std::vector<Bvariable *> ¶m_vars) { - if (function == error_mark_node) + if (error_operand_p (function)) return false; tree params = NULL_TREE; tree *pp = ¶ms; - for (std::vector<Bvariable *>::const_iterator pv = param_vars.begin (); - pv != param_vars.end (); ++pv) + for (Bvariable *bv : param_vars) { - *pp = (*pv)->get_decl (); - gcc_assert (*pp != error_mark_node); + *pp = bv->get_decl (); + gcc_assert (!error_operand_p (*pp)); pp = &DECL_CHAIN (*pp); } *pp = NULL_TREE; @@ -2309,23 +2290,19 @@ write_global_definitions (const std::vector<tree> &type_decls, // Convert all non-erroneous declarations into Gimple form. size_t i = 0; - for (std::vector<Bvariable *>::const_iterator p = variable_decls.begin (); - p != variable_decls.end (); ++p) + for (Bvariable *bv : variable_decls) { - tree v = (*p)->get_decl (); - if (v != error_mark_node) - { - defs[i] = v; - rust_preserve_from_gc (defs[i]); - ++i; - } + tree v = bv->get_decl (); + if (error_operand_p (v)) + continue; + defs[i] = v; + rust_preserve_from_gc (defs[i]); + ++i; } - for (std::vector<tree>::const_iterator p = type_decls.begin (); - p != type_decls.end (); ++p) + for (tree type_tree : type_decls) { - tree type_tree = (*p); - if (type_tree != error_mark_node && IS_TYPE_OR_DECL_P (type_tree)) + if (!error_operand_p (type_tree) && IS_TYPE_OR_DECL_P (type_tree)) { defs[i] = TYPE_NAME (type_tree); gcc_assert (defs[i] != NULL); @@ -2333,21 +2310,18 @@ write_global_definitions (const std::vector<tree> &type_decls, ++i; } } - for (std::vector<tree>::const_iterator p = constant_decls.begin (); - p != constant_decls.end (); ++p) + for (tree t : constant_decls) { - if ((*p) != error_mark_node) + if (!error_operand_p (t)) { - defs[i] = (*p); + defs[i] = t; rust_preserve_from_gc (defs[i]); ++i; } } - for (std::vector<tree>::const_iterator p = function_decls.begin (); - p != function_decls.end (); ++p) + for (tree decl : function_decls) { - tree decl = (*p); - if (decl != error_mark_node) + if (!error_operand_p (decl)) { rust_preserve_from_gc (decl); if (DECL_STRUCT_FUNCTION (decl) == NULL) diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index 15f21ef..48acbf34 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -611,7 +611,6 @@ Session::compile_crate (const char *filename) return; AST::CollectLangItems ().go (parsed_crate); - AST::DesugarQuestionMark ().go (parsed_crate); auto name_resolution_ctx = Resolver2_0::NameResolutionContext (); // expansion pipeline stage @@ -619,6 +618,7 @@ Session::compile_crate (const char *filename) expansion (parsed_crate, name_resolution_ctx); AST::DesugarForLoops ().go (parsed_crate); + AST::DesugarQuestionMark ().go (parsed_crate); rust_debug ("\033[0;31mSUCCESSFULLY FINISHED EXPANSION \033[0m"); if (options.dump_option_enabled (CompileOptions::EXPANSION_DUMP)) diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index 791795f..b2bcac0 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc @@ -16,6 +16,8 @@ // along with GCC; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. +#include "optional.h" +#include "rust-hir-expr.h" #include "rust-system.h" #include "rust-tyty-call.h" #include "rust-hir-type-check-struct-field.h" @@ -1154,6 +1156,94 @@ TypeCheckExpr::visit (HIR::FieldAccessExpr &expr) infered = lookup->get_field_type (); } +bool +is_default_fn (const MethodCandidate &candidate) +{ + if (candidate.candidate.is_impl_candidate ()) + { + auto *item = candidate.candidate.item.impl.impl_item; + + if (item->get_impl_item_type () == HIR::ImplItem::FUNCTION) + { + auto &fn = static_cast<HIR::Function &> (*item); + + return fn.is_default (); + } + } + + return false; +} + +void +emit_ambiguous_resolution_error (HIR::MethodCallExpr &expr, + std::set<MethodCandidate> &candidates) +{ + rich_location r (line_table, expr.get_method_name ().get_locus ()); + std::string rich_msg = "multiple " + + expr.get_method_name ().get_segment ().as_string () + + " found"; + + // We have to filter out default candidates + for (auto &c : candidates) + if (!is_default_fn (c)) + r.add_range (c.candidate.locus); + + r.add_fixit_replace (rich_msg.c_str ()); + + rust_error_at (r, ErrorCode::E0592, "duplicate definitions with name %qs", + expr.get_method_name ().get_segment ().as_string ().c_str ()); +} + +// We are allowed to have multiple candidates if they are all specializable +// functions or if all of them except one are specializable functions. +// In the later case, we just return a valid candidate without erroring out +// about ambiguity. If there are two or more specialized functions, then we +// error out. +// +// FIXME: The first case is not handled at the moment, so we error out +tl::optional<const MethodCandidate &> +handle_multiple_candidates (HIR::MethodCallExpr &expr, + std::set<MethodCandidate> &candidates) +{ + auto all_default = true; + tl::optional<const MethodCandidate &> found = tl::nullopt; + + for (auto &c : candidates) + { + if (!is_default_fn (c)) + { + all_default = false; + + // We haven't found a final candidate yet, so we can select + // this one. However, if we already have a candidate, then + // that means there are multiple non-default candidates - we + // must error out + if (!found) + { + found = c; + } + else + { + emit_ambiguous_resolution_error (expr, candidates); + return tl::nullopt; + } + } + } + + // None of the candidates were a non-default (specialized) function, so we + // error out + if (all_default) + { + rust_sorry_at (expr.get_locus (), + "cannot resolve method calls to non-specialized methods " + "(all function candidates are %qs)", + "default"); + return tl::nullopt; + } + + return found; +} + void TypeCheckExpr::visit (HIR::MethodCallExpr &expr) { @@ -1181,34 +1271,25 @@ TypeCheckExpr::visit (HIR::MethodCallExpr &expr) return; } - if (candidates.size () > 1) - { - rich_location r (line_table, expr.get_method_name ().get_locus ()); - std::string rich_msg - = "multiple " + expr.get_method_name ().get_segment ().as_string () - + " found"; + tl::optional<const MethodCandidate &> candidate = *candidates.begin (); - for (auto &c : candidates) - r.add_range (c.candidate.locus); + if (candidates.size () > 1) + candidate = handle_multiple_candidates (expr, candidates); - r.add_fixit_replace (rich_msg.c_str ()); + if (!candidate) + return; - rust_error_at ( - r, ErrorCode::E0592, "duplicate definitions with name %qs", - expr.get_method_name ().get_segment ().as_string ().c_str ()); - return; - } + auto found_candidate = *candidate; - auto candidate = *candidates.begin (); rust_debug_loc (expr.get_method_name ().get_locus (), "resolved method to: {%u} {%s} with [%lu] adjustments", - candidate.candidate.ty->get_ref (), - candidate.candidate.ty->debug_str ().c_str (), - (unsigned long) candidate.adjustments.size ()); + found_candidate.candidate.ty->get_ref (), + found_candidate.candidate.ty->debug_str ().c_str (), + (unsigned long) found_candidate.adjustments.size ()); // Get the adjusted self Adjuster adj (receiver_tyty); - TyTy::BaseType *adjusted_self = adj.adjust_type (candidate.adjustments); + TyTy::BaseType *adjusted_self = adj.adjust_type (found_candidate.adjustments); rust_debug ("receiver: %s adjusted self %s", receiver_tyty->debug_str ().c_str (), adjusted_self->debug_str ().c_str ()); @@ -1219,10 +1300,10 @@ TypeCheckExpr::visit (HIR::MethodCallExpr &expr) HirId autoderef_mappings_id = expr.get_receiver ().get_mappings ().get_hirid (); context->insert_autoderef_mappings (autoderef_mappings_id, - std::move (candidate.adjustments)); + std::move (found_candidate.adjustments)); - PathProbeCandidate &resolved_candidate = candidate.candidate; - TyTy::BaseType *lookup_tyty = candidate.candidate.ty; + PathProbeCandidate &resolved_candidate = found_candidate.candidate; + TyTy::BaseType *lookup_tyty = found_candidate.candidate.ty; NodeId resolved_node_id = resolved_candidate.is_impl_candidate () ? resolved_candidate.item.impl.impl_item->get_impl_mappings () @@ -1249,8 +1330,8 @@ TypeCheckExpr::visit (HIR::MethodCallExpr &expr) fn->prepare_higher_ranked_bounds (); rust_debug_loc (expr.get_locus (), "resolved method call to: {%u} {%s}", - candidate.candidate.ty->get_ref (), - candidate.candidate.ty->debug_str ().c_str ()); + found_candidate.candidate.ty->get_ref (), + found_candidate.candidate.ty->debug_str ().c_str ()); if (resolved_candidate.is_impl_candidate ()) { diff --git a/gcc/rust/util/rust-attribute-values.h b/gcc/rust/util/rust-attribute-values.h index 9ef5cc5..47e6a17 100644 --- a/gcc/rust/util/rust-attribute-values.h +++ b/gcc/rust/util/rust-attribute-values.h @@ -40,12 +40,14 @@ public: static constexpr auto &NO_MANGLE = "no_mangle"; static constexpr auto &REPR = "repr"; static constexpr auto &RUSTC_BUILTIN_MACRO = "rustc_builtin_macro"; + static constexpr auto &RUSTC_MACRO_TRANSPARENCY = "rustc_macro_transparency"; static constexpr auto &PATH = "path"; static constexpr auto &MACRO_USE = "macro_use"; static constexpr auto &MACRO_EXPORT = "macro_export"; static constexpr auto &PROC_MACRO = "proc_macro"; static constexpr auto &PROC_MACRO_DERIVE = "proc_macro_derive"; static constexpr auto &PROC_MACRO_ATTRIBUTE = "proc_macro_attribute"; + static constexpr auto &TARGET_FEATURE = "target_feature"; // From now on, these are reserved by the compiler and gated through // #![feature(rustc_attrs)] @@ -54,10 +56,35 @@ public: = "rustc_inherit_overflow_checks"; static constexpr auto &STABLE = "stable"; static constexpr auto &UNSTABLE = "unstable"; + + static constexpr auto &RUSTC_PROMOTABLE = "rustc_promotable"; static constexpr auto &RUSTC_CONST_STABLE = "rustc_const_stable"; static constexpr auto &RUSTC_CONST_UNSTABLE = "rustc_const_unstable"; + + static constexpr auto &RUSTC_SPECIALIZATION_TRAIT + = "rustc_specialization_trait"; + static constexpr auto &RUSTC_UNSAFE_SPECIALIZATION_MARKER + = "rustc_unsafe_specialization_marker"; + static constexpr auto &RUSTC_RESERVATION_IMPL = "rustc_reservation_impl"; + static constexpr auto &RUSTC_PAREN_SUGAR = "rustc_paren_sugar"; + static constexpr auto &RUSTC_NONNULL_OPTIMIZATION_GUARANTEED + = "rustc_nonnull_optimization_guaranteed"; + + static constexpr auto &RUSTC_LAYOUT_SCALAR_VALID_RANGE_START + = "rustc_layout_scalar_valid_range_start"; + static constexpr auto &MAY_DANGLE = "may_dangle"; static constexpr auto &PRELUDE_IMPORT = "prelude_import"; + static constexpr auto &TRACK_CALLER = "track_caller"; + + static constexpr auto &RUSTC_DIAGNOSTIC_ITEM = "rustc_diagnostic_item"; + static constexpr auto &RUSTC_ON_UNIMPLEMENTED = "rustc_on_unimplemented"; + + static constexpr auto &FUNDAMENTAL = "fundamental"; + + static constexpr auto &NON_EXHAUSTIVE = "non_exhaustive"; + + static constexpr auto &RUSTFMT = "rustfmt"; }; } // namespace Values } // namespace Rust diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc index 03452c7..c77e99c 100644 --- a/gcc/rust/util/rust-attributes.cc +++ b/gcc/rust/util/rust-attributes.cc @@ -57,6 +57,7 @@ static const BuiltinAttrDefinition __definitions[] {Attrs::NO_MANGLE, CODE_GENERATION}, {Attrs::REPR, CODE_GENERATION}, {Attrs::RUSTC_BUILTIN_MACRO, EXPANSION}, + {Attrs::RUSTC_MACRO_TRANSPARENCY, EXPANSION}, {Attrs::PATH, EXPANSION}, {Attrs::MACRO_USE, NAME_RESOLUTION}, {Attrs::MACRO_EXPORT, NAME_RESOLUTION}, @@ -72,10 +73,29 @@ static const BuiltinAttrDefinition __definitions[] {Attrs::RUSTC_INHERIT_OVERFLOW_CHECKS, CODE_GENERATION}, {Attrs::STABLE, STATIC_ANALYSIS}, {Attrs::UNSTABLE, STATIC_ANALYSIS}, + // assuming we keep these for static analysis + {Attrs::RUSTC_PROMOTABLE, CODE_GENERATION}, {Attrs::RUSTC_CONST_STABLE, STATIC_ANALYSIS}, {Attrs::RUSTC_CONST_UNSTABLE, STATIC_ANALYSIS}, - {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION}}; + {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION}, + {Attrs::TRACK_CALLER, CODE_GENERATION}, + {Attrs::RUSTC_SPECIALIZATION_TRAIT, TYPE_CHECK}, + {Attrs::RUSTC_UNSAFE_SPECIALIZATION_MARKER, TYPE_CHECK}, + {Attrs::RUSTC_RESERVATION_IMPL, TYPE_CHECK}, + {Attrs::RUSTC_PAREN_SUGAR, TYPE_CHECK}, + {Attrs::RUSTC_NONNULL_OPTIMIZATION_GUARANTEED, TYPE_CHECK}, + + {Attrs::RUSTC_LAYOUT_SCALAR_VALID_RANGE_START, CODE_GENERATION}, + + {Attrs::PRELUDE_IMPORT, NAME_RESOLUTION}, + + {Attrs::RUSTC_DIAGNOSTIC_ITEM, STATIC_ANALYSIS}, + {Attrs::RUSTC_ON_UNIMPLEMENTED, STATIC_ANALYSIS}, + + {Attrs::FUNDAMENTAL, TYPE_CHECK}, + {Attrs::NON_EXHAUSTIVE, TYPE_CHECK}, + {Attrs::RUSTFMT, EXTERNAL}}; BuiltinAttributeMappings * BuiltinAttributeMappings::get () diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h index c928c8e..7c7a1fc 100644 --- a/gcc/rust/util/rust-attributes.h +++ b/gcc/rust/util/rust-attributes.h @@ -40,7 +40,12 @@ enum CompilerPass HIR_LOWERING, TYPE_CHECK, STATIC_ANALYSIS, - CODE_GENERATION + CODE_GENERATION, + + // External Rust tooling attributes, like #[rustfmt::skip] + EXTERNAL, + + // Do we need to add something here for const fns? }; struct BuiltinAttrDefinition diff --git a/gcc/rust/util/rust-lang-item.cc b/gcc/rust/util/rust-lang-item.cc index a76cc7f..9aff31b 100644 --- a/gcc/rust/util/rust-lang-item.cc +++ b/gcc/rust/util/rust-lang-item.cc @@ -118,6 +118,7 @@ const BiMap<std::string, LangItem::Kind> Rust::LangItem::lang_items = {{ {"discriminant_kind", Kind::DISCRIMINANT_KIND}, {"discriminant_type", Kind::DISCRIMINANT_TYPE}, + {"manually_drop", Kind::MANUALLY_DROP}, }}; tl::optional<LangItem::Kind> diff --git a/gcc/rust/util/rust-lang-item.h b/gcc/rust/util/rust-lang-item.h index 8f3af36..67a5d9c 100644 --- a/gcc/rust/util/rust-lang-item.h +++ b/gcc/rust/util/rust-lang-item.h @@ -150,6 +150,8 @@ public: DISCRIMINANT_TYPE, DISCRIMINANT_KIND, + + MANUALLY_DROP, }; static const BiMap<std::string, Kind> lang_items; diff --git a/gcc/sanitizer.def b/gcc/sanitizer.def index 4b7c9dc..c5a9c2d 100644 --- a/gcc/sanitizer.def +++ b/gcc/sanitizer.def @@ -247,7 +247,7 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_INIT, "__tsan_init", DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_ENTRY, "__tsan_func_entry", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_EXIT, "__tsan_func_exit", - BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST) + BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_VPTR_UPDATE, "__tsan_vptr_update", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST) DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ1, "__tsan_read1", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f93a25b..af49263 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,871 @@ +2025-04-22 Jan Hubicka <hubicka@ucw.cz> + + * gcc.target/i386/pr89618-2.c: XFAIL. + +2025-04-22 Jakub Jelinek <jakub@redhat.com> + + PR target/119327 + * g++.dg/opt/pr119327.C: New test. + +2025-04-22 Richard Sandiford <richard.sandiford@arm.com> + + * gcc.target/aarch64/pragma_cpp_predefs_4.c: Test + __ARM_FEATURE_FAMINMAX. + +2025-04-22 Spencer Abson <spencer.abson@arm.com> + + * gcc.target/aarch64/_Float16_cmp_1.c: New test. + * gcc.target/aarch64/_Float16_cmp_2.c: New (negative) test. + +2025-04-22 Spencer Abson <spencer.abson@arm.com> + + PR target/117013 + * g++.target/aarch64/spaceship_1.C: New test. + * g++.target/aarch64/spaceship_2.C: New test. + * g++.target/aarch64/spaceship_3.C: New test. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + * gfortran.dg/coarray/coindexed_3.f08: Add minimal test for + get_team(). + * gfortran.dg/team_change_2.f90: Add test for change team with + label and exiting out of it. + * gfortran.dg/team_end_2.f90: Check parsing to labeled team + blocks is correct now. + * gfortran.dg/team_end_3.f90: Check that end_team call is + generated for labeled end_teams, too. + * gfortran.dg/coarray/coindexed_5.f90: New test. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + * gfortran.dg/coarray_49.f90: Adapt to changed error message. + * gfortran.dg/coarray_collectives_12.f90: Adapt to changed + function signature of num_images. + * gfortran.dg/coarray_collectives_16.f90: Same. + * gfortran.dg/coarray_lib_this_image_1.f90: Same. + * gfortran.dg/coarray_lib_this_image_2.f90: Same. + * gfortran.dg/coarray_this_image_1.f90: Adapt tests for + num_images. + * gfortran.dg/coarray_this_image_2.f90: Same. + * gfortran.dg/coarray_this_image_3.f90: Same. + * gfortran.dg/num_images_1.f90: Check that deprecated syntax is + no longer supported. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87326 + * gfortran.dg/coarray_10.f90: Update error messages. + * gfortran.dg/coarray_lib_this_image_1.f90: Same. + * gfortran.dg/coarray_lib_this_image_2.f90: Same. + * gfortran.dg/coarray_this_image_1.f90: Add more tests and + remove incorrect ones. + * gfortran.dg/coarray_this_image_2.f90: Test more features. + * gfortran.dg/coarray_this_image_3.f90: New test. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/88154 + PR fortran/88960 + PR fortran/97210 + PR fortran/103001 + * gfortran.dg/coarray/image_status_1.f08: Correct check for + team_type. + * gfortran.dg/pr102458.f90: Adapt to multiple errors. + * gfortran.dg/coarray/get_team_1.f90: New test. + * gfortran.dg/team_get_1.f90: New test. + * gfortran.dg/team_number_1.f90: Correct Fortran syntax. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87326 + PR fortran/87556 + PR fortran/88254 + PR fortran/103796 + * gfortran.dg/team_change_2.f90: New test. + * gfortran.dg/team_change_3.f90: New test. + * gfortran.dg/team_end_2.f90: New test. + * gfortran.dg/team_end_3.f90: New test. + * gfortran.dg/team_form_2.f90: New test. + * gfortran.dg/team_form_3.f90: New test. + * gfortran.dg/team_sync_2.f90: New test. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87939 + * gfortran.dg/coarray_critical_2.f90: New test. + * gfortran.dg/coarray_critical_3.f90: New test. + * gfortran.dg/team_sync_1.f90: New test. + * gfortran.dg/move_alloc_11.f90: New test. + +2025-04-22 Yixuan Chen <chenyixuan@iscas.ac.cn> + + * gcc.target/riscv/mcpu-xt-c908.c: test -mcpu=xt-c908. + * gcc.target/riscv/mcpu-xt-c910.c: test -mcpu=xt-c910. + * gcc.target/riscv/mcpu-xt-c920v2.c: test -mcpu=xt-c920v2. + * gcc.target/riscv/mcpu-xt-c908v.c: test -mcpu=xt-c908v. + * gcc.target/riscv/mcpu-xt-c910v2.c: test -mcpu=xt-c910v2. + * gcc.target/riscv/mcpu-xt-c920.c: test -mcpu=xt-c920. + +2025-04-22 Christophe Lyon <christophe.lyon@linaro.org> + + * g++.dg/gcov/gcov.exp: Handle GCOV_UNDER_TEST. + * gcc.misc-tests/gcov.exp: Likewise. + * gdc.dg/gcov.exp: Likewise. + * gnat.dg/gcov/gcov.exp: Likewise. + +2025-04-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.misc-tests/gcov-31.c (run_pending_traps): Use sigsetjmp + instead of __sigsetjmp. + +2025-04-22 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/119863 + * g++.dg/modules/tpl-friend-18_a.C: New test. + * g++.dg/modules/tpl-friend-18_b.C: New test. + * g++.dg/modules/tpl-friend-18_c.C: New test. + +2025-04-22 Andrew Pinski <quic_apinski@quicinc.com> + + * g++.dg/eh/pr119507.C: Skip for arm eabi. + +2025-04-22 Alexandre Oliva <oliva@adacore.com> + + * gcc.target/powerpc/power11-3.c: Require ifunc support. + +2025-04-21 Jason Merrill <jason@redhat.com> + + PR c++/118775 + * g++.dg/cpp2a/constexpr-new24.C: Adjust diagnostic. + +2025-04-21 Andrew Bennett <andrew.bennett@imgtec.com> + + * gcc.dg/memcpy-4.c: Remove mips specific code. + * gcc.target/mips/memcpy-2.c: New test. + +2025-04-21 Matthew Fortune <matthew.fortune@imgtec.com> + + * gcc.target/mips/clear-cache-1.c: Also allow jrc. + +2025-04-21 Matthew Fortune <matthew.fortune@imgtec.com> + + * gcc.dg/tree-ssa/ssa-dom-cse-2.c: Do not check output for + MIPS lp64 abi. + +2025-04-21 Andrew Pinski <quic_apinski@quicinc.com> + + PR middle-end/119507 + * g++.dg/eh/pr119507.C: New test. + +2025-04-21 hongtao.liu <hongtao.liu@intel.com> + + * gcc.target/i386/recip-vec-divf-fma.c: New test. + +2025-04-20 H.J. Lu <hjl.tools@gmail.com> + + PR target/117863 + * gcc.dg/rtl/i386/vector_eq-2.c: New test. + * gcc.dg/rtl/i386/vector_eq-3.c: Likewise. + +2025-04-19 Thomas Schwinge <tschwinge@baylibre.com> + + PR testsuite/119508 + * rust/compile/nr2/compile.exp: Disable parallel testing. + +2025-04-19 Co-authored-by: Jeff Law <jlaw@ventanamicro.com> + + PR target/118410 + * gcc.target/riscv/pr118410-1.c: New test. + * gcc.target/riscv/pr118410-2.c: Likewise. + +2025-04-19 Andrew Pinski <quic_apinski@quicinc.com> + + * gcc.dg/pr118947-1.c: Use 1025 as the size of the buf. + * gcc.dg/pr78408-3.c: Likewise. + +2025-04-19 Andrew Pinski <quic_apinski@quicinc.com> + + PR rtl-optimization/111949 + * gcc.target/aarch64/bic-1.c: New test. + +2025-04-19 Jiaxun Yang <jiaxun.yang@flygoat.com> + + PR target/111814 + * gcc.target/sh/pr111814.c: New test. + +2025-04-19 Maciej W. Rozycki <macro@orcam.me.uk> + + * gcc.target/alpha/memcpy-nested-offset-long.c: New file. + * gcc.target/alpha/memcpy-nested-offset-quad.c: New file. + +2025-04-19 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/119836 + * gfortran.dg/do_concurrent_all_clauses.f90: Remove invalid + dg-error test. + * gfortran.dg/pr119836_1.f90: New test. + * gfortran.dg/pr119836_2.f90: New test. + * gfortran.dg/pr119836_3.f90: New test. + * gfortran.dg/pr119836_4.f90: New test. + +2025-04-18 Thomas Schwinge <tschwinge@baylibre.com> + + PR cobol/119818 + * cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob: + 'dg-set-target-env-var TZ UTC0'. + +2025-04-18 Jeff Law <jlaw@ventanamicro.com> + + * gcc.target/riscv/bext-ext-2.c: New test + +2025-04-18 Jonathan Yong <10walls@gmail.com> + + * g++.dg/abi/ref-temp1.C: Replicate some test based on + PE expectations. + * lib/target-supports.exp: New check_effective_target_pe. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/87901 + * gcc.dg/tree-ssa/ssa-dse-53.c: New test. + * gcc.dg/tree-ssa/ssa-dse-54.c: New test. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/87901 + * gcc.dg/tree-ssa/ssa-dse-52.c: New test. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/118902 + * gcc.dg/tree-ssa/pr118902-1.c: New test. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/118947 + * gcc.dg/pr118947-1.c: New test. + +2025-04-18 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/78408 + PR tree-optimization/118947 + * gcc.dg/pr78408-3.c: New test. + +2025-04-18 Dimitar Dimitrov <dimitar@dinux.eu> + + * gcc.dg/pr116357.c: Use sizeof(int) instead of alignof(int). + +2025-04-18 Alexey Merzlyakov <alexey.merzlyakov@samsung.com> + + PR middle-end/108016 + * gcc.target/riscv/pr108016.c: New test. + +2025-04-18 kelefth <konstantinos.eleftheriou@vrull.eu> + + PR rtl-optimization/119160 + * gcc.dg/pr119160.c: New test. + +2025-04-18 Xing Li <lixing@loongson.cn> + + * gcc.target/loongarch/vector/loongarch-vector.exp: Change + {dg-do-what-default} save and restore logical. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp2a/constexpr-dtor16.C: Adjust diagnostic. + * g++.dg/cpp2a/constexpr-dynamic10.C: Likewise. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp1y/constexpr-new.C: Adjust diagnostics. + * g++.dg/cpp1z/constexpr-asm-5.C: Likewise. + * g++.dg/cpp26/static_assert1.C: Likewise. + * g++.dg/cpp2a/constexpr-dtor7.C: Likewise. + * g++.dg/cpp2a/constexpr-new26.C: Likewise. + * g++.dg/cpp2a/constexpr-new3.C: Likewise. + * g++.dg/cpp2a/constinit14.C: Likewise. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp26/pack-indexing2.C: Adjust diagnostics. + * g++.dg/ext/type_pack_element2.C: Likewise. + * g++.dg/ext/type_pack_element4.C: Likewise. + +2025-04-17 Tamar Christina <tamar.christina@arm.com> + + PR tree-optimization/119351 + * gcc.target/aarch64/sve/pr119351.c: New test. + * gcc.target/aarch64/sve/pr119351_run.c: New test. + +2025-04-17 Jakub Jelinek <jakub@redhat.com> + + PR target/119834 + * g++.target/s390/pr119834.C: New test. + +2025-04-17 Iain Buclaw <ibuclaw@gdcproject.org> + + * gdc.test/fail_compilation/test21247.d: New test. + * gdc.test/fail_compilation/test21247b.d: New test. + +2025-04-17 Jason Merrill <jason@redhat.com> + + PR c++/113360 + * g++.dg/cpp23/constexpr-nonlit18.C: Remove redundant message. + * g++.dg/cpp1y/constexpr-diag2.C: New test. + * g++.dg/cpp1y/pr63996.C: Adjust expected errors. + * g++.dg/template/explicit-args6.C: Likewise. + * g++.dg/cpp0x/constexpr-ice21.C: Likewise. + +2025-04-16 Alexandre Oliva <oliva@adacore.com> + + * gcc.dg/ipa/ipa-sra-19.c: Add -Wno-psabi on ppc-elf too. + +2025-04-16 Peter Bergner <bergner@linux.ibm.com> + + PR tree-optimization/112822 + * g++.dg/pr112822.C: Replace altivec vector attribute with a generic + vector attribute. + +2025-04-16 Eric Botcazou <ebotcazou@gcc.gnu.org> + + * gnat.dg/opt105.adb: New test. + * gnat.dg/opt105_pkg.ads, gnat.dg/opt105_pkg.adb: New helper. + +2025-04-16 Jason Merrill <jason@redhat.com> + + PR c++/114772 + PR c++/101180 + * g++.dg/ext/pragma-target2.C: New test. + +2025-04-16 Jason Merrill <jason@redhat.com> + + PR c++/116954 + * g++.dg/warn/Wformat-3.C: New test. + +2025-04-16 Ard Biesheuvel <ardb@kernel.org> + + PR target/119386 + * gcc.target/i386/pr119386-3.c: New test. + +2025-04-16 Ard Biesheuvel <ardb@kernel.org> + + PR target/119386 + * gcc.target/i386/pr119386-1.c: New test. + * gcc.target/i386/pr119386-2.c: New test. + +2025-04-16 Harald Anlauf <anlauf@gmx.de> + + PR fortran/106948 + * gfortran.dg/pure_formal_proc_4.f90: New test. + +2025-04-16 Jan Hubicka <hubicka@ucw.cz> + + * g++.dg/lto/pr119614_0.C: New test. + +2025-04-16 Tamar Christina <tamar.christina@arm.com> + + PR target/119286 + * gcc.dg/vect/vect-early-break_18.c: Force -march=gfx908 for amdgcn. + +2025-04-16 Tamar Christina <tamar.christina@arm.com> + + PR tree-optimization/119351 + * gcc.target/aarch64/sve/peel_ind_10.c: New test. + * gcc.target/aarch64/sve/peel_ind_10_run.c: New test. + * gcc.target/aarch64/sve/peel_ind_5.c: New test. + * gcc.target/aarch64/sve/peel_ind_5_run.c: New test. + * gcc.target/aarch64/sve/peel_ind_6.c: New test. + * gcc.target/aarch64/sve/peel_ind_6_run.c: New test. + * gcc.target/aarch64/sve/peel_ind_7.c: New test. + * gcc.target/aarch64/sve/peel_ind_7_run.c: New test. + * gcc.target/aarch64/sve/peel_ind_8.c: New test. + * gcc.target/aarch64/sve/peel_ind_8_run.c: New test. + * gcc.target/aarch64/sve/peel_ind_9.c: New test. + * gcc.target/aarch64/sve/peel_ind_9_run.c: New test. + +2025-04-16 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/119808 + * gcc.dg/bitint-121.c: New test. + +2025-04-16 Jesse Huang <jesse.huang@sifive.com> + + * gcc.target/riscv/gnu-property-align-rv32.c: New file. + * gcc.target/riscv/gnu-property-align-rv64.c: New file. + +2025-04-16 Kito Cheng <kito.cheng@sifive.com> + + * gcc.target/riscv/jump-table-large-code-model.c: New test. + +2025-04-16 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/116093 + * gcc.dg/bitint-122.c: New test. + +2025-04-16 Alice Carlotti <alice.carlotti@arm.com> + + * gcc.target/aarch64/acle/rwsr-ungated.c: New test. + +2025-04-15 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119826 + * gdc.dg/debug/imports/pr119826b.d: New test. + * gdc.dg/debug/pr119826.d: New test. + +2025-04-15 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/119755 + * g++.dg/modules/lambda-10_a.H: New test. + * g++.dg/modules/lambda-10_b.C: New test. + +2025-04-15 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/completion-2.c: Expect also -flto-partition=default line. + +2025-04-15 Qing Zhao <qing.zhao@oracle.com> + + PR c/119717 + * gcc.dg/pr119717.c: New test. + +2025-04-15 H.J. Lu <hjl.tools@gmail.com> + + PR target/119784 + * gcc.target/i386/apx-interrupt-1.c: Expect 31 .cfi_restore + directives. + +2025-04-15 Vineet Gupta <vineetg@rivosinc.com> + + PR target/119533 + * go.dg/pr119533-riscv.go: New test. + * go.dg/pr119533-riscv-2.go: New test. + +2025-04-15 Robin Dapp <rdapp@ventanamicro.com> + + PR target/119547 + * gcc.target/riscv/rvv/vsetvl/avl_single-68.c: xfail. + * g++.target/riscv/rvv/autovec/pr119547.C: New test. + * g++.target/riscv/rvv/autovec/pr119547-2.C: New test. + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Adjust. + +2025-04-15 Tobias Burnus <tburnus@baylibre.com> + + * gfortran.dg/gomp/map-alloc-comp-1.f90: Remove dg-error. + * gfortran.dg/gomp/polymorphic-mapping-2.f90: Update warn wording. + * gfortran.dg/gomp/polymorphic-mapping.f90: Change expected + diagnostic; some tests moved to ... + * gfortran.dg/gomp/polymorphic-mapping-1.f90: ... here as new test. + * gfortran.dg/gomp/polymorphic-mapping-3.f90: New test. + * gfortran.dg/gomp/polymorphic-mapping-4.f90: New test. + * gfortran.dg/gomp/polymorphic-mapping-5.f90: New test. + +2025-04-15 Martin Jambor <mjambor@suse.cz> + Jakub Jelinek <jakub@redhat.com> + + PR ipa/119803 + * gcc.dg/ipa/pr119803.c: New test. + +2025-04-15 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119799 + * gdc.dg/import-c/pr119799.d: New test. + * gdc.dg/import-c/pr119799c.c: New test. + +2025-04-15 Patrick Palka <ppalka@redhat.com> + + PR c++/119807 + PR c++/112288 + * g++.dg/template/friend86.C: New test. + * g++.dg/template/friend87.C: New test. + +2025-04-15 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119817 + * gdc.dg/debug/imports/m119817/a.d: New test. + * gdc.dg/debug/imports/m119817/b.d: New test. + * gdc.dg/debug/imports/m119817/package.d: New test. + * gdc.dg/debug/pr119817.d: New test. + +2025-04-15 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/119801 + * c-c++-common/tsan/pr119801.c: New test. + +2025-04-15 Jonathan Yong <10walls@gmail.com> + + * gcc.dg/Wbuiltin-declaration-mismatch-4.c: Make diagnostic + accept long long. + +2025-04-15 Jakub Jelinek <jakub@redhat.com> + + PR ipa/119318 + * gcc.dg/ipa/pr119318.c: Remove dg-additional-options, add -w to + dg-options. + +2025-04-15 Jason Merrill <jason@redhat.com> + + PR c++/113835 + * g++.dg/cpp2a/constexpr-vector1.C: New test. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/118794 + * g++.target/gcn/exceptions-bad_cast-2.C: Set + '-mno-fake-exceptions'. + * g++.target/gcn/exceptions-pr118794-1.C: Likewise. + * g++.target/gcn/exceptions-throw-2.C: Likewise. + * g++.target/nvptx/exceptions-bad_cast-2.C: Likewise. + * g++.target/nvptx/exceptions-pr118794-1.C: Likewise. + * g++.target/nvptx/exceptions-throw-2.C: Likewise. + * g++.target/gcn/exceptions-bad_cast-2_-mfake-exceptions.C: New. + * g++.target/gcn/exceptions-pr118794-1_-mfake-exceptions.C: + Likewise. + * g++.target/gcn/exceptions-throw-2_-mfake-exceptions.C: Likewise. + * g++.target/nvptx/exceptions-bad_cast-2_-mfake-exceptions.C: + Likewise. + * g++.target/nvptx/exceptions-pr118794-1_-mfake-exceptions.C: + Likewise. + * g++.target/nvptx/exceptions-throw-2_-mfake-exceptions.C: + Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/exceptions-throw-3.C: New. + * g++.target/nvptx/exceptions-throw-3.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/exceptions-throw-2.C: New. + * g++.target/nvptx/exceptions-throw-2.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/exceptions-throw-1.C: New. + * g++.target/nvptx/exceptions-throw-1.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/exceptions-bad_cast-3.C: New. + * g++.target/nvptx/exceptions-bad_cast-3.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/exceptions-bad_cast-2.C: New. + * g++.target/nvptx/exceptions-bad_cast-2.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/exceptions-bad_cast-1.C: New. + * g++.target/nvptx/exceptions-bad_cast-1.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/118794 + * g++.target/gcn/exceptions-pr118794-1.C: New. + * g++.target/nvptx/exceptions-pr118794-1.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR c++/119692 + * g++.target/gcn/pr119692-1-1.C: New. + * g++.target/nvptx/pr119692-1-1.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * g++.target/gcn/gcn.exp: New. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * lib/gcc-dg.exp (${tool}_load): Polish 'dg-output-file' test + logs. + +2025-04-14 Jakub Jelinek <jakub@redhat.com> + + PR ipa/119318 + * gcc.dg/ipa/pr119530.c (d): Change type from char to signed char. + (e): Change argument type from long to long long. + +2025-04-14 beamandala <mandalapubhavesh@gmail.com> + + * rust/compile/track_caller.rs: New test. + +2025-04-14 Owen Avery <powerboat9.gamer@gmail.com> + + * rust/compile/enum_discriminant2.rs: New test. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * rust/compile/format_args_extra_comma.rs: New test. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * rust/compile/macros/mbe/macro-issue3709-1.rs: New test. + * rust/compile/macros/mbe/macro-issue3709-2.rs: New test. + * rust/compile/macros/mbe/macro-issue3693.rs: New file. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * rust/compile/macros/mbe/macro-issue3708.rs: New test. + +2025-04-14 Arthur Cohen <arthur.cohen@embecosm.com> + + * rust/execute/torture/min_specialization2.rs: New test. + * rust/execute/torture/min_specialization3.rs: New test. + +2025-04-14 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/118476 + * gcc.dg/torture/pr118476-1.c: New test. + +2025-04-14 Patrick Palka <ppalka@redhat.com> + + PR c++/99214 + * g++.dg/concepts/diagnostic20.C: New test. + +2025-04-14 H.J. Lu <hjl.tools@gmail.com> + + PR target/119784 + * gcc.target/i386/pr119784a.c: New test. + * gcc.target/i386/pr119784b.c: Likewise. + +2025-04-14 Martin Jambor <mjambor@suse.cz> + + PR ipa/119318 + * gcc.dg/ipa/pr119318.c: New test. + * gcc.dg/ipa/pr119530.c: Likwise. + +2025-04-14 Richard Biener <rguenther@suse.de> + + PR tree-optimization/119757 + * gcc.dg/vect/pr119757.c: New testcase. + +2025-04-14 Richard Biener <rguenther@suse.de> + + PR tree-optimization/119778 + * g++.dg/torture/pr119778.C: New testcase. + +2025-04-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/119779 + * gm2.dg/doc/examples/pass/doc-examples-pass.exp: New test. + * gm2.dg/doc/examples/pass/exampleadd.mod: New test. + * gm2.dg/doc/examples/pass/exampleadd2.mod: New test. + * gm2.dg/doc/examples/pass/hello.mod: New test. + * gm2.dg/doc/examples/pass/hellopim.mod: New test. + +2025-04-14 Eric Botcazou <ebotcazou@adacore.com> + + PR lto/119792 + * gnat.dg/lto29.adb: New test. + * gnat.dg/lto29_pkg.ads: New helper. + +2025-04-13 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/119502 + * gfortran.dg/pr119502.f90: New test. + +2025-04-13 Nathaniel Shead <nathanieloshead@gmail.com> + + * g++.dg/modules/noexcept-4_a.H: New test. + * g++.dg/modules/noexcept-4_b.C: New test. + +2025-04-13 Nathaniel Shead <nathanieloshead@gmail.com> + + * g++.dg/modules/lambda-8_b.C: Adjust error. + * g++.dg/modules/leg-merge-4_c.C: Likewise. + +2025-04-13 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/119669 + * gfortran.dg/interface_59.f90: New test. + +2025-04-12 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119761 + * gdc.dg/import-c/import-c.exp: New test. + * gdc.dg/import-c/pr119761.d: New test. + * gdc.dg/import-c/pr119761c.c: New test. + +2025-04-12 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/109023 + * gdc.dg/torture/imports/pr109023.d: New test. + * gdc.dg/torture/pr109023.d: New test. + +2025-04-12 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119758 + * gdc.dg/driver_fonly1.d: New test. + * gdc.dg/driver_fonly2.d: New test. + * gdc.dg/driver_fonly3.d: New test. + * gdc.dg/imports/fonly.d: New test. + +2025-04-12 Andrew Pinski <quic_apinski@quicinc.com> + + PR testsuite/117706 + * gcc.dg/ira-shrinkwrap-prep-1.c: Unxfail for i?68-*-* and x86_64-*-*. + * gcc.dg/ira-shrinkwrap-prep-2.c: Likewise. + +2025-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/116416 + * g++.dg/cpp1y/constexpr-prvalue1.C: Adjust to instead inspect + the 'original' dump. + * g++.dg/cpp1y/constexpr-prvalue1a.C: New test. + +2025-04-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119722 + * gcc.dg/torture/bitint-77.c: New test. + +2025-04-12 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/renaming17.adb: New test. + +2025-04-12 Bob Dubner <rdubner@symas.com> + + PR cobol/119694 + * cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob: GCOBOL_CURRENT_DATE. + * cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob: Likewise + * cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob: Likewise + +2025-04-11 Christophe Lyon <christophe.lyon@linaro.org> + + * lib/target-supports.exp: Rename arm_v8_1_lob_ok into + arm_v8_1m_lob_hw. + Rename arm_thumb2_no_arm_v8_1_lob into + arm_thumb2_no_arm_v8_1m_lob. + Rename arm_thumb2_ok_no_arm_v8_1_lob into + arm_thumb2_ok_no_arm_v8_1m_lob. + * gcc.target/arm/lob1.c: Likewise. + * gcc.target/arm/lob6.c: Likewise. + * gcc.target/arm/ivopts.c: Likewise. + * gcc.target/arm/unsigned-extend-2.c: Likewise. + +2025-04-11 Andrew Pinski <quic_apinski@quicinc.com> + + PR rtl-optimization/118502 + * g++.dg/opt/shrink-wrapping-vector-1.C: New test. + +2025-04-11 Jeff Law <jlaw@ventanamicro.com> + + * gcc.target/riscv/rvv/base/pr115068-run.c: Turn off pedantic diagnostics. + * gcc.target/riscv/rvv/base/pr115068.c: Likewise. + * gcc.target/riscv/rvv/base/vwaddsub-1.c: Likewise. + +2025-04-11 Jason Merrill <jason@redhat.com> + + PR c++/114970 + * g++.dg/opt/is_constant_evaluated4.C: New test. + +2025-04-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/119707 + * gcc.dg/torture/bitint-76.c: New test. + +2025-04-11 Jennifer Schmitz <jschmitz@nvidia.com> + + PR tree-optimization/119706 + * g++.target/aarch64/sve/pr119706.C: New test. + +2025-04-11 Jonathan Yong <10walls@gmail.com> + + PR target/113633 + * gcc.dg/bf-ms-attrib.c: Fix expected __ms_struct__ layout + size. + +2025-04-11 Jonathan Yong <10walls@gmail.com> + + * c-c++-common/analyzer/realloc-1.c: Make diagnostic accept + long long for __builtin_realloc warning. + +2025-04-10 Jason Merrill <jason@redhat.com> + + PR c++/119345 + * g++.dg/cpp2a/lambda-targ14.C: New test. + +2025-04-10 Patrick Palka <ppalka@redhat.com> + + PR c++/119687 + * g++.dg/cpp23/class-deduction-inherited8.C: New test. + +2025-04-10 Bob Dubner <rdubner@symas.com> + + * cobol.dg/group2/Dynamic_reference_modification.cob: New testcase. + * cobol.dg/group2/Length_overflow__1_.cob: Likewise. + * cobol.dg/group2/Length_overflow__2_.cob: Likewise. + * cobol.dg/group2/Length_overflow_with_offset__1_.cob: Likewise. + * cobol.dg/group2/Length_overflow_with_offset__2_.cob: Likewise. + * cobol.dg/group2/Length_overflow_with_offset__3_.cob: Likewise. + * cobol.dg/group2/Offset_overflow.cob: Likewise. + * cobol.dg/group2/Offset_underflow.cob: Likewise. + * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob: Likewise. + * cobol.dg/group2/Refmod_sources_are_figurative_constants.cob: Likewise. + * cobol.dg/group2/Static_reference_modification.cob: Likewise. + * cobol.dg/group2/Dynamic_reference_modification.out: New known-good result. + * cobol.dg/group2/Length_overflow__1_.out: Likewise. + * cobol.dg/group2/Length_overflow__2_.out: Likewise. + * cobol.dg/group2/Length_overflow_with_offset__1_.out: Likewise. + * cobol.dg/group2/Length_overflow_with_offset__2_.out: Likewise. + * cobol.dg/group2/Length_overflow_with_offset__3_.out: Likewise. + * cobol.dg/group2/Offset_overflow.out: Likewise. + * cobol.dg/group2/Offset_underflow.out: Likewise. + * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out: Likewise. + * cobol.dg/group2/Refmod_sources_are_figurative_constants.out: Likewise. + * cobol.dg/group2/Static_reference_modification.out: Likewise. + +2025-04-10 Jason Merrill <jason@redhat.com> + + PR c++/119175 + * g++.dg/cpp2a/concepts-lambda23.C: New test. + +2025-04-10 Iain Sandoe <iain@sandoe.co.uk> + + * lib/cobol.exp: Add libquadmath paths. + +2025-04-10 Richard Sandiford <richard.sandiford@arm.com> + + PR tree-optimization/119399 + * gcc.dg/vect/pr119399.c: New test. + +2025-04-10 Kito Cheng <kito.cheng@sifive.com> + + * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c: Include local + riscv_vector.h. + * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c: Ditto. + * gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c: Ditto. + * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: Ditto. + * gcc.target/riscv/rvv/base/abi-callee-saved-1.c: Ditto. + * gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c: Ditto. + * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: Ditto. + * gcc.target/riscv/rvv/base/abi-callee-saved-2.c: Ditto. + * gcc.target/riscv/rvv/base/bug-10-2.c: Ditto. + * gcc.target/riscv/rvv/base/bug-10.c: Ditto. + * gcc.target/riscv/rvv/base/bug-7.c: Ditto. + * gcc.target/riscv/rvv/base/bug-8.c: Ditto. + * gcc.target/riscv/rvv/base/bug-9.c: Ditto. + * gcc.target/riscv/rvv/base/pr110943.c: Ditto. + * gcc.target/riscv/rvv/base/pr112431-21.c: Ditto. + * gcc.target/riscv/rvv/base/pr114639-1.c: Ditto. + * gcc.target/riscv/rvv/base/pr115068.c: Ditto. + * gcc.target/riscv/rvv/base/pr117286.c: Ditto. + * gcc.target/riscv/rvv/base/pr117544.c: Ditto. + * gcc.target/riscv/rvv/base/pr117955.c: Ditto. + * gcc.target/riscv/rvv/base/pr118872.c: Ditto. + * gcc.target/riscv/rvv/base/vlmul_ext-1.c: Ditto. + * gcc.target/riscv/rvv/base/vssubu-1.c: Ditto. + * gcc.target/riscv/rvv/base/vssubu-2.c: Ditto. + * gcc.target/riscv/rvv/base/vwaddsub-1.c: Ditto. + * gcc.target/riscv/rvv/vsetvl/pr111234.c: Ditto. + * gcc.target/riscv/rvv/vsetvl/pr115214.c: Ditto. + * gcc.target/riscv/rvv/vsetvl/vsetvl-24.c: Ditto. + * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c: Ditto. + * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c: Ditto. + * gcc.target/riscv/rvv/xtheadvector/pr116591.c: Ditto. + * gcc.target/riscv/rvv/xtheadvector/pr116592.c: Ditto. + * gcc.target/riscv/rvv/xtheadvector/pr118357.c: Ditto. + * gcc.target/riscv/rvv/xtheadvector/vsext.c: Ditto. + * gcc.target/riscv/rvv/xtheadvector/vzext.c: Ditto. + 2025-04-09 Patrick Palka <ppalka@redhat.com> PR c++/119574 diff --git a/gcc/testsuite/c-c++-common/analyzer/realloc-1.c b/gcc/testsuite/c-c++-common/analyzer/realloc-1.c index 04925cf..0bb846c 100644 --- a/gcc/testsuite/c-c++-common/analyzer/realloc-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/realloc-1.c @@ -92,5 +92,5 @@ void test_9 (void *p) void test_10 (char *s, int n) { __builtin_realloc(s, n); /* { dg-warning "ignoring return value of '__builtin_realloc' declared with attribute 'warn_unused_result'" "" { target c } } */ - /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )?unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */ + /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )*unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */ } /* { dg-warning "leak" } */ diff --git a/gcc/testsuite/c-c++-common/tsan/pr119801.c b/gcc/testsuite/c-c++-common/tsan/pr119801.c new file mode 100644 index 0000000..d3a6bb4 --- /dev/null +++ b/gcc/testsuite/c-c++-common/tsan/pr119801.c @@ -0,0 +1,24 @@ +/* PR sanitizer/119801 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=thread" } */ + +[[gnu::noipa]] int +bar (int *p) +{ + return ++*p; +} + +int +foo (int *p) +{ + ++*p; + [[gnu::musttail]] return bar (p); +} + +[[gnu::noinline]] int +baz (int x) +{ + if (x < 10) + return x; + [[gnu::musttail]] return baz (x - 2); +} diff --git a/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob b/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob index 7a404fd..be58878 100644 --- a/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob +++ b/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob @@ -1,5 +1,5 @@ *> { dg-do run } - *> { dg-set-target-env-var COB_CURRENT_DATE "2020/06/12 18:45:22" } + *> { dg-set-target-env-var GCOBOL_CURRENT_DATE "2020/06/12 18:45:22" } IDENTIFICATION DIVISION. PROGRAM-ID. prog. diff --git a/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob b/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob index 6014220..665787d 100644 --- a/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob +++ b/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob @@ -1,5 +1,5 @@ *> { dg-do run } - *> { dg-set-target-env-var COB_CURRENT_DATE "2015/04/05 18:45:22" } + *> { dg-set-target-env-var GCOBOL_CURRENT_DATE "2015/04/05 18:45:22" } *> { dg-output-file "group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.out" } IDENTIFICATION DIVISION. diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob index bb48bb0..88b1b84 100644 --- a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob +++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob @@ -1,4 +1,5 @@ *> { dg-do run } + *> { dg-set-target-env-var TZ UTC0 } identification division. program-id. test. @@ -79,7 +80,7 @@ 01 minus10 pic s99 value -10. - 01 forced_date_n pic X(64) VALUE Z"COB_CURRENT_DATE". + 01 forced_date_n pic X(64) VALUE Z"GCOBOL_CURRENT_DATE". 01 forced_date_v pic X(64) VALUE Z"1945/06/01 12:34:56". procedure division. diff --git a/gcc/testsuite/g++.dg/abi/ref-temp1.C b/gcc/testsuite/g++.dg/abi/ref-temp1.C index 70c9a7a..b02dcf6 100644 --- a/gcc/testsuite/g++.dg/abi/ref-temp1.C +++ b/gcc/testsuite/g++.dg/abi/ref-temp1.C @@ -7,11 +7,16 @@ struct B { const A (&x)[2]; }; template <typename T> B &&b = { { { { 1, 2, 3 } }, { { 4, 5, 6 } } } }; B &temp = b<void>; -// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE_" } } -// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE0_" } } -// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE1_" } } -// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE2_" } } +// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE_" { target { ! pe } } } } +// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE0_" { target { ! pe } } } } +// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE1_" { target { ! pe } } } } +// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE2_" { target { ! pe } } } } +// { dg-final { scan-assembler "\.section\t\.data\\\$_ZGR1bIvE_,\"w\"\n\t\.linkonce same_size" { target pe } } } +// { dg-final { scan-assembler "\.section\t\.rdata\\\$_ZGR1bIvE0_,\"dr\"\n\t\.linkonce same_size" { target pe } } } +// { dg-final { scan-assembler "\.section\t\.rdata\\\$_ZGR1bIvE1_,\"dr\"\n\t\.linkonce same_size" { target pe } } } +// { dg-final { scan-assembler "\.section\t\.rdata\\\$_ZGR1bIvE2_,\"dr\"\n\t\.linkonce same_size" { target pe } } } +// // { dg-final { scan-assembler "_ZGR1bIvE_:\n\[^\n]+_ZGR1bIvE0_" } } // { dg-final { scan-assembler "_ZGR1bIvE0_:\n\[^\n]+_ZGR1bIvE1_" } } // { dg-final { scan-assembler "_ZGR1bIvE1_:\n\[^\n]+\[ \t\]1" } } diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic20.C b/gcc/testsuite/g++.dg/concepts/diagnostic20.C new file mode 100644 index 0000000..2bb01db --- /dev/null +++ b/gcc/testsuite/g++.dg/concepts/diagnostic20.C @@ -0,0 +1,13 @@ +// PR c++/99214 +// { dg-do compile { target c++20 } } + +template <class T> +struct A { + template <class U> static void f() requires requires { T::fail; }; +}; + +int main() { + A<int>::f<char>(); // { dg-error "no match" } +} + +// { dg-message "In substitution of '\[^\r\n\]* \\\[with U = char\\\]'" "" { target *-*-* } 0 } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice21.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice21.C index 4627365..dcc4044 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice21.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice21.C @@ -3,7 +3,7 @@ struct NoMut1 { int a, b; }; struct NoMut3 : virtual NoMut1 { - constexpr NoMut3(int a, int b) // { dg-error "virtual base" "" { target c++23 } } + constexpr NoMut3(int a, int b) : NoMut1{a, b} {} // { dg-error "virtual base" } }; diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-diag2.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-diag2.C new file mode 100644 index 0000000..93f3f10 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-diag2.C @@ -0,0 +1,12 @@ +// PR c++/113360 +// { dg-do compile { target c++14 } } + +constexpr bool init_list() // { dg-bogus "because" } +{ + int total{}; + for (int x : {1, 2, 3}) // { dg-error "initializer list" } + total += x; + return total == 6; +} + +static_assert(init_list(), ""); // { dg-error "constant" } diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-new.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-new.C index d0ca0b7..f4c6d2e 100644 --- a/gcc/testsuite/g++.dg/cpp1y/constexpr-new.C +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-new.C @@ -6,7 +6,9 @@ constexpr int *f4(bool b) { return nullptr; } else { return new int{42}; // { dg-error "call to non-.constexpr." "" { target c++17_down } } - } // { dg-error "is not a constant expression because allocated storage has not been deallocated" "" { target c++2a } .-1 } + // { dg-message "allocated here" "" { target c++20 } .-1 } + } } static_assert(f4(true) == nullptr, ""); -static_assert(f4(false) == nullptr, ""); // { dg-error "non-.constant. condition|" } +static_assert(f4(false) == nullptr, ""); // { dg-error "non-constant condition" } +// { dg-error "is not a constant expression because allocated storage has not been deallocated" "" { target c++20 } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1.C index ad31e30..6ad2ec8 100644 --- a/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1.C +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1.C @@ -1,6 +1,6 @@ // PR c++/116416 // { dg-do compile { target c++14 } } -// { dg-options "-O" } +// { dg-options "-O -fdump-tree-original" } struct Str { constexpr Str() {} @@ -17,14 +17,16 @@ extern void callback(Str str); void func1() { - callback(Str{"Test"}); + callback(Str{"Test1"}); } void func2() { - Str str{"Test"}; + Str str{"Test2"}; callback(str); } -// Check that we don't call Str::Str(char const*) -// { dg-final { scan-assembler-not "_ZN3StrC1EPKc" } } +// Check that the front end folds both the temporary initializer and +// that of 'str'. +// { dg-final { scan-tree-dump "{.str=\\(const char \\*\\) \"Test1\", .length=5}" "original" } } +// { dg-final { scan-tree-dump "{.str=\\(const char \\*\\) \"Test2\", .length=5}" "original" } } diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1a.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1a.C new file mode 100644 index 0000000..54176bf --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1a.C @@ -0,0 +1,33 @@ +// PR c++/116416 +// A version of constexpr-prvalue1.C that calls __builtin_is_constant_evaluated. +// { dg-do compile { target c++14 } } +// { dg-options "-O -fdump-tree-original" } + +struct Str { + constexpr Str() {} + constexpr Str(const char *instr) { + str = instr; length = 0; + for (auto index = 0; instr[index]; ++index) { + length += __builtin_is_constant_evaluated() ? 1 : 1; + } + } + const char *str = nullptr; + int length = 0; +}; +extern void callback(Str str); +void +func1() +{ + callback(Str{"Test1"}); +} +void +func2() +{ + Str str{"Test2"}; + callback(str); +} + +// Check that the front end folds both the temporary initializer and +// that of 'str'. +// { dg-final { scan-tree-dump "{.str=\\(const char \\*\\) \"Test1\", .length=5}" "original" } } +// { dg-final { scan-tree-dump "{.str=\\(const char \\*\\) \"Test2\", .length=5}" "original" } } diff --git a/gcc/testsuite/g++.dg/cpp1y/pr63996.C b/gcc/testsuite/g++.dg/cpp1y/pr63996.C index 8eee2e0..347c86c 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr63996.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr63996.C @@ -1,5 +1,4 @@ // { dg-do compile { target c++14 } } -// { dg-additional-options "-Wno-return-type" } constexpr int foo (int i) @@ -8,4 +7,4 @@ foo (int i) if (i == 23) return 0; } -constexpr int j = foo (1); // { dg-error "flows off the end|in .constexpr. expansion of" } +constexpr int j = foo (1); diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C index bcecea9..35beb27 100644 --- a/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C +++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C @@ -28,7 +28,7 @@ struct M { constexpr K size () const { return {}; } constexpr L data () const { return {}; } }; #if __cpp_constexpr_dynamic_alloc >= 201907L struct N { constexpr int size () const { return 3; } - constexpr const char *data () const { return new char[3] { 'b', 'a', 'd' }; } }; // { dg-error "'\\\* N\\\(\\\).N::data\\\(\\\)' is not a constant expression because allocated storage has not been deallocated" "" { target c++20 } } + constexpr const char *data () const { return new char[3] { 'b', 'a', 'd' }; } }; #endif constexpr const char a[] = { 't', 'e', 's', 't' }; struct O { constexpr int size () const { return 4; } @@ -117,6 +117,7 @@ foo () asm ((M {})); #if __cpp_constexpr_dynamic_alloc >= 201907L asm ((N {})); // { dg-error "constexpr string 'data\\\(\\\)\\\[0\\\]' must be a constant expression" "" { target c++20 } } + // { dg-error "'\\\* N\\\(\\\).N::data\\\(\\\)' is not a constant expression because allocated storage has not been deallocated" "" { target c++20 } .-1 } #endif asm ((O {})); asm ((P (0))); @@ -190,6 +191,7 @@ bar () asm ((M {})); #if __cpp_constexpr_dynamic_alloc >= 201907L asm ((N {})); // { dg-error "constexpr string 'data\\\(\\\)\\\[0\\\]' must be a constant expression" "" { target c++20 } } + // { dg-error "'\\\* N\\\(\\\).N::data\\\(\\\)' is not a constant expression because allocated storage has not been deallocated" "" { target c++20 } .-1 } #endif asm ((O {})); asm ((P (0))); diff --git a/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C new file mode 100644 index 0000000..4494c70 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C @@ -0,0 +1,21 @@ +// PR c++/119687 +// { dg-do compile { target c++17 } } + +template <typename> class QFlagsStorage{}; + +template <typename Enum> struct QFlagsStorageHelper : QFlagsStorage<Enum> { + using QFlagsStorage<Enum>::QFlagsStorage; + +public: + QFlagsStorageHelper(Enum); +}; + +template <typename Enum> struct QFlags : public QFlagsStorageHelper<Enum> { + using Base = QFlagsStorageHelper<Enum>; + using Base::Base; + QFlags(Enum); +}; + +void f(int flag) { + QFlags{int{}}; +} diff --git a/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit18.C b/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit18.C index 8e230ef..f891814 100644 --- a/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit18.C +++ b/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit18.C @@ -24,7 +24,7 @@ f3 () } constexpr int -f4 () // { dg-message "declared here" "" { target c++20_down } } +f4 () { // { dg-message "is not usable as a 'constexpr' function because:" "" { target c++23 } .-1 } static const int a = f1 (1); // { dg-error "'a' defined 'static' in 'constexpr' function only available with" "" { target c++20_down } } return 0; // { dg-error "'a' defined 'static' in 'constexpr' context" "" { target c++23 } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp26/pack-indexing2.C b/gcc/testsuite/g++.dg/cpp26/pack-indexing2.C index fdc8320..4a7e494 100644 --- a/gcc/testsuite/g++.dg/cpp26/pack-indexing2.C +++ b/gcc/testsuite/g++.dg/cpp26/pack-indexing2.C @@ -49,7 +49,7 @@ template<int N> int getT2 (auto... Ts) { - return Ts...[N]; // { dg-error "pack index is negative" } + return Ts...[N]; // { dg-error "pack index '-1' is negative" } } template<auto N, typename... Ts> @@ -63,7 +63,7 @@ template<auto N, typename... Ts> void badtype2 () { - Ts...[N] t; // { dg-error "pack index is out of range" } + Ts...[N] t; // { dg-error "pack index '1' is out of range for pack of length '1'" } } template<auto N, typename... Ts> @@ -77,7 +77,7 @@ template<auto N, typename... Ts> void badtype4 () { - Ts...[N] t; // { dg-error "pack index is negative" } + Ts...[N] t; // { dg-error "pack index '-1' is negative" } } int nonconst () { return 42; } diff --git a/gcc/testsuite/g++.dg/cpp26/static_assert1.C b/gcc/testsuite/g++.dg/cpp26/static_assert1.C index f9ac831..1d0e6f2 100644 --- a/gcc/testsuite/g++.dg/cpp26/static_assert1.C +++ b/gcc/testsuite/g++.dg/cpp26/static_assert1.C @@ -69,10 +69,11 @@ static_assert (false, M {}); // { dg-warning "'static_assert' with non-string me // { dg-error "static assertion failed: test" "" { target *-*-* } .-1 } #if __cpp_constexpr_dynamic_alloc >= 201907L struct N { constexpr int size () const { return 3; } - constexpr const char *data () const { return new char[3] { 'b', 'a', 'd' }; } }; // { dg-error "'\\\* N\\\(\\\).N::data\\\(\\\)' is not a constant expression because allocated storage has not been deallocated" "" { target c++20 } } + constexpr const char *data () const { return new char[3] { 'b', 'a', 'd' }; } }; static_assert (true, N {}); // { dg-warning "'static_assert' with non-string message only available with" "" { target { c++20 && c++23_down } } } static_assert (false, N {}); // { dg-warning "'static_assert' with non-string message only available with" "" { target { c++20 && c++23_down } } } // { dg-error "constexpr string 'data\\\(\\\)\\\[0\\\]' must be a constant expression" "" { target c++20 } .-1 } + // { dg-error "'\\\* N\\\(\\\).N::data\\\(\\\)' is not a constant expression because allocated storage has not been deallocated" "" { target c++20 } .-2 } #endif constexpr const char a[] = { 't', 'e', 's', 't' }; struct O { constexpr int size () const { return 4; } diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C index b84aaf9..99d1307 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C @@ -3,5 +3,5 @@ struct A { virtual ~A (); }; struct B : virtual A { constexpr ~B () {} }; -// { dg-error "'struct B' has virtual base classes" "" { target c++20 } .-1 } +// { dg-error "'constexpr' destructor in 'struct B' that has virtual base classes" "" { target c++20 } .-1 } // { dg-error "'constexpr' destructors only available with" "" { target c++17_down } .-2 } diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor7.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor7.C index 463eaca..f4546c1 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor7.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor7.C @@ -3,7 +3,7 @@ struct S { int *s; - constexpr S () : s(new int) {} // { dg-error "is not a constant expression because allocated storage has not been deallocated" } + constexpr S () : s(new int) {} S (const S &) = delete; S &operator= (const S &) = delete; constexpr ~S () { delete s; } @@ -17,3 +17,4 @@ foo (S v) } static_assert (foo (S ())); // { dg-error "non-constant condition for static assertion" } +// { dg-error "is not a constant expression because allocated storage has not been deallocated" "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic10.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic10.C index f9f8223..e543ce4 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic10.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic10.C @@ -5,7 +5,7 @@ struct C { virtual void a(); }; struct B { virtual void b(); }; -struct A : virtual B, C { virtual void c(); }; // { dg-error ".struct A. has virtual base classes" } +struct A : virtual B, C { virtual void c(); }; // { dg-error "virtual base classes" } constexpr A a; // { dg-error "call" } diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C index ee62f18..17c9f54 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C @@ -6,14 +6,14 @@ int a; constexpr char * f1 () { - constexpr auto p = new char[(long int) &a]; // { dg-error "size not constant" } + constexpr auto p = new char[(long int) &a]; // { dg-error "conversion from pointer" } return p; } constexpr char * f2 () { - auto p = new char[(long int) &a]; // { dg-error "size not constant" } + auto p = new char[(long int) &a]; // { dg-error "conversion from pointer" } return p; } diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new26.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new26.C index c82bd43..d8e53b2 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-new26.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new26.C @@ -4,7 +4,7 @@ constexpr int * f7 () { - int *p = new int (2); // { dg-error "is not a constant expression because it refers to a result of" } + int *p = new int (2); // { dg-message "allocated here" } delete p; return p; } @@ -12,6 +12,5 @@ f7 () void g () { - constexpr auto v7 = f7 (); + constexpr auto v7 = f7 (); // { dg-error "is not a constant expression because it refers to a result of" } } - diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new3.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new3.C index 5d9f1925..30e453e 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-new3.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new3.C @@ -5,19 +5,19 @@ constexpr int * f1 () { - return new int (2); // { dg-error "is not a constant expression because it refers to a result of" } + return new int (2); // { dg-message "allocated here" } } -constexpr auto v1 = f1 (); +constexpr auto v1 = f1 (); // { dg-error "is not a constant expression because it refers to a result of" } constexpr bool f2 () { - int *p = new int (3); // { dg-error "is not a constant expression because allocated storage has not been deallocated" } + int *p = new int (3); // { dg-message "allocated here" } return false; } -constexpr auto v2 = f2 (); +constexpr auto v2 = f2 (); // { dg-error "is not a constant expression because allocated storage has not been deallocated" } constexpr bool f3 () @@ -64,12 +64,12 @@ constexpr auto v6 = f6 (); // { dg-message "in 'constexpr' expansion of" } constexpr int * f7 () { - int *p = new int (2); // { dg-error "is not a constant expression because it refers to a result of" } + int *p = new int (2); // { dg-message "allocated here" } delete p; return p; } -constexpr auto v7 = f7 (); +constexpr auto v7 = f7 (); // { dg-error "is not a constant expression because it refers to a result of" } constexpr bool f8_impl (int *p) diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C new file mode 100644 index 0000000..196c6ec --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C @@ -0,0 +1,8 @@ +// PR c++/113835 +// { dg-timeout-factor 0.05 } +// { dg-do compile { target c++20_only } } + +#include <vector> +const std::size_t N = 1'000'000; +std::vector<int> x(N); +int main() {} diff --git a/gcc/testsuite/g++.dg/cpp2a/constinit14.C b/gcc/testsuite/g++.dg/cpp2a/constinit14.C index 06c4cb4..26d82fe67 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constinit14.C +++ b/gcc/testsuite/g++.dg/cpp2a/constinit14.C @@ -2,12 +2,13 @@ // { dg-do compile { target c++20 } } struct Value { - Value() : v{new int{42}} {} // { dg-error "result of 'operator new'" "" { target implicit_constexpr } } + Value() : v{new int{42}} {} int* v; }; struct S { static constinit inline Value v{}; // { dg-error "variable .S::v. does not have a constant initializer|call to non-.constexpr. function" } + // { dg-error "result of 'operator new'" "" { target implicit_constexpr } .-1 } }; int main() { return *S::v.v; } diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C new file mode 100644 index 0000000..debb15e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C @@ -0,0 +1,12 @@ +// PR c++/119345 +// { dg-do compile { target c++20 } } + +void f(auto... args) { + [args...]<int... i> { + (..., [args...] { i; }); + }.template operator()<0>(); +} + +int main() { + f(); +} diff --git a/gcc/testsuite/g++.dg/eh/pr119507.C b/gcc/testsuite/g++.dg/eh/pr119507.C new file mode 100644 index 0000000..168779b --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/pr119507.C @@ -0,0 +1,21 @@ +// { dg-do compile { target comdat_group } } +// ARM EABI has its own exception handling data handling and does not use gcc_except_table +// { dg-skip-if "!TARGET_EXCEPTION_DATA" { arm_eabi } } +// Solaris/SPARC as uses a widely different COMDAT section syntax. +// { dg-skip-if "Solaris/SPARC as syntax" { sparc*-*-solaris2* && { ! gas } } } +// Force off function sections +// Force on exceptions +// { dg-options "-fno-function-sections -fexceptions" } +// PR middle-end/119507 + + +inline int comdat() { try { throw 1; } catch (int) { return 1; } return 0; } +int another_func_with_exception() { try { throw 1; } catch (int) { return 1; } return 0; } +inline int comdat1() { try { throw 1; } catch (int) { return 1; } return 0; } +int foo() { return comdat() + comdat1(); } + +// Make sure the gcc puts the exception table for both comdat and comdat1 in their own section +// { dg-final { scan-assembler-times ".section\[\t \]\[^\n\]*.gcc_except_table._Z6comdatv" 1 } } +// { dg-final { scan-assembler-times ".section\[\t \]\[^\n\]*.gcc_except_table._Z7comdat1v" 1 } } +// There should be 3 exception tables, +// { dg-final { scan-assembler-times ".section\[\t \]\[^\n\]*.gcc_except_table" 3 } } diff --git a/gcc/testsuite/g++.dg/ext/pragma-target2.C b/gcc/testsuite/g++.dg/ext/pragma-target2.C new file mode 100644 index 0000000..53eb7dd --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/pragma-target2.C @@ -0,0 +1,18 @@ +// PR c++/114772 +// { dg-do compile { target x86_64-*-* } } + +template<typename V, bool STREAMING> +inline __attribute__((always_inline)) +__attribute__((warn_unused_result)) +int walk_document(V visitor) {return 0;} + +template<bool STREAMING> +void parse_document() { + int r = walk_document<bool, STREAMING>(false); +} + +void stage2_next() { + parse_document<true>(); +} + +#pragma GCC target("pclmul") diff --git a/gcc/testsuite/g++.dg/ext/type_pack_element2.C b/gcc/testsuite/g++.dg/ext/type_pack_element2.C index 1bf7753..1b07673 100644 --- a/gcc/testsuite/g++.dg/ext/type_pack_element2.C +++ b/gcc/testsuite/g++.dg/ext/type_pack_element2.C @@ -2,7 +2,7 @@ int p; -using type = __type_pack_element<&p, int>; // { dg-error "not an integral constant" } +using type = __type_pack_element<&p, int>; // { dg-error "non-integral type" } using type = __type_pack_element<1, int>; // { dg-error "out of range" } using type = __type_pack_element<2, int, char>; // { dg-error "out of range" } using type = __type_pack_element<-1, int>; // { dg-error "negative" } diff --git a/gcc/testsuite/g++.dg/ext/type_pack_element4.C b/gcc/testsuite/g++.dg/ext/type_pack_element4.C index aa508c7..5a39194 100644 --- a/gcc/testsuite/g++.dg/ext/type_pack_element4.C +++ b/gcc/testsuite/g++.dg/ext/type_pack_element4.C @@ -3,7 +3,7 @@ template <typename... _Elements> class tuple{}; template <unsigned long __i, typename... _Elements> -__type_pack_element<__i, _Elements...> &get(tuple<_Elements...> &__t) noexcept; // { dg-error "index is out of range" } +__type_pack_element<__i, _Elements...> &get(tuple<_Elements...> &__t) noexcept; // { dg-error "out of range" } tuple<int,int> data; template <unsigned long Level> unsigned take_impl(unsigned idx) { diff --git a/gcc/testsuite/g++.dg/gcov/gcov.exp b/gcc/testsuite/g++.dg/gcov/gcov.exp index 50f60c4..04c7c95 100644 --- a/gcc/testsuite/g++.dg/gcov/gcov.exp +++ b/gcc/testsuite/g++.dg/gcov/gcov.exp @@ -21,12 +21,19 @@ load_lib g++-dg.exp load_lib gcov.exp global GXX_UNDER_TEST +global GCOV_UNDER_TEST -# Find gcov in the same directory as $GXX_UNDER_TEST. -if { ![is_remote host] && [string match "*/*" [lindex $GXX_UNDER_TEST 0]] } { - set GCOV [file dirname [lindex $GXX_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] +# Find gcov in the same directory as $GXX_UNDER_TEST, unless +# GCOV_UNDER_TEST is defined. + +if ![info exists GCOV_UNDER_TEST] { + if { ![is_remote host] && [string match "*/*" [lindex $GXX_UNDER_TEST 0]] } { + set GCOV [file dirname [lindex $GXX_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] + } else { + set GCOV [gcc-transform-out-of-tree gcov] + } } else { - set GCOV [gcc-transform-out-of-tree gcov] + set GCOV $GCOV_UNDER_TEST } # Initialize harness. diff --git a/gcc/testsuite/g++.dg/lto/pr119614_0.C b/gcc/testsuite/g++.dg/lto/pr119614_0.C new file mode 100644 index 0000000..09c07fb --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr119614_0.C @@ -0,0 +1,34 @@ +// PR tree-optimization/119614 +// { dg-lto-do link } +// { dg-lto-options { { -O2 -fPIC -flto -flto-partition=max } } } +// { dg-require-effective-target shared } +// { dg-require-effective-target fpic } +// { dg-require-effective-target musttail } +// { dg-extra-ld-options "-shared" } + +struct S {} b; +char *foo (); +int e, g; +void bar (); +void corge (S); + +[[gnu::noinline]] static char * +baz () +{ + bar (); + return 0; +} + +const char * +qux () +{ + if (e) + { + S a = b; + corge (a); + if (g) + return 0; + [[gnu::musttail]] return baz (); + } + return foo (); +} diff --git a/gcc/testsuite/g++.dg/modules/lambda-10_a.H b/gcc/testsuite/g++.dg/modules/lambda-10_a.H new file mode 100644 index 0000000..1ad1a80 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lambda-10_a.H @@ -0,0 +1,17 @@ +// PR c++/119755 +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } + +template <typename _Out> void format(_Out) { + constexpr int __term = 1; + [&] { __term; }; + [&] { const int outer = __term; { __term; } }; + [&]() noexcept { __term; }; + [&]() noexcept { const int outer = __term; { __term; } }; + [&](auto) { int n[__term]; }(0); + [&](auto) noexcept { int n[__term]; }(0); +} + +inline void vformat() { + format(0); +} diff --git a/gcc/testsuite/g++.dg/modules/lambda-10_b.C b/gcc/testsuite/g++.dg/modules/lambda-10_b.C new file mode 100644 index 0000000..3556bce --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lambda-10_b.C @@ -0,0 +1,7 @@ +// PR c++/119755 +// { dg-additional-options "-fmodules" } + +import "lambda-10_a.H"; +int main() { + vformat(); +} diff --git a/gcc/testsuite/g++.dg/modules/lambda-8_b.C b/gcc/testsuite/g++.dg/modules/lambda-8_b.C index 7ace494..96578ba 100644 --- a/gcc/testsuite/g++.dg/modules/lambda-8_b.C +++ b/gcc/testsuite/g++.dg/modules/lambda-8_b.C @@ -4,4 +4,4 @@ #include "lambda-8.h" import "lambda-8_a.H"; -// { dg-error "conflicting global module declaration" "" { target *-*-* } 0 } +// { dg-error "conflicting imported declaration" "" { target *-*-* } 0 } diff --git a/gcc/testsuite/g++.dg/modules/leg-merge-4_c.C b/gcc/testsuite/g++.dg/modules/leg-merge-4_c.C index f1b1aeb..5756057 100644 --- a/gcc/testsuite/g++.dg/modules/leg-merge-4_c.C +++ b/gcc/testsuite/g++.dg/modules/leg-merge-4_c.C @@ -11,8 +11,8 @@ void foo () X *p; } -// { dg-regexp "\nIn module \[^\n]*leg-merge-4_b.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_b.H:4:\[0-9]*: error: conflicting global module declaration 'float bob'\nIn module \[^\n]*leg-merge-4_a.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_a.H:4:\[0-9]*: note: existing declaration 'int bob'\n\[^\n]*leg-merge-4_c.C:9:\[0-9]*: note: during load of binding '::bob'$" } +// { dg-regexp "\nIn module \[^\n]*leg-merge-4_b.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_b.H:4:\[0-9]*: error: conflicting type for imported declaration 'float bob'\nIn module \[^\n]*leg-merge-4_a.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_a.H:4:\[0-9]*: note: existing declaration 'int bob'\n\[^\n]*leg-merge-4_c.C:9:\[0-9]*: note: during load of binding '::bob'$" } -// { dg-regexp "\nIn module \[^\n]*leg-merge-4_b.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_b.H:5:\[0-9]*: error: conflicting global module declaration 'int frob\\(\\)'\nIn module \[^\n]*leg-merge-4_a.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_a.H:5:\[0-9]*: note: existing declaration 'void frob\\(\\)'\n\[^\n]*leg-merge-4_c.C:10:\[0-9]*: note: during load of binding '::frob'$" } +// { dg-regexp "\nIn module \[^\n]*leg-merge-4_b.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_b.H:5:\[0-9]*: error: conflicting type for imported declaration 'int frob\\(\\)'\nIn module \[^\n]*leg-merge-4_a.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_a.H:5:\[0-9]*: note: existing declaration 'void frob\\(\\)'\n\[^\n]*leg-merge-4_c.C:10:\[0-9]*: note: during load of binding '::frob'$" } -// { dg-regexp "In module \[^\n]*leg-merge-4_b.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_b.H:6:\[0-9]*: error: conflicting global module declaration 'union X'\nIn module \[^\n]*leg-merge-4_a.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_a.H:6:\[0-9]*: note: existing declaration 'class X'\n\[^\n]*leg-merge-4_c.C:11:\[0-9]*: note: during load of binding '::X'$" } +// { dg-regexp "In module \[^\n]*leg-merge-4_b.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_b.H:6:\[0-9]*: error: conflicting type for imported declaration 'union X'\nIn module \[^\n]*leg-merge-4_a.H, imported at \[^\n]*leg-merge-4_c.C:\[0-9]*:\n\[^\n]*leg-merge-4_a.H:6:\[0-9]*: note: existing declaration 'class X'\n\[^\n]*leg-merge-4_c.C:11:\[0-9]*: note: during load of binding '::X'$" } diff --git a/gcc/testsuite/g++.dg/modules/noexcept-4_a.H b/gcc/testsuite/g++.dg/modules/noexcept-4_a.H new file mode 100644 index 0000000..b888a1b --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/noexcept-4_a.H @@ -0,0 +1,6 @@ +// { dg-additional-options "-fmodule-header -std=c++20" } +// { dg-module-cmi {} } + +struct exception_ptr { + friend bool operator==(const exception_ptr&, const exception_ptr&) = default; +}; diff --git a/gcc/testsuite/g++.dg/modules/noexcept-4_b.C b/gcc/testsuite/g++.dg/modules/noexcept-4_b.C new file mode 100644 index 0000000..7cc5531 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/noexcept-4_b.C @@ -0,0 +1,18 @@ +// { dg-additional-options "-fmodules -std=c++20" } + +struct exception_ptr { + friend bool operator==(const exception_ptr&, const exception_ptr&) = default; +}; + +void enqueue() { + exception_ptr e; + e == e; +} + +import "noexcept-4_a.H"; + +int main() { + constexpr exception_ptr e; + static_assert(e == e); + static_assert(noexcept(e == e)); +} diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C b/gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C new file mode 100644 index 0000000..333c976 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C @@ -0,0 +1,25 @@ +// PR c++/119863 +// { dg-additional-options "-fmodules" } +// { dg-module-cmi A } + +export module A; + +template<typename> +class T; + +template<typename> +class U +{ + template<typename> + friend class T; +}; + +template<typename V> +class T +{ + U<V> x = {}; +}; + +export +template<typename V> +T<V> f(V) { return {}; } diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C b/gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C new file mode 100644 index 0000000..2e537ed --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C @@ -0,0 +1,9 @@ +// PR c++/119863 +// { dg-additional-options "-fmodules" } +// { dg-module-cmi B } + +export module B; + +// this should not be considered conflicting +template <typename> +class T; diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C b/gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C new file mode 100644 index 0000000..6c8d85b --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C @@ -0,0 +1,10 @@ +// PR c++/119863 +// { dg-additional-options "-fmodules" } + +import A; +import B; + +int main() +{ + auto const x = f(1); +} diff --git a/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C b/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C index 147c2b7..b858d70 100644 --- a/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C +++ b/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C @@ -6,6 +6,7 @@ /* { dg-additional-options "-fno-PIE" { target ia32 } } */ /* { dg-do compile { target { ! hppa*-*-* } } } */ +/* { dg-require-effective-target fstack_protector } */ int __attribute__((no_stack_protector)) foo() { diff --git a/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C b/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C new file mode 100644 index 0000000..9650004 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C @@ -0,0 +1,20 @@ +// PR c++/114970 +// { dg-do compile { target c++17 } } +// { dg-additional-options "-O -Wunused-value" } + +struct sv +{ + const char* str; + unsigned len; + + constexpr sv(const char *p): str(p), len(0) + { + if (__builtin_is_constant_evaluated ()) { len = 42; } + } +}; + +int main() +{ + sv s ("foo"); + return s.len; +} diff --git a/gcc/testsuite/g++.dg/opt/pr119327.C b/gcc/testsuite/g++.dg/opt/pr119327.C new file mode 100644 index 0000000..598ae1c --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr119327.C @@ -0,0 +1,16 @@ +// PR target/119327 +// { dg-do compile { target c++11 } } +// { dg-options "-Os" } + +#pragma GCC optimize "fp-contract=off" + +template <class T> +void +foo (T f) +{ + f (); +} + +struct S { + S () { [] {}; foo ([] __attribute__((always_inline)) {}); } +} s; diff --git a/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C new file mode 100644 index 0000000..8b1ad53 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C @@ -0,0 +1,17 @@ +// { dg-do compile { target { { { i?86-*-* x86_64-*-* } && { ! ia32 } } || { powerpc*-*-* aarch64*-*-* riscv*-*-* } } } } +// { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } +// { dg-skip-if "requires hosted libstdc++ for vector" { ! hostedlib } } + +// PR rtl-optimization/118502 + +// The shrink-wrapping should happen around the slow path of vector<int>::push_back, +// The fast path is just checking if there is enough space and doing a few stores. +// We want to verify that shrink wrapping always happens. + +#include <vector> + +void push_back(std::vector<int>& xs, unsigned char x) { + xs.push_back(x); +} + +/* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" } } */ diff --git a/gcc/testsuite/g++.dg/pr112822.C b/gcc/testsuite/g++.dg/pr112822.C index a855752..f88bd83 100644 --- a/gcc/testsuite/g++.dg/pr112822.C +++ b/gcc/testsuite/g++.dg/pr112822.C @@ -89,7 +89,7 @@ template <typename aj, typename cm> struct cg<aj, cm> { typedef aj cn; }; namespace ai { template <typename cj, int> cj cp; template <typename bu, typename cj, int> void cl(bu *cr, cj cs) { ct(cr, cs); } -typedef __attribute__((altivec(vector__))) double co; +typedef double co __attribute__ ((vector_size (16))); void ct(double *cr, co cs) { *(co *)cr = cs; } struct cq { co q; diff --git a/gcc/testsuite/g++.dg/template/explicit-args6.C b/gcc/testsuite/g++.dg/template/explicit-args6.C index 18663d7b..0d9718c 100644 --- a/gcc/testsuite/g++.dg/template/explicit-args6.C +++ b/gcc/testsuite/g++.dg/template/explicit-args6.C @@ -24,10 +24,12 @@ frob() // narrowing check, reject negative values return unsigned{N}; // { dg-prune-output "narrowing" } -} // { dg-prune-output "flows off the end" } -// { dg-prune-output "not a return-statement" } +} -template<int N> void get_n(tuple& t) { get<frob<N>()>(t); } // { dg-error "" } +// This complains about calling frob only in C++11 because +// maybe_save_constexpr_fundef fails; in later standards it succeeds, +// and the evaluation failure is silent due to the earlier errors. +template<int N> void get_n(tuple& t) { get<frob<N>()>(t); } // { dg-error "" "" { target c++11_only } } int main() { diff --git a/gcc/testsuite/g++.dg/template/friend86.C b/gcc/testsuite/g++.dg/template/friend86.C new file mode 100644 index 0000000..9e2c1af --- /dev/null +++ b/gcc/testsuite/g++.dg/template/friend86.C @@ -0,0 +1,25 @@ +// PR c++/119807 +// { dg-do run } + +template<int N> +struct A { + template<class T> friend int f(A<N>, T); +}; + +template struct A<0>; +template struct A<1>; + +int main() { + A<0> x; + A<1> y; + if (f(x, true) != 0) __builtin_abort(); + if (f(y, true) != 1) __builtin_abort(); +} + +template<int N> +struct B { + template<class T> friend int f(A<N>, T) { return N; } +}; + +template struct B<0>; +template struct B<1>; diff --git a/gcc/testsuite/g++.dg/template/friend87.C b/gcc/testsuite/g++.dg/template/friend87.C new file mode 100644 index 0000000..94c0dfc --- /dev/null +++ b/gcc/testsuite/g++.dg/template/friend87.C @@ -0,0 +1,42 @@ +// PR c++/119807 +// { dg-do compile { target c++20 } } + +using size_t = decltype(sizeof(0)); + +template<auto tag, size_t current> +struct CounterReader { + template<typename> + friend auto counterFlag(CounterReader<tag, current>) noexcept; +}; + +template<auto tag, size_t current> +struct CounterWriter { + static constexpr size_t value = current; + + template<typename> + friend auto counterFlag(CounterReader<tag, current>) noexcept {} +}; + +template<auto tag, auto unique, size_t current = 0, size_t mask = size_t(1) << (sizeof(size_t) * 8 - 1)> +[[nodiscard]] constexpr size_t counterAdvance() noexcept { + if constexpr (!mask) { + return CounterWriter<tag, current + 1>::value; + } else if constexpr (requires { counterFlag<void>(CounterReader<tag, current | mask>()); }) { + return counterAdvance<tag, unique, current | mask, (mask >> 1)>(); + } + else { + return counterAdvance<tag, unique, current, (mask >> 1)>(); + } +} + +constexpr auto defaultCounterTag = [] {}; + +template<auto tag = defaultCounterTag, auto unique = [] {}> +constexpr size_t counter() noexcept { + return counterAdvance<tag, unique>(); +} + +int main() { + static_assert(counter() == 1); + static_assert(counter() == 2); +} diff --git a/gcc/testsuite/g++.dg/torture/pr119610.C b/gcc/testsuite/g++.dg/torture/pr119610.C new file mode 100644 index 0000000..9998026 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr119610.C @@ -0,0 +1,18 @@ +// { dg-do run } +// { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } +// { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } } + +int *ptr; +void foo() { + int c[1024*128]; + ptr = c; + throw 1; +} +int main() +{ + try { + foo(); + } catch(int x) { + return 0; + } +} diff --git a/gcc/testsuite/g++.dg/torture/pr119778.C b/gcc/testsuite/g++.dg/torture/pr119778.C new file mode 100644 index 0000000..4948056 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr119778.C @@ -0,0 +1,20 @@ +// { dg-do compile } +// { dg-additional-options "-Wall" } + +struct jmp_buf { long l[16]; }; +extern "C" int setjmp (jmp_buf *); +struct S { + void foo () { bar (); } + virtual char bar () { return 0; } +}; +void baz (); +jmp_buf *a; + +void +qux (bool x, S *y) +{ + if (x) + setjmp (a); + y->foo (); + baz (); +} diff --git a/gcc/testsuite/g++.dg/warn/Wformat-3.C b/gcc/testsuite/g++.dg/warn/Wformat-3.C new file mode 100644 index 0000000..e308530 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wformat-3.C @@ -0,0 +1,19 @@ +// PR c++/116954 +// { dg-additional-options -Wformat } + +#ifndef WORKS +template<int N> +int fn(char (&buf)[N], const char fmt[], ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +#endif + +template<int N> +__attribute__ ((__format__ (__printf__, 2, 3))) +int fn(char (&)[N], const char [], ...) +{ return 0; } + +int main() +{ + char buf[20]; + return fn(buf, "%s", 42); /* { dg-warning "Wformat" } */ +} diff --git a/gcc/testsuite/g++.target/aarch64/spaceship_1.C b/gcc/testsuite/g++.target/aarch64/spaceship_1.C new file mode 100644 index 0000000..e6daf62 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/spaceship_1.C @@ -0,0 +1,192 @@ +// PR117013 +/* { dg-do run } */ +/* { dg-options "-O2 -std=c++20 -save-temps -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" ""} } */ + +#include <compare> +#include <stdint.h> + +/* Some implementation-defined value (other than 2) to represent + partial_ordering::unordered (that for libc++ in this case). */ +#define IMP_UN -127 + +#define SPACESHIP_FN(TYPE) \ + [[gnu::noipa]] \ + auto ss_##TYPE (TYPE a, TYPE b) \ + { return a <=> b; } \ + +#define SPACESHIP_FN_NN(TYPE) \ + [[gnu::noipa, gnu::optimize ("-ffinite-math-only")]] \ + auto ss_##TYPE##_no_nans (TYPE a, TYPE b) \ + { return a <=> b; } \ + +/* <=> implementation for floating-point operands. */ +#define SPACESHIP_FP_IDIOM(TYPE) \ + [[gnu::noipa]] \ + int ss_##TYPE##_idiom (TYPE a, TYPE b) \ + { return ((a) == (b) ? 0 : (a) < (b) ? -1 : (a) > (b) ? 1 : IMP_UN); } \ + +#define RUN_TEST(TYPE, ARGA, ARGB, EXPECT, SUFF) \ + if (ss_##TYPE##SUFF ((ARGA), (ARGB)) != (EXPECT)) \ + __builtin_abort(); \ + +/* +** _Z8ss_floatff: +** fcmpe s0, s1 +** csinv (w[0-9]+), wzr, wzr, pl +** cset (w[0-9]+), vs +** csinc w0, \1, \2, ls +** ret +*/ +SPACESHIP_FN(float); + +/* +** _Z16ss_float_no_nansff: +** fcmpe s0, s1 +** csinv (w[0-9]+), wzr, wzr, pl +** csinc w0, \1, wzr, ls +** ret +*/ +SPACESHIP_FN_NN(float); + +/* +** _Z9ss_doubledd: +** fcmpe d0, d1 +** csinv (w[0-9]+), wzr, wzr, pl +** cset (w[0-9]+), vs +** csinc w0, \1, \2, ls +** ret +*/ +SPACESHIP_FN(double); + +/* +** _Z17ss_double_no_nansdd: +** fcmpe d0, d1 +** csinv (w[0-9]+), wzr, wzr, pl +** csinc w0, \1, wzr, ls +** ret +*/ +SPACESHIP_FN_NN(double); + +/* +** _Z14ss_float_idiomff: +** fcmpe s0, s1 +** csinv (w[0-9]+), wzr, wzr, pl +** mov (w[0-9]+), -128 +** csel (w[0-9]+), \2, wzr, vs +** csinc w0, \1, \3, ls +** ret +*/ +SPACESHIP_FP_IDIOM(float); + +/* +** _Z15ss_double_idiomdd: +** fcmpe d0, d1 +** csinv (w[0-9]+), wzr, wzr, pl +** mov (w[0-9]+), -128 +** csel (w[0-9]+), \2, wzr, vs +** csinc w0, \1, \3, ls +** ret +*/ +SPACESHIP_FP_IDIOM(double); + +/* +** _Z10ss_int32_tii: +** cmp w0, w1 +** cset (w[0-9]+), gt +** csinv w0, \1, wzr, ge +** ret +*/ +SPACESHIP_FN(int32_t); + +/* +** _Z10ss_int64_tll: +** cmp x0, x1 +** cset (w[0-9]+), gt +** csinv w0, \1, wzr, ge +** ret +*/ +SPACESHIP_FN(int64_t); + +/* +** _Z11ss_uint32_tjj: +** cmp w0, w1 +** cset (w[0-9]+), hi +** csinv w0, \1, wzr, cs +** ret +*/ +SPACESHIP_FN(uint32_t); + +/* +** _Z11ss_uint64_tmm: +** cmp x0, x1 +** cset (w[0-9]+), hi +** csinv w0, \1, wzr, cs +** ret +*/ +SPACESHIP_FN(uint64_t); + + +int +main() +{ + /* Single precision floating point. */ + RUN_TEST (float, -1.0f, 1.0f, std::partial_ordering::less,); + RUN_TEST (float, -1.0f, 1.0f, -1, _idiom); + + RUN_TEST (float, 1.0f, -1.0f, std::partial_ordering::greater,); + RUN_TEST (float, 1.0f, -1.0f, 1, _idiom); + + RUN_TEST (float, -1.0f, -1.0f, std::partial_ordering::equivalent,); + RUN_TEST (float, -1.0f, -1.0f, 0, _idiom); + + RUN_TEST (float, __builtin_nanf(""), 1.0f, std::partial_ordering::unordered,); + RUN_TEST (float, __builtin_nanf(""), 1.0f, IMP_UN, _idiom); + RUN_TEST (float, 1.0f ,__builtin_nanf(""), std::partial_ordering::unordered,); + RUN_TEST (float, 1.0f, __builtin_nanf(""), IMP_UN, _idiom); + + /* No-NaNs. */ + RUN_TEST (float, -1.0f, 1.0f, std::partial_ordering::less, _no_nans); + RUN_TEST (float, 1.0f, -1.0f, std::partial_ordering::greater, _no_nans); + RUN_TEST (float, -1.0f, -1.0f, std::partial_ordering::equivalent, _no_nans); + + /* Double precision floating point. */ + RUN_TEST (double, -1.0f, 1.0f, std::partial_ordering::less,); + RUN_TEST (double, -1.0f, 1.0f, -1, _idiom); + + RUN_TEST (double, 1.0f, -1.0f, std::partial_ordering::greater,); + RUN_TEST (double, 1.0f, -1.0f, 1, _idiom); + + RUN_TEST (double, -1.0f, -1.0f, std::partial_ordering::equivalent,); + RUN_TEST (double, -1.0f, -1.0f, 0, _idiom); + + RUN_TEST (double, __builtin_nanf(""), 1.0f, std::partial_ordering::unordered,); + RUN_TEST (double, __builtin_nanf(""), 1.0f, IMP_UN, _idiom); + RUN_TEST (double, 1.0f, __builtin_nanf(""), std::partial_ordering::unordered,); + RUN_TEST (double, 1.0f, __builtin_nanf(""), IMP_UN, _idiom); + + /* No-NaNs. */ + RUN_TEST (double, -1.0f, 1.0f, std::partial_ordering::less, _no_nans); + RUN_TEST (double, 1.0f, -1.0f, std::partial_ordering::greater, _no_nans); + RUN_TEST (double, -1.0f, -1.0f, std::partial_ordering::equivalent, _no_nans); + + /* Single integer. */ + RUN_TEST (int32_t, -42, 0, std::strong_ordering::less,); + RUN_TEST (int32_t, 0, -42, std::strong_ordering::greater,); + RUN_TEST (int32_t, 42, 42, std::strong_ordering::equal,); + + RUN_TEST (uint32_t, 0, 42, std::strong_ordering::less,); + RUN_TEST (uint32_t, 42, 0, std::strong_ordering::greater,); + RUN_TEST (uint32_t, 42, 42, std::strong_ordering::equal,); + + /* Double integer. */ + RUN_TEST (int64_t, -42, 0, std::strong_ordering::less,); + RUN_TEST (int64_t, 42, 0, std::strong_ordering::greater,); + RUN_TEST (int64_t, 42, 42, std::strong_ordering::equal,); + + RUN_TEST (uint64_t, 0, 42, std::strong_ordering::less,); + RUN_TEST (uint64_t, 42, 0, std::strong_ordering::greater,); + RUN_TEST (uint64_t, 42, 42, std::strong_ordering::equal,); + + return 0; +}
\ No newline at end of file diff --git a/gcc/testsuite/g++.target/aarch64/spaceship_2.C b/gcc/testsuite/g++.target/aarch64/spaceship_2.C new file mode 100644 index 0000000..c1d3900 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/spaceship_2.C @@ -0,0 +1,72 @@ +// PR117013 +/* { dg-do run } */ +// { dg-options "-O2 -std=c++20 -save-temps" } + +#include <compare> + +#ifndef fp_type +#define fp_type float +#endif + +#define TEST_SS_IDIOM(ARGA, ARGB, EXPECT) \ + if (spaceship_idiom ((ARGA), (ARGB)) != (EXPECT)) \ + __builtin_abort(); \ + +#define TEST_BR_ON_SS(ARGA, ARGB, EXPECT) \ + if(branch_on_spaceship ((ARGA), (ARGB)) != (EXPECT)) \ + __builtin_abort(); \ + + +#define RUN_TEST(ARGA, ARGB, EXPECT) \ + TEST_SS_IDIOM(ARGA, ARGB, EXPECT) \ + TEST_BR_ON_SS(ARGA, ARGB, EXPECT) \ + +/* Test when .SPACESHIP prompts the back end to implement <=> with + conditional branches (only applies to floating-point operands). */ + +[[gnu::noipa]] auto +equiv() { return std::partial_ordering::equivalent; } +[[gnu::noipa]] auto +less() { return std::partial_ordering::less; } +[[gnu::noipa]] auto +greater() { return std::partial_ordering::greater; } +[[gnu::noipa]] auto +unordered() { return std::partial_ordering::unordered; } + +auto +spaceship_idiom(fp_type a, fp_type b) +{ + if (a == b) + return equiv(); + if (a < b) + return less(); + if (a > b) + return greater(); + return unordered(); +} + +auto +branch_on_spaceship(fp_type a, fp_type b) +{ + auto res = a <=> b; + if (res == 0) + return equiv(); + else if (res < 0) + return less(); + else if (res > 0) + return greater(); + return unordered(); +} + +int +main() +{ + RUN_TEST (-1.0f, 1.0f, std::partial_ordering::less); + RUN_TEST (1.0f, -1.0f, std::partial_ordering::greater); + RUN_TEST (1.0f, 1.0f, std::partial_ordering::equivalent); + RUN_TEST (1.0f, __builtin_nanf(""), std::partial_ordering::unordered); + RUN_TEST (__builtin_nanf(""), 1.0f, std::partial_ordering::unordered); +} + +/* { dg-final { scan-assembler-not "\tfcmp\t" } } */ +/* { dg-final { scan-assembler-times "\tfcmpe\t" 2 } } */
\ No newline at end of file diff --git a/gcc/testsuite/g++.target/aarch64/spaceship_3.C b/gcc/testsuite/g++.target/aarch64/spaceship_3.C new file mode 100644 index 0000000..f58b084 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/spaceship_3.C @@ -0,0 +1,9 @@ +// PR117013 +/* { dg-do run } */ +// { dg-options "-O2 -std=c++20 -save-temps" } + +#define fp_type double +#include "spaceship_2.C" + +/* { dg-final { scan-assembler-not "\tfcmp\t" } } */ +/* { dg-final { scan-assembler-times "\tfcmpe\t" 2 } } */
\ No newline at end of file diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C b/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C new file mode 100644 index 0000000..0044e51 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C @@ -0,0 +1,20 @@ +// { dg-do run { target aarch64_sve_hw } } +// { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } +// { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } } + +void *a_ptr, *b_ptr; +void foo() { + __SVInt32_t a; + int b[1024*128]; + a_ptr = &a; + b_ptr = b; + throw 1; +} +int main() +{ + try { + foo(); + } catch(int x) { + return 0; + } +} diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr119706.C b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C new file mode 100644 index 0000000..40fefe5 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C @@ -0,0 +1,178 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -mcpu=neoverse-v2 --param=aarch64-autovec-preference=sve-only -w" } */ + +namespace a { +typedef long unsigned b; +typedef int c; +template <bool, typename d> struct e { using f = d; }; +template <bool g, typename d = void> using h = typename e<g, d>::f; +template <typename aa, typename, template <typename> class> struct i { + using f = aa; +}; +template <typename aa, template <typename> class j> using k = i<aa, void, j>; +template <typename aa, template <typename> class j> +using l = typename k<aa, j>::f; +} // namespace a +inline void *operator new(a::b, void *ab) { return ab; } +namespace a { +template <typename> class ac { +public: + typedef b m; + template <typename ad, typename... n> void ae(ad *ab, n... w) { + new (ab) ad(w...); + } +}; +template <typename d> using x = ac<d>; +template <typename d> class af : public x<d> { +public: + typedef d o; + template <typename> struct ag { typedef af ah; }; +}; +struct ai {}; +struct aj : ai {}; +struct ak : aj {}; +template <typename> struct al; +template <typename d> struct al<d *> { + typedef ak an; + typedef c ao; + typedef d ap; +}; +template <typename aq> typename aq ::an ar(aq) { return typename aq ::an(); } +template <typename as> typename as ::ao at(as au, as av, ak) { return av - au; } +template <typename aw> typename aw ::ao ax(aw au, aw av) { + return at(au, av, ar(au)); +} +template <typename> struct ay { typedef c ao; }; +} // namespace a +namespace az { +template <typename am, typename> class ba { + am bb; + typedef a::al<am> bc; + +public: + typedef typename bc::an an; + typedef typename bc::ao ao; + typedef typename bc::ap ap; + ba(am bd) : bb(bd) {} + ap operator*() { return *bb; } + ba operator++() { + ++bb; + return *this; + } + am base() { return bb; } +}; +template <typename be, typename bf, typename bg> +bool operator!=(ba<be, bg> bh, ba<bf, bg> p) { + return bh.base() != p.base(); +} +template <typename be, typename bf, typename bg> +auto operator-(ba<be, bg> bh, ba<bf, bg> p) { + return bh.base() - p.base(); +} +} // namespace az +namespace a { +struct bi { + template <typename d, typename> struct bj { + using f = typename d::ag<d>::ah; + }; + template <typename> using bk = b; + template <typename...> static constexpr bool bl = false; + template <typename, typename> static constexpr bool bm = bl<>; + template <typename d, typename... n> static constexpr bool bn = bm<d, n...>; +}; +template <typename bo, typename ad> using bp = typename bi::bj<bo, ad>::f; +template <typename bo> struct bq : bi { + typedef typename bo::o o; + using br = l<o *, bk>; + template <typename, typename bs> struct bt { using f = typename ay<bs>::ao; }; + template <typename bu, typename> struct bv { using f = typename bu::m; }; + using ao = typename bt<bo, c>::f; + using m = typename bv<bo, ao>::f; + template <typename d> using bw = bp<bo, d>; + static br allocate(bo, m); + template <typename d, typename... n> + static h<bn<bo, d>> ae(bo ci, d ab, n... w) { + ci.ae(ab, w...); + } +}; +template <typename d> struct bx { + static bool by(d &bz) try { d(bz.begin(), bz.ca(), bz.cb()); } catch (...) { + } +}; +} // namespace a +namespace az { +template <typename bo> struct cc : a::bq<bo> { + typedef a::bq<bo> q; + template <typename d> struct ag { typedef typename q::bw<d> ah; }; +}; +} // namespace az +enum cd {}; +using ce = double; +namespace a { +template <typename aw, typename cf, typename cg, typename ch> +cg cj(aw au, cf av, cg ck, ch cl) { + typedef az::cc<ch> cx; + for (; au != av; ++au, ++ck) + cx::ae(cl, ck, *au); +} +template <typename d, typename bo> struct cm { + typedef typename az::cc<bo>::ag<d>::ah cn; + typedef typename az::cc<cn>::br br; + struct co { + br db; + br cp; + }; + struct cq : cn, co { + cq(cn) {} + } typedef cr; + cn cs(); + cr cb() noexcept; + cm(cr ci) : ct(ci) {} + cq ct; + br cu(b cv) { + typedef az::cc<cn> cw; + return cv ? cw::allocate(ct, cv) : c(); + } +}; +template <typename d, typename bo = af<d>> class cy : cm<d, bo> { + typedef cm<d, bo> cz; + +public: + typedef typename cz::br br; + typedef az::ba<br, cy> da; + typedef b m; + typedef bo cr; + cz::cs; + template <typename aw> cy(aw au, aw av, cr ci) : cz(ci) { + dg(au, av, ar(au)); + } + cz::cb; + da begin() { return this->ct.db; } + da ca() { return this->ct.cp; } + void r() { s(); } + void clear() { t(this->ct.db); } + template <typename cg> void dg(cg au, cg av, ai) { y(au, av, ax(au, av)); } + template <typename am, typename cf> void y(am au, cf av, m cv) { + br z = this->cu(dc(cv, cs())); + cj(au, av, z, cs()); + } + bool s(); + m dc(m cv, cr) { return cv; } + void t(br dd) { + if (this->ct.cp - dd) + this->ct.cp = dd; + } +}; +template <typename d, typename bo> bool cy<d, bo>::s() { bx<cy>::by(*this); } +namespace basic { +class u { + using de = ce; + void v(cd, b); + cy<de> df; +}; +void u::v(cd, b) { + df.clear(); + df.r(); +} +} // namespace basic +} // namespace a
\ No newline at end of file diff --git a/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-1.C b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-1.C new file mode 100644 index 0000000..f3e3099 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-1.C @@ -0,0 +1,15 @@ +/* 'std::bad_cast' exception. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + We don't print anything, but just 'abort'. + + { dg-shouldfail {'std::bad_cast' exception} } */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2.C b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2.C new file mode 100644 index 0000000..b047cbed --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2.C @@ -0,0 +1,13 @@ +/* 'std::bad_cast' exception, caught. */ + +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + Compilation fails: + { dg-regexp {[^\r\n]+: In function 'int main\(\)':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2_-mfake-exceptions.C b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2_-mfake-exceptions.C new file mode 100644 index 0000000..2904188 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2_-mfake-exceptions.C @@ -0,0 +1,18 @@ +/* 'std::bad_cast' exception, caught, '-mfake-exceptions'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mfake-exceptions } + { dg-bogus {sorry, unimplemented: exception handling not supported} {} { target *-*-* } 0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "exceptions-bad_cast-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + We don't print anything, but just 'abort'. + + There is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'std::bad_cast' exception} } */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-3.C b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-3.C new file mode 100644 index 0000000..3d0118c --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-bad_cast-3.C @@ -0,0 +1,10 @@ +/* 'std::bad_cast' exception, dead code. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-pr118794-1.C b/gcc/testsuite/g++.target/gcn/exceptions-pr118794-1.C new file mode 100644 index 0000000..20f9d49 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-pr118794-1.C @@ -0,0 +1,17 @@ +/* Exception handling constructs in dead code. */ + +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mno-fake-exceptions } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1.C" + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + Given '-O0', compilation fails: + { dg-regexp {[^\r\n]+: In function 'void f\(\)':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-pr118794-1_-mfake-exceptions.C b/gcc/testsuite/g++.target/gcn/exceptions-pr118794-1_-mfake-exceptions.C new file mode 100644 index 0000000..a5f0da2 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-pr118794-1_-mfake-exceptions.C @@ -0,0 +1,16 @@ +/* Exception handling constructs in dead code, '-mfake-exceptions'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mfake-exceptions } + { dg-bogus {sorry, unimplemented: exception handling not supported} {} { target *-*-* } 0 } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "exceptions-pr118794-1.C" + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-throw-1.C b/gcc/testsuite/g++.target/gcn/exceptions-throw-1.C new file mode 100644 index 0000000..6cadf58 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-throw-1.C @@ -0,0 +1,16 @@ +/* 'throw'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + We don't print anything, but just 'abort'. + + { dg-shouldfail {'MyException' exception} } */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-throw-2.C b/gcc/testsuite/g++.target/gcn/exceptions-throw-2.C new file mode 100644 index 0000000..671c810 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-throw-2.C @@ -0,0 +1,14 @@ +/* 'throw', caught. */ + +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + Compilation fails: + { dg-regexp {[^\r\n]+: In function 'int main\(\)':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-throw-2_-mfake-exceptions.C b/gcc/testsuite/g++.target/gcn/exceptions-throw-2_-mfake-exceptions.C new file mode 100644 index 0000000..f1fd505 --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-throw-2_-mfake-exceptions.C @@ -0,0 +1,19 @@ +/* 'throw', caught, '-mfake-exceptions'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mfake-exceptions } + { dg-bogus {sorry, unimplemented: exception handling not supported} {} { target *-*-* } 0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "exceptions-throw-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + We don't print anything, but just 'abort'. + + There is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'MyException' exception} } */ diff --git a/gcc/testsuite/g++.target/gcn/exceptions-throw-3.C b/gcc/testsuite/g++.target/gcn/exceptions-throw-3.C new file mode 100644 index 0000000..5c1ad7a --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/exceptions-throw-3.C @@ -0,0 +1,11 @@ +/* 'throw', dead code. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-3.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } */ diff --git a/gcc/testsuite/g++.target/gcn/gcn.exp b/gcc/testsuite/g++.target/gcn/gcn.exp new file mode 100644 index 0000000..a3bd75f --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/gcn.exp @@ -0,0 +1,56 @@ +# Specific regression driver for GCN. +# Copyright (C) 2000-2025 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# G++ testsuite that uses the `dg.exp' driver. + +# Exit immediately if this isn't a GCN target. +if ![istarget amdgcn*-*-*] then { + return +} + +# Load support procs. +load_lib g++-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CXXFLAGS +if ![info exists DEFAULT_CXXFLAGS] then { + set DEFAULT_CXXFLAGS " -pedantic-errors -Wno-long-long" +} + +# Initialize `dg'. +dg-init + +# Recursively find files in $dir and subdirs, do not walk into subdirs +# that contain their own .exp file. +proc find-cxx-tests { dir suffix } { + set tests [lsort [glob -nocomplain -directory $dir "*.$suffix" ]] + foreach subdir [lsort [glob -nocomplain -type d -directory $dir *]] { + if { [glob -nocomplain -directory $subdir *.exp] eq "" } { + eval lappend tests [find-cxx-tests $subdir $suffix] + } + } + return $tests +} + +set tests [find-cxx-tests $srcdir/$subdir {C}] + +# Main loop. +g++-dg-runtest $tests "" $DEFAULT_CXXFLAGS + + +# All done. +dg-finish diff --git a/gcc/testsuite/g++.target/gcn/pr119692-1-1.C b/gcc/testsuite/g++.target/gcn/pr119692-1-1.C new file mode 100644 index 0000000..b44b08d --- /dev/null +++ b/gcc/testsuite/g++.target/gcn/pr119692-1-1.C @@ -0,0 +1,6 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/pr119692-1-1.C" diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-1.C b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-1.C new file mode 100644 index 0000000..f3e3099 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-1.C @@ -0,0 +1,15 @@ +/* 'std::bad_cast' exception. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + We don't print anything, but just 'abort'. + + { dg-shouldfail {'std::bad_cast' exception} } */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2.C b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2.C new file mode 100644 index 0000000..b047cbed --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2.C @@ -0,0 +1,13 @@ +/* 'std::bad_cast' exception, caught. */ + +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + Compilation fails: + { dg-regexp {[^\r\n]+: In function 'int main\(\)':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2_-mfake-exceptions.C b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2_-mfake-exceptions.C new file mode 100644 index 0000000..3f40951 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2_-mfake-exceptions.C @@ -0,0 +1,19 @@ +/* 'std::bad_cast' exception, caught, '-mfake-exceptions'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mfake-exceptions } + { dg-bogus {sorry, unimplemented: exception handling not supported} {} { target *-*-* } 0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ +/* { dg-bogus {_ZTISt8bad_cast} PR119734 { xfail *-*-* } 0 } */ + +#include "exceptions-bad_cast-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + We don't print anything, but just 'abort'. + + There is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'std::bad_cast' exception} } */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-3.C b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-3.C new file mode 100644 index 0000000..3d0118c --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-3.C @@ -0,0 +1,10 @@ +/* 'std::bad_cast' exception, dead code. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1.C b/gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1.C new file mode 100644 index 0000000..20f9d49 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1.C @@ -0,0 +1,17 @@ +/* Exception handling constructs in dead code. */ + +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mno-fake-exceptions } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1.C" + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + Given '-O0', compilation fails: + { dg-regexp {[^\r\n]+: In function 'void f\(\)':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1_-mfake-exceptions.C b/gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1_-mfake-exceptions.C new file mode 100644 index 0000000..a5f0da2 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1_-mfake-exceptions.C @@ -0,0 +1,16 @@ +/* Exception handling constructs in dead code, '-mfake-exceptions'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mfake-exceptions } + { dg-bogus {sorry, unimplemented: exception handling not supported} {} { target *-*-* } 0 } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "exceptions-pr118794-1.C" + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-throw-1.C b/gcc/testsuite/g++.target/nvptx/exceptions-throw-1.C new file mode 100644 index 0000000..6cadf58 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-throw-1.C @@ -0,0 +1,16 @@ +/* 'throw'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + We don't print anything, but just 'abort'. + + { dg-shouldfail {'MyException' exception} } */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-throw-2.C b/gcc/testsuite/g++.target/nvptx/exceptions-throw-2.C new file mode 100644 index 0000000..671c810 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-throw-2.C @@ -0,0 +1,14 @@ +/* 'throw', caught. */ + +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + Compilation fails: + { dg-regexp {[^\r\n]+: In function 'int main\(\)':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-throw-2_-mfake-exceptions.C b/gcc/testsuite/g++.target/nvptx/exceptions-throw-2_-mfake-exceptions.C new file mode 100644 index 0000000..f1fd505 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-throw-2_-mfake-exceptions.C @@ -0,0 +1,19 @@ +/* 'throw', caught, '-mfake-exceptions'. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -mfake-exceptions } + { dg-bogus {sorry, unimplemented: exception handling not supported} {} { target *-*-* } 0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "exceptions-throw-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + We don't print anything, but just 'abort'. + + There is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'MyException' exception} } */ diff --git a/gcc/testsuite/g++.target/nvptx/exceptions-throw-3.C b/gcc/testsuite/g++.target/nvptx/exceptions-throw-3.C new file mode 100644 index 0000000..5c1ad7a --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/exceptions-throw-3.C @@ -0,0 +1,11 @@ +/* 'throw', dead code. */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ +/* { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-3.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } */ diff --git a/gcc/testsuite/g++.target/nvptx/pr119692-1-1.C b/gcc/testsuite/g++.target/nvptx/pr119692-1-1.C new file mode 100644 index 0000000..b44b08d --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/pr119692-1-1.C @@ -0,0 +1,6 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-do run } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ + +#include "../../../../libgomp/testsuite/libgomp.oacc-c++/pr119692-1-1.C" diff --git a/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C new file mode 100644 index 0000000..1b98d3d --- /dev/null +++ b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C @@ -0,0 +1,212 @@ +/* { dg-do run { target rv64 } } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d --param=logical-op-non-short-circuit=0" } */ + +#include <riscv_vector.h> + +using v_uint8 = vuint8m2_t; +using v_int8 = vint8m2_t; +using v_uint16 = vuint16m2_t; +using v_int16 = vint16m2_t; +using v_uint32 = vuint32m2_t; +using v_int32 = vint32m2_t; +using v_uint64 = vuint64m2_t; +using v_int64 = vint64m2_t; +using v_float32 = vfloat32m2_t; +using v_float64 = vfloat64m2_t; + +using uchar = unsigned char; +using schar = signed char; +using ushort = unsigned short; +using uint = unsigned int; +using uint64 = unsigned long int; +using int64 = long int; + +struct Size +{ + int width; + int height; +}; + +template <class T> struct VTraits; + +template <> struct VTraits<vint32m1_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e32m1 (); } + using lane_type = int32_t; + static const int max_nlanes = 1024 / 32 * 2; +}; +template <> struct VTraits<vint32m2_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e32m2 (); } + using lane_type = int32_t; + static const int max_nlanes = 1024 / 32 * 2; +}; +template <> struct VTraits<vint32m4_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e32m4 (); } + using lane_type = int32_t; + static const int max_nlanes = 1024 / 32 * 2; +}; +template <> struct VTraits<vint32m8_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e32m8 (); } + using lane_type = int32_t; + static const int max_nlanes = 1024 / 32 * 2; +}; + +template <> struct VTraits<vfloat64m1_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e64m1 (); } + using lane_type = double; + static const int max_nlanes = 1024 / 64 * 2; +}; +template <> struct VTraits<vfloat64m2_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e64m2 (); } + using lane_type = double; + static const int max_nlanes = 1024 / 64 * 2; +}; +template <> struct VTraits<vfloat64m4_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e64m4 (); } + using lane_type = double; + static const int max_nlanes = 1024 / 64 * 2; +}; +template <> struct VTraits<vfloat64m8_t> +{ + static inline int vlanes () { return __riscv_vsetvlmax_e64m8 (); } + using lane_type = double; + static const int max_nlanes = 1024 / 64 * 2; +}; + +static inline v_float64 +v_setall_f64 (double v) +{ + return __riscv_vfmv_v_f_f64m2 (v, VTraits<v_float64>::vlanes ()); +} +static inline v_float64 +vx_setall_f64 (double v) +{ + return v_setall_f64 (v); +} + +inline v_int32 +v_load_expand_q (const schar *ptr) +{ + return __riscv_vwcvt_x ( + __riscv_vwcvt_x (__riscv_vle8_v_i8mf2 (ptr, VTraits<v_int32>::vlanes ()), + VTraits<v_int32>::vlanes ()), + VTraits<v_int32>::vlanes ()); +} + +static inline v_int32 +vx_load_expand_q (const schar *ptr) +{ + return v_load_expand_q (ptr); +} + +inline v_float64 +v_cvt_f64 (const v_int32 &a) +{ + return __riscv_vget_f64m2 (__riscv_vfwcvt_f (a, VTraits<v_int32>::vlanes ()), + 0); +} + +inline v_float64 +v_cvt_f64_high (const v_int32 &a) +{ + return __riscv_vget_f64m2 (__riscv_vfwcvt_f (a, VTraits<v_int32>::vlanes ()), + 1); +} + +inline void +v_store (double *ptr, const v_float64 &a) +{ + __riscv_vse64 (ptr, a, VTraits<v_float64>::vlanes ()); +} + +static inline void +v_store_pair_as (double *ptr, const v_float64 &a, const v_float64 &b) +{ + v_store (ptr, a); + v_store (ptr + VTraits<v_float64>::vlanes (), b); +} + +static inline void +vx_load_pair_as (const schar *ptr, v_float64 &a, v_float64 &b) +{ + v_int32 v0 = vx_load_expand_q (ptr); + a = v_cvt_f64 (v0); + b = v_cvt_f64_high (v0); +} + +inline v_float64 +v_fma (const v_float64 &a, const v_float64 &b, const v_float64 &c) +{ + return __riscv_vfmacc_vv_f64m2 (c, a, b, VTraits<v_float64>::vlanes ()); +} + +template <typename _Tp> +static inline _Tp +saturate_cast (double v) +{ + return _Tp (v); +} + +template <typename _Ts, typename _Td> +__attribute__ ((noipa)) void +cvt_64f (const _Ts *src, size_t sstep, _Td *dst, size_t dstep, Size size, + double a, double b) +{ + v_float64 va = vx_setall_f64 (a), vb = vx_setall_f64 (b); + const int VECSZ = VTraits<v_float64>::vlanes () * 2; + + sstep /= sizeof (src[0]); + dstep /= sizeof (dst[0]); + + for (int i = 0; i < size.height; i++, src += sstep, dst += dstep) + { + int j = 0; + + for (; j < size.width; j += VECSZ) + { + if (j > size.width - VECSZ) + { + if (j == 0 || src == (_Ts *) dst) + break; + j = size.width - VECSZ; + } + v_float64 v0, v1; + vx_load_pair_as (src + j, v0, v1); + v0 = v_fma (v0, va, vb); + v1 = v_fma (v1, va, vb); + v_store_pair_as (dst + j, v0, v1); + } + + for (; j < size.width; j++) + dst[j] = saturate_cast<_Td> (src[j] * a + b); + } +} + +void +__attribute__ ((noipa)) +cvtScale8s64f (const uchar *src_, size_t sstep, const uchar *, size_t, + uchar *dst_, size_t dstep, Size size, void *scale_) +{ + const schar *src = (const schar *) src_; + double *dst = (double *) dst_; + double *scale = (double *) scale_; + cvt_64f (src, sstep, dst, dstep, size, (double) scale[0], (double) scale[1]); +} + +int main () +{ + uchar src[1024]; + uchar dst[1024]; + + double scale[2] = {2.0, 3.0}; + Size size {4, 1}; + + cvtScale8s64f (src, 4, NULL, 0, dst, 32, size, (void *)scale); +} diff --git a/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C new file mode 100644 index 0000000..bac0fb1 --- /dev/null +++ b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C @@ -0,0 +1,82 @@ +/* { dg-do run { target rv64 } } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d --param=logical-op-non-short-circuit=0" } */ + +#include <riscv_vector.h> +using v_int32 = vint32m2_t; +using v_float64 = vfloat64m2_t; +struct Size +{ + int width; + int height; +}; +template <class> struct VTraits +{ + static int vlanes () { return __riscv_vsetvlmax_e32m2 (); } +}; +v_int32 +v_load_expand_q (const signed char *ptr) +{ + return __riscv_vwcvt_x ( + __riscv_vwcvt_x (__riscv_vle8_v_i8mf2 (ptr, VTraits<v_int32>::vlanes ()), + VTraits<v_int32>::vlanes ()), + VTraits<v_int32>::vlanes ()); +} +v_float64 +v_cvt_f64_high (v_int32 a) +{ + return __riscv_vget_f64m2 (__riscv_vfwcvt_f (a, VTraits<v_int32>::vlanes ()), + 1); +} +void +v_store (double *ptr, v_float64 a) +{ + __riscv_vse64 (ptr, a, __riscv_vsetvlmax_e64m2 ()); +} +void +v_store_pair_as (double *ptr, v_float64 b) +{ + v_store (ptr, b); +} +void +vx_load_pair_as (const signed char *ptr, v_float64, v_float64 &b) +{ + v_int32 v0; + b = v_cvt_f64_high (v0); +}; +void +cvt_64f (const signed char *src, double *dst, Size size) +{ + int VECSZ = __riscv_vsetvlmax_e64m2 (); + for (int i; i < size.height; i++) + { + int j; + for (;; j += VECSZ) + { + if (j > -VECSZ) + if (j == 0 || dst) + break; + v_float64 v0, v1; + vx_load_pair_as (src, v0, v1); + v_store_pair_as (dst, v1); + } + for (; j < size.width; j++) + dst[j] = (src[j]); + } +} +void +cvtScale8s64f (unsigned char *src_, unsigned char *dst_, + size_t, Size size, void *) +{ + signed char src; + double dst = *dst_; + cvt_64f (&src, &dst, size); +} +int main () +{ + unsigned char src[1]; + unsigned char dst[1024]; + double scale[1]; + Size size{4, 1}; + cvtScale8s64f (src, dst, 32, size, scale); +} diff --git a/gcc/testsuite/g++.target/s390/pr119834.C b/gcc/testsuite/g++.target/s390/pr119834.C new file mode 100644 index 0000000..66c0a69 --- /dev/null +++ b/gcc/testsuite/g++.target/s390/pr119834.C @@ -0,0 +1,76 @@ +// PR target/119834 +// { dg-do compile { target c++11 } } +// { dg-options "-O2 -march=z900" } + +int *a; +struct A; +struct B { + A begin (); + A end (); + operator bool * (); + void operator++ (); +}; +template <typename T> +auto operator| (int, T x) -> decltype (x (0)); +struct A : B { bool a; }; +struct C { A operator () (int); }; +enum D {} d; +int e; +void foo (); +struct E { + template <typename T> + T *garply () + { + if (d) + return 0; + if (e) + foo (); + return reinterpret_cast<T *> (f); + } + template <typename> + void bar (long x, bool) + { + if (&g - f) + __builtin_memset (a, 0, x); + f += x; + } + template <typename T> + T *baz (T *x, long y, bool z = true) + { + if (d) + return nullptr; + bar<T> ((char *)x + y - f, z); + return x; + } + template <typename T> + void qux (T x) { baz (x, x->j); } + char *f, g; +} *h; +struct F { + template <typename T> + int corge (T x) { x.freddy (this); return 0; } + template <typename T> + int boo (T x) { corge (x); return 0; } +} i; +template <typename T> +struct G { + template <typename U> friend T operator+ (U, G); + template <typename U> + void waldo (F *x, G y, U z) { x->boo (z + y); } + template <typename... Ts> + void plugh (E *y, Ts... z) { T *x = y->garply<T> (); x->thud (y, z...); } +}; +template <typename T> using H = G<T>; +struct I { + static constexpr unsigned j = 2; + void thud (E *x, A y) { x->qux (this); for (auto g : y) ; } +}; +H<I> k; +struct J { + void freddy (F *) { C a; auto b = 0 | a; k.plugh (h, b); } +}; +H<J> l; +struct K { + void freddy () { l.waldo (&i, l, this); } +}; +void grault () { K m; m.freddy (); } diff --git a/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c b/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c index c48fe5f..09aaaa6 100644 --- a/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c +++ b/gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c @@ -77,9 +77,9 @@ void test_integer_conversion_memset (void *d) /* Passing a ptrdiff_t where size_t is expected may not be unsafe but because GCC may emits suboptimal code for such calls warning for them helps improve efficiency. */ - memset (d, 0, diffi); /* { dg-warning ".memset. argument 3 promotes to .ptrdiff_t. {aka .\(long \)?\(int\)?\(__int20\)?.} where .\(long \)?\(__int20 \)?unsigned\( int\)?. is expected" } */ + memset (d, 0, diffi); /* { dg-warning ".memset. argument 3 promotes to .ptrdiff_t. {aka .\(long \)*\(int\)?\(__int20\)?.} where .\(long \)*\(__int20 \)?unsigned\( int\)?. is expected" } */ - memset (d, 0, 2.0); /* { dg-warning ".memset. argument 3 type is .double. where '\(long \)?\(__int20 \)?unsigned\( int\)?' is expected" } */ + memset (d, 0, 2.0); /* { dg-warning ".memset. argument 3 type is .double. where '\(long \)*\(__int20 \)?unsigned\( int\)?' is expected" } */ /* Verify that the same call as above but to the built-in doesn't trigger a warning. */ diff --git a/gcc/testsuite/gcc.dg/bf-ms-attrib.c b/gcc/testsuite/gcc.dg/bf-ms-attrib.c index 2da4f03..5208c7f 100644 --- a/gcc/testsuite/gcc.dg/bf-ms-attrib.c +++ b/gcc/testsuite/gcc.dg/bf-ms-attrib.c @@ -32,7 +32,7 @@ main() /* As long as the sizes are as expected, we know attributes are working. bf-ms-layout.c makes sure the right thing happens when the attribute is on. */ - if (sizeof(struct one_ms) != 8) + if (sizeof(struct one_ms) != 12) abort(); if (sizeof(struct one_gcc) != 8) abort(); diff --git a/gcc/testsuite/gcc.dg/bitint-121.c b/gcc/testsuite/gcc.dg/bitint-121.c new file mode 100644 index 0000000..335b9a1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-121.c @@ -0,0 +1,24 @@ +/* PR middle-end/119808 */ +/* { dg-do run { target { bitint && fstack_protector } } } */ +/* { dg-options "-O0 -ftree-coalesce-vars -fstack-protector-strong" } */ + +#if __BITINT_MAXWIDTH__ >= 129 +_BitInt(129) +foo () +{ + _BitInt(129) b = 0; + _BitInt(8) a + =__builtin_stdc_rotate_right (0x8c82111b5d2d37c57e9ada7213ed95a49uwb, b); + return b; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 129 + _BitInt(129) x = foo (); + if (x) + __builtin_abort (); +#endif +} diff --git a/gcc/testsuite/gcc.dg/bitint-122.c b/gcc/testsuite/gcc.dg/bitint-122.c new file mode 100644 index 0000000..c791969 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-122.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/116093 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-Og -ftree-vrp -fno-tree-dce" } */ + +#if __BITINT_MAXWIDTH__ >= 129 +char +foo (int a, _BitInt (129) b, char c) +{ + return c << (5 / b % (0xdb75dbf5 | a)); +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 129 + if (foo (0, 6, 1) != 1) + __builtin_abort (); +#endif +} diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c b/gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c new file mode 100644 index 0000000..bf74e64 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c @@ -0,0 +1,30 @@ +/* { dg-options "-O3 -fdump-ipa-cp" } */ +__attribute__ ((used)) +int a[1000]; + +__attribute__ ((noinline)) +void +test2(int sz) +{ + for (int i = 0; i < sz; i++) + a[i]++; + asm volatile (""::"m"(a)); +} + +__attribute__ ((noinline)) +void +test1 (int sz) +{ + for (int i = 0; i < 1000; i++) + test2(sz); +} +int main() +{ + test1(1000); + return 0; +} +/* We should clone test1 and test2 for constant 1000. + In the past we did not do this since we did not clone for edges that are not hot + and call main->test1 is not considered hot since it is executed just once. */ +/* { dg-final { scan-ipa-dump-times "Creating a specialized node of test1" 1 "cp"} } */ +/* { dg-final { scan-ipa-dump-times "Creating a specialized node of test2" 1 "cp"} } */ diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-sra-19.c b/gcc/testsuite/gcc.dg/ipa/ipa-sra-19.c index c34c89e..39874ad 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-sra-19.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-sra-19.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* { dg-additional-options "-msse2" { target ia32 } } */ -/* { dg-additional-options "-Wno-psabi" { target powerpc-ibm-aix* powerpc-wrs-vxworks* } } */ +/* { dg-additional-options "-Wno-psabi" { target powerpc-ibm-aix* powerpc-wrs-vxworks* powerpc-*-elf } } */ typedef int __attribute__((__vector_size__(16))) vectype; diff --git a/gcc/testsuite/gcc.dg/ipa/pr119318.c b/gcc/testsuite/gcc.dg/ipa/pr119318.c new file mode 100644 index 0000000..f179aed --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr119318.c @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-require-effective-target int128 } */ +/* { dg-options "-Wno-psabi -w -O2" } */ + +typedef unsigned V __attribute__((vector_size (64))); +typedef unsigned __int128 W __attribute__((vector_size (64))); + +W a; +W b; +W c = { -0xffff, -0xffff, -0xffff, -0xffff }; + +static __attribute__((__noinline__, __noclone__)) W +bar (unsigned __int128 u) +{ + return u + c; +} + +static inline W +foo (unsigned short s, V v) +{ + V y = (V) bar ((unsigned short) ~s); + v >>= y; + b ^= (W) a; + v *= v; + return (W) v + b; +} + + +int +main () +{ + W x = foo (0, (V) { 0, 5 }); + for (unsigned i = 0; i < sizeof(x)/sizeof(x[0]); i++) + if (x[i] != (i ? 0 : 0x1900000000)) + __builtin_abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/ipa/pr119530.c b/gcc/testsuite/gcc.dg/ipa/pr119530.c new file mode 100644 index 0000000..f99c4fd --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr119530.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -fno-tree-vrp -fno-inline" } */ + +struct a { + int b; +}; +int c; +signed char d; +static int e(long long f) { return f < 0; } +static void g(unsigned f) { c = e(~f); } +int main() { + int h; + struct a i = {128}; + h = d > i.b; + g(h); + if (h) + __builtin_abort(); + if (c) + __builtin_abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/ipa/pr119803.c b/gcc/testsuite/gcc.dg/ipa/pr119803.c new file mode 100644 index 0000000..1a7bfd2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr119803.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +extern void f(int p); +int a, b; +char c; +static int d(int e) { return !e || a == 1 ? 0 : a / e; } +static void h(short e) { + int g = d(e); + f(g); +} +void i() { + c = 128; + h(c); + b = d(65536); +} diff --git a/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-1.c b/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-1.c index 8c15097..2be31fa 100644 --- a/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-1.c +++ b/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-1.c @@ -25,5 +25,5 @@ bar (long a) } /* { dg-final { scan-rtl-dump "Will split live ranges of parameters" "ira" } } */ -/* { dg-final { scan-rtl-dump "Split live-range of register" "ira" { xfail { ! aarch64*-*-* } } } } */ +/* { dg-final { scan-rtl-dump "Split live-range of register" "ira" { xfail { ! { aarch64*-*-* i?86-*-* x86_64-*-* } } } } } */ /* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" } } */ diff --git a/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-2.c b/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-2.c index 0690e03..61ee4c6 100644 --- a/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-2.c +++ b/gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-2.c @@ -30,6 +30,6 @@ bar (long a) } /* { dg-final { scan-rtl-dump "Will split live ranges of parameters" "ira" } } */ -/* { dg-final { scan-rtl-dump "Split live-range of register" "ira" { xfail { ! aarch64*-*-* } } } } */ +/* { dg-final { scan-rtl-dump "Split live-range of register" "ira" { xfail { ! { aarch64*-*-* i?86-*-* x86_64-*-* } } } } } */ /* XFAIL due to PR70681. */ /* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" { xfail arm*-*-* powerpc*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/memcpy-4.c b/gcc/testsuite/gcc.dg/memcpy-4.c index 4c726f0..b17b369 100644 --- a/gcc/testsuite/gcc.dg/memcpy-4.c +++ b/gcc/testsuite/gcc.dg/memcpy-4.c @@ -1,13 +1,8 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-rtl-expand" } */ +/* { dg-options "-O2" } */ -#ifdef __mips -__attribute__((nomips16)) -#endif void f1 (char *p) { __builtin_memcpy (p, "12345", 5); } - -/* { dg-final { scan-rtl-dump "mem/u.*mem/u" "expand" { target mips*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/pr116357.c b/gcc/testsuite/gcc.dg/pr116357.c index 07effa1..12aaf62 100644 --- a/gcc/testsuite/gcc.dg/pr116357.c +++ b/gcc/testsuite/gcc.dg/pr116357.c @@ -2,9 +2,9 @@ /* { dg-do compile } */ /* { dg-options "" } */ -typedef int A __attribute__((aligned (2 * alignof (int)))); +typedef int A __attribute__((aligned (2 * sizeof (int)))); A a[4]; /* { dg-error "alignment of array elements is greater than element size" } */ -typedef volatile int B __attribute__((aligned (2 * alignof (int)))); +typedef volatile int B __attribute__((aligned (2 * sizeof (int)))); B b[4]; /* { dg-error "alignment of array elements is greater than element size" } */ -typedef const int C __attribute__((aligned (2 * alignof (int)))); +typedef const int C __attribute__((aligned (2 * sizeof (int)))); C c[4]; /* { dg-error "alignment of array elements is greater than element size" } */ diff --git a/gcc/testsuite/gcc.dg/pr118947-1.c b/gcc/testsuite/gcc.dg/pr118947-1.c new file mode 100644 index 0000000..8733e8d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr118947-1.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/118947 */ +/* { dg-do compile { target size32plus } } */ +/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */ +/* { dg-final { scan-tree-dump-times "after previous" 1 "forwprop1" } } */ + +void* aaa(); +void* bbb() +{ + char buf[1025] = {}; + /* Tha call to aaa should not matter and clobber buf. */ + void* ret = aaa(); + __builtin_memcpy(ret, buf, sizeof(buf)); + return ret; +} + diff --git a/gcc/testsuite/gcc.dg/pr119160.c b/gcc/testsuite/gcc.dg/pr119160.c new file mode 100644 index 0000000..b4629a1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr119160.c @@ -0,0 +1,26 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -finstrument-functions-once -favoid-store-forwarding -fnon-call-exceptions -fschedule-insns -mgeneral-regs-only -Wno-psabi" } */ + +typedef __attribute__((__vector_size__ (32))) int V; + +void +foo (V v, V, V, V *r) +{ + V u = (V){} + v[0]; + *r = u; +} + +__attribute__((__noipa__)) void +bar(int x) +{ + if (x != 2) __builtin_abort(); +} + +int +main () +{ + V x; + foo ((V){ 2, 3 }, (V){ }, (V){ }, &x); + for (unsigned i = 0; i < sizeof(x)/sizeof(x[0]); i++) + bar(x[i]); +}
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/pr119717.c b/gcc/testsuite/gcc.dg/pr119717.c new file mode 100644 index 0000000..e5eedc5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr119717.c @@ -0,0 +1,24 @@ +/* PR c/119717 */ +/* { dg-additional-options "-std=c23" } */ +/* { dg-do compile } */ + +struct annotated { + unsigned count; + [[gnu::counted_by(count)]] char array[]; +}; + +[[gnu::noinline,gnu::noipa]] +static unsigned +size_of (bool x, struct annotated *a) +{ + char *p = (x ? a : 0)->array; + return __builtin_dynamic_object_size (p, 1); +} + +int main() +{ + struct annotated *p = __builtin_malloc(sizeof *p); + p->count = 0; + __builtin_printf ("the bdos whole is %ld\n", size_of (0, p)); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr78408-3.c b/gcc/testsuite/gcc.dg/pr78408-3.c new file mode 100644 index 0000000..5ea5458 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr78408-3.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/78408 */ +/* { dg-do compile { target size32plus } } */ +/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */ +/* { dg-final { scan-tree-dump-times "after previous" 1 "forwprop1" } } */ + +void* aaa(); +void* bbb() +{ + void* ret = aaa(); + char buf[1025] = {}; + __builtin_memcpy(ret, buf, sizeof(buf)); + return ret; +} + diff --git a/gcc/testsuite/gcc.dg/raw-string-1.c b/gcc/testsuite/gcc.dg/raw-string-1.c new file mode 100644 index 0000000..77d6145 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-1.c @@ -0,0 +1,25 @@ +/* PR c++/110343 */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu23" } */ + +const void *s0 = R"0123456789abcdefg()0123456789abcdefg" 0; + /* { dg-error "raw string delimiter longer" "longer" { target *-*-* } .-1 } */ + /* { dg-error "stray" "stray" { target *-*-* } .-2 } */ +const void *s1 = R" () " 0; + /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */ + /* { dg-error "stray" "stray" { target *-*-* } .-2 } */ +const void *s2 = R" () " 0; + /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */ + /* { dg-error "stray" "stray" { target *-*-* } .-2 } */ +const void *s3 = R")())" 0; + /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */ + /* { dg-error "stray" "stray" { target *-*-* } .-2 } */ +const char *s4 = R"@()@"; +const char *s5 = R"$()$"; +const char *s6 = R"`()`"; +const void *s7 = R"\u0040()\u0040" 0; + /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */ + /* { dg-error "stray" "stray" { target *-*-* } .-2 } */ +const char *s8 = R"`@$$@`@`$()`@$$@`@`$"; + +int main () {} diff --git a/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c new file mode 100644 index 0000000..871d489 --- /dev/null +++ b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c @@ -0,0 +1,71 @@ +/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-O2 -march=x86-64-v3" } */ + +typedef int v4si __attribute__((vector_size(16))); +typedef int v8si __attribute__((vector_size(32))); +typedef int v2di __attribute__((vector_size(16))); + +v4si __RTL (startwith ("vregs1")) foo1 (void) +{ +(function "foo1" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cnote 2 NOTE_INSN_FUNCTION_BEG) + (cinsn 3 (set (reg:V4SI <0>) (const_vector:V4SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1)]))) + (cinsn 4 (set (reg:V4SI <1>) (const_vector:V4SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1)]))) + (cinsn 5 (set (reg:V4SI <2>) + (eq:V4SI (reg:V4SI <0>) (reg:V4SI <1>)))) + (cinsn 6 (set (reg:V4SI <3>) (reg:V4SI <2>))) + (cinsn 7 (set (reg:V4SI xmm0) (reg:V4SI <3>))) + (edge-to exit (flags "FALLTHRU")) + ) + ) + (crtl (return_rtx (reg/i:V4SI xmm0))) +) +} + +v8si __RTL (startwith ("vregs1")) foo2 (void) +{ +(function "foo2" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cnote 2 NOTE_INSN_FUNCTION_BEG) + (cinsn 3 (set (reg:V8SI <0>) (const_vector:V8SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1)]))) + (cinsn 4 (set (reg:V8SI <1>) (const_vector:V8SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1)]))) + (cinsn 5 (set (reg:V8SI <2>) + (eq:V8SI (reg:V8SI <0>) (reg:V8SI <1>)))) + (cinsn 6 (set (reg:V8SI <3>) (reg:V8SI <2>))) + (cinsn 7 (set (reg:V8SI xmm0) (reg:V8SI <3>))) + (edge-to exit (flags "FALLTHRU")) + ) + ) + (crtl (return_rtx (reg/i:V8SI xmm0))) +) +} + +v2di __RTL (startwith ("vregs1")) foo3 (void) +{ +(function "foo3" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cnote 2 NOTE_INSN_FUNCTION_BEG) + (cinsn 3 (set (reg:V2DI <0>) (const_vector:V2DI [(const_int -1) (const_int -1)]))) + (cinsn 4 (set (reg:V2DI <1>) (const_vector:V2DI [(const_int -1) (const_int -1)]))) + (cinsn 5 (set (reg:V2DI <2>) + (eq:V2DI (reg:V2DI <0>) (reg:V2DI <1>)))) + (cinsn 6 (set (reg:V2DI <3>) (reg:V2DI <2>))) + (cinsn 7 (set (reg:V2DI xmm0) (reg:V2DI <3>))) + (edge-to exit (flags "FALLTHRU")) + ) + ) + (crtl (return_rtx (reg/i:V2DI xmm0))) +) +} + +/* { dg-final { scan-assembler-times "vpcmpeq" 3 } } */ diff --git a/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c new file mode 100644 index 0000000..276c4c2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c @@ -0,0 +1,74 @@ +/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-O2 -march=x86-64-v3" } */ + +typedef int v4si __attribute__((vector_size(16))); +typedef int v8si __attribute__((vector_size(32))); +typedef int v2di __attribute__((vector_size(16))); + +v4si __RTL (startwith ("vregs1")) foo1 (void) +{ +(function "foo1" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cnote 2 NOTE_INSN_FUNCTION_BEG) + (cinsn 3 (set (reg:V4SI <1>) + (mem:V4SI (reg:SI di) [0 ptr S128 A128]))) + (cinsn 4 (set (reg:V4SI <2>) + (eq:V4SI (reg:V4SI <1>) + (mem:V4SI (reg:SI di) [0 ptr S128 A128])))) + (cinsn 5 (set (reg:V4SI <3>) (reg:V4SI <2>))) + (cinsn 6 (set (reg:V4SI xmm0) (reg:V4SI <3>))) + (edge-to exit (flags "FALLTHRU")) + ) + ) + (crtl (return_rtx (reg/i:V4SI xmm0))) +) +} + +v8si __RTL (startwith ("vregs1")) foo2 (void) +{ +(function "foo2" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cnote 2 NOTE_INSN_FUNCTION_BEG) + (cinsn 3 (set (reg:V8SI <1>) + (mem:V8SI (reg:SI di) [0 ptr S256 A256]))) + (cinsn 4 (set (reg:V8SI <2>) + (eq:V8SI (mem:V8SI (reg:SI di) [0 ptr S256 A256]) + (reg:V8SI <1>)))) + (cinsn 5 (set (reg:V8SI <3>) (reg:V8SI <2>))) + (cinsn 6 (set (reg:V8SI xmm0) (reg:V8SI <3>))) + (edge-to exit (flags "FALLTHRU")) + ) + ) + (crtl (return_rtx (reg/i:V8SI xmm0))) +) +} + +v2di __RTL (startwith ("vregs1")) foo3 (void) +{ +(function "foo3" + (insn-chain + (block 2 + (edge-from entry (flags "FALLTHRU")) + (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) + (cnote 2 NOTE_INSN_FUNCTION_BEG) + (cinsn 3 (set (reg:V2DI <1>) + (mem:V2DI (reg:SI di) [0 ptr S128 A128]))) + (cinsn 4 (set (reg:V2DI <2>) + (eq:V2DI (reg:V2DI <1>) + (mem:V2DI (reg:SI di) [0 ptr S128 A128])))) + (cinsn 5 (set (reg:V2DI <3>) (reg:V2DI <2>))) + (cinsn 6 (set (reg:V2DI xmm0) (reg:V2DI <3>))) + (edge-to exit (flags "FALLTHRU")) + ) + ) + (crtl (return_rtx (reg/i:V2DI xmm0))) +) +} + +/* { dg-final { scan-assembler-times "vpcmpeq" 3 } } */ diff --git a/gcc/testsuite/gcc.dg/torture/bitint-76.c b/gcc/testsuite/gcc.dg/torture/bitint-76.c new file mode 100644 index 0000000..df47857 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-76.c @@ -0,0 +1,19 @@ +/* PR tree-optimization/119707 */ +/* { dg-do run { target bitint } } */ + +#if __BITINT_MAXWIDTH__ >= 256 +__attribute__((noipa)) unsigned _BitInt(256) +foo (unsigned _BitInt(256) x, _BitInt(129) y) +{ + return x + (unsigned _BitInt(255)) y; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 256 + if (foo (0, -1) != 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffuwb) + __builtin_abort (); +#endif +} diff --git a/gcc/testsuite/gcc.dg/torture/bitint-77.c b/gcc/testsuite/gcc.dg/torture/bitint-77.c new file mode 100644 index 0000000..3e2523f --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-77.c @@ -0,0 +1,26 @@ +/* PR tree-optimization/119722 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-O2 -fno-tree-forwprop -fno-tree-copy-prop -fno-tree-fre" } */ + +#if __BITINT_MAXWIDTH__ >= 33300 +unsigned _BitInt(33300) g; + +unsigned +foo (long c) +{ + unsigned _BitInt(33300) b + = __builtin_stdc_rotate_left ((unsigned _BitInt(13)) 8, c); + return ((unsigned _BitInt(50)) (g >> 50) + + ({ unsigned _BitInt(300) unused; b; })); +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 33300 + unsigned x = foo (0); + if (x != 8) + __builtin_abort (); +#endif +} diff --git a/gcc/testsuite/gcc.dg/torture/pr118476-1.c b/gcc/testsuite/gcc.dg/torture/pr118476-1.c new file mode 100644 index 0000000..33509403 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr118476-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ + +/* PR tree-optimization/118476 */ + +typedef unsigned long long poly64x1 __attribute__((__vector_size__(1*sizeof(long long)))); + +poly64x1 vext_p64(poly64x1 a, poly64x1 b, const int n) +{ + poly64x1 r = a; + unsigned src = (unsigned)n; + long long t = b[0]; + r[0] = (src < 1) ? a[src] : t; + return r; +} diff --git a/gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c b/gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c new file mode 100644 index 0000000..ab6a7f7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c @@ -0,0 +1,30 @@ +/* { dg-options "-O2 -fdump-ipa-cp" } */ +__attribute__ ((used)) +int a[1000]; + +__attribute__ ((noinline)) +void +test2(int sz) +{ + for (int i = 0; i < sz; i++) + a[i]++; + asm volatile (""::"m"(a)); +} + +__attribute__ ((noinline)) +void +test1 (int sz) +{ + for (int i = 0; i < 1000; i++) + test2(sz); +} +int main() +{ + test1(1000); + return 0; +} +/* We should clone test1 and test2 for constant 1000. + In the past we did not do this since we did not clone for edges that are not hot + and call main->test1 is not considered hot since it is executed just once. */ +/* { dg-final-use { scan-ipa-dump-times "Creating a specialized node of test1" 1 "cp"} } */ +/* { dg-final-use { scan-ipa-dump-times "Creating a specialized node of test2" 1 "cp"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c new file mode 100644 index 0000000..fa21b8a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +void foo(int); +void l(int**); +int f1(int j, int t) +{ + int p = 0; + int *a = &p; + l(&a); + if (a == &p) + return 0; + for(int i = 0; i < j; i++) + { + if (a == &p) foo(p); + } + return 0; +} + +/* We should be able to remove the call to foo because a is never equal to &p inside the loop. */ +/* { dg-final { scan-tree-dump-not "foo " "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c index a879d30..6fa52f6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c @@ -27,4 +27,4 @@ foo () but the loop reads only one element at a time, and DOM cannot resolve these. The same happens on powerpc depending on the SIMD support available. */ -/* { dg-final { scan-tree-dump "return 28;" "optimized" { xfail { { alpha*-*-* hppa*64*-*-* nvptx*-*-* mmix-knuth-mmixware } || { { { lp64 && { powerpc*-*-* sparc*-*-* riscv*-*-* } } || aarch64_sve } || { arm*-*-* && { ! arm_neon } } } } } } } */ +/* { dg-final { scan-tree-dump "return 28;" "optimized" { xfail { { alpha*-*-* hppa*64*-*-* nvptx*-*-* mmix-knuth-mmixware } || { { { lp64 && { mips*-*-* powerpc*-*-* sparc*-*-* riscv*-*-* } } || aarch64_sve } || { arm*-*-* && { ! arm_neon } } } } } } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c new file mode 100644 index 0000000..9e605ac --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c @@ -0,0 +1,30 @@ +/* { dg-options "-O2 -fdump-tree-dse-details -fno-tree-fre -fdump-tree-optimized" } */ + +/* PR tree-optimization/87901 */ + +char z[32]; +void foo1(void) +{ + char z1[17]; + char z2[24]; + __builtin_memset (z1, 0, 17); + __builtin_memcpy (z, z1, 17); + __builtin_memset (z2, 0, 24); + __builtin_memcpy (z+8, z2, 24); +} + +/* we should get: + MEM <unsigned char[8]> [(char * {ref-all})&z] = {}; + MEM <unsigned char[24]> [(char * {ref-all})&z + 8B] = {}; + after DSE; trimming the first memset to z (which was memcpy) to 8 bytes + from the original 17. + and not have a [17] in the IR after DSE. + The two memset to z1/z2 will also be removed. + */ +/* { dg-final { scan-tree-dump-not "\\\[17\\\]" "optimized" } } */ +/* { dg-final { scan-tree-dump "\\\[8\\\]" "dse1" } } */ + +/* { dg-final { scan-tree-dump-times "Trimming statement " 1 "dse1" } } */ +/* { dg-final { scan-tree-dump-times "Deleted dead call:" 2 "dse1" } } */ + + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c new file mode 100644 index 0000000..a2df591 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c @@ -0,0 +1,26 @@ +/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-dse-details -fno-tree-fre -fdump-tree-optimized" } */ + +/* PR tree-optimization/87901 */ + + +int i; +int foo () +{ + i = 0; + *((short *)&i + 1) = 1; + return i; +} + +/* we should get: + MEM <char[2]> [(int *)&i] = {}; + MEM[(short int *)&i + 2B] = 1; + in DSE1. + + Note later on the stores will be merged. */ +/* { dg-final { scan-tree-dump "return 65536;" "optimized" { target le } } } */ +/* { dg-final { scan-tree-dump "return 1;" "optimized" { target be } } } */ +/* { dg-final { scan-tree-dump "\\\[2\\\]" "dse1" } } */ + +/* { dg-final { scan-tree-dump-times "Trimming statement " 1 "dse1" } } */ + + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c new file mode 100644 index 0000000..7e79a73 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c @@ -0,0 +1,25 @@ +/* { dg-options "-O2 -fdump-tree-dse-details -fno-tree-fre -fdump-tree-optimized" } */ + +/* PR tree-optimization/87901 */ + +int z[128]; +void foo1(void) +{ + int z1; + int z2[24/sizeof(int)]; + __builtin_memset (&z1, 0, sizeof(int)); + __builtin_memcpy (z, &z1, sizeof(int)); + __builtin_memset (z2, 0, 24); + __builtin_memcpy (((char*)z)+1, z2, 24); +} + +/* we should get: + MEM[(char * {ref-all})&z] = {}; + __builtin_memset (&MEM <int[128]> [(void *)&z + 1B], 0, 24); + */ + +/* { dg-final { scan-tree-dump-not "MEM <unsigned int>" "optimized" } } */ +/* { dg-final { scan-tree-dump-not "MEM \\\[" "dse1" } } */ +/* { dg-final { scan-tree-dump-times "Trimming statement " 1 "dse1" } } */ +/* { dg-final { scan-tree-dump-times "Deleted dead call:" 1 "dse1" } } */ + diff --git a/gcc/testsuite/gcc.dg/vect/pr119757.c b/gcc/testsuite/gcc.dg/vect/pr119757.c new file mode 100644 index 0000000..8644299 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr119757.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ + +void base64_encode(const char *table64, + const char *inputbuff, int insize, + char * __restrict output) +{ + const unsigned char *in = (const unsigned char *)inputbuff; + + while(insize >= 3) { + *output++ = table64[ in[0] >> 2 ]; + *output++ = table64[ ((in[0] & 0x03) << 4) | (in[1] >> 4) ]; + *output++ = table64[ ((in[1] & 0x0F) << 2) | ((in[2] & 0xC0) >> 6) ]; + *output++ = table64[ in[2] & 0x3F ]; + insize -= 3; + in += 3; + } +} diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_18.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_18.c index edddb44..cd39704 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_18.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_18.c @@ -2,7 +2,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_early_break } */ /* { dg-require-effective-target vect_int } */ - +/* { dg-additional-options "-march=gfx908" { target amdgcn*-*-* } } */ /* { dg-additional-options "-Ofast" } */ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target vect_load_lanes } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c index 36fc6a6..010e7ea 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_early_break } */ /* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-march=gfx908" { target amdgcn*-*-* } } */ #ifndef N #define N 803 diff --git a/gcc/testsuite/gcc.misc-tests/gcov-31.c b/gcc/testsuite/gcc.misc-tests/gcov-31.c index 6c42d34..5f060e9 100644 --- a/gcc/testsuite/gcc.misc-tests/gcov-31.c +++ b/gcc/testsuite/gcc.misc-tests/gcov-31.c @@ -20,7 +20,7 @@ run_pending_traps () jump_to_top_level (2); for (sig = 1; sig < (64 + 1) ; sig++) - __sigsetjmp ((return_catch), 0); + sigsetjmp ((return_catch), 0); } /* Distilled from alsalib-1.2.11 pcm/pcm_route.c. */ diff --git a/gcc/testsuite/gcc.misc-tests/gcov.exp b/gcc/testsuite/gcc.misc-tests/gcov.exp index c8f20e1..4d427c8 100644 --- a/gcc/testsuite/gcc.misc-tests/gcov.exp +++ b/gcc/testsuite/gcc.misc-tests/gcov.exp @@ -21,12 +21,19 @@ load_lib gcc-dg.exp load_lib gcov.exp global GCC_UNDER_TEST +global GCOV_UNDER_TEST -# For now find gcov in the same directory as $GCC_UNDER_TEST. -if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } { - set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] +# For now find gcov in the same directory as $GCC_UNDER_TEST, unless +# GCOV_UNDER_TEST is defined. + +if ![info exists GCOV_UNDER_TEST] { + if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } { + set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] + } else { + set GCOV [gcc-transform-out-of-tree gcov] + } } else { - set GCOV [gcc-transform-out-of-tree gcov] + set GCOV $GCOV_UNDER_TEST } # Initialize harness. diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c new file mode 100644 index 0000000..e49ace1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c @@ -0,0 +1,54 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv8.2-a+fp16" } */ + +/* +** test_fcmp_store: +** fcmp h0, h1 +** cset w0, eq +** ret +*/ +int +test_fcmp_store(_Float16 a, _Float16 b) +{ + return a == b; +} + +/* +** test_fcmpe_store: +** fcmpe h0, h1 +** cset w0, mi +** ret +*/ +int +test_fcmpe_store(_Float16 a, _Float16 b) +{ + return a < b; +} + +/* +** test_fcmp_branch: +** fcmp h0, h1 +** ... +*/ +_Float16 +test_fcmp_branch(_Float16 a, _Float16 b) +{ + if (a == b) + return a * b; + return a; +} + +/* +** test_fcmpe_branch: +** fcmpe h0, h1 +** ... +*/ +_Float16 +test_fcmpe_branch(_Float16 a, _Float16 b) +{ + if (a < b) + return a * b; + return a; +} + +/* { dg-final { check-function-bodies "**" "" "" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c new file mode 100644 index 0000000..0ff7cda --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv8.2-a+nofp16" } */ + +#include "_Float16_cmp_1.c" + +/* { dg-final { scan-assembler-not {\tfcmp\th[0-9]+} } } */ +/* { dg-final { scan-assembler-not {\tfcmpe\th[0-9]+} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/acle/rwsr-ungated.c b/gcc/testsuite/gcc.target/aarch64/acle/rwsr-ungated.c new file mode 100644 index 0000000..d67a426 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/acle/rwsr-ungated.c @@ -0,0 +1,13 @@ +/* Test that __arm_[r,w]sr intrinsics aren't gated (by default). */ + +/* { dg-do compile } */ +/* { dg-options "-march=armv8-a" } */ + +#include <arm_acle.h> + +uint64_t +foo (uint64_t a) +{ + __arm_wsr64 ("zcr_el1", a); + return __arm_rsr64 ("smcr_el1"); +} diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c index 0892ce7..a653296 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c @@ -1,7 +1,3 @@ -/* We haven't implemented these intrinsics for arm yet. */ -/* { dg-skip-if "unimplemented" { arm*-*-* } } */ -/* { dg-options "-O3" } */ - #include <arm_neon.h> #include "arm-neon-ref.h" @@ -39,7 +35,6 @@ VARIANT (int32, 2, _s32) \ VARIANT (int64, 1, _s64) \ VARIANT (poly8, 8, _p8) \ VARIANT (poly16, 4, _p16) \ -VARIANT (float16, 4, _f16) \ VARIANT (float32, 2, _f32) \ VARIANT (uint8, 16, q_u8) \ VARIANT (uint16, 8, q_u16) \ @@ -51,17 +46,30 @@ VARIANT (int32, 4, q_s32) \ VARIANT (int64, 2, q_s64) \ VARIANT (poly8, 16, q_p8) \ VARIANT (poly16, 8, q_p16) \ -VARIANT (float16, 8, q_f16) \ VARIANT (float32, 4, q_f32) +#if defined (__ARM_FP16_FORMAT_IEEE) \ + || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \ + || defined (__aarch64__) +#define VARIANTS_F16(VARIANT) \ + VARIANT (float16, 4, _f16) \ + VARIANT (float16, 8, q_f16) +#else +#define VARIANTS_F16(VARIANTS_F16) +#endif + #ifdef __aarch64__ #define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) \ +VARIANT (poly64, 1, _p64) \ +VARIANT (poly64, 2, q_p64) \ VARIANT (mfloat8, 8, _mf8) \ VARIANT (mfloat8, 16, q_mf8) \ VARIANT (float64, 1, _f64) \ VARIANT (float64, 2, q_f64) #else -#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) +#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) #endif /* Tests of vld1_x2 and vld1q_x2. */ diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c index 9465e4a..832ee75 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c @@ -1,7 +1,3 @@ -/* We haven't implemented these intrinsics for arm yet. */ -/* { dg-skip-if "unimplemented" { arm*-*-* } } */ -/* { dg-options "-O3" } */ - #include <arm_neon.h> #include "arm-neon-ref.h" @@ -40,7 +36,6 @@ VARIANT (int32, 2, _s32) \ VARIANT (int64, 1, _s64) \ VARIANT (poly8, 8, _p8) \ VARIANT (poly16, 4, _p16) \ -VARIANT (float16, 4, _f16) \ VARIANT (float32, 2, _f32) \ VARIANT (uint8, 16, q_u8) \ VARIANT (uint16, 8, q_u16) \ @@ -52,17 +47,30 @@ VARIANT (int32, 4, q_s32) \ VARIANT (int64, 2, q_s64) \ VARIANT (poly8, 16, q_p8) \ VARIANT (poly16, 8, q_p16) \ -VARIANT (float16, 8, q_f16) \ VARIANT (float32, 4, q_f32) +#if defined (__ARM_FP16_FORMAT_IEEE) \ + || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \ + || defined (__aarch64__) +#define VARIANTS_F16(VARIANT) \ + VARIANT (float16, 4, _f16) \ + VARIANT (float16, 8, q_f16) +#else +#define VARIANTS_F16(VARIANTS_F16) +#endif + #ifdef __aarch64__ #define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) \ +VARIANT (poly64, 1, _p64) \ +VARIANT (poly64, 2, q_p64) \ VARIANT (mfloat8, 8, _mf8) \ VARIANT (mfloat8, 16, q_mf8) \ VARIANT (float64, 1, _f64) \ VARIANT (float64, 2, q_f64) #else -#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) +#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) #endif diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c index a1461fd..e5f55f0 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c @@ -1,7 +1,3 @@ -/* We haven't implemented these intrinsics for arm yet. */ -/* { dg-skip-if "unimplemented" { arm*-*-* } } */ -/* { dg-options "-O3" } */ - #include <stdbool.h> #include <arm_neon.h> #include "arm-neon-ref.h" @@ -42,8 +38,6 @@ VARIANT (int32, 2, _s32) \ VARIANT (int64, 1, _s64) \ VARIANT (poly8, 8, _p8) \ VARIANT (poly16, 4, _p16) \ -VARIANT (poly64, 1, _p64) \ -VARIANT (float16, 4, _f16) \ VARIANT (float32, 2, _f32) \ VARIANT (uint8, 16, q_u8) \ VARIANT (uint16, 8, q_u16) \ @@ -55,18 +49,30 @@ VARIANT (int32, 4, q_s32) \ VARIANT (int64, 2, q_s64) \ VARIANT (poly8, 16, q_p8) \ VARIANT (poly16, 8, q_p16) \ -VARIANT (poly64, 2, q_p64) \ -VARIANT (float16, 8, q_f16) \ VARIANT (float32, 4, q_f32) +#if defined (__ARM_FP16_FORMAT_IEEE) \ + || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \ + || defined (__aarch64__) +#define VARIANTS_F16(VARIANT) \ + VARIANT (float16, 4, _f16) \ + VARIANT (float16, 8, q_f16) +#else +#define VARIANTS_F16(VARIANTS_F16) +#endif + #ifdef __aarch64__ #define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) \ +VARIANT (poly64, 1, _p64) \ +VARIANT (poly64, 2, q_p64) \ VARIANT (mfloat8, 8, _mf8) \ VARIANT (mfloat8, 16, q_mf8) \ VARIANT (float64, 1, _f64) \ VARIANT (float64, 2, q_f64) #else -#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) +#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) #endif /* Tests of vld1_x4 and vld1q_x4. */ diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c index 3cf5eb3..8399290 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c @@ -1,7 +1,3 @@ -/* We haven't implemented these intrinsics for arm yet. */ -/* { dg-skip-if "unimplemented" { arm*-*-* } } */ -/* { dg-options "-O3" } */ - #include <arm_neon.h> #include "arm-neon-ref.h" @@ -39,7 +35,6 @@ VARIANT (int32, 2, _s32) \ VARIANT (int64, 1, _s64) \ VARIANT (poly8, 8, _p8) \ VARIANT (poly16, 4, _p16) \ -VARIANT (float16, 4, _f16) \ VARIANT (float32, 2, _f32) \ VARIANT (uint8, 16, q_u8) \ VARIANT (uint16, 8, q_u16) \ @@ -51,17 +46,30 @@ VARIANT (int32, 4, q_s32) \ VARIANT (int64, 2, q_s64) \ VARIANT (poly8, 16, q_p8) \ VARIANT (poly16, 8, q_p16) \ -VARIANT (float16, 8, q_f16) \ VARIANT (float32, 4, q_f32) +#if defined (__ARM_FP16_FORMAT_IEEE) \ + || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \ + || defined (__aarch64__) +#define VARIANTS_F16(VARIANT) \ + VARIANT (float16, 4, _f16) \ + VARIANT (float16, 8, q_f16) +#else +#define VARIANTS_F16(VARIANTS_F16) +#endif + #ifdef __aarch64__ #define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) \ +VARIANT (poly64, 1, _p64) \ +VARIANT (poly64, 2, q_p64) \ VARIANT (mfloat8, 8, _mf8) \ VARIANT (mfloat8, 16, q_mf8) \ VARIANT (float64, 1, _f64) \ VARIANT (float64, 2, q_f64) #else -#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) +#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) #endif /* Tests of vst1_x2 and vst1q_x2. */ diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c index c05f8e7..e7d9e02 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c @@ -1,7 +1,3 @@ -/* We haven't implemented these intrinsics for arm yet. */ -/* { dg-skip-if "unimplemented" { arm*-*-* } } */ -/* { dg-options "-O3" } */ - #include <arm_neon.h> #include "arm-neon-ref.h" @@ -40,7 +36,6 @@ VARIANT (int32, 2, _s32) \ VARIANT (int64, 1, _s64) \ VARIANT (poly8, 8, _p8) \ VARIANT (poly16, 4, _p16) \ -VARIANT (float16, 4, _f16) \ VARIANT (float32, 2, _f32) \ VARIANT (uint8, 16, q_u8) \ VARIANT (uint16, 8, q_u16) \ @@ -52,17 +47,30 @@ VARIANT (int32, 4, q_s32) \ VARIANT (int64, 2, q_s64) \ VARIANT (poly8, 16, q_p8) \ VARIANT (poly16, 8, q_p16) \ -VARIANT (float16, 8, q_f16) \ VARIANT (float32, 4, q_f32) +#if defined (__ARM_FP16_FORMAT_IEEE) \ + || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \ + || defined (__aarch64__) +#define VARIANTS_F16(VARIANT) \ + VARIANT (float16, 4, _f16) \ + VARIANT (float16, 8, q_f16) +#else +#define VARIANTS_F16(VARIANTS_F16) +#endif + #ifdef __aarch64__ #define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) \ +VARIANT (poly64, 1, _p64) \ +VARIANT (poly64, 2, q_p64) \ VARIANT (mfloat8, 8, _mf8) \ VARIANT (mfloat8, 16, q_mf8) \ VARIANT (float64, 1, _f64) \ VARIANT (float64, 2, q_f64) #else -#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) +#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) #endif /* Tests of vst1_x3 and vst1q_x3. */ diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c index a9867c3..83b0567 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c @@ -1,7 +1,3 @@ -/* We haven't implemented these intrinsics for arm yet. */ -/* { dg-skip-if "unimplemented" { arm*-*-* } } */ -/* { dg-options "-O3" } */ - #include <arm_neon.h> #include "arm-neon-ref.h" @@ -41,8 +37,6 @@ VARIANT (int32, 2, _s32) \ VARIANT (int64, 1, _s64) \ VARIANT (poly8, 8, _p8) \ VARIANT (poly16, 4, _p16) \ -VARIANT (poly64, 1, _p64) \ -VARIANT (float16, 4, _f16) \ VARIANT (float32, 2, _f32) \ VARIANT (uint8, 16, q_u8) \ VARIANT (uint16, 8, q_u16) \ @@ -54,18 +48,30 @@ VARIANT (int32, 4, q_s32) \ VARIANT (int64, 2, q_s64) \ VARIANT (poly8, 16, q_p8) \ VARIANT (poly16, 8, q_p16) \ -VARIANT (poly64, 2, q_p64) \ -VARIANT (float16, 8, q_f16) \ VARIANT (float32, 4, q_f32) +#if defined (__ARM_FP16_FORMAT_IEEE) \ + || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \ + || defined (__aarch64__) +#define VARIANTS_F16(VARIANT) \ + VARIANT (float16, 4, _f16) \ + VARIANT (float16, 8, q_f16) +#else +#define VARIANTS_F16(VARIANTS_F16) +#endif + #ifdef __aarch64__ #define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) \ +VARIANT (poly64, 1, _p64) \ +VARIANT (poly64, 2, q_p64) \ VARIANT (mfloat8, 8, _mf8) \ VARIANT (mfloat8, 16, q_mf8) \ VARIANT (float64, 1, _f64) \ VARIANT (float64, 2, q_f64) #else -#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) +#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \ +VARIANTS_F16(VARIANT) #endif /* Tests of vst1_x4 and vst1q_x4. */ diff --git a/gcc/testsuite/gcc.target/aarch64/bic-1.c b/gcc/testsuite/gcc.target/aarch64/bic-1.c new file mode 100644 index 0000000..65e1514 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bic-1.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +/* PR rtl-optmization/111949 */ + +/* +**func1: +** bic w([0-9]+), w0, w1 +** and w0, w\1, 1 +** ret +*/ + +unsigned func1(unsigned a, bool b) +{ + int c = a & b; + return (c ^ a)&1; +} + +/* +**func2: +** bic w([0-9]+), w1, w0 +** and w0, w\1, 255 +** ret +*/ +unsigned func2(bool a, bool b) +{ + return ~a & b; +} + +/* +**func3: +** bic w([0-9]+), w1, w0 +** and w0, w\1, 1 +** ret +*/ +bool func3(bool a, unsigned char b) +{ + return !a & b; +} diff --git a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c index dcac6d5..3799fb4 100644 --- a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c +++ b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c @@ -315,3 +315,18 @@ #ifndef __ARM_FEATURE_FP8DOT2 #error Foo #endif + +#pragma GCC target "arch=armv9.4-a" +#ifdef __ARM_FEATURE_FAMINMAX +#error Foo +#endif + +#pragma GCC target "arch=armv9.5-a" +#ifndef __ARM_FEATURE_FAMINMAX +#error Foo +#endif + +#pragma GCC target "arch=armv8-a+faminmax" +#ifndef __ARM_FEATURE_FAMINMAX +#error Foo +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10.c new file mode 100644 index 0000000..b7a7bc5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10.c @@ -0,0 +1,24 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 0 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (int start) +{ + for (unsigned int i = start; i < END; ++i) + { + if (x[i] == 0) + return i; + } + return -1; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10_run.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10_run.c new file mode 100644 index 0000000..6169aeb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10_run.c @@ -0,0 +1,17 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "peel_ind_10.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + int res = foo (START); + asm volatile (""); + if (res != START) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5.c new file mode 100644 index 0000000..a03bb1d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5.c @@ -0,0 +1,24 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 2 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (void) +{ + for (signed int i = START; i < END; ++i) + { + if (x[i] == 0) + return i; + } + return -1; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5_run.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5_run.c new file mode 100644 index 0000000..f26befe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5_run.c @@ -0,0 +1,17 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "peel_ind_5.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + int res = foo (); + asm volatile (""); + if (res != START) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6.c new file mode 100644 index 0000000..9bfd1a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6.c @@ -0,0 +1,24 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 1 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (int start) +{ + for (unsigned int i = start; i < END; ++i) + { + if (x[i] == 0) + return i; + } + return -1; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6_run.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6_run.c new file mode 100644 index 0000000..4fdf3e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6_run.c @@ -0,0 +1,17 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "peel_ind_6.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + int res = foo (START); + asm volatile (""); + if (res != START) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7.c new file mode 100644 index 0000000..0182e13 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7.c @@ -0,0 +1,24 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 1 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (void) +{ + for (unsigned int i = START; i < END; ++i) + { + if (x[i] == 0) + return i; + } + return -1; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7_run.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7_run.c new file mode 100644 index 0000000..05608dd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7_run.c @@ -0,0 +1,17 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "peel_ind_7.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + int res = foo (); + asm volatile (""); + if (res != START) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8.c new file mode 100644 index 0000000..043348b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8.c @@ -0,0 +1,24 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 1 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (void) +{ + for (unsigned int i = START; i < END; i*=2) + { + if (x[i] == 0) + return i; + } + return -1; +} + +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump-not "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump-not "Alignment of access forced using peeling" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8_run.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8_run.c new file mode 100644 index 0000000..aa86122 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8_run.c @@ -0,0 +1,17 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "peel_ind_8.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + int res = foo (); + asm volatile (""); + if (res != START) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9.c new file mode 100644 index 0000000..cc904e8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9.c @@ -0,0 +1,25 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ + +#define N 512 +#define START 1 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +int __attribute__((noipa)) +foo (void) +{ + for (int *p = x + START; p < x + END; p++) + { + if (*p == 0) + return START; + } + return -1; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* Peels using a scalar loop. */ +/* { dg-final { scan-tree-dump-not "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9_run.c b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9_run.c new file mode 100644 index 0000000..767f8bd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9_run.c @@ -0,0 +1,17 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "peel_ind_9.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + int res = foo (); + asm volatile (""); + if (res != START) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c b/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c new file mode 100644 index 0000000..85aab35 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c @@ -0,0 +1,39 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fdump-tree-vect-details" } */ +/* { dg-final { check-function-bodies "**" "" ""} } */ + +#define N 512 +#define START 1 +#define END 505 + +int x[N] __attribute__((aligned(32))); + +/* +** foo: +** ... +** ld1w z[0-9]+.s, p[0-9]+/z, \[x[0-9], x[0-9], lsl 2\] +** cmple p[0-9]+.s, p[0-9]+/z, z[0-9]+.s, #0 +** ptest p[0-9]+, p[0-9]+.b +** ... +*/ + +int __attribute__((noipa)) +foo (void) +{ + int z = 0; + for (unsigned int i = START; i < END; ++i) + { + z++; + if (x[i] > 0) + continue; + + return z; + } + return -1; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump "pfa_iv_offset" "vect" } } */ +/* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ + diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c b/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c new file mode 100644 index 0000000..d36ab0e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c @@ -0,0 +1,20 @@ +/* Fix for PR119351 alignment peeling with vectors and VLS. */ +/* { dg-do run { target aarch64_sve_hw } } */ +/* { dg-options "-Ofast --param aarch64-autovec-preference=sve-only" } */ +/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ +/* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */ + +#include "pr119351.c" + +int __attribute__ ((optimize (1))) +main (void) +{ + x[0] = 1; + x[1] = 21; + x[2] = 39; + x[3] = 59; + int res = foo (); + if (res != 4) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c new file mode 100644 index 0000000..631d14f --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c @@ -0,0 +1,76 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } } */ + +typedef unsigned int __attribute__ ((mode (DI))) int64_t; +typedef unsigned int __attribute__ ((mode (SI))) int32_t; + +typedef union + { + int32_t l[8]; + } +val; + +typedef struct + { + int32_t l[2]; + val v; + } +tre; + +typedef struct + { + int32_t l[3]; + tre t; + } +due; + +typedef struct + { + val v; + int64_t q; + int32_t l[2]; + due d; + } +uno; + +void +memcpy_nested_offset_long (uno *u) +{ + u->d.t.v = u->v; +} + +/* Expect assembly such as: + + ldq $4,0($16) + ldq $3,8($16) + ldq $2,16($16) + srl $4,32,$7 + ldq $1,24($16) + srl $3,32,$6 + stl $4,68($16) + srl $2,32,$5 + stl $7,72($16) + srl $1,32,$4 + stl $3,76($16) + stl $6,80($16) + stl $2,84($16) + stl $5,88($16) + stl $1,92($16) + stl $4,96($16) + + that is with four quadword loads at offsets 0, 8, 16, 24 each and + eight longword stores at offsets 68, 72, 76, 80, 84, 88, 92, 96 each. */ + +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,0\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,8\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,16\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,24\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,68\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,72\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,76\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,80\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,84\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,88\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,92\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,96\\\(\\\$16\\\)\\s" 1 } } */ diff --git a/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c new file mode 100644 index 0000000..1d2227e --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c @@ -0,0 +1,64 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } } */ + +typedef unsigned int __attribute__ ((mode (DI))) int64_t; +typedef unsigned int __attribute__ ((mode (SI))) int32_t; + +typedef union + { + int32_t l[8]; + } +val; + +typedef struct + { + int32_t l[2]; + val v; + } +tre; + +typedef struct + { + int32_t l[3]; + tre t; + } +due; + +typedef struct + { + val v; + int64_t q; + int32_t l[3]; + due d; + } +uno; + +void +memcpy_nested_offset_quad (uno *u) +{ + u->d.t.v = u->v; +} + +/* Expect assembly such as: + + ldq $4,0($16) + ldq $3,8($16) + ldq $2,16($16) + ldq $1,24($16) + stq $4,72($16) + stq $3,80($16) + stq $2,88($16) + stq $1,96($16) + + that is with four quadword loads at offsets 0, 8, 16, 24 each + and four quadword stores at offsets 72, 80, 88, 96 each. */ + +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,0\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,8\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,16\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,24\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,72\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,80\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,88\\\(\\\$16\\\)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,96\\\(\\\$16\\\)\\s" 1 } } */ diff --git a/gcc/testsuite/gcc.target/arm/ivopts.c b/gcc/testsuite/gcc.target/arm/ivopts.c index d7d72a5..582fdab 100644 --- a/gcc/testsuite/gcc.target/arm/ivopts.c +++ b/gcc/testsuite/gcc.target/arm/ivopts.c @@ -11,6 +11,6 @@ tr5 (short array[], int n) } /* { dg-final { scan-tree-dump-times "PHI <" 1 "ivopts"} } */ -/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1_lob } } } } */ +/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1m_lob } } } } */ /* { dg-final { object-size text <= 32 { target { arm_nothumb && { ! arm_iwmmxt_ok } } } } } */ /* { dg-final { object-size text <= 36 { target { arm_nothumb && arm_iwmmxt_ok } } } } */ diff --git a/gcc/testsuite/gcc.target/arm/lob1.c b/gcc/testsuite/gcc.target/arm/lob1.c index c8ce653..f42a367 100644 --- a/gcc/testsuite/gcc.target/arm/lob1.c +++ b/gcc/testsuite/gcc.target/arm/lob1.c @@ -1,7 +1,7 @@ /* Check that GCC generates Armv8.1-M low over head loop instructions for some simple loops. */ /* { dg-do run } */ -/* { dg-require-effective-target arm_v8_1_lob_ok } */ +/* { dg-require-effective-target arm_v8_1m_lob_hw } */ /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */ /* { dg-options "-march=armv8.1-m.main -mthumb -O3 --save-temps" } */ #include <stdlib.h> diff --git a/gcc/testsuite/gcc.target/arm/lob6.c b/gcc/testsuite/gcc.target/arm/lob6.c index 4fe116e..e19635b 100644 --- a/gcc/testsuite/gcc.target/arm/lob6.c +++ b/gcc/testsuite/gcc.target/arm/lob6.c @@ -1,7 +1,7 @@ /* Check that GCC generates Armv8.1-M low over head loop instructions with some less trivial loops and the result is correct. */ /* { dg-do run } */ -/* { dg-require-effective-target arm_v8_1_lob_ok } */ +/* { dg-require-effective-target arm_v8_1m_lob_hw } */ /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */ /* { dg-options "-march=armv8.1-m.main -mthumb -O3 --save-temps" } */ #include <stdlib.h> diff --git a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c index 9272e4c..41ee994 100644 --- a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c +++ b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1_lob } */ +/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1m_lob } */ /* { dg-options "-O" } */ unsigned short foo (unsigned short x, unsigned short c) diff --git a/gcc/testsuite/gcc.target/i386/apx-interrupt-1.c b/gcc/testsuite/gcc.target/i386/apx-interrupt-1.c index fefe2e6..fa1acc7 100644 --- a/gcc/testsuite/gcc.target/i386/apx-interrupt-1.c +++ b/gcc/testsuite/gcc.target/i386/apx-interrupt-1.c @@ -66,7 +66,7 @@ void foo (void *frame) /* { dg-final { scan-assembler-times {\t\.cfi_offset 132, -120} 1 } } */ /* { dg-final { scan-assembler-times {\t\.cfi_offset 131, -128} 1 } } */ /* { dg-final { scan-assembler-times {\t\.cfi_offset 130, -136} 1 } } */ -/* { dg-final { scan-assembler-times ".cfi_restore" 15} } */ +/* { dg-final { scan-assembler-times ".cfi_restore" 31 } } */ /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)ax" 1 } } */ /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)bx" 1 } } */ /* { dg-final { scan-assembler-times "pop(?:l|q)\[\\t \]*%(?:e|r)cx" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c b/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c index 5b26081..5eb60d9 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c @@ -1,11 +1,10 @@ /* { dg-do compile } */ /* { dg-options "-mavx512vl -mavx512bw -mavx512dq -O2 -masm=att -mstv -mno-stackrealign" } */ /* { dg-final { scan-assembler-not {not[bwlqd]\]} } } */ -/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$5} 4} } */ -/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$6} 4} } */ +/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$5} 2} } */ +/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$6} 3} } */ /* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$[37]} 4} } */ -/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$5} 2} } */ -/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$6} 2} } */ +/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$6} 1} } */ /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$7} 2} } */ #include<immintrin.h> @@ -20,20 +19,14 @@ FOO (__m128i,, epi8, __mmask16, 128, 1); FOO (__m128i,, epi16, __mmask8, 128, 1); -FOO (__m128i,, epi32, __mmask8, 128, 1); -FOO (__m128i,, epi64, __mmask8, 128, 1); FOO (__m256i, 256, epi8, __mmask32, 256, 2); FOO (__m256i, 256, epi16, __mmask16, 256, 2); FOO (__m256i, 256, epi32, __mmask8, 256, 2); -FOO (__m256i, 256, epi64, __mmask8, 256, 2); FOO (__m512i, 512, epi8, __mmask64, 512, 3); FOO (__m512i, 512, epi16, __mmask32, 512, 3); FOO (__m512i, 512, epi32, __mmask16, 512, 3); FOO (__m512i, 512, epi64, __mmask8, 512, 3); -FOO (__m128,, ps, __mmask8, 128, 1); -FOO (__m128d,, pd, __mmask8, 128, 1); FOO (__m256, 256, ps, __mmask8, 256, 2); -FOO (__m256d, 256, pd, __mmask8, 256, 2); FOO (__m512, 512, ps, __mmask16, 512, 3); FOO (__m512d, 512, pd, __mmask8, 512, 3); diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c b/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c index ef6a525..37ca646 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c @@ -12,5 +12,5 @@ void extern avx512f_test (void) { m = _mm512_cmpgt_epu64_mask (x, x); - m = _mm512_mask_cmpgt_epu64_mask (3, x, x); + m = _mm512_mask_cmpgt_epu64_mask (5, x, x); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c new file mode 100644 index 0000000..a15fae8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c @@ -0,0 +1,79 @@ +/* PR target/103750 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512vl" } */ +/* { dg-final { scan-assembler-not "and" } } */ + +#include <immintrin.h> +extern __m128i* pi128; +extern __m256i* pi256; + +extern __m128* ps128; +extern __m256* ps256; + +extern __m128d* pd128; +extern __m256d* pd256; + +extern char a; +void +foo () +{ + __mmask8 mask1 = _mm_cmpeq_epu32_mask (pi128[0], pi128[1]); + a = mask1 & 15; +} + +void +foo1 () +{ + __mmask8 mask1 = _mm_cmpeq_epu64_mask (pi128[0], pi128[1]); + a = mask1 & 3; +} + +void +foo2 () +{ + __mmask8 mask1 = _mm256_cmpeq_epu64_mask (pi256[0], pi256[1]); + a = mask1 & 15; +} + +void +sign_foo () +{ + __mmask8 mask1 = _mm_cmpeq_epi32_mask (pi128[0], pi128[1]); + a = mask1 & 15; +} + +void +sign_foo1 () +{ + __mmask8 mask1 = _mm_cmpeq_epi64_mask (pi128[0], pi128[1]); + a = mask1 & 3; +} + + +void +sign_foo2 () +{ + __mmask8 mask1 = _mm256_cmpeq_epi64_mask (pi256[0], pi256[1]); + a = mask1 & 15; +} + +void +float_foo () +{ + __mmask8 mask1 = _mm_cmp_ps_mask (ps128[0], ps128[1], 1); + a = mask1 & 15; +} + +void +double_foo () +{ + __mmask8 mask1 = _mm_cmp_pd_mask (pd128[0], pd128[1], 1); + a = mask1 & 3; +} + +void +double_foo2 () +{ + __mmask8 mask1 = _mm256_cmp_pd_mask (pd256[0], pd256[1], 1); + a = mask1 & 15; +} diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c index 69b200a..a798d06 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpeq_epi64_mask (x128, x128); m = _mm256_cmpeq_epi64_mask (x256, x256); - m = _mm_mask_cmpeq_epi64_mask (3, x128, x128); - m = _mm256_mask_cmpeq_epi64_mask (3, x256, x256); + m = _mm_mask_cmpeq_epi64_mask (5, x128, x128); + m = _mm256_mask_cmpeq_epi64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c index c925d32..736763f 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpeq_epu64_mask (x128, x128); m = _mm256_cmpeq_epu64_mask (x256, x256); - m = _mm_mask_cmpeq_epu64_mask (3, x128, x128); - m = _mm256_mask_cmpeq_epu64_mask (3, x256, x256); + m = _mm_mask_cmpeq_epu64_mask (5, x128, x128); + m = _mm256_mask_cmpeq_epu64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c index ef40e41..19110a5 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpge_epi64_mask (x128, x128); m = _mm256_cmpge_epi64_mask (x256, x256); - m = _mm_mask_cmpge_epi64_mask (3, x128, x128); - m = _mm256_mask_cmpge_epi64_mask (3, x256, x256); + m = _mm_mask_cmpge_epi64_mask (5, x128, x128); + m = _mm256_mask_cmpge_epi64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c index 1f7dd49..d82f8e5 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpge_epu64_mask (x128, x128); m = _mm256_cmpge_epu64_mask (x256, x256); - m = _mm_mask_cmpge_epu64_mask (3, x128, x128); - m = _mm256_mask_cmpge_epu64_mask (3, x256, x256); + m = _mm_mask_cmpge_epu64_mask (5, x128, x128); + m = _mm256_mask_cmpge_epu64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c index 26cac3a..79f9430 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpgt_epi64_mask (x128, x128); m = _mm256_cmpgt_epi64_mask (x256, x256); - m = _mm_mask_cmpgt_epi64_mask (3, x128, x128); - m = _mm256_mask_cmpgt_epi64_mask (3, x256, x256); + m = _mm_mask_cmpgt_epi64_mask (5, x128, x128); + m = _mm256_mask_cmpgt_epi64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c index 10717cd..bef015f 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpgt_epu64_mask (x128, x128); m = _mm256_cmpgt_epu64_mask (x256, x256); - m = _mm_mask_cmpgt_epu64_mask (3, x128, x128); - m = _mm256_mask_cmpgt_epu64_mask (3, x256, x256); + m = _mm_mask_cmpgt_epu64_mask (5, x128, x128); + m = _mm256_mask_cmpgt_epu64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c index 110ff70..9974aa5 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmple_epi64_mask (x128, x128); m = _mm256_cmple_epi64_mask (x256, x256); - m = _mm_mask_cmple_epi64_mask (3, x128, x128); - m = _mm256_mask_cmple_epi64_mask (3, x256, x256); + m = _mm_mask_cmple_epi64_mask (5, x128, x128); + m = _mm256_mask_cmple_epi64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c index e3faf41..0a5a513 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmple_epu64_mask (x128, x128); m = _mm256_cmple_epu64_mask (x256, x256); - m = _mm_mask_cmple_epu64_mask (3, x128, x128); - m = _mm256_mask_cmple_epu64_mask (3, x256, x256); + m = _mm_mask_cmple_epu64_mask (5, x128, x128); + m = _mm256_mask_cmple_epu64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c index 1b8f7f1..5f40c79 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmplt_epi64_mask (x128, x128); m = _mm256_cmplt_epi64_mask (x256, x256); - m = _mm_mask_cmplt_epi64_mask (3, x128, x128); - m = _mm256_mask_cmplt_epi64_mask (3, x256, x256); + m = _mm_mask_cmplt_epi64_mask (5, x128, x128); + m = _mm256_mask_cmplt_epi64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c index 5c2f025..afda5e7 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmplt_epu64_mask (x128, x128); m = _mm256_cmplt_epu64_mask (x256, x256); - m = _mm_mask_cmplt_epu64_mask (3, x128, x128); - m = _mm256_mask_cmplt_epu64_mask (3, x256, x256); + m = _mm_mask_cmplt_epu64_mask (5, x128, x128); + m = _mm256_mask_cmplt_epu64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c index f48de10..5ef2548 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpneq_epi64_mask (x128, x128); m = _mm256_cmpneq_epi64_mask (x256, x256); - m = _mm_mask_cmpneq_epi64_mask (3, x128, x128); - m = _mm256_mask_cmpneq_epi64_mask (3, x256, x256); + m = _mm_mask_cmpneq_epi64_mask (5, x128, x128); + m = _mm256_mask_cmpneq_epi64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c index 726a887..4a9aacf 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c @@ -16,6 +16,6 @@ avx512vl_test (void) { m = _mm_cmpneq_epu64_mask (x128, x128); m = _mm256_cmpneq_epu64_mask (x256, x256); - m = _mm_mask_cmpneq_epu64_mask (3, x128, x128); - m = _mm256_mask_cmpneq_epu64_mask (3, x256, x256); + m = _mm_mask_cmpneq_epu64_mask (5, x128, x128); + m = _mm256_mask_cmpneq_epu64_mask (5, x256, x256); } diff --git a/gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c b/gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c new file mode 100644 index 0000000..042eb7d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=x86-64-v3 -O2 -mfpmath=sse" } */ +/* { dg-final { scan-assembler-times "vmaxsd" 1 } } */ + +double +foo (double a) +{ + if (a > 0.0) + return a; + return 0.0; +} + diff --git a/gcc/testsuite/gcc.target/i386/blendv-to-pand.c b/gcc/testsuite/gcc.target/i386/blendv-to-pand.c new file mode 100644 index 0000000..2896a2b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/blendv-to-pand.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=x86-64-v3 -mfpmath=sse" } */ +/* { dg-final { scan-assembler-not "vblendv" } } */ + +void +foo (float* a, float* b, float* c, float* __restrict d, int n) +{ + for (int i = 0; i != n; i++) + { + c[i] *= 2.0f; + if (a[i] > b[i]) + d[i] = 0.0f; + else + d[i] = c[i]; + } +} diff --git a/gcc/testsuite/gcc.target/i386/pr119386-1.c b/gcc/testsuite/gcc.target/i386/pr119386-1.c new file mode 100644 index 0000000..9a0dc64 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119386-1.c @@ -0,0 +1,10 @@ +/* PR target/119386 */ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-O2 -fpic -pg" } */ +/* { dg-final { scan-assembler "call\[ \t\]+mcount@PLT" } } */ + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr119386-2.c b/gcc/testsuite/gcc.target/i386/pr119386-2.c new file mode 100644 index 0000000..3ea978e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119386-2.c @@ -0,0 +1,12 @@ +/* PR target/119386 */ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-O2 -fpic -fno-plt -pg" } */ +/* { dg-final { scan-assembler "call\[ \t\]+\\*mcount@GOTPCREL\\(" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler "call\[ \t\]+\\*mcount@GOT\\(" { target ia32 } } } */ + + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr119386-3.c b/gcc/testsuite/gcc.target/i386/pr119386-3.c new file mode 100644 index 0000000..287410b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119386-3.c @@ -0,0 +1,10 @@ +/* PR target/119386 */ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-O2 -fpic -pg -mnop-mcount" } */ +/* { dg-final { scan-assembler ".byte\[ \t\]+0x0f, 0x1f, 0x44, 0x00, 0x00" } } */ + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr119784a.c b/gcc/testsuite/gcc.target/i386/pr119784a.c new file mode 100644 index 0000000..8a119d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119784a.c @@ -0,0 +1,96 @@ +/* { dg-do compile { target { *-*-linux* && lp64 } } } */ +/* { dg-options "-O2 -fno-pic -mtune=generic -mgeneral-regs-only -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ + +/* start must save and restore all caller saved registers. */ + +/* +**start: +**.LFB[0-9]+: +** .cfi_startproc +** subq \$248, %rsp +**... +** movq %rax, \(%rsp\) +** movq %rdx, 8\(%rsp\) +** movq %rcx, 16\(%rsp\) +** movq %rbx, 24\(%rsp\) +** movq %rsi, 32\(%rsp\) +** movq %rdi, 40\(%rsp\) +**... +** movq %rbp, 48\(%rsp\) +** movq %r8, 56\(%rsp\) +** movq %r9, 64\(%rsp\) +** movq %r10, 72\(%rsp\) +** movq %r11, 80\(%rsp\) +** movq %r12, 88\(%rsp\) +** movq %r13, 96\(%rsp\) +** movq %r14, 104\(%rsp\) +** movq %r15, 112\(%rsp\) +** movq %r16, 120\(%rsp\) +** movq %r17, 128\(%rsp\) +** movq %r18, 136\(%rsp\) +** movq %r19, 144\(%rsp\) +** movq %r20, 152\(%rsp\) +** movq %r21, 160\(%rsp\) +** movq %r22, 168\(%rsp\) +** movq %r23, 176\(%rsp\) +** movq %r24, 184\(%rsp\) +** movq %r25, 192\(%rsp\) +** movq %r26, 200\(%rsp\) +** movq %r27, 208\(%rsp\) +** movq %r28, 216\(%rsp\) +** movq %r29, 224\(%rsp\) +** movq %r30, 232\(%rsp\) +** movq %r31, 240\(%rsp\) +**... +** call \*code\(%rip\) +** movq \(%rsp\), %rax +** movq 8\(%rsp\), %rdx +** movq 16\(%rsp\), %rcx +** movq 24\(%rsp\), %rbx +** movq 32\(%rsp\), %rsi +** movq 40\(%rsp\), %rdi +** movq 48\(%rsp\), %rbp +** movq 56\(%rsp\), %r8 +** movq 64\(%rsp\), %r9 +** movq 72\(%rsp\), %r10 +** movq 80\(%rsp\), %r11 +** movq 88\(%rsp\), %r12 +** movq 96\(%rsp\), %r13 +** movq 104\(%rsp\), %r14 +** movq 112\(%rsp\), %r15 +** movq 120\(%rsp\), %r16 +** movq 128\(%rsp\), %r17 +** movq 136\(%rsp\), %r18 +** movq 144\(%rsp\), %r19 +** movq 152\(%rsp\), %r20 +** movq 160\(%rsp\), %r21 +** movq 168\(%rsp\), %r22 +** movq 176\(%rsp\), %r23 +** movq 184\(%rsp\), %r24 +** movq 192\(%rsp\), %r25 +** movq 200\(%rsp\), %r26 +** movq 208\(%rsp\), %r27 +** movq 216\(%rsp\), %r28 +** movq 224\(%rsp\), %r29 +** movq 232\(%rsp\), %r30 +** movq 240\(%rsp\), %r31 +** addq \$248, %rsp +**... +** ret +** .cfi_endproc +**... +*/ + +#define DONT_SAVE_REGS __attribute__((no_callee_saved_registers)) +#define SAVE_REGS __attribute__((no_caller_saved_registers)) + +typedef DONT_SAVE_REGS void (*op_t)(void); + +extern op_t code[]; + +SAVE_REGS void start() +{ + code[0](); +} diff --git a/gcc/testsuite/gcc.target/i386/pr119784b.c b/gcc/testsuite/gcc.target/i386/pr119784b.c new file mode 100644 index 0000000..c676197 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119784b.c @@ -0,0 +1,87 @@ +/* { dg-do compile { target { *-*-linux* && x32 } } } */ +/* { dg-options "-O2 -fno-pic -mtune=generic -mgeneral-regs-only -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ + +/* start must save and restore all caller saved registers. */ + +/* +**start: +**.LFB[0-9]+: +** .cfi_startproc +** subl \$248, %esp +**... +** movq %rax, \(%rsp\) +** movq %rdx, 8\(%rsp\) +** movq %rcx, 16\(%rsp\) +** movq %rbx, 24\(%rsp\) +** movq %rsi, 32\(%rsp\) +** movq %rdi, 40\(%rsp\) +**... +** movq %rbp, 48\(%rsp\) +** movq %r8, 56\(%rsp\) +** movq %r9, 64\(%rsp\) +** movq %r10, 72\(%rsp\) +** movq %r11, 80\(%rsp\) +** movq %r12, 88\(%rsp\) +** movq %r13, 96\(%rsp\) +** movq %r14, 104\(%rsp\) +** movq %r15, 112\(%rsp\) +** movq %r16, 120\(%rsp\) +** movq %r17, 128\(%rsp\) +** movq %r18, 136\(%rsp\) +** movq %r19, 144\(%rsp\) +** movq %r20, 152\(%rsp\) +** movq %r21, 160\(%rsp\) +** movq %r22, 168\(%rsp\) +** movq %r23, 176\(%rsp\) +** movq %r24, 184\(%rsp\) +** movq %r25, 192\(%rsp\) +** movq %r26, 200\(%rsp\) +** movq %r27, 208\(%rsp\) +** movq %r28, 216\(%rsp\) +** movq %r29, 224\(%rsp\) +** movq %r30, 232\(%rsp\) +** movq %r31, 240\(%rsp\) +**... +** movl code\(%rip\), %ebp +** call \*%rbp +** movq \(%rsp\), %rax +** movq 8\(%rsp\), %rdx +** movq 16\(%rsp\), %rcx +** movq 24\(%rsp\), %rbx +** movq 32\(%rsp\), %rsi +** movq 40\(%rsp\), %rdi +** movq 48\(%rsp\), %rbp +** movq 56\(%rsp\), %r8 +** movq 64\(%rsp\), %r9 +** movq 72\(%rsp\), %r10 +** movq 80\(%rsp\), %r11 +** movq 88\(%rsp\), %r12 +** movq 96\(%rsp\), %r13 +** movq 104\(%rsp\), %r14 +** movq 112\(%rsp\), %r15 +** movq 120\(%rsp\), %r16 +** movq 128\(%rsp\), %r17 +** movq 136\(%rsp\), %r18 +** movq 144\(%rsp\), %r19 +** movq 152\(%rsp\), %r20 +** movq 160\(%rsp\), %r21 +** movq 168\(%rsp\), %r22 +** movq 176\(%rsp\), %r23 +** movq 184\(%rsp\), %r24 +** movq 192\(%rsp\), %r25 +** movq 200\(%rsp\), %r26 +** movq 208\(%rsp\), %r27 +** movq 216\(%rsp\), %r28 +** movq 224\(%rsp\), %r29 +** movq 232\(%rsp\), %r30 +** movq 240\(%rsp\), %r31 +** addl \$248, %esp +**... +** ret +** .cfi_endproc +**... +*/ + +#include "pr119784a.c" diff --git a/gcc/testsuite/gcc.target/i386/pr119919.c b/gcc/testsuite/gcc.target/i386/pr119919.c new file mode 100644 index 0000000..ed64656 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119919.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -msse2 -fdump-tree-vect-details" } */ +int a[9*9]; +bool b[9]; +void test() +{ + for (int i = 0; i < 9; i++) + { + b[i] = a[i*9] != 0; + } +} + +/* { dg-final { scan-tree-dump "loop vectorized using 8 byte vectors" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr89618-2.c b/gcc/testsuite/gcc.target/i386/pr89618-2.c index c414053..11d658f 100644 --- a/gcc/testsuite/gcc.target/i386/pr89618-2.c +++ b/gcc/testsuite/gcc.target/i386/pr89618-2.c @@ -19,5 +19,9 @@ void foo (int n, int *off, double *a) } /* Make sure the cost model selects SSE vectors rather than AVX to avoid - too many scalar ops for the address computes in the loop. */ -/* { dg-final { scan-tree-dump "loop vectorized using 16 byte vectors" "vect" { target { ! ia32 } } } } */ + too many scalar ops for the address computes in the loop. + + Since open-coded scatters are costed wrong, we no longer vectorize after fixing + COND_EXPR costs. See PR119902. */ +/* { dg-final { scan-tree-dump "loop vectorized using 16 byte vectors" "vect" { target { ! ia32 } xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-not "loop vectorized using 32 byte vectors" "vect" { target { ! ia32 } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c b/gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c new file mode 100644 index 0000000..ad9e07b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -mfma -mavx2" } */ +/* { dg-final { scan-assembler-times {(?n)vfn?m(add|sub)[1-3]*ps} 2 } } */ + +typedef float v4sf __attribute__((vector_size(16))); +/* (a - (rcp(b) * a * b)) * rcp(b) + rcp(b) * a */ + +v4sf +foo (v4sf a, v4sf b) +{ + return a / b; +} diff --git a/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp b/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp index f56d2f1..9df3f29 100644 --- a/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp +++ b/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp @@ -35,7 +35,7 @@ dg-init # If the target hardware supports LSX, the default action is "run", otherwise # just "compile". -global dg-do-what-default +set saved-dg-do-what-default ${dg-do-what-default} if {[check_effective_target_loongarch_sx_hw]} then { set dg-do-what-default run } else { @@ -45,6 +45,7 @@ if {[check_effective_target_loongarch_sx_hw]} then { #Main loop. dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/lsx/*.\[cS\]]] \ " -mlsx" $DEFAULT_CFLAGS +set dg-do-what-default ${saved-dg-do-what-default} dg-finish @@ -52,7 +53,7 @@ dg-init # If the target hardware supports LASX, the default action is "run", otherwise # just "compile". -global dg-do-what-default +set saved-dg-do-what-default ${dg-do-what-default} if {[check_effective_target_loongarch_asx_hw]} then { set dg-do-what-default run } else { @@ -61,5 +62,6 @@ if {[check_effective_target_loongarch_asx_hw]} then { dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/lasx/*.\[cS\]]] \ " -mlasx" $DEFAULT_CFLAGS +set dg-do-what-default ${saved-dg-do-what-default} # All done. dg-finish diff --git a/gcc/testsuite/gcc.target/mips/clear-cache-1.c b/gcc/testsuite/gcc.target/mips/clear-cache-1.c index f1554f5..cd11c66 100644 --- a/gcc/testsuite/gcc.target/mips/clear-cache-1.c +++ b/gcc/testsuite/gcc.target/mips/clear-cache-1.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-msynci isa_rev>=2" } */ /* { dg-final { scan-assembler "\tsynci\t" } } */ -/* { dg-final { scan-assembler "\tjr.hb\t" } } */ +/* { dg-final { scan-assembler "\tjrc?.hb\t" } } */ /* { dg-final { scan-assembler-not "_flush_cache|mips_sync_icache|_cacheflush" } } */ NOMIPS16 void f() diff --git a/gcc/testsuite/gcc.target/mips/memcpy-2.c b/gcc/testsuite/gcc.target/mips/memcpy-2.c new file mode 100644 index 0000000..df0cd18 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/memcpy-2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "isa_rev<=5 -fdump-rtl-expand" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-Os" } { "" } } */ + +__attribute__((nomips16)) +void +f1 (char *p) +{ + __builtin_memcpy (p, "12345", 5); +} + +/* { dg-final { scan-rtl-dump "mem/u.*mem/u" "expand" } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/power11-3.c b/gcc/testsuite/gcc.target/powerpc/power11-3.c index fa1aedd..56bf881 100644 --- a/gcc/testsuite/gcc.target/powerpc/power11-3.c +++ b/gcc/testsuite/gcc.target/powerpc/power11-3.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mdejagnu-cpu=power8 -O2" } */ +/* { dg-require-ifunc "" } */ /* Check if we can set the power11 target via a target_clones attribute. */ diff --git a/gcc/testsuite/gcc.target/riscv/bext-ext-2.c b/gcc/testsuite/gcc.target/riscv/bext-ext-2.c new file mode 100644 index 0000000..aa170d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/bext-ext-2.c @@ -0,0 +1,74 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcb -mabi=lp64" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } } */ + +struct obstack; +struct bitmap_head_def; +typedef struct bitmap_head_def *bitmap; +struct obstack +{ + long chunk_size; + struct _obstack_chunk *chunk; + char *object_base; + char *next_free; + char *chunk_limit; + long int temp; + int alignment_mask; + + + + struct _obstack_chunk *(*chunkfun) (void *, long); + void (*freefun) (void *, struct _obstack_chunk *); + void *extra_arg; + unsigned use_extra_arg:1; + unsigned maybe_empty_object:1; + + + + unsigned alloc_failed:1; + + +}; + +typedef unsigned long BITMAP_WORD; +typedef struct bitmap_obstack { + struct bitmap_element_def *elements; + struct bitmap_head_def *heads; + struct obstack obstack; +} bitmap_obstack; +typedef struct bitmap_element_def { + struct bitmap_element_def *next; + struct bitmap_element_def *prev; + unsigned int indx; + BITMAP_WORD bits[((128 + (8 + * 8 * 1u) - 1) / (8 + * 8 * 1u))]; +} bitmap_element; +bitmap_element *bitmap_find_bit (bitmap, unsigned int); + + +int +bitmap_bit_p (bitmap head, int bit) +{ + bitmap_element *ptr; + unsigned bit_num; + unsigned word_num; + + ptr = bitmap_find_bit (head, bit); + if (ptr == 0) + return 0; + + bit_num = bit % (8 + * 8 * 1u); + word_num = bit / (8 + * 8 * 1u) % ((128 + (8 + * 8 * 1u) - 1) / (8 + * 8 * 1u)); + + return (ptr->bits[word_num] >> bit_num) & 1; +} + +/* { dg-final { scan-assembler-times "bext\t" 1 } } */ +/* { dg-final { scan-assembler-not "slr\t"} } */ +/* { dg-final { scan-assembler-not "andi\t"} } */ + diff --git a/gcc/testsuite/gcc.target/riscv/gnu-property-align-rv32.c b/gcc/testsuite/gcc.target/riscv/gnu-property-align-rv32.c new file mode 100644 index 0000000..4f48cff --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/gnu-property-align-rv32.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32g_zicfiss -fcf-protection=return -mabi=ilp32d " } */ + +void foo() {} + +/* { dg-final { scan-assembler-times ".p2align\t2" 3 } } */ +/* { dg-final { scan-assembler-not ".p2align\t3" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/gnu-property-align-rv64.c b/gcc/testsuite/gcc.target/riscv/gnu-property-align-rv64.c new file mode 100644 index 0000000..1bfd127 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/gnu-property-align-rv64.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64g_zicfiss -fcf-protection=return -mabi=lp64d " } */ + +void foo() {} + +/* { dg-final { scan-assembler-times ".p2align\t3" 3 } } */ +/* { dg-final { scan-assembler-not ".p2align\t2" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c b/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c new file mode 100644 index 0000000..1ee7f6c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64 -mcmodel=large" } */ + +int foo(int x, int y) +{ + switch(x){ + case 0: + return 123 + y; + case 1: + return 456 + y; + case 2: + return 789 - y; + case 3: + return 12 * y; + case 4: + return 13 % y; + case 5: + return 11 *y; + } + return 0; +} + + +/* { dg-final { scan-assembler-not "\.section \.rodata" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c new file mode 100644 index 0000000..cb28baf --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c @@ -0,0 +1,48 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xt-c908" { target { rv64 } } } */ +/* XuanTie C908 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_ +zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_sstc_svinval_svnapot_svpbmt_xtheadba_ +xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_ +xtheadmemidx_xtheadmempair_xtheadsync */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_zicbom) \ + && defined(__riscv_zicbop) \ + && defined(__riscv_zicboz) \ + && defined(__riscv_zicntr) \ + && defined(__riscv_zicsr) \ + && defined(__riscv_zifencei) \ + && defined(__riscv_zihintpause) \ + && defined(__riscv_zihpm) \ + && defined(__riscv_zfh) \ + && defined(__riscv_zba) \ + && defined(__riscv_zbb) \ + && defined(__riscv_zbc) \ + && defined(__riscv_zbs) \ + && defined(__riscv_sstc) \ + && defined(__riscv_svinval) \ + && defined(__riscv_svnapot) \ + && defined(__riscv_svpbmt) \ + && defined(__riscv_xtheadba) \ + && defined(__riscv_xtheadbb) \ + && defined(__riscv_xtheadbs) \ + && defined(__riscv_xtheadcmo) \ + && defined(__riscv_xtheadcondmov) \ + && defined(__riscv_xtheadfmemidx) \ + && defined(__riscv_xtheadmac) \ + && defined(__riscv_xtheadmemidx) \ + && defined(__riscv_xtheadmempair) \ + && defined(__riscv_xtheadsync)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c new file mode 100644 index 0000000..1b1ee18 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c @@ -0,0 +1,50 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xt-c908v" { target { rv64 } } } */ +/* XuanTie C908v => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_ +zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_sstc_svinval_svnapot_svpbmt_xtheadba_ +xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_ +xtheadmemidx_xtheadmempair_xtheadsync_xtheadvdot */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_v) \ + && defined(__riscv_zicbom) \ + && defined(__riscv_zicbop) \ + && defined(__riscv_zicboz) \ + && defined(__riscv_zicntr) \ + && defined(__riscv_zicsr) \ + && defined(__riscv_zifencei) \ + && defined(__riscv_zihintpause) \ + && defined(__riscv_zihpm) \ + && defined(__riscv_zfh) \ + && defined(__riscv_zba) \ + && defined(__riscv_zbb) \ + && defined(__riscv_zbc) \ + && defined(__riscv_zbs) \ + && defined(__riscv_sstc) \ + && defined(__riscv_svinval) \ + && defined(__riscv_svnapot) \ + && defined(__riscv_svpbmt) \ + && defined(__riscv_xtheadba) \ + && defined(__riscv_xtheadbb) \ + && defined(__riscv_xtheadbs) \ + && defined(__riscv_xtheadcmo) \ + && defined(__riscv_xtheadcondmov) \ + && defined(__riscv_xtheadfmemidx) \ + && defined(__riscv_xtheadmac) \ + && defined(__riscv_xtheadmemidx) \ + && defined(__riscv_xtheadmempair) \ + && defined(__riscv_xtheadsync) \ + && defined (__riscv__xtheadvdot)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c new file mode 100644 index 0000000..1e27665 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c @@ -0,0 +1,35 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xt-c910" { target { rv64 } } } */ +/* XuanTie C910 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_xtheadba_ +xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_ +xtheadmemidx_xtheadmempair_xtheadsync */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_zicntr) \ + && defined(__riscv_zicsr) \ + && defined(__riscv_zifencei) \ + && defined(__riscv_zihpm) \ + && defined(__riscv_zfh) \ + && defined(__riscv_xtheadba) \ + && defined(__riscv_xtheadbb) \ + && defined(__riscv_xtheadbs) \ + && defined(__riscv_xtheadcmo) \ + && defined(__riscv_xtheadcondmov) \ + && defined(__riscv_xtheadfmemidx) \ + && defined(__riscv_xtheadmac) \ + && defined(__riscv_xtheadmemidx) \ + && defined(__riscv_xtheadmempair) \ + && defined(__riscv_xtheadsync)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c new file mode 100644 index 0000000..6a54f09 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c @@ -0,0 +1,51 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xt-c910v2" { target { rv64 } } } */ +/* XuanTie C910v2 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_ +zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_ +zbb_zbc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_ +xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_zicbom) \ + && defined(__riscv_zicbop) \ + && defined(__riscv_zicboz) \ + && defined(__riscv_zicntr) \ + && defined(__riscv_zicond) \ + && defined(__riscv_zicsr) \ + && defined(__riscv_zifencei ) \ + && defined(__riscv_zihintntl) \ + && defined(__riscv_zihintpause) \ + && defined(__riscv_zihpm) \ + && defined(__riscv_zawrs) \ + && defined(__riscv_zfa) \ + && defined(__riscv_zfbfmin) \ + && defined(__riscv_zfh) \ + && defined(__riscv_zca) \ + && defined(__riscv_zcb) \ + && defined(__riscv_zcd) \ + && defined(__riscv_zba) \ + && defined(__riscv_zbb) \ + && defined(__riscv_zbc) \ + && defined(__riscv_xtheadba) \ + && defined(__riscv_xtheadbb) \ + && defined(__riscv_xtheadbs) \ + && defined(__riscv_xtheadcmo) \ + && defined(__riscv_xtheadcondmov) \ + && defined(__riscv_xtheadfmemidx) \ + && defined(__riscv_xtheadmac) \ + && defined(__riscv_xtheadmemidx) \ + && defined(__riscv_xtheadmempair) \ + && defined(__riscv_xtheadsync)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c new file mode 100644 index 0000000..6bcd687 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xt-c920" { target { rv64 } } } */ +/* XuanTie c920 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_"xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_zicntr) \ + && defined(__riscv_zicsr) \ + && defined(__riscv_zifencei) \ + && defined(__riscv_zihpm) \ + && defined(__riscv_zfh) \ + && defined(__riscv_xtheadba) \ + && defined(__riscv_xtheadbb) \ + && defined(__riscv_xtheadbs) \ + && defined(__riscv_xtheadcmo) \ + && defined(__riscv_xtheadcondmov) \ + && defined(__riscv_xtheadfmemidx) \ + && defined(__riscv_xtheadmac) \ + && defined(__riscv_xtheadmemidx) \ + && defined(__riscv_xtheadmempair) \ + && defined(__riscv_xtheadsync) \ + && defined(__riscv_xtheadvector)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c new file mode 100644 index 0000000..36a6267 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c @@ -0,0 +1,56 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xt-c920v2" { target { rv64 } } } */ +/* XuanTie C920v2 => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_zbs_zvfbfmin_zvfbfwma_zvfh_sscofpmf_sstc_svinval_svnapot_svpbmt_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadsync_xtheadvdot */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_v) \ + && defined(__riscv_zicbom) \ + && defined(__riscv_zicbop) \ + && defined(__riscv_zicboz) \ + && defined(__riscv_zicntr) \ + && defined(__riscv_zicond) \ + && defined(__riscv_zicsr) \ + && defined(__riscv_zifencei ) \ + && defined(__riscv_zihintntl) \ + && defined(__riscv_zihintpause) \ + && defined(__riscv_zihpm) \ + && defined(__riscv_zawrs) \ + && defined(__riscv_zfa) \ + && defined(__riscv_zfbfmin) \ + && defined(__riscv_zfh) \ + && defined(__riscv_zca) \ + && defined(__riscv_zcb) \ + && defined(__riscv_zcd) \ + && defined(__riscv_zba) \ + && defined(__riscv_zbb) \ + && defined(__riscv_zbc) \ + && defined(__riscv_zbs) \ + && defined(__riscv_zvfbfmin) \ + && defined(__riscv_zvfbfwma) \ + && defined(__riscv_zvfh) \ + && defined(__riscv_sscofpmf) \ + && defined(__riscv_sstc) \ + && defined(__riscv_svinval) \ + && defined(__riscv_svnapot) \ + && defined(__riscv_svpbmt) \ + && defined(__riscv_xtheadba) \ + && defined(__riscv_xtheadbb) \ + && defined(__riscv_xtheadbs) \ + && defined(__riscv_xtheadcmo) \ + && defined(__riscv_xtheadcondmov) \ + && defined(__riscv_xtheadfmemidx) \ + && defined(__riscv_xtheadsync) \ + && defined(__riscv_xtheadvdot)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/pr108016.c b/gcc/testsuite/gcc.target/riscv/pr108016.c new file mode 100644 index 0000000..b60df42 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr108016.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } } */ + +unsigned int addu (unsigned int a, unsigned int b) +{ + unsigned int out; + unsigned int overflow = __builtin_add_overflow (a, b, &out); + return overflow & out; +} + +int addi (int a, int b) +{ + int out; + int overflow = __builtin_add_overflow (a, b, &out); + return overflow & out; +} + +unsigned int subu (unsigned int a, unsigned int b) +{ + unsigned int out; + unsigned int overflow = __builtin_sub_overflow (a, b, &out); + return overflow & out; +} + +int subi (int a, int b) +{ + int out; + int overflow = __builtin_sub_overflow (a, b, &out); + return overflow & out; +} + +/* { dg-final { scan-assembler-not "sext\.w\t" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/pr118410-1.c b/gcc/testsuite/gcc.target/riscv/pr118410-1.c new file mode 100644 index 0000000..4a8b847 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr118410-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */ +/* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64} } } */ +/* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32} } } */ + +long orlow(long x) { return x | ((1L << 24) - 1); } + +/* { dg-final { scan-assembler-times "orn\t" 1 } } */ +/* { dg-final { scan-assembler-not "addi\t" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/pr118410-2.c b/gcc/testsuite/gcc.target/riscv/pr118410-2.c new file mode 100644 index 0000000..b63a1d9 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr118410-2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */ +/* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64} } } */ +/* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32} } } */ + +long xorlow(long x) { return x ^ ((1L << 24) - 1); } + +/* { dg-final { scan-assembler-times "xnor\t" 1 } } */ +/* { dg-final { scan-assembler-not "addi\t" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c index d552eb5..e9e41f7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-require-effective-target riscv_v_ok } */ /* { dg-add-options riscv_v } */ -/* { dg-additional-options "-std=gnu99" } */ +/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */ #include "pr115068.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c index 8144d29b..ce9a389 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c @@ -1,6 +1,6 @@ /* { dg-do compile { target { ! riscv_abi_e } } } */ /* { dg-add-options riscv_v } */ -/* { dg-additional-options "-std=gnu99" } */ +/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */ #include <stdint.h> #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c index c0ca9fc..43be202 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c @@ -1,6 +1,6 @@ /* { dg-do compile { target { { ! riscv_abi_e } && rv64 } } } */ /* { dg-add-options riscv_v } */ -/* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2 -Wno-pedantic" } */ #include <stdint.h> #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c index bf95e1c..64666d3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c @@ -21,6 +21,12 @@ void f2 (void * restrict in, void * restrict out, int l, int n, int m) } } +/* The second check is XFAILed because we currently don't lift + vsetvls into non-transparent (in LCM parlance) blocks. + See PR119547. + In this test it is still possible because the conflicting + register only ever feeds vsetvls. */ + /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } xfail { *-*-* } } } } */ /* { dg-final { scan-assembler-times {addi\s+[a-x0-9]+,\s*[a-x0-9]+,\s*44} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c index ddf53ca..0dbf34a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c @@ -43,6 +43,6 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n, int cond) } } -/* { dg-final { scan-assembler-times {vsetvli} 15 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 14 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */ /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/sh/pr111814.c b/gcc/testsuite/gcc.target/sh/pr111814.c new file mode 100644 index 0000000..a88e5d7 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr111814.c @@ -0,0 +1,7 @@ +/* Verify that __builtin_nan("") produces a constant matches + architecture specification. */ +/* { dg-do compile } */ + +double d = __builtin_nan (""); + +/* { dg-final { scan-assembler "\t.long\t-1\n\t.long\t2146959359\n" } } */ diff --git a/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d b/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d new file mode 100644 index 0000000..a137472 --- /dev/null +++ b/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d @@ -0,0 +1,2 @@ +module imports.m119817.a; +void f119817()() { } diff --git a/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d b/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d new file mode 100644 index 0000000..aef0e37 --- /dev/null +++ b/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d @@ -0,0 +1,2 @@ +module imports.m119817.b; +void f119817() { } diff --git a/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d b/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d new file mode 100644 index 0000000..188827e --- /dev/null +++ b/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d @@ -0,0 +1,4 @@ +module imports.m119817; +public import + imports.m119817.a, + imports.m119817.b; diff --git a/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d b/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d new file mode 100644 index 0000000..3c5a6ac --- /dev/null +++ b/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d @@ -0,0 +1,14 @@ +module imports.pr119826b; + +import pr119826 : t119826; + +class C119826 +{ + enum E119826 { Evalue } + const E119826 em = void; +} + +void f119826(C119826 c) +{ + t119826(c.em); +} diff --git a/gcc/testsuite/gdc.dg/debug/pr119817.d b/gcc/testsuite/gdc.dg/debug/pr119817.d new file mode 100644 index 0000000..3eea6ba --- /dev/null +++ b/gcc/testsuite/gdc.dg/debug/pr119817.d @@ -0,0 +1,6 @@ +// { dg-do compile } +// { dg-additional-sources "imports/m119817/package.d" } +// { dg-additional-sources "imports/m119817/a.d" } +// { dg-additional-sources "imports/m119817/b.d" } +module pr119817; +import imports.m119817 : f119817; diff --git a/gcc/testsuite/gdc.dg/debug/pr119826.d b/gcc/testsuite/gdc.dg/debug/pr119826.d new file mode 100644 index 0000000..2fb98c7 --- /dev/null +++ b/gcc/testsuite/gdc.dg/debug/pr119826.d @@ -0,0 +1,8 @@ +// { dg-do compile } +// { dg-additional-sources "imports/pr119826b.d" } +module pr119826; + +int t119826(A)(A args) +{ + assert(false); +} diff --git a/gcc/testsuite/gdc.dg/driver_fonly1.d b/gcc/testsuite/gdc.dg/driver_fonly1.d new file mode 100644 index 0000000..1af956a --- /dev/null +++ b/gcc/testsuite/gdc.dg/driver_fonly1.d @@ -0,0 +1,2 @@ +// { dg-additional-options "-fonly=not-a-file" } +// { dg-error "argument is different from first input file name" "" { target *-*-* } 0 } diff --git a/gcc/testsuite/gdc.dg/driver_fonly2.d b/gcc/testsuite/gdc.dg/driver_fonly2.d new file mode 100644 index 0000000..97cd93d --- /dev/null +++ b/gcc/testsuite/gdc.dg/driver_fonly2.d @@ -0,0 +1,8 @@ +// { dg-do "compile" } +// { dg-additional-options "-fonly=driver_fonly2.d" } +// { dg-additional-sources "imports/fonly.d" } +// { dg-final { scan-assembler "_D1a10fonly_testFZv" } } +// { dg-final { scan-assembler-not "_D1b10fonly_testFZv" } } +module a; + +void fonly_test() { } diff --git a/gcc/testsuite/gdc.dg/driver_fonly3.d b/gcc/testsuite/gdc.dg/driver_fonly3.d new file mode 100644 index 0000000..de2983f --- /dev/null +++ b/gcc/testsuite/gdc.dg/driver_fonly3.d @@ -0,0 +1,8 @@ +// { dg-do "compile" } +// { dg-additional-options "-fonly=imports/fonly" } +// { dg-additional-sources "imports/fonly.d" } +// { dg-final { scan-assembler-not "_D1a10fonly_testFZv" } } +// { dg-final { scan-assembler "_D1b10fonly_testFZv" } } +module a; + +void fonly_test() { } diff --git a/gcc/testsuite/gdc.dg/gcov.exp b/gcc/testsuite/gdc.dg/gcov.exp index a65d000..3f0234e 100644 --- a/gcc/testsuite/gdc.dg/gcov.exp +++ b/gcc/testsuite/gdc.dg/gcov.exp @@ -21,12 +21,19 @@ load_lib gdc-dg.exp load_lib gcov.exp global GDC_UNDER_TEST +global GCOV_UNDER_TEST -# For now find gcov in the same directory as $GDC_UNDER_TEST. -if { ![is_remote host] && [string match "*/*" [lindex $GDC_UNDER_TEST 0]] } { - set GCOV [file dirname [lindex $GDC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] +# For now find gcov in the same directory as $GDC_UNDER_TEST, unless +# GCOV_UNDER_TEST is defined. + +if ![info exists GCOV_UNDER_TEST] { + if { ![is_remote host] && [string match "*/*" [lindex $GDC_UNDER_TEST 0]] } { + set GCOV [file dirname [lindex $GDC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] + } else { + set GCOV [gcc-transform-out-of-tree gcov] + } } else { - set GCOV [gcc-transform-out-of-tree gcov] + set GCOV $GCOV_UNDER_TEST } # Initialize harness. diff --git a/gcc/testsuite/gdc.dg/import-c/import-c.exp b/gcc/testsuite/gdc.dg/import-c/import-c.exp new file mode 100644 index 0000000..53d1478 --- /dev/null +++ b/gcc/testsuite/gdc.dg/import-c/import-c.exp @@ -0,0 +1,29 @@ +# Copyright (C) 2025 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Load support procs. +load_lib gdc-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +gdc-dg-runtest [lsort \ + [glob -nocomplain $srcdir/$subdir/*.d ] ] "" \ + "-I $srcdir/$subdir -finclude-imports" + +# All done. +dg-finish diff --git a/gcc/testsuite/gdc.dg/import-c/pr119761.d b/gcc/testsuite/gdc.dg/import-c/pr119761.d new file mode 100644 index 0000000..20eff31 --- /dev/null +++ b/gcc/testsuite/gdc.dg/import-c/pr119761.d @@ -0,0 +1,2 @@ +// { dg-do compile } +import pr119761c; diff --git a/gcc/testsuite/gdc.dg/import-c/pr119761c.c b/gcc/testsuite/gdc.dg/import-c/pr119761c.c new file mode 100644 index 0000000..522f1bf --- /dev/null +++ b/gcc/testsuite/gdc.dg/import-c/pr119761c.c @@ -0,0 +1,4 @@ +int f119761(const char *, ...) +{ + return 0; +} diff --git a/gcc/testsuite/gdc.dg/import-c/pr119799.d b/gcc/testsuite/gdc.dg/import-c/pr119799.d new file mode 100644 index 0000000..d8b0fa2 --- /dev/null +++ b/gcc/testsuite/gdc.dg/import-c/pr119799.d @@ -0,0 +1,2 @@ +// { dg-do compile } +import pr119799c; diff --git a/gcc/testsuite/gdc.dg/import-c/pr119799c.c b/gcc/testsuite/gdc.dg/import-c/pr119799c.c new file mode 100644 index 0000000..b80e856 --- /dev/null +++ b/gcc/testsuite/gdc.dg/import-c/pr119799c.c @@ -0,0 +1 @@ +static struct {} s119799; diff --git a/gcc/testsuite/gdc.dg/imports/fonly.d b/gcc/testsuite/gdc.dg/imports/fonly.d new file mode 100644 index 0000000..2b7755e --- /dev/null +++ b/gcc/testsuite/gdc.dg/imports/fonly.d @@ -0,0 +1,3 @@ +module b; + +void fonly_test() { } diff --git a/gcc/testsuite/gdc.dg/torture/imports/pr109023.d b/gcc/testsuite/gdc.dg/torture/imports/pr109023.d new file mode 100644 index 0000000..e85e0ed --- /dev/null +++ b/gcc/testsuite/gdc.dg/torture/imports/pr109023.d @@ -0,0 +1,3 @@ +module imports.pr109023; + +void f109023() { } diff --git a/gcc/testsuite/gdc.dg/torture/pr109023.d b/gcc/testsuite/gdc.dg/torture/pr109023.d new file mode 100644 index 0000000..3060446 --- /dev/null +++ b/gcc/testsuite/gdc.dg/torture/pr109023.d @@ -0,0 +1,6 @@ +// { dg-do "compile" } +// { dg-additional-options "-I[srcdir] -finclude-imports" } +// { dg-additional-files "imports/pr109023.d" } +// { dg-final { scan-assembler "_D7imports8pr1090237f109023FZv" } } +module pr109023; +import imports.pr109023; diff --git a/gcc/testsuite/gdc.test/compilable/test21179.d b/gcc/testsuite/gdc.test/compilable/test21179.d new file mode 100644 index 0000000..78bdffd --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/test21179.d @@ -0,0 +1,11 @@ +// https://github.com/dlang/dmd/issues/21179 + +void bigEndianToNative(ubyte[2] a) {} + +void main() +{ + ubyte[] arr; + const ubyte[2] bytes; + bigEndianToNative(bytes); + auto b = cast(const ubyte[2][]) arr; +} diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d b/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d index 2016a50..79242b1 100644 --- a/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d +++ b/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d @@ -1,22 +1,24 @@ -/* +/* REQUIRED_ARGS: -verrors=context TEST_OUTPUT: --- -fail_compilation/fail_pretty_errors.d(27): Error: undefined identifier `a` +fail_compilation/fail_pretty_errors.d(29): Error: undefined identifier `a` a = 1; ^ -fail_compilation/fail_pretty_errors.d-mixin-32(32): Error: undefined identifier `b` -fail_compilation/fail_pretty_errors.d(37): Error: cannot implicitly convert expression `5` of type `int` to `string` +fail_compilation/fail_pretty_errors.d-mixin-34(34): Error: undefined identifier `b` +b = 1; +^ +fail_compilation/fail_pretty_errors.d(39): Error: cannot implicitly convert expression `5` of type `int` to `string` string x = 5; ^ -fail_compilation/fail_pretty_errors.d(42): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating +fail_compilation/fail_pretty_errors.d(44): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating mixin mixinTemplate; ^ -fail_compilation/fail_pretty_errors.d(48): Error: invalid array operation `"" + ""` (possible missing []) +fail_compilation/fail_pretty_errors.d(50): Error: invalid array operation `"" + ""` (possible missing []) auto x = ""+""; ^ -fail_compilation/fail_pretty_errors.d(48): did you mean to concatenate (`"" ~ ""`) instead ? -fail_compilation/fail_pretty_errors.d(51): Error: cannot implicitly convert expression `1111` of type `int` to `byte` +fail_compilation/fail_pretty_errors.d(50): did you mean to concatenate (`"" ~ ""`) instead ? +fail_compilation/fail_pretty_errors.d(53): Error: cannot implicitly convert expression `1111` of type `int` to `byte` byte ɑ = 1111; ^ --- diff --git a/gcc/testsuite/gdc.test/fail_compilation/test21247.d b/gcc/testsuite/gdc.test/fail_compilation/test21247.d new file mode 100644 index 0000000..c3e4105 --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/test21247.d @@ -0,0 +1,20 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/test21247.d(13): Error: anonymous union can only be a part of an aggregate, not function `hang_dmd` +fail_compilation/test21247.d(17): Error: undefined identifier `u` +fail_compilation/test21247.d(18): Error: undefined identifier `b` +fail_compilation/test21247.d(20): called from here: `hang_dmd(0u)` +--- + */ +// https://github.com/dlang/dmd/issues/21247 +ubyte[4] hang_dmd(uint a) +{ + union { + uint u = void; + ubyte[4] b; + } + u = a; + return b; +} +enum T = hang_dmd(0); diff --git a/gcc/testsuite/gdc.test/fail_compilation/test21247b.d b/gcc/testsuite/gdc.test/fail_compilation/test21247b.d new file mode 100644 index 0000000..ecd4603 --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/test21247b.d @@ -0,0 +1,14 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/test21247b.d(10): Error: anonymous union can only be a part of an aggregate, not function `test21247` +--- + */ +// https://github.com/dlang/dmd/issues/21247 +void test21247() +{ + union { + uint u = void; + ubyte[4] b; + } +} diff --git a/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08 b/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08 index 29c2b3a..7fd2085 100644 --- a/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08 +++ b/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08 @@ -9,6 +9,7 @@ program pr98903 integer :: a[*] type(team_type) :: team + team = get_team() me = this_image() n = num_images() a = 42 diff --git a/gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90 b/gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90 new file mode 100644 index 0000000..c35ec10 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90 @@ -0,0 +1,80 @@ +!{ dg-do run } + +! Check coindexes with team= or team_number= are working. + +program coindexed_5 + use, intrinsic :: iso_fortran_env + + type(team_type) :: parentteam, team, formed_team + integer :: t_num= 42, stat = 42, lhs + integer(kind=2) :: st_num=42 + integer :: caf(2)[*] + + parentteam = get_team() + + caf = [23, 32] + form team(t_num, team, new_index=1) + form team(t_num, formed_team) + + change team(team, cell[*] => caf(2)) + ! for get_from_remote + ! Checking against caf_single is very limitted. + if (cell[1, team_number=t_num] /= 32) stop 1 + if (cell[1, team_number=st_num] /= 32) stop 2 + if (cell[1, team=parentteam] /= 32) stop 3 + + ! Check that team_number is validated + lhs = cell[1, team_number=5, stat=stat] + if (stat /= 1) stop 4 + + ! Check that only access to active teams is valid + stat = 42 + lhs = cell[1, team=formed_team, stat=stat] + if (stat /= 1) stop 5 + + ! for send_to_remote + ! Checking against caf_single is very limitted. + cell[1, team_number=t_num] = 45 + if (cell /= 45) stop 11 + cell[1, team_number=st_num] = 46 + if (cell /= 46) stop 12 + cell[1, team=parentteam] = 47 + if (cell /= 47) stop 13 + + ! Check that team_number is validated + stat = -1 + cell[1, team_number=5, stat=stat] = 0 + if (stat /= 1) stop 14 + + ! Check that only access to active teams is valid + stat = 42 + cell[1, team=formed_team, stat=stat] = -1 + if (stat /= 1) stop 15 + + ! for transfer_between_remotes + ! Checking against caf_single is very limitted. + cell[1, team_number=t_num] = caf(1)[1, team_number=-1] + if (cell /= 23) stop 21 + cell[1, team_number=st_num] = caf(2)[1, team_number=-1] + ! cell is an alias for caf(2) and has been overwritten by caf(1)! + if (cell /= 23) stop 22 + cell[1, team=parentteam] = caf(1)[1, team= team] + if (cell /= 23) stop 23 + + ! Check that team_number is validated + stat = -1 + cell[1, team_number=5, stat=stat] = caf(1)[1, team_number= -1] + if (stat /= 1) stop 24 + stat = -1 + cell[1, team_number=t_num] = caf(1)[1, team_number= -2, stat=stat] + if (stat /= 1) stop 25 + + ! Check that only access to active teams is valid + stat = 42 + cell[1, team=formed_team, stat=stat] = caf(1)[1] + if (stat /= 1) stop 26 + stat = 42 + cell[1] = caf(1)[1, team=formed_team, stat=stat] + if (stat /= 1) stop 27 + end team +end program coindexed_5 diff --git a/gcc/testsuite/gfortran.dg/coarray/get_team_1.f90 b/gcc/testsuite/gfortran.dg/coarray/get_team_1.f90 new file mode 100644 index 0000000..f37d1c7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray/get_team_1.f90 @@ -0,0 +1,29 @@ +!{ dg-do compile } + +! PR 97210 +! Tests get_team syntax + + use iso_fortran_env + implicit none + type(team_type) :: team, ret + integer :: level + + ret = get_team() + ret = get_team('abc') !{ dg-error "must be INTEGER" } + ret = get_team(level, 'abc') !{ dg-error "Too many arguments" } + ret = get_team([1,2]) !{ dg-error "must be a scalar" } + ret = get_team(team) !{ dg-error "must be INTEGER" } + + ret = get_team(INITIAL_TEAM) + ret = get_team(CURRENT_TEAM) + ret = get_team(PARENT_TEAM) + ret = get_team(INITIAL_TEAM, CURRENT_TEAM) !{ dg-error "Too many arguments" } + + level = INITIAL_TEAM + ret = get_team(level) + ret = get_team(99) !{ dg-error "specify one of the INITIAL_TEAM, PARENT_TEAM" } + level = 99 + ret = get_team(level) + level = get_team() !{ dg-error "Cannot convert TYPE\\(team_type\\)" } +end + diff --git a/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08 b/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08 index 098a2bb..b7ec5a6 100644 --- a/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08 +++ b/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08 @@ -18,7 +18,7 @@ program test_image_status_1 isv = image_status(k2) ! Ok isv = image_status(k4) ! Ok isv = image_status(k8) ! Ok - isv = image_status(1, team=1) ! { dg-error "'team' argument of 'image_status' intrinsic at \\(1\\) not yet supported" } + isv = image_status(1, team=1) ! { dg-error "shall be of type 'team_type'" } isv = image_status() ! { dg-error "Missing actual argument 'image' in call to 'image_status' at \\(1\\)" } isv = image_status(team=1) ! { dg-error "Missing actual argument 'image' in call to 'image_status' at \\(1\\)" } diff --git a/gcc/testsuite/gfortran.dg/coarray_10.f90 b/gcc/testsuite/gfortran.dg/coarray_10.f90 index 53917b5..6f453d5 100644 --- a/gcc/testsuite/gfortran.dg/coarray_10.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_10.f90 @@ -21,7 +21,7 @@ subroutine this_image_check() integer,save :: z(4)[*], i j = this_image(a,dim=3) ! { dg-error "not a valid codimension index" } - j = this_image(dim=3) ! { dg-error "DIM argument without COARRAY argument" } + j = this_image(dim=3) ! { dg-error "'dim' argument without 'coarray' argument" } i = image_index(i, [ 1 ]) ! { dg-error "Expected coarray variable" } i = image_index(z, 2) ! { dg-error "must be a rank one array" } end subroutine this_image_check diff --git a/gcc/testsuite/gfortran.dg/coarray_49.f90 b/gcc/testsuite/gfortran.dg/coarray_49.f90 index 370e3fd..fd8549b 100644 --- a/gcc/testsuite/gfortran.dg/coarray_49.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_49.f90 @@ -5,5 +5,5 @@ program p integer :: x[*] - print *, image_index (x, [1.0]) ! { dg-error "shall be INTEGER" } + print *, image_index (x, [1.0]) ! { dg-error "must be INTEGER" } end diff --git a/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90 b/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90 index 299ea62..2d8a39a 100644 --- a/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90 @@ -20,6 +20,6 @@ program test call co_broadcast(val3, source_image=res,stat=stat3, errmsg=errmesg3) end program test -! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&desc.., _gfortran_caf_num_images \\(0, -1\\), &stat1, errmesg1, 6\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&desc.., _gfortran_caf_num_images \\(0B, 0B\\), &stat1, errmesg1, 6\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&val2, 4, &stat2, errmesg2, 7\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&desc.., res, &stat3, errmesg3, 8\\);" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90 b/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90 index 8419cf9..05a1350 100644 --- a/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90 @@ -33,6 +33,6 @@ contains end function hc end program test -! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&desc.., fr, 4, _gfortran_caf_num_images \\(0, -1\\), &stat1, errmesg1, 0, 6\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&desc.., fr, 4, _gfortran_caf_num_images \\(0B, 0B\\), &stat1, errmesg1, 0, 6\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&val2, gz, 0, 4, &stat2, errmesg2, 0, 7\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&desc.., hc, 1, res, &stat3, errmesg3, 99, 8\\);" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_critical_2.f90 b/gcc/testsuite/gfortran.dg/coarray_critical_2.f90 new file mode 100644 index 0000000..702611c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_critical_2.f90 @@ -0,0 +1,30 @@ +!{ dg-do compile } +!{ dg-additional-options "-fcoarray=lib" } + +! Test critical syntax errors with stat= and errmsg= specifiers + + implicit none + integer :: istat + character(len=30) :: err + integer(kind=1) :: too_small_stat + + critical (stat=err) !{ dg-error "must be a scalar INTEGER" } + continue + end critical + + critical (stat=istat, stat=istat) !{ dg-error "Duplicate STAT" } + continue + end critical !{ dg-error "Expecting END PROGRAM" } + + critical (stat=istat, errmsg=istat) !{ dg-error "must be a scalar CHARACTER variable" } + continue + end critical + + critical (stat=istat, errmsg=err, errmsg=err) !{ dg-error "Duplicate ERRMSG" } + continue + end critical !{ dg-error "Expecting END PROGRAM" } + + critical (stat=too_small_stat) !{ dg-error "scalar INTEGER variable of at least kind 2" } + continue + end critical +end diff --git a/gcc/testsuite/gfortran.dg/coarray_critical_3.f90 b/gcc/testsuite/gfortran.dg/coarray_critical_3.f90 new file mode 100644 index 0000000..cd609bd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_critical_3.f90 @@ -0,0 +1,32 @@ +! { dg-do run } +! { dg-options "-fcoarray=lib -fdump-tree-original -lcaf_single" } +! { dg-additional-options "-latomic" { target libatomic_available } } + +! PR 87939 +! Test critical construct with stat= and errmsg= specifiers +! + use, intrinsic :: iso_fortran_env, only: int16 + implicit none + integer :: istat = 42 + integer(kind=int16) :: istat16 = 42 + character(len=30) :: err = 'unchanged' + integer :: fail = 0 + + critical (stat=istat, errmsg=err) + if (istat /= 0) fail = 1 + if (trim(err) /= 'unchanged') fail = 2 + end critical + + if (fail /= 0) stop fail + + critical (stat=istat16, errmsg=err) + if (istat16 /= 0) fail = 3 + if (trim(err) /= 'unchanged') fail = 4 + end critical + + if (fail /= 0) stop fail +end + +! { dg-final { scan-tree-dump "_gfortran_caf_lock \\(caf_token\\.\[0-9\]+, 0, 1, 0B, &istat, &err, 30\\);" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_lock \\(caf_token\\.\[0-9\]+, 0, 1, 0B, &stat\\.\[0-9\]+, &err, 30\\);" "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_caf_unlock \\(caf_token\\.\[0-9\]+, 0, 1, &stat\\.\[0-9\]+, 0B, 0\\);" 2 "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90 index 63cca3e..7939a79 100644 --- a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90 @@ -19,8 +19,8 @@ end ! { dg-final { scan-tree-dump-times "bar \\(real\\(kind=4\\)\\\[2\\\] \\* restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } } ! { dg-final { scan-tree-dump-times "mylcobound = 5;" 1 "original" } } ! { dg-final { scan-tree-dump-times "parm...dim\\\[1\\\].lbound = 5;" 1 "original" } } -! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r]*_gfortran_caf_num_images \\(0, -1\\).? \\+ -?\[0-9\]+\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r]*_gfortran_caf_num_images \\(0B, 0B\\).? \\+ -?\[0-9\]+\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "mylbound = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0B\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "bar \\(x, caf_token.., 0\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "_gfortran_caf_init \\(&argc, &argv\\);" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90 index a27d740..31a7677 100644 --- a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90 @@ -19,8 +19,8 @@ end ! { dg-final { scan-tree-dump-times "bar \\(struct array02_real\\(kind=4\\) & restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } } ! { dg-final { scan-tree-dump-times "mylcobound = 5;" 1 "original" } } ! { dg-final { scan-tree-dump-times "parm...dim\\\[1\\\].lbound = 5;" 1 "original" } } -! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r\]*_gfortran_caf_num_images \\(0, -1\\).? \\+ -?\[0-9\]+\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r\]*_gfortran_caf_num_images \\(0B, 0B\\).? \\+ -?\[0-9\]+\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "mylbound = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0B\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "bar \\(&parm.\[0-9\]+, caf_token.\[0-9\]+, \\(integer\\(kind=\[48\]\\)\\) parm.\[0-9\]+.data - \\(integer\\(kind=\[48\]\\)\\) x\\);" 1 "original" } } ! { dg-final { scan-tree-dump-times "_gfortran_caf_init \\(&argc, &argv\\);" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90 b/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90 index 1fe2318..5a609d8 100644 --- a/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90 @@ -1,19 +1,52 @@ -! { dg-do compile } -! { dg-options "-fdump-tree-original -fcoarray=single" } +!{ dg-do run } +!{ dg-options "-fdump-tree-original -fcoarray=single" } ! -j1 = this_image(distance=4) -j2 = this_image(5) + +use, intrinsic :: iso_fortran_env, only: team_type +integer :: caf[2,*] +integer, allocatable :: res(:) +type(team_type) :: team + +form team(1, team, new_index=MOD(this_image() + 43, num_images()) + 1) +j1 = this_image() +if (j1 /= 1) then + print *, me, ":", j1 + stop 1 +endif +res = this_image(caf) +if (any (res /= [1, 1])) then + print *, me, ":", res + stop 2 +endif +j2 = this_image(caf, 1) +if (j2 /= 1) then + print *, me, ":", j2 + stop 3 +endif +j3 = this_image(team) +if (j3 /= MOD(this_image() + 43, num_images()) +1) then + print *, me, ":", j3 + stop 4 +endif +res = this_image(caf, team) +if (any(res /= [1, 1])) then + print *, me, ":", res + stop 5 +endif +j4 = this_image(caf, 1, team) +if (j4 /= 1) then + print *, me, ":", j4 + stop 6 +endif +associate(me => this_image()) +end associate k1 = num_images() -k2 = num_images(6) -k3 = num_images(distance=7) -k4 = num_images(distance=8, failed=.true.) -k5 = num_images(failed=.false.) +k2 = num_images(team) +k3 = num_images(-1) end -! { dg-final { scan-tree-dump-times "j1 = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "j2 = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "k1 = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "k2 = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "k3 = 1;" 1 "original" } } -! { dg-final { scan-tree-dump-times "k4 = 0;" 1 "original" } } -! { dg-final { scan-tree-dump-times "k5 = 1;" 1 "original" } } +! { dg-final { scan-tree-dump-times "j\[1-4\] = 1;" 4 "original" } } +! { dg-final { scan-tree-dump-times "A\\.\[0-9\]+\\\[2\\\] = \\\{1, 1\\\};" 4 "original" } } +! { dg-final { scan-tree-dump "k1 = 1;" "original" } } +! { dg-final { scan-tree-dump "k2 = 1;" "original" } } +! { dg-final { scan-tree-dump "k3 = 1;" "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90 b/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90 index 002c897..9713e3d 100644 --- a/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90 @@ -1,19 +1,57 @@ -! { dg-do compile } -! { dg-options "-fdump-tree-original -fcoarray=lib" } +!{ dg-do run } +!{ dg-additional-options "-fdump-tree-original -fcoarray=lib -lcaf_single" } ! -j1 = this_image(distance=4) -j2 = this_image(5) + +use, intrinsic :: iso_fortran_env, only: team_type +integer :: caf[2,*] +integer, allocatable :: res(:) +type(team_type) :: team + +form team(1, team, new_index=MOD(this_image() + 43, num_images()) + 1) + +associate(me => this_image()) +j1 = this_image() +if (j1 /= 1) then + print *, me, ":", j1 + stop 1 +endif +res = this_image(caf) +if (any (res /= [1, 1])) then + print *, me, ":", res + stop 2 +endif +j2 = this_image(caf, 1) +if (j2 /= 1) then + print *, me, ":", j2 + stop 3 +endif +j3 = this_image(team) +if (j3 /= MOD(this_image() + 43, num_images()) +1) then + print *, me, ":", j3 + stop 4 +endif +res = this_image(caf, team) +if (any(res /= [1, 1])) then + print *, me, ":", res + stop 5 +endif +j4 = this_image(caf, 1, team) +if (j4 /= 1) then + print *, me, ":", j4 + stop 6 +endif +end associate k1 = num_images() -k2 = num_images(6) -k3 = num_images(distance=7) -k4 = num_images(distance=8, failed=.true.) -k5 = num_images(failed=.false.) +k2 = num_images(team) +k3 = num_images(-1) +k4 = num_images(1) end -! { dg-final { scan-tree-dump-times "j1 = _gfortran_caf_this_image \\(4\\);" 1 "original" } } -! { dg-final { scan-tree-dump-times "j2 = _gfortran_caf_this_image \\(5\\);" 1 "original" } } -! { dg-final { scan-tree-dump-times "k1 = _gfortran_caf_num_images \\(0, -1\\);" 1 "original" } } -! { dg-final { scan-tree-dump-times "k2 = _gfortran_caf_num_images \\(6, -1\\);" 1 "original" } } -! { dg-final { scan-tree-dump-times "k3 = _gfortran_caf_num_images \\(7, -1\\);" 1 "original" } } -! { dg-final { scan-tree-dump-times "k4 = _gfortran_caf_num_images \\(8, 1\\);" 1 "original" } } -! { dg-final { scan-tree-dump-times "k5 = _gfortran_caf_num_images \\(0, 0\\);" 1 "original" } } +! { dg-final { scan-tree-dump "j1 = _gfortran_caf_this_image \\(0B\\);" "original" } } +! { dg-final { scan-tree-dump "j3 = _gfortran_caf_this_image \\(team\\);" "original" } } +! { dg-final { scan-tree-dump-times "D\\.\[0-9\]+ = _gfortran_caf_this_image \\(team\\) \\+ -1;" 2 "original" } } +! { dg-final { scan-tree-dump-times "D\\.\[0-9\]+ = _gfortran_caf_this_image \\(0B\\) \\+ -1;" 2 "original" } } +! { dg-final { scan-tree-dump "k1 = _gfortran_caf_num_images \\(0B, 0B\\);" "original" } } +! { dg-final { scan-tree-dump "k2 = _gfortran_caf_num_images \\(team, 0B\\);" "original" } } +! { dg-final { scan-tree-dump "k3 = _gfortran_caf_num_images \\(0B, &D\\.\[0-9\]+\\);" "original" } } +! { dg-final { scan-tree-dump "k4 = _gfortran_caf_num_images \\(0B, &D\\.\[0-9\]+\\);" "original" } } diff --git a/gcc/testsuite/gfortran.dg/coarray_this_image_3.f90 b/gcc/testsuite/gfortran.dg/coarray_this_image_3.f90 new file mode 100644 index 0000000..b8433b2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/coarray_this_image_3.f90 @@ -0,0 +1,31 @@ +! { dg-do compile } +! { dg-options "-fcoarray=lib" } + + +use, intrinsic :: iso_fortran_env, only: team_type +integer :: caf[*] +integer, allocatable :: res(:) +type(team_type) :: team + +j1 = this_image() ! ok +j1 = this_image('bar') !{ dg-error "First argument of 'this_image'" } +res = this_image(caf) ! ok +res = this_image(caf, caf) !{ dg-error "Second argument of 'this_image'" } +j2 = this_image(caf, 1) ! ok +j3 = this_image(caf, 'foo') !{ dg-error "Second argument of 'this_image'" } +j4 = this_image(caf, [1, 2]) !{ dg-error "Second argument of 'this_image'" } +j5 = this_image(team) ! ok +j6 = this_image(team, caf) !{ dg-error "Second argument of 'this_image'" } +res = this_image(caf, team) ! ok +res = this_image(caf, team, 'foo') !{ dg-error "shall be of type 'team_type'" } +j4 = this_image(caf, 1, team) ! ok +j5 = this_image(caf, 1, team, 'baz') !{ dg-error "Too many arguments in call" } +j6 = this_image(dim=1, team=team, coarray=caf) + +k1 = num_images() ! ok +k2 = num_images(team) ! ok +k3 = num_images(team, 2) !{ dg-error "Too many arguments in call to" } +k4 = num_images(1) ! ok +k5 = num_images('abc') !{ dg-error "'team/team_number' argument of 'num_images' intrinsic" } +k6 = num_images(1, team) !{ dg-error "Too many arguments in call to" } +end diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 index 0c8a6ad..a7fa7c3 100644 --- a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 +++ b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 @@ -18,7 +18,7 @@ program do_concurrent_all_clauses squared = i * i arr(i) = temp2 + squared sum = sum + arr(i) - max_val = max(max_val, arr(i)) ! { dg-error "Reference to impure function" } + max_val = max(max_val, arr(i)) end block end do print *, arr, sum, max_val diff --git a/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 b/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 index 0c44296..f48addc 100644 --- a/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90 @@ -10,5 +10,5 @@ type sct end type type(sct) var -!$omp target enter data map(to:var) ! { dg-error "allocatable components is not permitted in map clause" } +!$omp target enter data map(to:var) end diff --git a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-1.f90 b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-1.f90 new file mode 100644 index 0000000..750cec9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-1.f90 @@ -0,0 +1,30 @@ +type t + integer :: t +end type t +class(t), target, allocatable :: c, ca(:) +class(t), pointer :: p, pa(:) +integer :: x +allocate( t :: c, ca(5)) +p => c +pa => ca + +! 11111111112222222222333333333344 +!2345678901234567890123456789012345678901 +!$omp target enter data map(c, ca, p, pa) +! { dg-warning "29:Mapping of polymorphic list item 'c' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-1 } +! { dg-warning "32:Mapping of polymorphic list item 'ca' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-2 } +! { dg-warning "36:Mapping of polymorphic list item 'p' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-3 } +! { dg-warning "39:Mapping of polymorphic list item 'pa' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-4 } + +! 11111111112222222222333333333344 +!2345678901234567890123456789012345678901 + +! 11111111112222222222333333333344 +!2345678901234567890123456789012345678901 +!$omp target update from(c,ca), to(p,pa) +! { dg-warning "26:Mapping of polymorphic list item 'c' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-1 } +! { dg-warning "28:Mapping of polymorphic list item 'ca' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-2 } +! { dg-warning "36:Mapping of polymorphic list item 'p' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-3 } +! { dg-warning "38:Mapping of polymorphic list item 'pa' is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-4 } + +end diff --git a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f90 b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f90 index e25db68..3bedc9b 100644 --- a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f90 @@ -9,7 +9,7 @@ allocate( t :: c, ca(5)) p => c pa => ca -!$omp target ! { dg-warning "Implicit mapping of polymorphic variable 'ca' is unspecified behavior \\\[-Wopenmp\\\]" } +!$omp target ! { dg-warning "Mapping of polymorphic list item 'ca' is unspecified behavior \\\[-Wopenmp\\\]" } ll = allocated(ca) !$omp end target diff --git a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-3.f90 b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-3.f90 new file mode 100644 index 0000000..9777ecf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-3.f90 @@ -0,0 +1,23 @@ +subroutine sub(var, var2) +type t + integer :: x +end type t + +type t2 + integer :: x + integer, allocatable :: y +end type + +class(t) var, var2 +type(t2) :: var3, var4 +!$omp target firstprivate(var) & ! { dg-error "Polymorphic list item 'var' at .1. in FIRSTPRIVATE clause has unspecified behavior and unsupported" } +!$omp& private(var2) ! { dg-error "Polymorphic list item 'var2' at .1. in PRIVATE clause has unspecified behavior and unsupported" } + var%x = 5 + var2%x = 5 +!$omp end target +!$omp target firstprivate(var3) & ! { dg-error "Sorry, list item 'var3' at .1. with allocatable components is not yet supported in FIRSTPRIVATE clause" } +!$omp& private(var4) ! { dg-error "Sorry, list item 'var4' at .1. with allocatable components is not yet supported in PRIVATE clause" } + var3%x = 5 + var4%x = 5 +!$omp end target +end diff --git a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-4.f90 b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-4.f90 new file mode 100644 index 0000000..5a1a70a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-4.f90 @@ -0,0 +1,9 @@ +subroutine one +implicit none +type t + class(*), allocatable :: ul +end type + +type(t) :: var +!$omp target enter data map(to:var) ! { dg-error "Mapping of unlimited polymorphic list item 'var.ul' is unspecified behavior and unsupported" } +end diff --git a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-5.f90 b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-5.f90 new file mode 100644 index 0000000..4b5814e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-5.f90 @@ -0,0 +1,9 @@ +subroutine one +implicit none +type t + class(*), allocatable :: ul +end type + +class(*), allocatable :: ul_var +!$omp target enter data map(to: ul_var) ! { dg-error "Mapping of unlimited polymorphic list item 'ul_var' is unspecified behavior and unsupported" } +end diff --git a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping.f90 b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping.f90 index dd7eb31..752cca2 100644 --- a/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping.f90 @@ -10,37 +10,21 @@ pa => ca ! 11111111112222222222333333333344 !2345678901234567890123456789012345678901 -!$omp target enter data map(c, ca, p, pa) -! { dg-warning "29:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-1 } -! { dg-warning "32:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-2 } -! { dg-warning "36:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-3 } -! { dg-warning "39:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-4 } - -! 11111111112222222222333333333344 -!2345678901234567890123456789012345678901 -!$omp target firstprivate(ca) ! { dg-warning "27:FIRSTPRIVATE with polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" } +!$omp target firstprivate(ca) ! { dg-error "27:Polymorphic list item 'ca' at .1. in FIRSTPRIVATE clause has unspecified behavior and unsupported" } !$omp end target -!$omp target parallel do firstprivate(ca) ! { dg-warning "39:FIRSTPRIVATE with polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" } +!$omp target parallel do firstprivate(ca) ! { dg-error "39:Polymorphic list item 'ca' at .1. in FIRSTPRIVATE clause has unspecified behavior and unsupported" } do x = 0, 5 end do -!$omp target parallel do private(ca) ! OK; should map declared type +!$omp target parallel do private(ca) ! { dg-error "34:Polymorphic list item 'ca' at .1. in PRIVATE clause has unspecified behavior and unsupported" } do x = 0, 5 end do -!$omp target private(ca) ! OK; should map declared type +!$omp target private(ca) ! { dg-error "22:Polymorphic list item 'ca' at .1. in PRIVATE clause has unspecified behavior and unsupported" } block end block -! 11111111112222222222333333333344 -!2345678901234567890123456789012345678901 -!$omp target update from(c,ca), to(p,pa) -! { dg-warning "26:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-1 } -! { dg-warning "28:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-2 } -! { dg-warning "36:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-3 } -! { dg-warning "38:Mapping polymorphic list item at .1. is unspecified behavior \\\[-Wopenmp\\\]" "" { target *-*-* } .-4 } - ! ------------------------- !$omp target parallel map(release: x) ! { dg-error "36:TARGET with map-type other than TO, FROM, TOFROM, or ALLOC on MAP clause" } diff --git a/gcc/testsuite/gfortran.dg/interface_59.f90 b/gcc/testsuite/gfortran.dg/interface_59.f90 new file mode 100644 index 0000000..c9ccd67 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_59.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! PR fortran/119669 - this used to generate an ICE. + +program a + implicit real(a-h,o-z) + external abstract_caller, caller, func +! real func + call abstract_caller (caller, func, 1.5) + call abstract_caller (caller, func, 1.5) +end program a + +function func (x) + real func, x + func = x * x - 1. +end diff --git a/gcc/testsuite/gfortran.dg/move_alloc_11.f90 b/gcc/testsuite/gfortran.dg/move_alloc_11.f90 new file mode 100644 index 0000000..d33e0ce --- /dev/null +++ b/gcc/testsuite/gfortran.dg/move_alloc_11.f90 @@ -0,0 +1,23 @@ +!{ dg-do compile } + +! General error checking for move_alloc parameter list. + +integer, allocatable :: i, o +integer :: st, s2 +character(30) :: e, e2 + + call move_alloc(i, o, STAT=st) + call move_alloc(i, o, STAT=st, STAT=s2) !{ dg-error "Keyword 'stat' at \\(1\\) has already appeared in the current argument list" } + call move_alloc(i, o, STAT=e) !{ dg-error "STAT= argument at \\(1\\) must be a scalar INTEGER variable of at least kind 2" } + call move_alloc(i, o, STAT=[st, s2]) !{ dg-error "STAT= argument at \\(1\\) must be a scalar INTEGER variable of at least kind 2" } + call move_alloc(i, o, STAT=.TRUE.) !{ dg-error "STAT= argument at \\(1\\) must be a scalar INTEGER variable of at least kind 2" } + + call move_alloc(i, o, STAT=st, ERRMSG=e) + call move_alloc(i, o, ERRMSG=e) + call move_alloc(i, o, ERRMSG=e, ERRMSG=e2) !{ dg-error "Keyword 'errmsg' at \\(1\\) has already appeared in the current argument list" } + call move_alloc(i, o, ERRMSG=st) !{ dg-error "ERRMSG= argument at \\(1\\) must be a scalar CHARACTER variable of at least kind 1" } + call move_alloc(i, o, ERRMSG=.TRUE.) !{ dg-error "ERRMSG= argument at \\(1\\) must be a scalar CHARACTER variable of at least kind 1" } + + +end + diff --git a/gcc/testsuite/gfortran.dg/num_images_1.f90 b/gcc/testsuite/gfortran.dg/num_images_1.f90 index dac34ba..e03857c 100644 --- a/gcc/testsuite/gfortran.dg/num_images_1.f90 +++ b/gcc/testsuite/gfortran.dg/num_images_1.f90 @@ -5,5 +5,5 @@ program foo implicit none integer k5 - k5 = num_images(failed=.false.) ! { dg-error "argument to NUM_IMAGES" } + k5 = num_images(failed=.false.) ! { dg-error "Cannot find keyword named 'failed' in call to 'num_images'" } end program foo diff --git a/gcc/testsuite/gfortran.dg/pr102458.f90 b/gcc/testsuite/gfortran.dg/pr102458.f90 index 555e497..7c13084 100644 --- a/gcc/testsuite/gfortran.dg/pr102458.f90 +++ b/gcc/testsuite/gfortran.dg/pr102458.f90 @@ -9,7 +9,7 @@ end program p block - integer :: a(get_team()) = 1 ! { dg-error "Automatic array" } + integer :: a(get_team()) = 1 ! { dg-error "Automatic array | ISO_FORTRAN_ENV | must be of INTEGER" } print *, a end block end diff --git a/gcc/testsuite/gfortran.dg/pr119502.f90 b/gcc/testsuite/gfortran.dg/pr119502.f90 new file mode 100644 index 0000000..80d7c61 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr119502.f90 @@ -0,0 +1,15 @@ +! { dg-do run } + +! PR119502, negative unit numbers are not allowed without using NEWUNIT + +program foo + integer :: iun = -1 + integer :: ios + open (iun, iostat=ios) + if (ios == 0) stop 1 + write(iun,*, iostat=ios) "This is a test." + if (ios == 0) stop 2 + close (iun, iostat=ios) + if (ios == 0) stop 3 +end + diff --git a/gcc/testsuite/gfortran.dg/pr119836_1.f90 b/gcc/testsuite/gfortran.dg/pr119836_1.f90 new file mode 100644 index 0000000..984e2d0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr119836_1.f90 @@ -0,0 +1,18 @@ +! +! { dg-do run } +! +! PR fortran/119836 +! +program p + implicit none + integer, parameter :: n = 4 + integer :: i + integer :: y(n), x(n) + do concurrent (i=1:n) + x(i) = shiftl (i,1) ! accepted + block + y(i) = shiftl (i,1) ! wrongly rejected + end block + end do + if (any(x /= y)) stop 1 +end program p diff --git a/gcc/testsuite/gfortran.dg/pr119836_2.f90 b/gcc/testsuite/gfortran.dg/pr119836_2.f90 new file mode 100644 index 0000000..5e2d0c9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr119836_2.f90 @@ -0,0 +1,21 @@ +! +! { dg-do compile } +! +! PR fortran/119836 +! +! Although intrinsic functions contained within the Fortran standard +! are pure procedures, many of the additional intrinsic functions +! supplied in libgfortran are impure. RAND() is one such function. +! +program foo + implicit none + integer i + real x(4) + do concurrent (i=1:4) + x = rand() ! { dg-error "Reference to impure function" } + block + x = rand() ! { dg-error "Reference to impure function" } + end block + end do + print *, x +end program foo diff --git a/gcc/testsuite/gfortran.dg/pr119836_3.f90 b/gcc/testsuite/gfortran.dg/pr119836_3.f90 new file mode 100644 index 0000000..69a5fcf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr119836_3.f90 @@ -0,0 +1,30 @@ +! +! { dg-do run } +! +! PR fortran/119836 +! +program p + implicit none + integer, parameter :: n = 4 + integer :: i + integer :: y(n), x(n) + x = [(i,i=1,n)] + do concurrent (i=1:n) + call bar(x, y) + end do + if (any(x /= y)) stop 1 + x = 2 * x + do concurrent (i=1:n) + block + call bar(x, y) + end block + end do + if (any(x /= y)) stop 1 + + contains + elemental subroutine bar(x, y) + integer, intent(in) :: x + integer, intent(out) :: y + y = x + end subroutine +end program p diff --git a/gcc/testsuite/gfortran.dg/pr119836_4.f90 b/gcc/testsuite/gfortran.dg/pr119836_4.f90 new file mode 100644 index 0000000..dc6f72b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr119836_4.f90 @@ -0,0 +1,30 @@ +! +! { dg-do compile } +! +! PR fortran/119836 +! +program p + implicit none + integer, parameter :: n = 4 + integer :: i + integer :: y(n), x(n) + x = [(i,i=1,n)] + do concurrent (i=1:n) + call bar(x, y) ! { dg-error "Subroutine call" } + end do + if (any(x /= y)) stop 1 + x = 2 * x + do concurrent (i=1:n) + block + call bar(x, y) ! { dg-error "Subroutine call" } + end block + end do + if (any(x /= y)) stop 1 + + contains + subroutine bar(x, y) + integer, intent(in) :: x(:) + integer, intent(out) :: y(:) + y = x + end subroutine +end program p diff --git a/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90 b/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90 new file mode 100644 index 0000000..92640e2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90 @@ -0,0 +1,49 @@ +! { dg-do compile } +! PR fortran/106948 - check that passing of PURE procedures works +! +! Contributed by Jim Feng + +module a + implicit none + + interface new + pure module subroutine b(x, f) + integer, intent(inout) :: x + interface + pure function f(x) result(r) + real, intent(in) :: x + real :: r + end function f + end interface + end subroutine b + end interface new +end module a + +submodule(a) a_b + implicit none + +contains + module procedure b + x = int(f(real(x)) * 0.15) + end procedure b +end submodule a_b + +program test + use a + implicit none + + integer :: x + + x = 100 + call new(x, g) + print *, x + +contains + + pure function g(y) result(r) + real, intent(in) :: y + real :: r + + r = sqrt(y) + end function g +end program test diff --git a/gcc/testsuite/gfortran.dg/team_change_2.f90 b/gcc/testsuite/gfortran.dg/team_change_2.f90 new file mode 100644 index 0000000..66fe63c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_change_2.f90 @@ -0,0 +1,93 @@ +!{ dg-do compile } +!{ dg-additional-options "-fcoarray=lib" } + +! PR 87939 +! Tests change team syntax + + use iso_fortran_env, only : team_type + implicit none + type(team_type) :: team + integer :: new_team, istat + character(len=30) :: err + integer :: caf[*], caf2[*] + + new_team = mod(this_image(),2)+1 + + form team (new_team,team) + + change team !{ dg-error "Syntax error in CHANGE TEAM statement" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + change team (err) !{ dg-error "must be a scalar expression of type TEAM_TYPE" } + continue + end team + + change team (team, stat=err) !{ dg-error "must be a scalar INTEGER" } + continue + end team + + change team (team, stat=istat, stat=istat) !{ dg-error "Duplicate STAT" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + change team (team, stat=istat, errmsg=istat) !{ dg-error "must be a scalar CHARACTER variable" } + continue + end team + + change team (team, stat=istat, errmsg=str, errmsg=str) !{ dg-error "Duplicate ERRMSG" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + +1234 if (istat /= 0) stop 1 !{ dg-error "leaves CHANGE TEAM" } + + change team (team) + go to 1234 !{ dg-error "leaves CHANGE TEAM" } + end team + + call foo(team) + + ! F2018, C1113 + change team (team, caf[3,*] => caf) !{ dg-error "Codimension decl name" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + change team (team, c[3,*] => caf, c => caf2) !{ dg-error "Duplicate name" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + change team (team, c[3,*] => caf, caf => caf2) !{ dg-error "Codimension decl name" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + change team (team, caf2[3,*] => caf, c => caf2) !{ dg-error "Codimension decl name" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + ! F2018, C1114 + change team (team, c => [caf, caf2]) !{ dg-error "a named coarray" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + ! F2018, C1115 + change team (team, c => caf, c2 => caf) !{ dg-error "duplicates selector at" } + continue + end team !{ dg-error "Expecting END PROGRAM statement" } + + t: change team(team) + exit t + end team t + + change team(team) + exit t !{ dg-error "EXIT statement at \\(1\\) is not within construct 't'" } + end team +contains + subroutine foo(team) + type(team_type) :: team + + change team (team) + return !{ dg-error "Image control statement" } + end team + end subroutine +end + diff --git a/gcc/testsuite/gfortran.dg/team_change_3.f90 b/gcc/testsuite/gfortran.dg/team_change_3.f90 new file mode 100644 index 0000000..bc30c40 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_change_3.f90 @@ -0,0 +1,29 @@ +!{ dg-do run } +!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" } +!{ dg-additional-options "-latomic" { target libatomic_available } } + +! PR 87939 +! Tests change team stat= and errmsg= specifiers + + use iso_fortran_env, only : team_type + implicit none + type(team_type) :: team + integer :: new_team, istat = 42 + character(len=30) :: err = 'unchanged' + + new_team = mod(this_image(),2)+1 + + form team (new_team,team) + + change team (team, stat=istat) + if (istat /= 0) stop 1 + end team + + change team (team, stat=istat, errmsg=err) + if (trim(err) /= 'unchanged') stop 2 + end team + +end + +! { dg-final { scan-tree-dump "_gfortran_caf_change_team \\(team, &istat, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_change_team \\(team, &istat, &err, 30\\)" "original" } } diff --git a/gcc/testsuite/gfortran.dg/team_end_2.f90 b/gcc/testsuite/gfortran.dg/team_end_2.f90 new file mode 100644 index 0000000..c27b59d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_end_2.f90 @@ -0,0 +1,42 @@ +!{ dg-do compile } +!{ dg-additional-options "-fcoarray=lib" } + +! PR 87939 +! Tests change team syntax + + use iso_fortran_env, only : team_type + implicit none + type(team_type) :: team + integer :: new_team, istat + character(len=30) :: err + + new_team = mod(this_image(),2)+1 + + form team (new_team,team) + + change team (team) + continue + end team (stat=err) ! { dg-error "must be a scalar INTEGER" } + + change team (team) + continue + end team (stat=istat, stat=istat) ! { dg-error "Duplicate STAT" } + + change team (team) + continue + end team (stat=istat, errmsg=istat) ! { dg-error "must be a scalar CHARACTER variable" } + + change team (team) + continue + end team (stat=istat, errmsg=err, errmsg=err) ! { dg-error "Duplicate ERRMSG" } + + t: change team (team) + continue + end team (stat=istat) t ! ok + + t2: change team (team) + continue + end team ! { dg-error "Expected block name of 't2' in END TEAM" } + end team t2 ! close the team correctly to catch other errors +end + diff --git a/gcc/testsuite/gfortran.dg/team_end_3.f90 b/gcc/testsuite/gfortran.dg/team_end_3.f90 new file mode 100644 index 0000000..9cd7d4c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_end_3.f90 @@ -0,0 +1,41 @@ +!{ dg-do run } +!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" } +!{ dg-additional-options "-latomic" { target libatomic_available } } + +! PR 87939 +! Tests end team stat= and errmsg= specifiers + + use iso_fortran_env, only : team_type + implicit none + type(team_type) :: team + integer :: new_team, istat = 42 + character(len=30) :: err = 'unchanged' + integer, allocatable :: sample(:)[:] + integer, allocatable :: scal_caf[:] + + new_team = mod(this_image(),2)+1 + + form team (new_team,team) + + change team (team) + allocate(sample(5)[*], scal_caf[*]) + if (.NOT. allocated(sample)) stop 1 + if (.NOT. allocated(scal_caf)) stop 2 + end team (stat=istat) + if (istat /= 0) stop 3 + if (allocated(sample)) stop 4 + if (allocated(scal_caf)) stop 5 + + deallocate(sample, stat=istat) + if (istat == 0) stop 6 + + istat = 42 + t: change team (team) + continue + end team (stat=istat, errmsg=err) t + if (istat /= 0) stop 7 + if (trim(err) /= 'unchanged') stop 8 +end + +! { dg-final { scan-tree-dump "_gfortran_caf_end_team \\(&istat, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_end_team \\(&istat, &err, 30\\)" "original" } } diff --git a/gcc/testsuite/gfortran.dg/team_form_2.f90 b/gcc/testsuite/gfortran.dg/team_form_2.f90 new file mode 100644 index 0000000..5c6d81f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_form_2.f90 @@ -0,0 +1,27 @@ +!{ dg-do compile } +!{ dg-additional-options "-fcoarray=lib" } + +! PR 87939 +! Tests form team syntax errors + + use iso_fortran_env, only : team_type + implicit none + integer :: istat, new_team + character(len=30) :: err + type(team_type) :: team + + new_team = mod(this_image(),2)+1 + + form team ! { dg-error "Syntax error in FORM TEAM statement" } + form team (new_team) ! { dg-error "Syntax error in FORM TEAM statement" } + form team (new_team,err) ! { dg-error "must be a scalar expression of type TEAM_TYPE" } + form team (new_team,team,istat) ! { dg-error "Syntax error in FORM TEAM statement" } + form team (new_team,team,stat=istat,stat=istat) ! { dg-error "Duplicate STAT" } + form team (new_team,team,stat=istat,errmsg=istat) ! { dg-error "must be a scalar CHARACTER variable" } + form team (new_team,team,stat=istat,errmsg=err,errmsg=err) ! { dg-error "Duplicate ERRMSG" } + form team (new_team,team,new_index=1,new_index=1) ! { dg-error "Duplicate NEW_INDEX" } + form team (new_team,team,new_index=err) ! { dg-error "must be a scalar INTEGER" } + form team (new_team,team,new_index=1,new_index=1,stat=istat,errmsg=err) ! { dg-error "Duplicate NEW_INDEX" } + form team (new_team,team,new_index=1,stat=istat,errmsg=err,new_index=9) ! { dg-error "Duplicate NEW_INDEX" } + +end diff --git a/gcc/testsuite/gfortran.dg/team_form_3.f90 b/gcc/testsuite/gfortran.dg/team_form_3.f90 new file mode 100644 index 0000000..d9aae33 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_form_3.f90 @@ -0,0 +1,34 @@ +!{ dg-do run } +!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" } +!{ dg-additional-options "-latomic" { target libatomic_available } } + +! PR 87939 +! Tests form team with stat= and errmsg= + + use iso_fortran_env, only : team_type + implicit none + integer :: istat = 42, new_team + character(len=30) :: err = "unchanged" + type(team_type) :: team + + new_team = mod(this_image(),2)+1 + + form team (new_team,team) + form team (new_team,team,stat=istat) + if (istat /= 0) stop 1 + form team (new_team,team,stat=istat, errmsg=err) + if (trim(err) /= 'unchanged') stop 2 + form team (new_team,team,new_index=1) + istat = 42 + form team (new_team,team,new_index=1,stat=istat) + if (istat /= 0) stop 3 + form team (new_team,team,new_index=1,stat=istat,errmsg=err) + if (trim(err) /= 'unchanged') stop 4 +end + +! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B, 0B, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B, &istat, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B, &istat, &err, 30\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, &C\\.\[0-9\]+, 0B, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, &C\\.\[0-9\]+, &istat, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, &C\\.\[0-9\]+, &istat, &err, 30\\)" "original" } } diff --git a/gcc/testsuite/gfortran.dg/team_get_1.f90 b/gcc/testsuite/gfortran.dg/team_get_1.f90 new file mode 100644 index 0000000..fe00ce8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_get_1.f90 @@ -0,0 +1,27 @@ +!{ dg-do compile } +!{ dg-additional-options "-fcoarray=lib -fdump-tree-original" } + +! PR 87939 +! Tests get_team + + use iso_fortran_env + implicit none + type(team_type) :: team, ret + integer :: new_team, level + + new_team = mod(this_image(),2)+1 + + form team (new_team,team) + + ret = get_team() + ret = get_team(INITIAL_TEAM) + ret = get_team(PARENT_TEAM) + ret = get_team(CURRENT_TEAM) + level = INITIAL_TEAM + ret = get_team(level) + +end + +! { dg-final { scan-tree-dump "_gfortran_caf_get_team \\(0B\\)" "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_caf_get_team \\(&C\.\[0-9\]+\\)" 3 "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_get_team \\(&level\\)" "original" } } diff --git a/gcc/testsuite/gfortran.dg/team_number_1.f90 b/gcc/testsuite/gfortran.dg/team_number_1.f90 index e44e17b..f0ee7d1 100644 --- a/gcc/testsuite/gfortran.dg/team_number_1.f90 +++ b/gcc/testsuite/gfortran.dg/team_number_1.f90 @@ -1,13 +1,13 @@ ! { dg-do run } ! { dg-options "-fcoarray=single" } ! -! Tests if team_number intrinsic fucntion works +! Tests if team_number intrinsic function works ! use iso_fortran_env, only : team_type implicit none - type(team_type) team + type(team_type) :: team integer, parameter :: standard_initial_value=-1 - integer new_team + integer :: new_team if (team_number()/=standard_initial_value) STOP 1 diff --git a/gcc/testsuite/gfortran.dg/team_sync_1.f90 b/gcc/testsuite/gfortran.dg/team_sync_1.f90 new file mode 100644 index 0000000..5b28651 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_sync_1.f90 @@ -0,0 +1,24 @@ +!{ dg-do compile } +!{ dg-additional-options "-fcoarray=lib" } + +! PR 87939 +! Test sync team syntax errors + + use iso_fortran_env, only : team_type + implicit none + integer :: istat + character(len=30) :: err + type(team_type) :: team + + form team (mod(this_image(),2)+1, team) + + change team (team) + sync team ! { dg-error "Syntax error in SYNC TEAM statement" } + sync team (err) ! { dg-error "must be a scalar expression of type TEAM_TYPE" } + sync team (team, istat) ! { dg-error "Syntax error in SYNC TEAM statement" } + sync team (team, stat=err) ! { dg-error "must be a scalar INTEGER" } + sync team (team, stat=istat, stat=istat) ! { dg-error "Duplicate STAT" } + sync team (team, stat=istat, errmsg=istat) ! { dg-error "must be a scalar CHARACTER variable" } + sync team (team, stat=istat, errmsg=err, errmsg=err) ! { dg-error "Duplicate ERRMSG" } + end team +end diff --git a/gcc/testsuite/gfortran.dg/team_sync_2.f90 b/gcc/testsuite/gfortran.dg/team_sync_2.f90 new file mode 100644 index 0000000..947f65d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/team_sync_2.f90 @@ -0,0 +1,27 @@ +!{ dg-do run } +!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" } +!{ dg-additional-options "-latomic" { target libatomic_available } } + +! PR 87939 +! Test sync team statement +! + use iso_fortran_env, only : team_type + implicit none + integer :: istat = 42 + type(team_type) :: team + character(len=30) :: err = "unchanged" + + form team (mod(this_image(),2)+1, team) + + change team (team) + sync team (team) + sync team (team, stat=istat) + if (istat /= 0) stop 1 + sync team (team, stat=istat, errmsg=err) + if (trim(err) /= 'unchanged') stop 2 + end team +end + +! { dg-final { scan-tree-dump "_gfortran_caf_sync_team \\(team, 0B, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_sync_team \\(team, &istat, 0B, 0\\)" "original" } } +! { dg-final { scan-tree-dump "_gfortran_caf_sync_team \\(team, &istat, &err, 30\\)" "original" } } diff --git a/gcc/testsuite/gm2.dg/doc/examples/pass/doc-examples-pass.exp b/gcc/testsuite/gm2.dg/doc/examples/pass/doc-examples-pass.exp new file mode 100644 index 0000000..0bfcea0 --- /dev/null +++ b/gcc/testsuite/gm2.dg/doc/examples/pass/doc-examples-pass.exp @@ -0,0 +1,18 @@ +# Compile tests, no torture testing. +# +# These tests should all pass. + +# Load support procs. +load_lib gm2-dg.exp + +gm2_init_pim4 $srcdir/$subdir + +# Initialize `dg'. +dg-init + +# Main loop. + +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] "" "" + +# All done. +dg-finish diff --git a/gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd.mod b/gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd.mod new file mode 100644 index 0000000..84020a8 --- /dev/null +++ b/gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd.mod @@ -0,0 +1,32 @@ +(* { dg-do assemble { target { x86_64-*-* } } } *) +(* { dg-options "-g" } *) + +MODULE exampleadd ; + +FROM libc IMPORT printf, exit ; + + +PROCEDURE Example (foo, bar: CARDINAL) : CARDINAL ; +VAR + myout: CARDINAL ; +BEGIN + ASM VOLATILE ("movl %1,%%eax; addl %2,%%eax; movl %%eax,%0" + : "=rm" (myout) (* outputs *) + : "rm" (foo), "rm" (bar) (* inputs *) + : "eax") ; (* we trash *) + RETURN( myout ) +END Example ; + + +VAR + a, b, c: CARDINAL ; +BEGIN + a := 1 ; + b := 2 ; + c := Example (a, b) ; + IF c # 3 + THEN + printf ("Example procedure function failed to return 3, seen %d", c) ; + exit (1) + END +END exampleadd. diff --git a/gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd2.mod b/gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd2.mod new file mode 100644 index 0000000..f25397f --- /dev/null +++ b/gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd2.mod @@ -0,0 +1,32 @@ +(* { dg-do assemble { target { x86_64-*-* } } } *) +(* { dg-options "-g" } *) + +MODULE exampleadd2 ; + +FROM libc IMPORT printf, exit ; + + +PROCEDURE Example (foo, bar: CARDINAL) : CARDINAL ; +VAR + myout: CARDINAL ; +BEGIN + ASM VOLATILE ( + "movl %[left],%%eax; addl %[right],%%eax; movl %%eax,%[output]" + : [output] "=rm" (myout) (* outputs *) + : [left] "rm" (foo), [right] "rm" (bar) (* inputs *) + : "eax") ; (* we trash *) + RETURN( myout ) +END Example ; + +VAR + a, b, c: CARDINAL ; +BEGIN + a := 1 ; + b := 2 ; + c := Example (a, b) ; + IF c # 3 + THEN + printf ("Example procedure function failed to return 3, seen %d", c) ; + exit (1) + END +END exampleadd2. diff --git a/gcc/testsuite/gm2.dg/doc/examples/pass/hello.mod b/gcc/testsuite/gm2.dg/doc/examples/pass/hello.mod new file mode 100644 index 0000000..f9770ec --- /dev/null +++ b/gcc/testsuite/gm2.dg/doc/examples/pass/hello.mod @@ -0,0 +1,10 @@ +(* { dg-do run } *) +(* { dg-options "-g -fno-scaffold-dynamic" } *) + +MODULE hello ; + +FROM libc IMPORT printf ; + +BEGIN + printf ("hello world\n") +END hello. diff --git a/gcc/testsuite/gm2.dg/doc/examples/pass/hellopim.mod b/gcc/testsuite/gm2.dg/doc/examples/pass/hellopim.mod new file mode 100644 index 0000000..b7876cd --- /dev/null +++ b/gcc/testsuite/gm2.dg/doc/examples/pass/hellopim.mod @@ -0,0 +1,10 @@ +(* { dg-do run } *) +(* { dg-options "-g -fno-scaffold-dynamic" } *) + +MODULE hellopim ; + +FROM StrIO IMPORT WriteString, WriteLn ; + +BEGIN + WriteString ("hello world") ; WriteLn +END hellopim. diff --git a/gcc/testsuite/gm2/pim/fail/constintarraybyte.mod b/gcc/testsuite/gm2/pim/fail/constintarraybyte.mod new file mode 100644 index 0000000..cbcc804 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/constintarraybyte.mod @@ -0,0 +1,10 @@ +MODULE constintarraybyte ; + +FROM FormatStrings IMPORT Sprintf1 ; +FROM DynamicStrings IMPORT String, InitString ; + +VAR + s: String ; +BEGIN + s := Sprintf1 (InitString("abc%x\n"), 42) +END constintarraybyte. diff --git a/gcc/testsuite/gm2/pimlib/run/pass/format2.mod b/gcc/testsuite/gm2/pimlib/run/pass/format2.mod new file mode 100644 index 0000000..2ad6a8c --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/run/pass/format2.mod @@ -0,0 +1,63 @@ +MODULE format2; + +FROM libc IMPORT exit, printf ; +FROM Terminal IMPORT Write, WriteLn; +FROM NumberIO IMPORT WriteCard; +FROM DynamicStrings IMPORT String, Length, char, InitString; +FROM FormatStrings IMPORT Sprintf1; + +PROCEDURE WriteString (s: String); +VAR + l, i: CARDINAL; +BEGIN + l := Length (s) ; + i := 0 ; + WHILE i < l DO + Write (char (s, i)) ; + INC (i) + END +END WriteString; + + +(* + assert - +*) + +PROCEDURE assert (cond: BOOLEAN; line: CARDINAL; file: ARRAY OF CHAR) ; +BEGIN + IF NOT cond + THEN + printf ("%s:%d assertion failed\n", file, line); + exit (1) + END +END assert ; + + +VAR + n: CARDINAL; + r, s: String; +BEGIN + n := 2; + r := InitString("%u pieces of cake") ; + WriteString (r) ; WriteLn ; + assert (Length (r) = 17, __LINE__, __FILE__) ; + s := Sprintf1 (r, n) ; + WriteCard (Length (s), 4) ; WriteLn ; + assert (Length (s) = 16, __LINE__, __FILE__) ; + + r := InitString("%d pieces of cake") ; + WriteString (r) ; WriteLn ; + assert (Length (r) = 17, __LINE__, __FILE__) ; + s := Sprintf1 (r, n) ; + WriteCard (Length (s), 4) ; WriteLn ; + assert (Length (s) = 16, __LINE__, __FILE__) ; + + r := InitString("%x pieces of cake") ; + WriteString (r) ; WriteLn ; + assert (Length (r) = 17, __LINE__, __FILE__) ; + s := Sprintf1 (r, n) ; + WriteCard (Length (s), 4) ; WriteLn ; + assert (Length (s) = 16, __LINE__, __FILE__) ; + + WriteString (InitString ('all tests pass')) ; WriteLn ; +END format2. diff --git a/gcc/testsuite/gnat.dg/gcov/gcov.exp b/gcc/testsuite/gnat.dg/gcov/gcov.exp index 4fa887d..031914a 100644 --- a/gcc/testsuite/gnat.dg/gcov/gcov.exp +++ b/gcc/testsuite/gnat.dg/gcov/gcov.exp @@ -21,12 +21,19 @@ load_lib gnat-dg.exp load_lib gcov.exp global GCC_UNDER_TEST +global GCOV_UNDER_TEST -# For now find gcov in the same directory as $GCC_UNDER_TEST. -if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } { - set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/gcov +# For now find gcov in the same directory as $GCC_UNDER_TEST, unless +# GCOV_UNDER_TEST is defined. + +if ![info exists GCOV_UNDER_TEST] { + if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } { + set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/gcov + } else { + set GCOV gcov + } } else { - set GCOV gcov + set GCOV $GCOV_UNDER_TEST } # Initialize harness. diff --git a/gcc/testsuite/gnat.dg/lto29.adb b/gcc/testsuite/gnat.dg/lto29.adb new file mode 100644 index 0000000..44f556f --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto29.adb @@ -0,0 +1,9 @@ +-- { dg-do run } +-- { dg-options "-O -flto" { target lto } } + +with Lto29_Pkg; + +procedure Lto29 is +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/lto29_pkg.ads b/gcc/testsuite/gnat.dg/lto29_pkg.ads new file mode 100644 index 0000000..6008dc5 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto29_pkg.ads @@ -0,0 +1,15 @@ +with Ada.Strings.Bounded; + +package Lto29_Pkg is + + package M is new Ada.Strings.Bounded.Generic_Bounded_Length (10); + + type T is new M.Bounded_String; + + Null_T : constant T; + +private + + Null_T : constant T := To_Bounded_String (""); + +end Lto29_Pkg; diff --git a/gcc/testsuite/gnat.dg/opt105.adb b/gcc/testsuite/gnat.dg/opt105.adb new file mode 100644 index 0000000..eb2c197 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt105.adb @@ -0,0 +1,30 @@ +-- { dg-do run } +-- { dg-options "-O" } + +with Opt105_Pkg; use Opt105_Pkg; + +procedure Opt105 is + + Val : constant Enum := + (if Enabled then (if Disabled then Two else One) else Three); + +begin + if Cond1 then + return; + end if; + + if Cond2 then + return; + end if; + + case Val is + when One => + raise Program_Error; + + when Two => + raise Constraint_Error; + + when Three => + null; + end case; +end; diff --git a/gcc/testsuite/gnat.dg/opt105_pkg.adb b/gcc/testsuite/gnat.dg/opt105_pkg.adb new file mode 100644 index 0000000..e00de94 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt105_pkg.adb @@ -0,0 +1,6 @@ +package body Opt105_Pkg is + + function Cond1 return Boolean is (False); + function Cond2 return Boolean is (False); + +end Opt105_Pkg; diff --git a/gcc/testsuite/gnat.dg/opt105_pkg.ads b/gcc/testsuite/gnat.dg/opt105_pkg.ads new file mode 100644 index 0000000..2b373b7 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt105_pkg.ads @@ -0,0 +1,11 @@ +package Opt105_Pkg is + + type Enum is (One, Two, Three); + + Enabled : Boolean := False; + Disabled : Boolean := False; + + function Cond1 return Boolean; + function Cond2 return Boolean; + +end Opt105_Pkg; diff --git a/gcc/testsuite/gnat.dg/renaming17.adb b/gcc/testsuite/gnat.dg/renaming17.adb new file mode 100644 index 0000000..d826433 --- /dev/null +++ b/gcc/testsuite/gnat.dg/renaming17.adb @@ -0,0 +1,17 @@ +-- { dg-do run } + +procedure Renaming17 is + + function Incr (V : Integer; I : Integer := 1) return Integer is + (V + I); + + function Incr_Ren (V : Integer; I : Positive := 1) return Positive + renames Incr; + + I : Integer; + +begin + I := Incr_Ren (-3); + I := Incr_Ren (-3, 2); + I := Incr_Ren (-3, 0); +end; diff --git a/gcc/testsuite/go.dg/pr119533-riscv-2.go b/gcc/testsuite/go.dg/pr119533-riscv-2.go new file mode 100644 index 0000000..ce3ffaf --- /dev/null +++ b/gcc/testsuite/go.dg/pr119533-riscv-2.go @@ -0,0 +1,42 @@ +// { dg-do compile { target riscv64*-*-* } } +// { dg-options "-O2 -march=rv64gcv -mabi=lp64d" } + +package ast + +type as struct { + bt []struct{} + an string +} + +func bj(a *as) string { + if b := a.bt; len(a.an) == 1 { + _ = b[0] + } + return a.an +} + +func MergePackageFiles(f map[string][]interface{}, g uint) []interface{} { + bl := make([]string, len(f)) + var bo []interface{} + bu := make(map[string]int) + for _, bm := range bl { + a := f[bm] + for _, d := range a { + if g != 0 { + if a, p := d.(*as); p { + n := bj(a) + if j, bp := bu[n]; bp { + _ = j + } + } + } + } + } + for _, bm := range bl { + _ = bm + } + for _, bm := range bl { + _ = f[bm] + } + return bo +} diff --git a/gcc/testsuite/go.dg/pr119533-riscv.go b/gcc/testsuite/go.dg/pr119533-riscv.go new file mode 100644 index 0000000..30f52d2 --- /dev/null +++ b/gcc/testsuite/go.dg/pr119533-riscv.go @@ -0,0 +1,120 @@ +// { dg-do compile { target riscv64*-*-* } } +// { dg-options "-O2 -march=rv64gcv -mabi=lp64d" } + +// Reduced from libgo build (multi-file reduction, merged mnaully +// and hand reduced again). + +package ast +import ( + "go/token" + "go/scanner" + "reflect" +) +type v struct {} +type w func( string, reflect.Value) bool +func x( string, reflect.Value) bool +type r struct { + scanner.ErrorList +} +type ab interface {} +type ae interface {} +type af interface {} +type ag struct {} +func (ag) Pos() token.Pos +func (ag) ah() token.Pos +type c struct { + aj ae } +type ak struct { + al []c } +type ( + am struct { + an string } + bs struct { + Value string + } +) +func ao(string) *am +type ( + ap interface {} + aq struct { + ar bs } +as struct { + bt ak + an am } +) +type File struct { + *ag + token.Pos + *am + at []af + *v + au []*aq + av *am + aw []*ag } +type ax struct { + an string + *v + ay map[string]File } +func a(az *token.FileSet, b token.Pos) int +type k struct { + l token.Pos + ah token.Pos +} +type m struct { + bb bool + bc *ag +} + +type bi uint +func bj(a *as) string { + if b := a.bt; len(b.al) == 1 { + c := b.al[0].aj + if e := c; e != nil {} + } + return a.an.an +} +func MergePackageFiles(f ax, g bi) *File { + h := 0 + bk := 0 + k := 0 + bl := make([]string, len(f.ay)) + i := 0 + for bm, a := range f.ay { + bl[i] = bm + k += len(a.at) + } + var bn *ag + var l token.Pos + if h > 0 {} + var bo []af + bu := make(map[string]int) + m := 0 + for _, bm := range bl { + a := f.ay[bm] + for _, d := range a.at { + if g!= 0 { + if a, p := d.(*as); p { + n := bj(a) + if j, bp := bu[n]; bp { + if bo != nil && bo[j]== nil {} + } + } + } + } + } + if m > 0 {} + var bq []*aq + q := make(map[string]bool) + for _, bm := range bl { + a := f.ay[bm] + for _, br := range a.au { + if o := br.ar.Value; q[o] {} + } + } + var bh = make([]*ag, bk) + for _, bm := range bl { + a := f.ay[bm] + copy(bh, a.aw) + } + return &File{bn, l, ao(f.an), bo, f.v, bq, nil, bh} +} diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index eadc1cd..6dd8fa3 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -507,8 +507,7 @@ if { [info procs ${tool}_load] != [list] \ set linenum 1 set outfile [open [lindex ${output-file} 1]] set do_fail 0 - set name [file tail [lindex ${output-file} 1]] - verbose "output-file args is $args program is $program" 1 + set name [testname-for-summary] while { [gets $outfile line] >= 0 } { if { $linenum != 1 } { set c [string index $output $idx] diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ee4138a..869d150 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -562,6 +562,16 @@ proc check_effective_target_elf { } { } } +# Returns 1 if the target uses the PE/COFF object format, 0 otherwise. + +proc check_effective_target_pe { } { + if { [gcc_target_object_format] == "pe" } { + return 1; + } else { + return 0; + } +} + # Returns 1 if the target toolchain supports ifunc, 0 otherwise. proc check_ifunc_available { } { @@ -13489,11 +13499,11 @@ proc check_effective_target_arm_v8_3a_bkey_directive { } { # Return 1 if the target supports executing the Armv8.1-M Mainline Low # Overhead Loop, 0 otherwise. The test is valid for ARM. -proc check_effective_target_arm_v8_1_lob_ok { } { +proc check_effective_target_arm_v8_1m_lob_hw { } { if { ![check_effective_target_arm_cortex_m] } { return 0; } else { - return [check_runtime arm_v8_1_lob_hw_available { + return [check_runtime arm_v8_1m_lob_hw_available { int main (void) { int i = 0; @@ -13513,9 +13523,9 @@ proc check_effective_target_arm_v8_1_lob_ok { } { # the Armv8.1-M Mainline Low Overhead Loop, 0 otherwise. The test is # valid for ARM. -proc check_effective_target_arm_thumb2_no_arm_v8_1_lob { } { +proc check_effective_target_arm_thumb2_no_arm_v8_1m_lob { } { if { [check_effective_target_arm_thumb2] - && ![check_effective_target_arm_v8_1_lob_ok] } { + && ![check_effective_target_arm_v8_1m_lob_hw] } { return 1 } return 0 @@ -13525,9 +13535,9 @@ proc check_effective_target_arm_thumb2_no_arm_v8_1_lob { } { # used and the target does not support executing the Armv8.1-M # Mainline Low Overhead Loop, 0 otherwise. The test is valid for ARM. -proc check_effective_target_arm_thumb2_ok_no_arm_v8_1_lob { } { +proc check_effective_target_arm_thumb2_ok_no_arm_v8_1m_lob { } { if { [check_effective_target_arm_thumb2_ok] - && ![check_effective_target_arm_v8_1_lob_ok] } { + && ![check_effective_target_arm_v8_1m_lob_hw] } { return 1 } return 0 diff --git a/gcc/testsuite/rust/compile/enum_discriminant2.rs b/gcc/testsuite/rust/compile/enum_discriminant2.rs new file mode 100644 index 0000000..351dfbb --- /dev/null +++ b/gcc/testsuite/rust/compile/enum_discriminant2.rs @@ -0,0 +1,9 @@ +fn test() -> isize { + 1 +} + +enum Foo { + Bar = test() // { dg-error "only functions marked as .const." } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/format_args_extra_comma.rs b/gcc/testsuite/rust/compile/format_args_extra_comma.rs new file mode 100644 index 0000000..fcc435c --- /dev/null +++ b/gcc/testsuite/rust/compile/format_args_extra_comma.rs @@ -0,0 +1,47 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! format_args { + () => {}; +} + +#[lang = "sized"] +trait Sized {} + +pub mod core { + pub mod fmt { + pub struct Formatter; + pub struct Result; + + pub struct Arguments<'a>; + + impl<'a> Arguments<'a> { + pub fn new_v1(_: &'a [&'static str], _: &'a [ArgumentV1<'a>]) -> Arguments<'a> { + Arguments + } + } + + pub struct ArgumentV1<'a>; + + impl<'a> ArgumentV1<'a> { + pub fn new<'b, T>(_: &'b T, _: fn(&T, &mut Formatter) -> Result) -> ArgumentV1 { + ArgumentV1 + } + } + + pub trait Display { + fn fmt(&self, _: &mut Formatter) -> Result; + } + + impl Display for i32 { + fn fmt(&self, _: &mut Formatter) -> Result { + // { dg-warning "unused name .self." "" { target *-*-* } .-1 } + Result + } + } + } +} + +fn main() { + let _formatted = format_args!("extra commas {} {}", 15, 14,); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue3693.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3693.rs new file mode 100644 index 0000000..e990c8b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3693.rs @@ -0,0 +1,10 @@ +macro_rules! generate_pattern_iterators { + { + $(#[$forward_iterator_attribute:meta])* + } => { + } +} + +generate_pattern_iterators! { + /// Created with the method [`split`]. +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue3708.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3708.rs new file mode 100644 index 0000000..e5b38bb --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3708.rs @@ -0,0 +1,80 @@ +// { dg-additional-options "-frust-name-resolution-2.0 -frust-compile-until=lowering" } + +macro_rules! impl_fn_for_zst { + ($( + $( #[$attr: meta] )* + struct $Name: ident impl$( <$( $lifetime : lifetime ),+> )? Fn = + |$( $arg: ident: $ArgTy: ty ),*| -> $ReturnTy: ty + $body: block; + )+) => { + $( + $( #[$attr] )* + struct $Name; + + impl $( <$( $lifetime ),+> )? Fn<($( $ArgTy, )*)> for $Name { + #[inline] + extern "rust-call" fn call(&self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy { + $body + } + } + + impl $( <$( $lifetime ),+> )? FnMut<($( $ArgTy, )*)> for $Name { + #[inline] + extern "rust-call" fn call_mut( + &mut self, + ($( $arg, )*): ($( $ArgTy, )*) + ) -> $ReturnTy { + Fn::call(&*self, ($( $arg, )*)) + } + } + + impl $( <$( $lifetime ),+> )? FnOnce<($( $ArgTy, )*)> for $Name { + type Output = $ReturnTy; + + #[inline] + extern "rust-call" fn call_once(self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy { + Fn::call(&self, ($( $arg, )*)) + } + } + )+ + } +} + +#[lang = "sized"] +trait Sized {} + +#[lang = "copy"] +trait Copy {} + +#[lang = "fn"] +pub trait Fn<Args>: FnMut<Args> { + /// Performs the call operation. + #[unstable(feature = "fn_traits", issue = "29625")] + extern "rust-call" fn call(&self, args: Args) -> Self::Output; +} + +#[lang = "fn_mut"] +#[must_use = "closures are lazy and do nothing unless called"] +pub trait FnMut<Args>: FnOnce<Args> { + /// Performs the call operation. + #[unstable(feature = "fn_traits", issue = "29625")] + extern "rust-call" fn call_mut(&mut self, args: Args) -> Self::Output; +} + +#[lang = "fn_once"] +pub trait FnOnce<Args> { + /// The returned type after the call operator is used. + #[lang = "fn_once_output"] + #[stable(feature = "fn_once_output", since = "1.12.0")] + type Output; + + /// Performs the call operation. + #[unstable(feature = "fn_traits", issue = "29625")] + extern "rust-call" fn call_once(self, args: Args) -> Self::Output; +} + +impl_fn_for_zst! { + #[derive(Copy)] + struct LinesAnyMap impl<'a> Fn = |line: &'a str| -> () { + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-1.rs new file mode 100644 index 0000000..6fc3a31 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-1.rs @@ -0,0 +1,10 @@ +macro_rules! doc_comment { + (#[ $attr: meta ]) => { + #[$attr] + struct Generated; // { dg-warning "never constructed" } + }; +} + +doc_comment! { + /// This is a generated struct +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-2.rs new file mode 100644 index 0000000..cfc8ab4 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-2.rs @@ -0,0 +1,81 @@ +// { dg-additional-options "-frust-name-resolution-2.0 -frust-compile-until=lowering" } + +macro_rules! impl_fn_for_zst { + ($( + $( #[$attr: meta] )* + struct $Name: ident impl$( <$( $lifetime : lifetime ),+> )? Fn = + |$( $arg: ident: $ArgTy: ty ),*| -> $ReturnTy: ty + $body: block; + )+) => { + $( + $( #[$attr] )* + struct $Name; + + impl $( <$( $lifetime ),+> )? Fn<($( $ArgTy, )*)> for $Name { + #[inline] + extern "rust-call" fn call(&self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy { + $body + } + } + + impl $( <$( $lifetime ),+> )? FnMut<($( $ArgTy, )*)> for $Name { + #[inline] + extern "rust-call" fn call_mut( + &mut self, + ($( $arg, )*): ($( $ArgTy, )*) + ) -> $ReturnTy { + Fn::call(&*self, ($( $arg, )*)) + } + } + + impl $( <$( $lifetime ),+> )? FnOnce<($( $ArgTy, )*)> for $Name { + type Output = $ReturnTy; + + #[inline] + extern "rust-call" fn call_once(self, ($( $arg, )*): ($( $ArgTy, )*)) -> $ReturnTy { + Fn::call(&self, ($( $arg, )*)) + } + } + )+ + } +} + +#[lang = "sized"] +trait Sized {} + +#[lang = "copy"] +trait Copy {} + +#[lang = "fn"] +pub trait Fn<Args>: FnMut<Args> { + /// Performs the call operation. + #[unstable(feature = "fn_traits", issue = "29625")] + extern "rust-call" fn call(&self, args: Args) -> Self::Output; +} + +#[lang = "fn_mut"] +#[must_use = "closures are lazy and do nothing unless called"] +pub trait FnMut<Args>: FnOnce<Args> { + /// Performs the call operation. + #[unstable(feature = "fn_traits", issue = "29625")] + extern "rust-call" fn call_mut(&mut self, args: Args) -> Self::Output; +} + +#[lang = "fn_once"] +pub trait FnOnce<Args> { + /// The returned type after the call operator is used. + #[lang = "fn_once_output"] + #[stable(feature = "fn_once_output", since = "1.12.0")] + type Output; + + /// Performs the call operation. + #[unstable(feature = "fn_traits", issue = "29625")] + extern "rust-call" fn call_once(self, args: Args) -> Self::Output; +} + +impl_fn_for_zst! { + /// Documentation for the zst + #[derive(Copy)] + struct LinesAnyMap impl<'a> Fn = |line: &'a str| -> () { + }; +} diff --git a/gcc/testsuite/rust/compile/nr2/compile.exp b/gcc/testsuite/rust/compile/nr2/compile.exp index 4d91dd0..9e15cdd 100644 --- a/gcc/testsuite/rust/compile/nr2/compile.exp +++ b/gcc/testsuite/rust/compile/nr2/compile.exp @@ -19,6 +19,15 @@ # Load support procs. load_lib rust-dg.exp +# These tests don't run runtest_file_p consistently if it +# doesn't return the same values, so disable parallelization +# of this *.exp file. The first parallel runtest to reach +# this will run all the tests serially. +if ![gcc_parallel_test_run_p compile] { + return +} +gcc_parallel_test_enable 0 + # Initialize `dg'. dg-init @@ -136,3 +145,5 @@ namespace eval rust-nr2-ns { # All done. dg-finish + +gcc_parallel_test_enable 1 diff --git a/gcc/testsuite/rust/compile/track_caller.rs b/gcc/testsuite/rust/compile/track_caller.rs new file mode 100644 index 0000000..fd1d842 --- /dev/null +++ b/gcc/testsuite/rust/compile/track_caller.rs @@ -0,0 +1,6 @@ +#[track_caller] +fn foo() {} + +fn main() { + foo(); +} diff --git a/gcc/testsuite/rust/execute/torture/min_specialization2.rs b/gcc/testsuite/rust/execute/torture/min_specialization2.rs new file mode 100644 index 0000000..d3239ee --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/min_specialization2.rs @@ -0,0 +1,31 @@ +#![feature(min_specialization)] + +#[lang = "sized"] +trait Sized {} + +trait Foo { + fn foo(&self) -> i32; +} + +impl<T> Foo for T { + default fn foo(&self) -> i32 { // { dg-warning "unused" } + 15 + } +} + +impl Foo for bool { + fn foo(&self) -> i32 { + if *self { + 1 + } else { + 0 + } + } +} + +fn main() -> i32 { + let a = 1.foo() - 15; + let b = true.foo() - 1; + + a + b +} diff --git a/gcc/testsuite/rust/execute/torture/min_specialization3.rs b/gcc/testsuite/rust/execute/torture/min_specialization3.rs new file mode 100644 index 0000000..9eccd97 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/min_specialization3.rs @@ -0,0 +1,36 @@ +#![feature(min_specialization)] + +#[lang = "sized"] +trait Sized {} + +trait Foo { + fn foo(&self) -> i32; +} + +struct Wrap<T>(T); + +impl<T> Foo for T { + default fn foo(&self) -> i32 { + 15 + } +} + +impl<T> Foo for Wrap<T> { + default fn foo(&self) -> i32 { + 16 + } +} + +impl Foo for Wrap<bool> { + fn foo(&self) -> i32 { + if self.0 { + 1 + } else { + 0 + } + } +} + +fn main() -> i32 { + Wrap(true).foo() - 1 +} diff --git a/gcc/timevar.def b/gcc/timevar.def index c1029d9..02ace46 100644 --- a/gcc/timevar.def +++ b/gcc/timevar.def @@ -105,6 +105,7 @@ DEFTIMEVAR (TV_IPA_PURE_CONST , "ipa pure const") DEFTIMEVAR (TV_IPA_ICF , "ipa icf") DEFTIMEVAR (TV_IPA_PTA , "ipa points-to") DEFTIMEVAR (TV_IPA_SRA , "ipa SRA") +DEFTIMEVAR (TV_IPA_LC , "ipa locality clone") DEFTIMEVAR (TV_IPA_FREE_LANG_DATA , "ipa free lang data") DEFTIMEVAR (TV_IPA_FREE_INLINE_SUMMARY, "ipa free inline summary") DEFTIMEVAR (TV_IPA_MODREF , "ipa modref") diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc index 05843b8..3289b4f 100644 --- a/gcc/tree-inline.cc +++ b/gcc/tree-inline.cc @@ -2729,8 +2729,11 @@ copy_edges_for_bb (basic_block bb, profile_count num, profile_count den, && gimple_call_arg (copy_stmt, 0) == boolean_true_node) nonlocal_goto = false; else - make_single_succ_edge (copy_stmt_bb, abnormal_goto_dest, - EDGE_ABNORMAL); + { + make_single_succ_edge (copy_stmt_bb, abnormal_goto_dest, + EDGE_ABNORMAL); + gimple_call_set_ctrl_altering (copy_stmt, true); + } } if ((can_throw || nonlocal_goto) diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 217c31f..7cb5a12 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -551,6 +551,7 @@ extern ipa_opt_pass_d *make_pass_ipa_cdtor_merge (gcc::context *ctxt); extern ipa_opt_pass_d *make_pass_ipa_single_use (gcc::context *ctxt); extern ipa_opt_pass_d *make_pass_ipa_comdats (gcc::context *ctxt); extern ipa_opt_pass_d *make_pass_ipa_modref (gcc::context *ctxt); +extern ipa_opt_pass_d *make_pass_ipa_locality_cloning (gcc::context *ctxt); extern gimple_opt_pass *make_pass_cleanup_cfg_post_optimizing (gcc::context *ctxt); diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc index a2a4f5b..c1a21e7 100644 --- a/gcc/tree-pretty-print.cc +++ b/gcc/tree-pretty-print.cc @@ -3201,6 +3201,8 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags, pp_string (pp, " [return slot optimization]"); if (CALL_EXPR_TAILCALL (node)) pp_string (pp, " [tail call]"); + if (CALL_EXPR_MUST_TAIL_CALL (node)) + pp_string (pp, " [must tail call]"); break; case WITH_CLEANUP_EXPR: diff --git a/gcc/tree-ssa-coalesce.cc b/gcc/tree-ssa-coalesce.cc index b78ffd7..7cc39f7 100644 --- a/gcc/tree-ssa-coalesce.cc +++ b/gcc/tree-ssa-coalesce.cc @@ -896,6 +896,18 @@ build_ssa_conflict_graph (tree_live_info_p liveinfo) tree var; gimple *stmt = gsi_stmt (gsi); + if (is_gimple_debug (stmt)) + continue; + + if (map->bitint) + { + build_bitint_stmt_ssa_conflicts (stmt, live, graph, map->bitint, + live_track_process_def, + live_track_process_use, + live_track_clear_var); + continue; + } + /* A copy between 2 partitions does not introduce an interference by itself. If they did, you would never be able to coalesce two things which are copied. If the two variables really do @@ -912,16 +924,6 @@ build_ssa_conflict_graph (tree_live_info_p liveinfo) && TREE_CODE (rhs1) == SSA_NAME) live_track_clear_var (live, rhs1); } - else if (is_gimple_debug (stmt)) - continue; - - if (map->bitint) - { - build_bitint_stmt_ssa_conflicts (stmt, live, graph, map->bitint, - live_track_process_def, - live_track_process_use); - continue; - } /* For stmts with more than one SSA_NAME definition pretend all the SSA_NAME outputs but the first one are live at this point, so diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc index bc632e3..d1d58bf 100644 --- a/gcc/tree-ssa-dse.cc +++ b/gcc/tree-ssa-dse.cc @@ -566,16 +566,17 @@ maybe_trim_complex_store (ao_ref *ref, sbitmap live, gimple *stmt) The most common case for getting here is a CONSTRUCTOR with no elements being used to zero initialize an object. We do not try to handle other cases as those would force us to fully cover the object with the - CONSTRUCTOR node except for the components that are dead. */ + CONSTRUCTOR node except for the components that are dead. + Also handles integer stores of 0 which can happen with memset/memcpy optimizations. */ static void -maybe_trim_constructor_store (ao_ref *ref, sbitmap live, gimple *stmt) +maybe_trim_constructor_store (ao_ref *ref, sbitmap live, gimple *stmt, bool was_integer_cst) { tree ctor = gimple_assign_rhs1 (stmt); /* This is the only case we currently handle. It actually seems to catch most cases of actual interest. */ - gcc_assert (CONSTRUCTOR_NELTS (ctor) == 0); + gcc_assert (was_integer_cst ? integer_zerop (ctor) : CONSTRUCTOR_NELTS (ctor) == 0); int head_trim = 0; int tail_trim = 0; @@ -588,6 +589,8 @@ maybe_trim_constructor_store (ao_ref *ref, sbitmap live, gimple *stmt) /* We want &lhs for the MEM_REF expression. */ tree lhs_addr = build_fold_addr_expr (gimple_assign_lhs (stmt)); + STRIP_USELESS_TYPE_CONVERSION (lhs_addr); + if (! is_gimple_min_invariant (lhs_addr)) return; @@ -802,11 +805,16 @@ maybe_trim_partially_dead_store (ao_ref *ref, sbitmap live, gimple *stmt) switch (gimple_assign_rhs_code (stmt)) { case CONSTRUCTOR: - maybe_trim_constructor_store (ref, live, stmt); + maybe_trim_constructor_store (ref, live, stmt, false); break; case COMPLEX_CST: maybe_trim_complex_store (ref, live, stmt); break; + case INTEGER_CST: + if (integer_zerop (gimple_assign_rhs1 (stmt)) + && type_has_mode_precision_p (TREE_TYPE (gimple_assign_lhs (stmt)))) + maybe_trim_constructor_store (ref, live, stmt, true); + break; default: break; } diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index 7d2d169..a194bf6 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -403,12 +403,15 @@ factor_out_conditional_operation (edge e0, edge e1, basic_block merge, if (dominated_by_p (CDI_DOMINATORS, gimple_bb (phi), gimple_bb (arg0_def_stmt))) return false; - /* Only handle if arg1 is a INTEGER_CST and one that fits - into the new type or if it is the same precision. */ + /* If arg1 is an INTEGER_CST, fold it to new type if it fits, or else + if the bits will not be modified during the conversion, except for + boolean types whose precision is not 1 (see int_fits_type_p). */ if (!INTEGRAL_TYPE_P (TREE_TYPE (new_arg0)) || !(int_fits_type_p (arg1, TREE_TYPE (new_arg0)) || (TYPE_PRECISION (TREE_TYPE (new_arg0)) - == TYPE_PRECISION (TREE_TYPE (arg1))))) + == TYPE_PRECISION (TREE_TYPE (arg1)) + && (TREE_CODE (TREE_TYPE (new_arg0)) != BOOLEAN_TYPE + || TYPE_PRECISION (TREE_TYPE (new_arg0)) == 1)))) return false; /* For the INTEGER_CST case, we are just moving the diff --git a/gcc/tree-tailcall.cc b/gcc/tree-tailcall.cc index f51bb97..f593363 100644 --- a/gcc/tree-tailcall.cc +++ b/gcc/tree-tailcall.cc @@ -51,6 +51,8 @@ along with GCC; see the file COPYING3. If not see #include "symbol-summary.h" #include "ipa-cp.h" #include "ipa-prop.h" +#include "attribs.h" +#include "asan.h" /* The file implements the tail recursion elimination. It is also used to analyze the tail calls in general, passing the results to the rtl level @@ -122,6 +124,9 @@ struct tailcall /* True if it is a call to the current function. */ bool tail_recursion; + /* True if there is __tsan_func_exit call after the call. */ + bool has_tsan_func_exit; + /* The return value of the caller is mult * f + add, where f is the return value of the call. */ tree mult, add; @@ -492,10 +497,10 @@ maybe_error_musttail (gcall *call, const char *err, bool diag_musttail) gimple_call_set_must_tail (call, false); /* Avoid another error. */ gimple_call_set_tail (call, false); } - if (dump_file) + if (dump_file && (dump_flags & TDF_DETAILS)) { + fprintf (dump_file, "Cannot tail-call: %s: ", err); print_gimple_stmt (dump_file, call, 0, TDF_SLIM); - fprintf (dump_file, "Cannot convert: %s\n", err); } } @@ -504,7 +509,7 @@ maybe_error_musttail (gcall *call, const char *err, bool diag_musttail) Search at most CNT basic blocks (so that we don't need to do trivial loop discovery). */ static bool -empty_eh_cleanup (basic_block bb, int cnt) +empty_eh_cleanup (basic_block bb, int *eh_has_tsan_func_exit, int cnt) { if (EDGE_COUNT (bb->succs) > 1) return false; @@ -515,6 +520,14 @@ empty_eh_cleanup (basic_block bb, int cnt) gimple *g = gsi_stmt (gsi); if (is_gimple_debug (g) || gimple_clobber_p (g)) continue; + if (eh_has_tsan_func_exit + && !*eh_has_tsan_func_exit + && sanitize_flags_p (SANITIZE_THREAD) + && gimple_call_builtin_p (g, BUILT_IN_TSAN_FUNC_EXIT)) + { + *eh_has_tsan_func_exit = 1; + continue; + } if (is_gimple_resx (g) && stmt_can_throw_external (cfun, g)) return true; return false; @@ -523,7 +536,7 @@ empty_eh_cleanup (basic_block bb, int cnt) return false; if (cnt == 1) return false; - return empty_eh_cleanup (single_succ (bb), cnt - 1); + return empty_eh_cleanup (single_succ (bb), eh_has_tsan_func_exit, cnt - 1); } /* Argument for compute_live_vars/live_vars_at_stmt and what compute_live_vars @@ -531,14 +544,22 @@ empty_eh_cleanup (basic_block bb, int cnt) static live_vars_map *live_vars; static vec<bitmap_head> live_vars_vec; -/* Finds tailcalls falling into basic block BB. The list of found tailcalls is +/* Finds tailcalls falling into basic block BB. The list of found tailcalls is added to the start of RET. When ONLY_MUSTTAIL is set only handle musttail. Update OPT_TAILCALLS as output parameter. If DIAG_MUSTTAIL, diagnose - failures for musttail calls. */ + failures for musttail calls. RETRY_TSAN_FUNC_EXIT is initially 0 and + in that case the last call is attempted to be tail called, including + __tsan_func_exit with -fsanitize=thread. It is set to -1 if we + detect __tsan_func_exit call and in that case tree_optimize_tail_calls_1 + will retry with it set to 1 (regardless of whether turning the + __tsan_func_exit was successfully detected as tail call or not) and that + will allow turning musttail calls before that call into tail calls as well + by adding __tsan_func_exit call before the call. */ static void find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, - bool &opt_tailcalls, bool diag_musttail) + bool &opt_tailcalls, bool diag_musttail, + int &retry_tsan_func_exit) { tree ass_var = NULL_TREE, ret_var, func, param; gimple *stmt; @@ -552,6 +573,8 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, size_t idx; tree var; bool only_tailr = false; + bool has_tsan_func_exit = false; + int eh_has_tsan_func_exit = -1; if (!single_succ_p (bb) && (EDGE_COUNT (bb->succs) || !cfun->has_musttail || !diag_musttail)) @@ -585,6 +608,17 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, || is_gimple_debug (stmt)) continue; + if (cfun->has_musttail + && sanitize_flags_p (SANITIZE_THREAD) + && gimple_call_builtin_p (stmt, BUILT_IN_TSAN_FUNC_EXIT) + && diag_musttail) + { + if (retry_tsan_func_exit == 0) + retry_tsan_func_exit = -1; + else if (retry_tsan_func_exit == 1) + continue; + } + if (!last_stmt) last_stmt = stmt; /* Check for a call. */ @@ -596,9 +630,8 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, return; if (bad_stmt) { - maybe_error_musttail (call, - _("memory reference or volatile after " - "call"), diag_musttail); + maybe_error_musttail (call, _("memory reference or volatile " + "after call"), diag_musttail); return; } ass_var = gimple_call_lhs (call); @@ -636,7 +669,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, /* Recurse to the predecessors. */ FOR_EACH_EDGE (e, ei, bb->preds) find_tail_calls (e->src, ret, only_musttail, opt_tailcalls, - diag_musttail); + diag_musttail, retry_tsan_func_exit); return; } @@ -711,19 +744,22 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, if (!e) { - maybe_error_musttail (call, - _("call may throw exception that does not " - "propagate"), diag_musttail); + maybe_error_musttail (call, _("call may throw exception that does not " + "propagate"), diag_musttail); return; } + if (diag_musttail && gimple_call_must_tail_p (call)) + eh_has_tsan_func_exit = 0; if (!gimple_call_must_tail_p (call) - || !empty_eh_cleanup (e->dest, 20) + || !empty_eh_cleanup (e->dest, + eh_has_tsan_func_exit + ? NULL : &eh_has_tsan_func_exit, 20) || EDGE_COUNT (bb->succs) > 2) { - maybe_error_musttail (call, - _("call may throw exception caught locally " - "or perform cleanups"), diag_musttail); + maybe_error_musttail (call, _("call may throw exception caught " + "locally or perform cleanups"), + diag_musttail); return; } } @@ -854,9 +890,8 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, } if (local_live_vars) BITMAP_FREE (local_live_vars); - maybe_error_musttail (call, - _("call invocation refers to locals"), - diag_musttail); + maybe_error_musttail (call, _("call invocation refers to " + "locals"), diag_musttail); return; } else @@ -883,9 +918,8 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, continue; } BITMAP_FREE (local_live_vars); - maybe_error_musttail (call, - _("call invocation refers to locals"), - diag_musttail); + maybe_error_musttail (call, _("call invocation refers to " + "locals"), diag_musttail); return; } } @@ -951,6 +985,17 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, || is_gimple_debug (stmt)) continue; + if (cfun->has_musttail + && sanitize_flags_p (SANITIZE_THREAD) + && retry_tsan_func_exit == 1 + && gimple_call_builtin_p (stmt, BUILT_IN_TSAN_FUNC_EXIT) + && !has_tsan_func_exit + && gimple_call_must_tail_p (call)) + { + has_tsan_func_exit = true; + continue; + } + if (gimple_code (stmt) != GIMPLE_ASSIGN) { maybe_error_musttail (call, _("unhandled code after call"), @@ -1020,8 +1065,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, if (!VOID_TYPE_P (rettype) && !useless_type_conversion_p (rettype, calltype)) { - maybe_error_musttail (call, - _("call and return value are different"), + maybe_error_musttail (call, _("call and return value are different"), diag_musttail); return; } @@ -1092,8 +1136,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, } if (!ok) { - maybe_error_musttail (call, - _("call and return value are different"), + maybe_error_musttail (call, _("call and return value are different"), diag_musttail); return; } @@ -1103,18 +1146,29 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, multiplicands. */ if (!tail_recursion && (m || a)) { - maybe_error_musttail (call, - _("operations after non tail recursive call"), - diag_musttail); + maybe_error_musttail (call, _("operations after non tail recursive " + "call"), diag_musttail); return; } /* For pointers only allow additions. */ if (m && POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (current_function_decl)))) { - maybe_error_musttail (call, - _("tail recursion with pointers can only use " - "additions"), diag_musttail); + maybe_error_musttail (call, _("tail recursion with pointers can only " + "use additions"), diag_musttail); + return; + } + + if (eh_has_tsan_func_exit != -1 + && eh_has_tsan_func_exit != has_tsan_func_exit) + { + if (eh_has_tsan_func_exit) + maybe_error_musttail (call, _("call may throw exception caught " + "locally or perform cleanups"), + diag_musttail); + else + maybe_error_musttail (call, _("exception cleanups omit " + "__tsan_func_exit call"), diag_musttail); return; } @@ -1146,6 +1200,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret, bool only_musttail, nw->call_gsi = gsi; nw->tail_recursion = tail_recursion; + nw->has_tsan_func_exit = has_tsan_func_exit; nw->mult = m; nw->add = a; @@ -1480,6 +1535,14 @@ static bool optimize_tail_call (struct tailcall *t, bool opt_tailcalls, class loop *&new_loop) { + if (t->has_tsan_func_exit && (t->tail_recursion || opt_tailcalls)) + { + tree builtin_decl = builtin_decl_implicit (BUILT_IN_TSAN_FUNC_EXIT); + gimple *g = gimple_build_call (builtin_decl, 0); + gimple_set_location (g, cfun->function_end_locus); + gsi_insert_before (&t->call_gsi, g, GSI_SAME_STMT); + } + if (t->tail_recursion) { eliminate_tail_call (t, new_loop); @@ -1498,6 +1561,7 @@ optimize_tail_call (struct tailcall *t, bool opt_tailcalls, print_gimple_stmt (dump_file, stmt, 0, dump_flags); fprintf (dump_file, " in bb %i\n", (gsi_bb (t->call_gsi))->index); } + return t->has_tsan_func_exit; } return false; @@ -1547,12 +1611,23 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls, bool only_musttail, /* Only traverse the normal exits, i.e. those that end with return statement. */ if (safe_is_a <greturn *> (*gsi_last_bb (e->src))) - find_tail_calls (e->src, &tailcalls, only_musttail, opt_tailcalls, - diag_musttail); + { + int retry_tsan_func_exit = 0; + find_tail_calls (e->src, &tailcalls, only_musttail, opt_tailcalls, + diag_musttail, retry_tsan_func_exit); + if (retry_tsan_func_exit == -1) + { + retry_tsan_func_exit = 1; + find_tail_calls (e->src, &tailcalls, only_musttail, + opt_tailcalls, diag_musttail, + retry_tsan_func_exit); + } + } } if (cfun->has_musttail && diag_musttail) { basic_block bb; + int retry_tsan_func_exit = 0; FOR_EACH_BB_FN (bb, cfun) if (EDGE_COUNT (bb->succs) == 0 || (single_succ_p (bb) @@ -1562,7 +1637,7 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls, bool only_musttail, && gimple_call_must_tail_p (as_a <gcall *> (c)) && gimple_call_noreturn_p (as_a <gcall *> (c))) find_tail_calls (bb, &tailcalls, only_musttail, opt_tailcalls, - diag_musttail); + diag_musttail, retry_tsan_func_exit); } if (live_vars) @@ -1594,10 +1669,10 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls, bool only_musttail, struct tailcall *a = *p; *p = (*p)->next; gcall *call = as_a <gcall *> (gsi_stmt (a->call_gsi)); - maybe_error_musttail (call, - _("tail recursion with accumulation " - "mixed with musttail " - "non-recursive call"), diag_musttail); + maybe_error_musttail (call, _("tail recursion with " + "accumulation mixed with " + "musttail non-recursive call"), + diag_musttail); free (a); } else diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 9413dce..1c9e9b0 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -653,6 +653,10 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop, if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "Detected induction.\n"); STMT_VINFO_DEF_TYPE (stmt_vinfo) = vect_induction_def; + + /* Mark if we have a non-linear IV. */ + LOOP_VINFO_NON_LINEAR_IV (loop_vinfo) + = STMT_VINFO_LOOP_PHI_EVOLUTION_TYPE (stmt_vinfo) != vect_step_op_add; } @@ -1046,12 +1050,14 @@ _loop_vec_info::_loop_vec_info (class loop *loop_in, vec_info_shared *shared) suggested_unroll_factor (1), max_vectorization_factor (0), mask_skip_niters (NULL_TREE), + mask_skip_niters_pfa_offset (NULL_TREE), rgroup_compare_type (NULL_TREE), simd_if_cond (NULL_TREE), partial_vector_style (vect_partial_vectors_none), unaligned_dr (NULL), peeling_for_alignment (0), ptr_mask (0), + nonlinear_iv (false), ivexpr_map (NULL), scan_map (NULL), slp_unrolling_factor (1), @@ -10053,7 +10059,7 @@ vect_update_nonlinear_iv (gimple_seq* stmts, tree vectype, } -/* Function vectorizable_induction +/* Function vectorizable_nonlinear_induction Check if STMT_INFO performs an nonlinear induction computation that can be vectorized. If VEC_STMT is also passed, vectorize the induction PHI: create @@ -10402,6 +10408,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, poly_uint64 vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo); unsigned i; tree expr; + tree index_vectype = NULL_TREE; gimple_stmt_iterator si; enum vect_induction_op_type induction_type = STMT_VINFO_LOOP_PHI_EVOLUTION_TYPE (stmt_info); @@ -10513,12 +10520,29 @@ vectorizable_induction (loop_vec_info loop_vinfo, "supported.\n"); return false; } - tree step_vectype = get_same_sized_vectype (TREE_TYPE (step_expr), vectype); + tree stept = TREE_TYPE (step_expr); + tree step_vectype = get_same_sized_vectype (stept, vectype); - /* Check for backend support of PLUS/MINUS_EXPR. */ - if (!directly_supported_p (PLUS_EXPR, step_vectype) - || !directly_supported_p (MINUS_EXPR, step_vectype)) - return false; + /* Check for target support of the vectorized arithmetic used here. */ + if (!target_supports_op_p (step_vectype, PLUS_EXPR, optab_default) + || !target_supports_op_p (step_vectype, MINUS_EXPR, optab_default)) + return false; + if (!nunits.is_constant ()) + { + if (!target_supports_op_p (step_vectype, MULT_EXPR, optab_default)) + return false; + /* FLOAT_EXPR when computing VEC_INIT for float inductions. */ + if (SCALAR_FLOAT_TYPE_P (stept)) + { + tree index_type = build_nonstandard_integer_type + (GET_MODE_BITSIZE (SCALAR_TYPE_MODE (stept)), 1); + + index_vectype = build_vector_type (index_type, nunits); + if (!can_float_p (TYPE_MODE (step_vectype), + TYPE_MODE (index_vectype), 1)) + return false; + } + } if (!vec_stmt) /* transformation not required. */ { @@ -10637,7 +10661,6 @@ vectorizable_induction (loop_vec_info loop_vinfo, nivs = 1; } gimple_seq init_stmts = NULL; - tree stept = TREE_TYPE (step_vectype); tree lupdate_mul = NULL_TREE; if (!nested_in_vect_loop) { @@ -10678,6 +10701,54 @@ vectorizable_induction (loop_vec_info loop_vinfo, LOOP_VINFO_MASK_SKIP_NITERS (loop_vinfo)); peel_mul = gimple_build_vector_from_val (&init_stmts, step_vectype, peel_mul); + + /* If early break then we have to create a new PHI which we can use as + an offset to adjust the induction reduction in early exits. + + This is because when peeling for alignment using masking, the first + few elements of the vector can be inactive. As such if we find the + entry in the first iteration we have adjust the starting point of + the scalar code. + + We do this by creating a new scalar PHI that keeps track of whether + we are the first iteration of the loop (with the additional masking) + or whether we have taken a loop iteration already. + + The generated sequence: + + pre-header: + bb1: + i_1 = <number of leading inactive elements> + + header: + bb2: + i_2 = PHI <i_1(bb1), 0(latch)> + … + + early-exit: + bb3: + i_3 = iv_step * i_2 + PHI<vector-iv> + + The first part of the adjustment to create i_1 and i_2 are done here + and the last part creating i_3 is done in + vectorizable_live_operations when the induction extraction is + materialized. */ + if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo) + && !LOOP_VINFO_MASK_NITERS_PFA_OFFSET (loop_vinfo)) + { + auto skip_niters = LOOP_VINFO_MASK_SKIP_NITERS (loop_vinfo); + tree ty_skip_niters = TREE_TYPE (skip_niters); + tree break_lhs_phi = vect_get_new_vect_var (ty_skip_niters, + vect_scalar_var, + "pfa_iv_offset"); + gphi *nphi = create_phi_node (break_lhs_phi, bb); + add_phi_arg (nphi, skip_niters, pe, UNKNOWN_LOCATION); + add_phi_arg (nphi, build_zero_cst (ty_skip_niters), + loop_latch_edge (iv_loop), UNKNOWN_LOCATION); + + LOOP_VINFO_MASK_NITERS_PFA_OFFSET (loop_vinfo) + = PHI_RESULT (nphi); + } } tree step_mul = NULL_TREE; unsigned ivn; @@ -10741,7 +10812,9 @@ vectorizable_induction (loop_vec_info loop_vinfo, + (vectype) [0, 1, 2, ...] * [step, step, step, ...]. */ gcc_assert (SCALAR_FLOAT_TYPE_P (TREE_TYPE (steps[0]))); gcc_assert (flag_associative_math); - tree index = build_index_vector (step_vectype, 0, 1); + gcc_assert (index_vectype != NULL_TREE); + + tree index = build_index_vector (index_vectype, 0, 1); new_name = gimple_convert (&init_stmts, TREE_TYPE (steps[0]), inits[0]); tree base_vec = gimple_build_vector_from_val (&init_stmts, @@ -11016,7 +11089,9 @@ vectorizable_induction (loop_vec_info loop_vinfo, + (vectype) [0, 1, 2, ...] * [step, step, step, ...]. */ gcc_assert (SCALAR_FLOAT_TYPE_P (TREE_TYPE (step_expr))); gcc_assert (flag_associative_math); - tree index = build_index_vector (step_vectype, 0, 1); + gcc_assert (index_vectype != NULL_TREE); + + tree index = build_index_vector (index_vectype, 0, 1); tree base_vec = gimple_build_vector_from_val (&stmts, step_vectype, new_name); tree step_vec = gimple_build_vector_from_val (&stmts, step_vectype, @@ -11565,8 +11640,10 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, /* For early exit where the exit is not in the BB that leads to the latch then we're restarting the iteration in the scalar loop. So get the first live value. */ - if ((all_exits_as_early_p || !main_exit_edge) - && STMT_VINFO_DEF_TYPE (stmt_info) == vect_induction_def) + bool early_break_first_element_p + = (all_exits_as_early_p || !main_exit_edge) + && STMT_VINFO_DEF_TYPE (stmt_info) == vect_induction_def; + if (early_break_first_element_p) { tmp_vec_lhs = vec_lhs0; tmp_bitstart = build_zero_cst (TREE_TYPE (bitstart)); @@ -11581,6 +11658,45 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, lhs_type, &exit_gsi); auto gsi = gsi_for_stmt (use_stmt); + if (early_break_first_element_p + && LOOP_VINFO_MASK_NITERS_PFA_OFFSET (loop_vinfo)) + { + tree step_expr + = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (stmt_info); + tree break_lhs_phi + = LOOP_VINFO_MASK_NITERS_PFA_OFFSET (loop_vinfo); + tree ty_skip_niters = TREE_TYPE (break_lhs_phi); + gimple_seq iv_stmts = NULL; + + /* Now create the PHI for the outside loop usage to + retrieve the value for the offset counter. */ + tree rphi_step + = gimple_convert (&iv_stmts, ty_skip_niters, step_expr); + tree tmp2 + = gimple_build (&iv_stmts, MULT_EXPR, + ty_skip_niters, rphi_step, + break_lhs_phi); + + if (POINTER_TYPE_P (TREE_TYPE (new_tree))) + { + tmp2 = gimple_convert (&iv_stmts, sizetype, tmp2); + tmp2 = gimple_build (&iv_stmts, POINTER_PLUS_EXPR, + TREE_TYPE (new_tree), new_tree, + tmp2); + } + else + { + tmp2 = gimple_convert (&iv_stmts, TREE_TYPE (new_tree), + tmp2); + tmp2 = gimple_build (&iv_stmts, PLUS_EXPR, + TREE_TYPE (new_tree), new_tree, + tmp2); + } + + new_tree = tmp2; + gsi_insert_seq_before (&exit_gsi, iv_stmts, GSI_SAME_STMT); + } + tree lhs_phi = gimple_phi_result (use_stmt); remove_phi_node (&gsi, false); gimple *copy = gimple_build_assign (lhs_phi, new_tree); diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index ecb4a65..19beeed 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1099,7 +1099,7 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, tree first_lhs = NULL_TREE; tree first_op1 = NULL_TREE; stmt_vec_info first_load = NULL, prev_first_load = NULL; - bool first_stmt_ldst_p = false; + bool first_stmt_ldst_p = false, first_stmt_ldst_masklen_p = false; bool first_stmt_phi_p = false; int first_reduc_idx = -1; bool maybe_soft_fail = false; @@ -1133,6 +1133,7 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, FOR_EACH_VEC_ELT (stmts, i, stmt_info) { bool ldst_p = false; + bool ldst_masklen_p = false; bool phi_p = false; code_helper rhs_code = ERROR_MARK; @@ -1195,17 +1196,22 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, else rhs_code = CALL_EXPR; - if (cfn == CFN_MASK_LOAD - || cfn == CFN_GATHER_LOAD - || cfn == CFN_MASK_GATHER_LOAD - || cfn == CFN_MASK_LEN_GATHER_LOAD - || cfn == CFN_SCATTER_STORE - || cfn == CFN_MASK_SCATTER_STORE - || cfn == CFN_MASK_LEN_SCATTER_STORE) + if (cfn == CFN_GATHER_LOAD + || cfn == CFN_SCATTER_STORE) ldst_p = true; + else if (cfn == CFN_MASK_LOAD + || cfn == CFN_MASK_GATHER_LOAD + || cfn == CFN_MASK_LEN_GATHER_LOAD + || cfn == CFN_MASK_SCATTER_STORE + || cfn == CFN_MASK_LEN_SCATTER_STORE) + { + ldst_p = true; + ldst_masklen_p = true; + } else if (cfn == CFN_MASK_STORE) { ldst_p = true; + ldst_masklen_p = true; rhs_code = CFN_MASK_STORE; } else if (cfn == CFN_GOMP_SIMD_LANE) @@ -1246,6 +1252,7 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, first_lhs = lhs; first_stmt_code = rhs_code; first_stmt_ldst_p = ldst_p; + first_stmt_ldst_masklen_p = ldst_masklen_p; first_stmt_phi_p = phi_p; first_reduc_idx = STMT_VINFO_REDUC_IDX (stmt_info); @@ -1364,6 +1371,7 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, && (STMT_VINFO_GATHER_SCATTER_P (stmt_info) != STMT_VINFO_GATHER_SCATTER_P (first_stmt_info))) || first_stmt_ldst_p != ldst_p + || (ldst_p && first_stmt_ldst_masklen_p != ldst_masklen_p) || first_stmt_phi_p != phi_p) { if (dump_enabled_p ()) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 7f87435..5af1973 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -13615,29 +13615,23 @@ vectorizable_early_exit (vec_info *vinfo, stmt_vec_info stmt_info, codegen so we must replace the original insn. */ gimple *orig_stmt = STMT_VINFO_STMT (vect_orig_stmt (stmt_info)); gcond *cond_stmt = as_a <gcond *>(orig_stmt); + + tree cst = build_zero_cst (vectype); + auto bb = gimple_bb (cond_stmt); + edge exit_true_edge = EDGE_SUCC (bb, 0); + if (exit_true_edge->flags & EDGE_FALSE_VALUE) + exit_true_edge = EDGE_SUCC (bb, 1); + gcc_assert (exit_true_edge->flags & EDGE_TRUE_VALUE); + /* When vectorizing we assume that if the branch edge is taken that we're exiting the loop. This is not however always the case as the compiler will rewrite conditions to always be a comparison against 0. To do this it sometimes flips the edges. This is fine for scalar, but for vector we - then have to flip the test, as we're still assuming that if you take the - branch edge that we found the exit condition. i.e. we need to know whether - we are generating a `forall` or an `exist` condition. */ - auto new_code = NE_EXPR; - auto reduc_optab = ior_optab; - auto reduc_op = BIT_IOR_EXPR; - tree cst = build_zero_cst (vectype); - edge exit_true_edge = EDGE_SUCC (gimple_bb (cond_stmt), 0); - if (exit_true_edge->flags & EDGE_FALSE_VALUE) - exit_true_edge = EDGE_SUCC (gimple_bb (cond_stmt), 1); - gcc_assert (exit_true_edge->flags & EDGE_TRUE_VALUE); - if (flow_bb_inside_loop_p (LOOP_VINFO_LOOP (loop_vinfo), - exit_true_edge->dest)) - { - new_code = EQ_EXPR; - reduc_optab = and_optab; - reduc_op = BIT_AND_EXPR; - cst = build_minus_one_cst (vectype); - } + then have to negate the result of the test, as we're still assuming that if + you take the branch edge that we found the exit condition. i.e. we need to + know whether we are generating a `forall` or an `exist` condition. */ + bool flipped = flow_bb_inside_loop_p (LOOP_VINFO_LOOP (loop_vinfo), + exit_true_edge->dest); /* Analyze only. */ if (!vec_stmt) @@ -13653,14 +13647,13 @@ vectorizable_early_exit (vec_info *vinfo, stmt_vec_info stmt_info, } if (ncopies > 1 - && direct_optab_handler (reduc_optab, mode) == CODE_FOR_nothing) + && direct_optab_handler (ior_optab, mode) == CODE_FOR_nothing) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "can't vectorize early exit because the " - "target does not support boolean vector %s " + "target does not support boolean vector IOR " "for type %T.\n", - reduc_optab == ior_optab ? "OR" : "AND", vectype); return false; } @@ -13720,6 +13713,29 @@ vectorizable_early_exit (vec_info *vinfo, stmt_vec_info stmt_info, stmts.quick_push (gimple_assign_lhs (stmt)); } + /* If we're comparing against a previous forall we need to negate the resullts + before we do the final comparison or reduction. */ + if (flipped) + { + /* Rewrite the if(all(mask)) into if (!all(mask)) which is the same as + if (any(~mask)) by negating the masks and flipping the branches. + + 1. For unmasked loops we simply reduce the ~mask. + 2. For masked loops we reduce (~mask & loop_mask) which is the same as + doing (mask & loop_mask) ^ loop_mask. */ + for (unsigned i = 0; i < stmts.length (); i++) + { + tree inv_lhs = make_temp_ssa_name (vectype, NULL, "vexit_inv"); + auto inv_stmt = gimple_build_assign (inv_lhs, BIT_NOT_EXPR, stmts[i]); + vect_finish_stmt_generation (loop_vinfo, stmt_info, inv_stmt, + &cond_gsi); + stmts[i] = inv_lhs; + } + + EDGE_SUCC (bb, 0)->flags ^= (EDGE_TRUE_VALUE|EDGE_FALSE_VALUE); + EDGE_SUCC (bb, 1)->flags ^= (EDGE_TRUE_VALUE|EDGE_FALSE_VALUE); + } + /* Determine if we need to reduce the final value. */ if (stmts.length () > 1) { @@ -13758,7 +13774,7 @@ vectorizable_early_exit (vec_info *vinfo, stmt_vec_info stmt_info, new_temp = make_temp_ssa_name (vectype, NULL, "vexit_reduc"); tree arg0 = workset.pop (); tree arg1 = workset.pop (); - new_stmt = gimple_build_assign (new_temp, reduc_op, arg0, arg1); + new_stmt = gimple_build_assign (new_temp, BIT_IOR_EXPR, arg0, arg1); vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, &cond_gsi); workset.quick_insert (0, new_temp); @@ -13781,7 +13797,7 @@ vectorizable_early_exit (vec_info *vinfo, stmt_vec_info stmt_info, gcc_assert (new_temp); - gimple_cond_set_condition (cond_stmt, new_code, new_temp, cst); + gimple_cond_set_condition (cond_stmt, NE_EXPR, new_temp, cst); update_stmt (orig_stmt); if (slp_node) diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 97caf61..01d19c7 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -818,6 +818,11 @@ public: elements that should be false in the first mask). */ tree mask_skip_niters; + /* If we are using a loop mask to align memory addresses and we're in an + early break loop then this variable contains the number of elements that + were skipped during the initial iteration of the loop. */ + tree mask_skip_niters_pfa_offset; + /* The type that the loop control IV should be converted to before testing which of the VF scalars are active and inactive. Only meaningful if LOOP_VINFO_USING_PARTIAL_VECTORS_P. */ @@ -854,6 +859,9 @@ public: /* The mask used to check the alignment of pointers or arrays. */ int ptr_mask; + /* Indicates whether the loop has any non-linear IV. */ + bool nonlinear_iv; + /* Data Dependence Relations defining address ranges that are candidates for a run-time aliasing check. */ auto_vec<ddr_p> may_alias_ddrs; @@ -1064,6 +1072,7 @@ public: #define LOOP_VINFO_MASKS(L) (L)->masks #define LOOP_VINFO_LENS(L) (L)->lens #define LOOP_VINFO_MASK_SKIP_NITERS(L) (L)->mask_skip_niters +#define LOOP_VINFO_MASK_NITERS_PFA_OFFSET(L) (L)->mask_skip_niters_pfa_offset #define LOOP_VINFO_RGROUP_COMPARE_TYPE(L) (L)->rgroup_compare_type #define LOOP_VINFO_RGROUP_IV_TYPE(L) (L)->rgroup_iv_type #define LOOP_VINFO_PARTIAL_VECTORS_STYLE(L) (L)->partial_vector_style @@ -1073,6 +1082,7 @@ public: #define LOOP_VINFO_DDRS(L) (L)->shared->ddrs #define LOOP_VINFO_INT_NITERS(L) (TREE_INT_CST_LOW ((L)->num_iters)) #define LOOP_VINFO_PEELING_FOR_ALIGNMENT(L) (L)->peeling_for_alignment +#define LOOP_VINFO_NON_LINEAR_IV(L) (L)->nonlinear_iv #define LOOP_VINFO_UNALIGNED_DR(L) (L)->unaligned_dr #define LOOP_VINFO_MAY_MISALIGN_STMTS(L) (L)->may_misalign_stmts #define LOOP_VINFO_MAY_ALIAS_DDRS(L) (L)->may_alias_ddrs @@ -2138,8 +2148,14 @@ unlimited_cost_model (loop_p loop) inline bool vect_use_loop_mask_for_alignment_p (loop_vec_info loop_vinfo) { + /* With early break vectorization we don't know whether the accesses will stay + inside the loop or not. TODO: The early break adjustment code can be + implemented the same way as vectorizable_linear_induction. However we + can't test this today so reject it. */ return (LOOP_VINFO_FULLY_MASKED_P (loop_vinfo) - && LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo)); + && LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) + && !(LOOP_VINFO_NON_LINEAR_IV (loop_vinfo) + && LOOP_VINFO_EARLY_BREAKS (loop_vinfo))); } /* Return the number of vectors of type VECTYPE that are needed to get diff --git a/gcc/tree.def b/gcc/tree.def index c4ad8d0..2c37e44 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -135,7 +135,11 @@ DEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0) DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0) /* Boolean type (true or false are the only values). Looks like an - INTEGRAL_TYPE. */ + INTEGER_TYPE, but must be dealt with specially because TYPE_PRECISION + may be arbitrary despite the restricted set of valid values (in other + words, boolean types with TYPE_PRECISION > 1 exist in some languages). + Similarly, TYPE_UNSIGNED may be false for components of vector masks, + as well as for boolean types in languages other than C. */ DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0) /* Integer types in all languages, including char in C. @@ -2395,11 +2395,11 @@ public: array_slice (vec<OtherT, A, vl_embed> *v) : m_base (v ? v->address () : nullptr), m_size (v ? v->length () : 0) {} - iterator begin () { return m_base; } - iterator end () { return m_base + m_size; } + iterator begin () { gcc_checking_assert (is_valid ()); return m_base; } + iterator end () { gcc_checking_assert (is_valid ()); return m_base + m_size; } - const_iterator begin () const { return m_base; } - const_iterator end () const { return m_base + m_size; } + const_iterator begin () const { gcc_checking_assert (is_valid ()); return m_base; } + const_iterator end () const { gcc_checking_assert (is_valid ()); return m_base + m_size; } value_type &front (); value_type &back (); diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index ac7e729..62e6c4e 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,23 @@ +2025-04-16 Jakub Jelinek <jakub@redhat.com> + + PR libgcc/101075 + PR libgcc/119796 + * config/mingw/lock.c (libat_lock_n, libat_unlock_n): Start with + computing how many locks will be needed and take into account + ((uintptr_t)ptr % WATCH_SIZE). If some locks from the end of the + locks array and others from the start of it will be needed, first + lock the ones from the start followed by ones from the end. + +2025-04-16 Jakub Jelinek <jakub@redhat.com> + + PR libgcc/101075 + PR libgcc/119796 + * config/posix/lock.c (libat_lock_n, libat_unlock_n): Start with + computing how many locks will be needed and take into account + ((uintptr_t)ptr % WATCH_SIZE). If some locks from the end of the + locks array and others from the start of it will be needed, first + lock the ones from the start followed by ones from the end. + 2025-01-10 Wilco Dijkstra <wilco.dijkstra@arm.com> * config/linux/aarch64/host-config.h (has_lse2): Cleanup. diff --git a/libatomic/config/mingw/lock.c b/libatomic/config/mingw/lock.c index 17faa66..8b0b4dd 100644 --- a/libatomic/config/mingw/lock.c +++ b/libatomic/config/mingw/lock.c @@ -87,21 +87,30 @@ libat_lock_n (void *ptr, size_t n) { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; /* Don't lock more than all the locks we have. */ - if (n > PAGE_SIZE) - n = PAGE_SIZE; + if (nlocks > NLOCKS) + nlocks = NLOCKS; - do + if (__builtin_expect (h + nlocks > NLOCKS, 0)) + { + size_t j = h + nlocks - NLOCKS; + for (; i < j; ++i) + { + if (!locks[i].mutex) + locks[i].mutex = CreateMutex (NULL, FALSE, NULL); + WaitForSingleObject (locks[i].mutex, INFINITE); + } + } + + for (; i < nlocks; ++i) { if (!locks[h].mutex) - locks[h].mutex = CreateMutex (NULL, FALSE, NULL); - WaitForSingleObject (locks[h].mutex, INFINITE); - if (++h == NLOCKS) - h = 0; - i += WATCH_SIZE; + locks[h].mutex = CreateMutex (NULL, FALSE, NULL); + WaitForSingleObject (locks[h++].mutex, INFINITE); } - while (i < n); } void @@ -109,17 +118,22 @@ libat_unlock_n (void *ptr, size_t n) { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; - if (n > PAGE_SIZE) - n = PAGE_SIZE; + /* Don't lock more than all the locks we have. */ + if (nlocks > NLOCKS) + nlocks = NLOCKS; - do + if (__builtin_expect (h + nlocks > NLOCKS, 0)) { - if (locks[h].mutex) - ReleaseMutex (locks[h].mutex); - if (++h == NLOCKS) - h = 0; - i += WATCH_SIZE; + size_t j = h + nlocks - NLOCKS; + for (; i < j; ++i) + if (locks[i].mutex) + ReleaseMutex (locks[i].mutex); } - while (i < n); + + for (; i < nlocks; ++i, ++h) + if (locks[h].mutex) + ReleaseMutex (locks[h].mutex); } diff --git a/libatomic/config/posix/lock.c b/libatomic/config/posix/lock.c index 6ee4240..5662b77 100644 --- a/libatomic/config/posix/lock.c +++ b/libatomic/config/posix/lock.c @@ -81,19 +81,22 @@ libat_lock_n (void *ptr, size_t n) { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; /* Don't lock more than all the locks we have. */ - if (n > PAGE_SIZE) - n = PAGE_SIZE; + if (nlocks > NLOCKS) + nlocks = NLOCKS; - do + if (__builtin_expect (h + nlocks > NLOCKS, 0)) { - pthread_mutex_lock (&locks[h].mutex); - if (++h == NLOCKS) - h = 0; - i += WATCH_SIZE; + size_t j = h + nlocks - NLOCKS; + for (; i < j; ++i) + pthread_mutex_lock (&locks[i].mutex); } - while (i < n); + + for (; i < nlocks; ++i) + pthread_mutex_lock (&locks[h++].mutex); } void @@ -101,16 +104,20 @@ libat_unlock_n (void *ptr, size_t n) { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; - if (n > PAGE_SIZE) - n = PAGE_SIZE; + /* Don't lock more than all the locks we have. */ + if (nlocks > NLOCKS) + nlocks = NLOCKS; - do + if (__builtin_expect (h + nlocks > NLOCKS, 0)) { - pthread_mutex_unlock (&locks[h].mutex); - if (++h == NLOCKS) - h = 0; - i += WATCH_SIZE; + size_t j = h + nlocks - NLOCKS; + for (; i < j; ++i) + pthread_mutex_unlock (&locks[i].mutex); } - while (i < n); + + for (; i < nlocks; ++i) + pthread_mutex_unlock (&locks[h++].mutex); } diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog index f1a7efa..87abec9 100644 --- a/libbacktrace/ChangeLog +++ b/libbacktrace/ChangeLog @@ -1,3 +1,8 @@ +2025-04-10 John David Anglin <danglin@gcc.gnu.org> + + * fileline.c (hpux_get_executable_path): New. + (fileline_initialize): Add pass to get hpux executable path. + 2025-04-09 Richard Biener <rguenther@suse.de> PR bootstrap/119680 diff --git a/libcpp/lex.cc b/libcpp/lex.cc index 2d02ce6..e7705a6 100644 --- a/libcpp/lex.cc +++ b/libcpp/lex.cc @@ -2711,8 +2711,9 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base) || c == '!' || c == '=' || c == ',' || c == '"' || c == '\'' || ((c == '$' || c == '@' || c == '`') - && CPP_OPTION (pfile, cplusplus) - && CPP_OPTION (pfile, lang) > CLK_CXX23))) + && (CPP_OPTION (pfile, cplusplus) + ? CPP_OPTION (pfile, lang) > CLK_CXX23 + : CPP_OPTION (pfile, low_ucns))))) prefix[prefix_len++] = c; else { diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 9df44ba..66feed5 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,83 @@ +2025-04-19 Jiaxun Yang <jiaxun.yang@flygoat.com> + + PR target/118257 + * config/sh/sfp-machine.h (_FPU_GETCW): Implement with builtin. + (_FPU_SETCW): Likewise. + (FP_EX_ENABLE_SHIFT): Derive from arch spec. + (FP_EX_CAUSE_SHIFT): Likewise. + (FP_RND_MASK): Likewise. + (FP_EX_INVALID): Likewise. + (FP_EX_DIVZERO): Likewise. + (FP_EX_ALL): Likewise. + (FP_EX_OVERFLOW): Likewise. + (FP_EX_UNDERFLOW): Likewise. + (FP_EX_INEXACT): Likewise. + (_FP_DECL_EX): Declear default FCSR value. + (FP_RND_NEAREST): Derive from arch spec. + (FP_RND_ZERO): Likewise. + (FP_INIT_ROUNDMODE): Likewise. + (FP_ROUNDMODE): Likewise. + (FP_TRAPPING_EXCEPTIONS): Likewise. + (FP_HANDLE_EXCEPTIONS): Implement with _FPU_SETCW. + +2025-04-19 Jiaxun Yang <jiaxun.yang@flygoat.com> + + PR target/111814 + * config/sh/sfp-machine.h (_FP_NANFRAC_B): Reverse signaling bit. + (_FP_NANFRAC_H): Likewise. + (_FP_NANFRAC_S): Likewise. + (_FP_NANFRAC_D): Likewise. + (_FP_NANFRAC_Q): Likewise. + (_FP_KEEPNANFRACP): Enable for target. + (_FP_QNANNEGATEDP): Enable for target. + (_FP_CHOOSENAN): Port from MIPS. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/118794 + * config/gcn/unwind-gcn.c (_Unwind_Resume): New. + * config/nvptx/unwind-nvptx.c (_Unwind_Resume): Likewise. + +2025-04-14 Eric Botcazou <ebotcazou@adacore.com> + + PR target/119673 + * config/i386/gthr-win32.h (__GTHREAD_ALWAYS_INLINE): New macro. + (__GTHREAD_INLINE): Likewise. + (__GTHR_W32_InterlockedCompareExchange): Delete. + (__gthread_active_p): Mark as __GTHREAD_INLINE instead of + static inline. + (__gthread_create): Likewise. + (__gthread_join): Likewise. + (__gthread_self): Likewise. + (__gthread_detach): Likewise. + (__gthread_equal): Likewise. + (__gthread_yield): Likewise. + (__gthread_once): Likewise. + (__gthread_key_create): Likewise. + (__gthread_key_delete): Likewise. + (__gthread_getspecific): Likewise. + (__gthread_setspecific): Likewise. + (__gthread_mutex_init_function): Likewise. + (__gthread_mutex_destroy): Likewise. + (__gthread_mutex_lock): Likewise. + (__gthread_mutex_trylock): Likewise. + (__gthread_mutex_timedlock): Likewise. + (__gthread_mutex_unlock): Likewise. + (__gthread_recursive_mutex_trylock): Likewise. + (__gthread_cond_init_function): Likewise. + (__gthread_cond_broadcast): Likewise. + (__gthread_cond_signal): Likewise. + (__gthread_cond_wait): Likewise. + (__gthread_cond_timedwait): Likewise. + (__GTHREAD_WIN32_INLINE): Likewise. + (__GTHREAD_WIN32_COND_INLINE): Likewise. + (__gthread_recursive_mutex_init_function): Likewise. + (__gthread_recursive_mutex_destroy): Likewise. + (__gthread_recursive_mutex_lock): Likewise. + (__gthread_recursive_mutex_unlock): Likewise. + (__gthread_cond_destroy): Likewise. + (__gthread_cond_wait_recursive): Likewise. + 2025-04-08 Thomas Schwinge <tschwinge@baylibre.com> * config/gcn/unwind-gcn.c (_Unwind_RaiseException) diff --git a/libgcc/config/gcn/unwind-gcn.c b/libgcc/config/gcn/unwind-gcn.c index eae741c..97e22c0 100644 --- a/libgcc/config/gcn/unwind-gcn.c +++ b/libgcc/config/gcn/unwind-gcn.c @@ -38,6 +38,12 @@ _Unwind_DeleteException (struct _Unwind_Exception *exc) (*exc->exception_cleanup) (_URC_FOREIGN_EXCEPTION_CAUGHT, exc); } +void +_Unwind_Resume (struct _Unwind_Exception *exc __attribute__ ((__unused__))) +{ + __builtin_abort (); +} + _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exc __attribute__ ((__unused__))) { diff --git a/libgcc/config/i386/gthr-win32.h b/libgcc/config/i386/gthr-win32.h index 98e11b4..34988d4 100644 --- a/libgcc/config/i386/gthr-win32.h +++ b/libgcc/config/i386/gthr-win32.h @@ -71,6 +71,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #error Timed lock primitives are not supported on Windows targets #endif +#ifdef __has_attribute +# if __has_attribute(__always_inline__) +# define __GTHREAD_ALWAYS_INLINE __attribute__((__always_inline__)) +# endif +#endif +#ifndef __GTHREAD_ALWAYS_INLINE +# define __GTHREAD_ALWAYS_INLINE +#endif + +#ifdef __cplusplus +# define __GTHREAD_INLINE inline __GTHREAD_ALWAYS_INLINE +#else +# define __GTHREAD_INLINE static inline +#endif + /* Make sure CONST_CAST2 (origin in system.h) is declared. */ #ifndef CONST_CAST2 #ifdef __cplusplus @@ -398,11 +413,7 @@ extern int _CRT_MT; extern int __mingwthr_key_dtor (unsigned long, void (*) (void *)); #endif /* _WIN32 && !__CYGWIN__ */ -/* __GTHR_W32_InterlockedCompareExchange is left over from win95, - which did not support InterlockedCompareExchange. */ -#define __GTHR_W32_InterlockedCompareExchange InterlockedCompareExchange - -static inline int +__GTHREAD_INLINE int __gthread_active_p (void) { #ifdef MINGW32_SUPPORTS_MT_EH @@ -438,20 +449,20 @@ extern int __gthr_win32_cond_timedwait (__gthread_cond_t *, __gthread_mutex_t *, const __gthread_time_t *); #endif -static inline int +__GTHREAD_INLINE int __gthread_create (__gthread_t *__thr, void *(*__func) (void*), void *__args) { return __gthr_win32_create (__thr, __func, __args); } -static inline int +__GTHREAD_INLINE int __gthread_join (__gthread_t __thr, void **__value_ptr) { return __gthr_win32_join (__thr, __value_ptr); } -static inline __gthread_t +__GTHREAD_INLINE __gthread_t __gthread_self (void) { return __gthr_win32_self (); @@ -463,25 +474,25 @@ __gthread_self (void) Only stubs are exposed to avoid polluting the C++ namespace with Win32 API definitions. */ -static inline int +__GTHREAD_INLINE int __gthread_detach (__gthread_t __thr) { return __gthr_win32_detach (__thr); } -static inline int +__GTHREAD_INLINE int __gthread_equal (__gthread_t __thr1, __gthread_t __thr2) { return __gthr_win32_equal (__thr1, __thr2); } -static inline int +__GTHREAD_INLINE int __gthread_yield (void) { return __gthr_win32_yield (); } -static inline int +__GTHREAD_INLINE int __gthread_once (__gthread_once_t *__once, void (*__func) (void)) { if (__gthread_active_p ()) @@ -490,43 +501,43 @@ __gthread_once (__gthread_once_t *__once, void (*__func) (void)) return -1; } -static inline int +__GTHREAD_INLINE int __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) { return __gthr_win32_key_create (__key, __dtor); } -static inline int +__GTHREAD_INLINE int __gthread_key_delete (__gthread_key_t __key) { return __gthr_win32_key_delete (__key); } -static inline void * +__GTHREAD_INLINE void * __gthread_getspecific (__gthread_key_t __key) { return __gthr_win32_getspecific (__key); } -static inline int +__GTHREAD_INLINE int __gthread_setspecific (__gthread_key_t __key, const void *__ptr) { return __gthr_win32_setspecific (__key, __ptr); } -static inline void +__GTHREAD_INLINE void __gthread_mutex_init_function (__gthread_mutex_t *__mutex) { __gthr_win32_mutex_init_function (__mutex); } -static inline void +__GTHREAD_INLINE void __gthread_mutex_destroy (__gthread_mutex_t *__mutex) { __gthr_win32_mutex_destroy (__mutex); } -static inline int +__GTHREAD_INLINE int __gthread_mutex_lock (__gthread_mutex_t *__mutex) { if (__gthread_active_p ()) @@ -535,7 +546,7 @@ __gthread_mutex_lock (__gthread_mutex_t *__mutex) return 0; } -static inline int +__GTHREAD_INLINE int __gthread_mutex_trylock (__gthread_mutex_t *__mutex) { if (__gthread_active_p ()) @@ -544,7 +555,7 @@ __gthread_mutex_trylock (__gthread_mutex_t *__mutex) return 0; } -static inline int +__GTHREAD_INLINE int __gthread_mutex_unlock (__gthread_mutex_t *__mutex) { if (__gthread_active_p ()) @@ -553,7 +564,7 @@ __gthread_mutex_unlock (__gthread_mutex_t *__mutex) return 0; } -static inline int +__GTHREAD_INLINE int __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) { if (__gthread_active_p ()) @@ -564,31 +575,31 @@ __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) #if __GTHREAD_HAS_COND -static inline void +__GTHREAD_INLINE void __gthread_cond_init_function (__gthread_cond_t *__cond) { __gthr_win32_cond_init_function (__cond); } -static inline int +__GTHREAD_INLINE int __gthread_cond_broadcast (__gthread_cond_t *__cond) { return __gthr_win32_cond_broadcast (__cond); } -static inline int +__GTHREAD_INLINE int __gthread_cond_signal (__gthread_cond_t *__cond) { return __gthr_win32_cond_signal (__cond); } -static inline int +__GTHREAD_INLINE int __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) { return __gthr_win32_cond_wait (__cond, __mutex); } -static inline int +__GTHREAD_INLINE int __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, const __gthread_time_t *__abs_time) { @@ -600,11 +611,11 @@ __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, #else /* ! __GTHREAD_HIDE_WIN32API */ #ifndef __GTHREAD_WIN32_INLINE -#define __GTHREAD_WIN32_INLINE static inline +#define __GTHREAD_WIN32_INLINE __GTHREAD_INLINE #endif #ifndef __GTHREAD_WIN32_COND_INLINE -#define __GTHREAD_WIN32_COND_INLINE static inline +#define __GTHREAD_WIN32_COND_INLINE __GTHREAD_INLINE #endif #ifndef __GTHREAD_WIN32_ACTIVE_P @@ -828,25 +839,25 @@ __gthread_cond_timedwait (__gthread_cond_t *__cond, #endif /* __GTHREAD_HIDE_WIN32API */ -static inline void +__GTHREAD_INLINE void __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) { __gthread_mutex_init_function (__mutex); } -static inline void +__GTHREAD_INLINE void __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) { __gthread_mutex_destroy (__mutex); } -static inline int +__GTHREAD_INLINE int __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) { return __gthread_mutex_lock (__mutex); } -static inline int +__GTHREAD_INLINE int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) { return __gthread_mutex_unlock (__mutex); @@ -854,13 +865,13 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) #if __GTHREAD_HAS_COND -static inline int +__GTHREAD_INLINE int __gthread_cond_destroy (__gthread_cond_t *__cond ATTRIBUTE_UNUSED) { return 0; } -static inline int +__GTHREAD_INLINE int __gthread_cond_wait_recursive (__gthread_cond_t *__cond, __gthread_recursive_mutex_t *__mutex) { diff --git a/libgcc/config/nvptx/unwind-nvptx.c b/libgcc/config/nvptx/unwind-nvptx.c index eae741c..97e22c0 100644 --- a/libgcc/config/nvptx/unwind-nvptx.c +++ b/libgcc/config/nvptx/unwind-nvptx.c @@ -38,6 +38,12 @@ _Unwind_DeleteException (struct _Unwind_Exception *exc) (*exc->exception_cleanup) (_URC_FOREIGN_EXCEPTION_CAUGHT, exc); } +void +_Unwind_Resume (struct _Unwind_Exception *exc __attribute__ ((__unused__))) +{ + __builtin_abort (); +} + _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exc __attribute__ ((__unused__))) { diff --git a/libgcc/config/sh/sfp-machine.h b/libgcc/config/sh/sfp-machine.h index 66984d4..8030c80 100644 --- a/libgcc/config/sh/sfp-machine.h +++ b/libgcc/config/sh/sfp-machine.h @@ -39,11 +39,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) -#define _FP_NANFRAC_B _FP_QNANBIT_B -#define _FP_NANFRAC_H _FP_QNANBIT_H -#define _FP_NANFRAC_S _FP_QNANBIT_S -#define _FP_NANFRAC_D _FP_QNANBIT_D, 0 -#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0 +#define _FP_NANFRAC_B (_FP_QNANBIT_B - 1) +#define _FP_NANFRAC_H (_FP_QNANBIT_H - 1) +#define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) +#define _FP_NANFRAC_D (_FP_QNANBIT_D - 1), -1 +#define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1, -1, -1 /* The type of the result of a floating point comparison. This must match __libgcc_cmp_return__ in GCC for the target. */ @@ -56,15 +56,71 @@ typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); #define _FP_NANSIGN_D 0 #define _FP_NANSIGN_Q 0 -#define _FP_KEEPNANFRACP 0 -#define _FP_QNANNEGATEDP 0 +#define _FP_KEEPNANFRACP 1 +#define _FP_QNANNEGATEDP 1 + +/* X is chosen unless one of the NaNs is sNaN. */ +# define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ + do { \ + if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ + _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ + { \ + R##_s = _FP_NANSIGN_##fs; \ + _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ + } \ + else \ + { \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc(R,X); \ + } \ + R##_c = FP_CLS_NAN; \ + } while (0) + +#ifdef __SH_FPU_ANY__ +#define _FPU_GETCW(fpscr) fpscr = __builtin_sh_get_fpscr () +#define _FPU_SETCW(fpscr) __builtin_sh_set_fpscr (fpscr) +#define FP_EX_ENABLE_SHIFT 5 +#define FP_EX_CAUSE_SHIFT 10 -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - R##_s = _FP_NANSIGN_##fs; \ - _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ - R##_c = FP_CLS_NAN; \ +#define FP_EX_INVALID 0x0040 +#define FP_EX_DIVZERO 0x0020 +#if defined (__SH2E__) +#define FP_EX_ALL (FP_EX_DIVZERO | FP_EX_INVALID) +#else +#define FP_EX_OVERFLOW 0x0010 +#define FP_EX_UNDERFLOW 0x0008 +#define FP_EX_INEXACT 0x0004 +#define FP_EX_ALL (FP_EX_DIVZERO | FP_EX_INEXACT | \ + FP_EX_INVALID | FP_EX_OVERFLOW | FP_EX_UNDERFLOW) +#endif +#define _FP_DECL_EX \ + unsigned int _fcsr __attribute__ ((unused)) = FP_RND_NEAREST +/* Rounding modes. */ +#define FP_RND_NEAREST 0x0 +#define FP_RND_ZERO 0x1 +/* Placeholder, hardware does not have PINF/MINF modes. */ +#define FP_RND_PINF 0x2 +#define FP_RND_MINF 0x3 +#define FP_RND_MASK 3 + +#define FP_INIT_ROUNDMODE _FPU_GETCW (_fcsr) +#define FP_ROUNDMODE (_fcsr & FP_RND_MASK) +#define FP_TRAPPING_EXCEPTIONS ((_fcsr >> FP_EX_ENABLE_SHIFT) & FP_EX_ALL) +#define FP_HANDLE_EXCEPTIONS \ + do { \ + _fcsr &= ~(FP_EX_ALL << FP_EX_CAUSE_SHIFT); \ + _fcsr |= _fex | (_fex << FP_EX_CAUSE_SHIFT); \ + _FPU_SETCW (_fcsr); \ } while (0) +#else +#define FP_EX_INVALID (1 << 4) +#define FP_EX_DIVZERO (1 << 3) +#if !defined (__SH2E__) +#define FP_EX_OVERFLOW (1 << 2) +#define FP_EX_UNDERFLOW (1 << 1) +#define FP_EX_INEXACT (1 << 0) +#endif +#endif #define _FP_TININESS_AFTER_ROUNDING 1 diff --git a/libgcobol/ChangeLog b/libgcobol/ChangeLog index a806755..9de1714 100644 --- a/libgcobol/ChangeLog +++ b/libgcobol/ChangeLog @@ -1,3 +1,75 @@ +2025-04-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac: Check for struct tm.tm_zone. + * configure, config.h.in: Regenerate. + * intrinsic.cc (__gg__formatted_current_date): Guard tm.tm_zone + use with HAVE_STRUCT_TM_TM_ZONE. + +2025-04-15 Andreas Schwab <schwab@suse.de> + + * configure.tgt: Set LIBGCOBOL_SUPPORTED for riscv64-*-linux* with + 64-bit multilib. + +2025-04-15 Jakub Jelinek <jakub@redhat.com> + Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR cobol/119244 + * acinclude.m4 (LIBGCOBOL_CHECK_FLOAT128): Ensure + libgcob_cv_have_float128 is not yes on targets with IEEE quad + long double. Don't check for --as-needed nor set LIBQUADSPEC + on targets which USE_IEC_60559. + * libgcobol-fp.h (FP128_FMT, strtofp128, strfromfp128): Define. + * intrinsic.cc (strtof128): Don't redefine. + (WEIRD_TRANSCENDENT_RETURN_VALUE): Use GCOB_FP128_LITERAL macro. + (__gg__numval_f): Use strtofp128 instead of strtof128. + * libgcobol.cc (strtof128): Don't redefine. + (format_for_display_internal): Use strfromfp128 instead of + strfromf128 or quadmath_snprintf and use FP128_FMT in the format + string. + (get_float128, __gg__compare_2, __gg__move, __gg__move_literala): + Use strtofp128 instead of strtof128. + * configure: Regenerate. + +2025-04-14 Andreas Schwab <schwab@suse.de> + + * libgcobol.cc (__gg__float64_from_128): Mark literal as float128 + literal. + +2025-04-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * valconv.cc (__gg__string_to_numeric_edited): Use strchr instead + of index. + +2025-04-12 Bob Dubner <rdubner@symas.com> + + PR cobol/119694 + * gfileio.cc: Eliminate getenv() calls. + * libgcobol.cc: Likewise. + +2025-04-10 Iain Sandoe <iain@sandoe.co.uk> + + * configure.tgt: Enable for x86_64 Darwin. + +2025-04-10 Iain Sandoe <iain@sandoe.co.uk> + + PR cobol/119244 + * Makefile.am: Add support for libquadmath. + * Makefile.in: Regenerate. + * acinclude.m4: Add support for libquadmath. + * config.h.in: Regenerate. + * configure: Regenerate. + * configure.ac: Configure libquadmath support. + * gmath.cc: Use GCOB_FP128 to represent the configured + 128b floating point type. Use FP128_FUNC to represent + the naming of intrinsics in the configure 128b floating + point type. Render literals with GCOB_FP128_LITERAL. + * intrinsic.cc: Likewise. + * libgcobol.cc: Likewise. + * libgcobol.h: Likewise. + * libgcobol-fp.h: New file. + * gfileio.cc: Include libgcobol-fp.h. + * libgcobol.spec.in: Add libquadmath configure output. + 2025-04-09 Bob Dubner <rdubner@symas.com> PR cobol/119682 diff --git a/libgcobol/acinclude.m4 b/libgcobol/acinclude.m4 index aab0895..0e81b10 100644 --- a/libgcobol/acinclude.m4 +++ b/libgcobol/acinclude.m4 @@ -44,6 +44,10 @@ AC_DEFUN([LIBGCOBOL_CHECK_FLOAT128], [ AC_CACHE_CHECK([whether we have a usable _Float128 type], libgcob_cv_have_float128, [ GCC_TRY_COMPILE_OR_LINK([ +#if __LDBL_MANT_DIG__ == 113 && __LDBL_MIN_EXP__ == -16381 +#error "long double is IEEE quad, no need for libquadmath" +#endif + _Float128 foo (_Float128 x) { _Complex _Float128 z1, z2; @@ -90,32 +94,22 @@ AC_DEFUN([LIBGCOBOL_CHECK_FLOAT128], [ fi AC_DEFINE(HAVE_FLOAT128, 1, [Define if target has usable _Float128 and __float128 types.]) - dnl Check whether -Wl,--as-needed resp. -Wl,-zignore is supported - dnl - dnl Turn warnings into error to avoid testsuite breakage. So enable - dnl AC_LANG_WERROR, but there's currently (autoconf 2.64) no way to turn - dnl it off again. As a workaround, save and restore werror flag like - dnl AC_PATH_XTRA. - dnl Cf. http://gcc.gnu.org/ml/gcc-patches/2010-05/msg01889.html - ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag - AC_CACHE_CHECK([whether --as-needed/-z ignore works], - [libgcob_cv_have_as_needed], - [ - # Test for native Solaris options first. - # No whitespace after -z to pass it through -Wl. - libgcob_cv_as_needed_option="-zignore" - libgcob_cv_no_as_needed_option="-zrecord" - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" - libgcob_cv_have_as_needed=no - AC_LANG_WERROR - AC_LINK_IFELSE([AC_LANG_PROGRAM([])], - [libgcob_cv_have_as_needed=yes], - [libgcob_cv_have_as_needed=no]) - LDFLAGS="$save_LDFLAGS" - if test "x$libgcob_cv_have_as_needed" = xno; then - libgcob_cv_as_needed_option="--as-needed" - libgcob_cv_no_as_needed_option="--no-as-needed" + if test "x$USE_IEC_60559" != xyes; then + dnl Check whether -Wl,--as-needed resp. -Wl,-zignore is supported + dnl + dnl Turn warnings into error to avoid testsuite breakage. So enable + dnl AC_LANG_WERROR, but there's currently (autoconf 2.64) no way to turn + dnl it off again. As a workaround, save and restore werror flag like + dnl AC_PATH_XTRA. + dnl Cf. http://gcc.gnu.org/ml/gcc-patches/2010-05/msg01889.html + ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag + AC_CACHE_CHECK([whether --as-needed/-z ignore works], + [libgcob_cv_have_as_needed], + [ + # Test for native Solaris options first. + # No whitespace after -z to pass it through -Wl. + libgcob_cv_as_needed_option="-zignore" + libgcob_cv_no_as_needed_option="-zrecord" save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" libgcob_cv_have_as_needed=no @@ -124,45 +118,51 @@ AC_DEFUN([LIBGCOBOL_CHECK_FLOAT128], [ [libgcob_cv_have_as_needed=yes], [libgcob_cv_have_as_needed=no]) LDFLAGS="$save_LDFLAGS" - fi - ac_[]_AC_LANG_ABBREV[]_werror_flag=$ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag - ]) - - dnl Determine -Bstatic ... -Bdynamic etc. support from gfortran -### stderr. - touch conftest1.$ac_objext conftest2.$ac_objext - LQUADMATH=-lquadmath - $CXX -static-libgcobol -### -o conftest \ - conftest1.$ac_objext -lgcobol conftest2.$ac_objext 2>&1 >/dev/null \ - | grep "conftest1.$ac_objext.*conftest2.$ac_objext" > conftest.cmd - if grep "conftest1.$ac_objext.* -Bstatic -lgcobol -Bdynamic .*conftest2.$ac_objext" \ - conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:-Bstatic} -lquadmath %{static-libquadmath:-Bdynamic}" - elif grep "conftest1.$ac_objext.* -bstatic -lgcobol -bdynamic .*conftest2.$ac_objext" \ - conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:-bstatic} -lquadmath %{static-libquadmath:-bdynamic}" - elif grep "conftest1.$ac_objext.* -aarchive_shared -lgcobol -adefault .*conftest2.$ac_objext" \ - conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:-aarchive_shared} -lquadmath %{static-libquadmath:-adefault}" - elif grep "conftest1.$ac_objext.*libgcobol.a .*conftest2.$ac_objext" \ + if test "x$libgcob_cv_have_as_needed" = xno; then + libgcob_cv_as_needed_option="--as-needed" + libgcob_cv_no_as_needed_option="--no-as-needed" + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" + libgcob_cv_have_as_needed=no + AC_LANG_WERROR + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [libgcob_cv_have_as_needed=yes], + [libgcob_cv_have_as_needed=no]) + LDFLAGS="$save_LDFLAGS" + fi + ac_[]_AC_LANG_ABBREV[]_werror_flag=$ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag + ]) + + dnl Determine -Bstatic ... -Bdynamic etc. support from gfortran -### stderr. + touch conftest1.$ac_objext conftest2.$ac_objext + LQUADMATH=-lquadmath + $CXX -static-libgcobol -### -o conftest \ + conftest1.$ac_objext -lgcobol conftest2.$ac_objext 2>&1 >/dev/null \ + | grep "conftest1.$ac_objext.*conftest2.$ac_objext" > conftest.cmd + if grep "conftest1.$ac_objext.* -Bstatic -lgcobol -Bdynamic .*conftest2.$ac_objext" \ + conftest.cmd >/dev/null 2>&1; then + LQUADMATH="%{static-libquadmath:-Bstatic} -lquadmath %{static-libquadmath:-Bdynamic}" + elif grep "conftest1.$ac_objext.* -bstatic -lgcobol -bdynamic .*conftest2.$ac_objext" \ + conftest.cmd >/dev/null 2>&1; then + LQUADMATH="%{static-libquadmath:-bstatic} -lquadmath %{static-libquadmath:-bdynamic}" + elif grep "conftest1.$ac_objext.* -aarchive_shared -lgcobol -adefault .*conftest2.$ac_objext" \ + conftest.cmd >/dev/null 2>&1; then + LQUADMATH="%{static-libquadmath:-aarchive_shared} -lquadmath %{static-libquadmath:-adefault}" + elif grep "conftest1.$ac_objext.*libgcobol.a .*conftest2.$ac_objext" \ conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:libquadmath.a%s;:-lquadmath}" - fi - rm -f conftest1.$ac_objext conftest2.$ac_objext conftest conftest.cmd - - dnl For static libgcobol linkage, depend on libquadmath only if needed. - dnl If using *f128 APIs from libc/libm, depend on libquadmath only if needed - dnl even for dynamic libgcobol linkage, and don't link libgcobol against - dnl -lquadmath. - if test "x$libgcob_cv_have_as_needed" = xyes; then - if test "x$USE_IEC_60559" = xyes; then - LIBQUADSPEC="$libgcob_cv_as_needed_option $LQUADMATH $libgcob_cv_no_as_needed_option" + LQUADMATH="%{static-libquadmath:libquadmath.a%s;:-lquadmath}" + fi + rm -f conftest1.$ac_objext conftest2.$ac_objext conftest conftest.cmd + + if test "x$libgcob_cv_have_as_needed" = xyes; then + if test "x$USE_IEC_60559" = xyes; then + LIBQUADSPEC="$libgcob_cv_as_needed_option $LQUADMATH $libgcob_cv_no_as_needed_option" + else + LIBQUADSPEC="%{static-libgcobol:$libgcob_cv_as_needed_option} $LQUADMATH %{static-libgcobol:$libgcob_cv_no_as_needed_option}" + fi else - LIBQUADSPEC="%{static-libgcobol:$libgcob_cv_as_needed_option} $LQUADMATH %{static-libgcobol:$libgcob_cv_no_as_needed_option}" + LIBQUADSPEC="$LQUADMATH" fi - else - LIBQUADSPEC="$LQUADMATH" - fi - if test "x$USE_IEC_60559" != xyes; then if test -f ../libquadmath/libquadmath.la; then LIBQUADLIB=../libquadmath/libquadmath.la LIBQUADLIB_DEP=../libquadmath/libquadmath.la diff --git a/libgcobol/config.h.in b/libgcobol/config.h.in index 6a53279..fdf5e3e 100644 --- a/libgcobol/config.h.in +++ b/libgcobol/config.h.in @@ -72,6 +72,9 @@ /* Define to 1 if you have the `strtof128' function. */ #undef HAVE_STRTOF128 +/* Define to 1 if `tm_zone' is a member of `struct tm'. */ +#undef HAVE_STRUCT_TM_TM_ZONE + /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H diff --git a/libgcobol/configure b/libgcobol/configure index 6c2747c..6821591 100755 --- a/libgcobol/configure +++ b/libgcobol/configure @@ -2449,6 +2449,63 @@ $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func + +# ac_fn_cxx_check_member LINENO AGGR MEMBER VAR INCLUDES +# ------------------------------------------------------ +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_cxx_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -11693,7 +11750,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11696 "configure" +#line 11753 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11799,7 +11856,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11802 "configure" +#line 11859 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -17172,6 +17229,10 @@ else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if __LDBL_MANT_DIG__ == 113 && __LDBL_MIN_EXP__ == -16381 +#error "long double is IEEE quad, no need for libquadmath" +#endif + _Float128 foo (_Float128 x) { _Complex _Float128 z1, z2; @@ -17225,6 +17286,10 @@ fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if __LDBL_MANT_DIG__ == 113 && __LDBL_MIN_EXP__ == -16381 +#error "long double is IEEE quad, no need for libquadmath" +#endif + _Float128 foo (_Float128 x) { _Complex _Float128 z1, z2; @@ -17296,23 +17361,24 @@ $as_echo "#define USE_QUADMATH 1" >>confdefs.h $as_echo "#define HAVE_FLOAT128 1" >>confdefs.h - ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether --as-needed/-z ignore works" >&5 + if test "x$USE_IEC_60559" != xyes; then + ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether --as-needed/-z ignore works" >&5 $as_echo_n "checking whether --as-needed/-z ignore works... " >&6; } if ${libgcob_cv_have_as_needed+:} false; then : $as_echo_n "(cached) " >&6 else - # Test for native Solaris options first. - # No whitespace after -z to pass it through -Wl. - libgcob_cv_as_needed_option="-zignore" - libgcob_cv_no_as_needed_option="-zrecord" - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" - libgcob_cv_have_as_needed=no + # Test for native Solaris options first. + # No whitespace after -z to pass it through -Wl. + libgcob_cv_as_needed_option="-zignore" + libgcob_cv_no_as_needed_option="-zrecord" + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" + libgcob_cv_have_as_needed=no ac_cxx_werror_flag=yes - if test x$gcc_no_link = xyes; then + if test x$gcc_no_link = xyes; then as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17333,16 +17399,16 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - if test "x$libgcob_cv_have_as_needed" = xno; then - libgcob_cv_as_needed_option="--as-needed" - libgcob_cv_no_as_needed_option="--no-as-needed" - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" - libgcob_cv_have_as_needed=no + LDFLAGS="$save_LDFLAGS" + if test "x$libgcob_cv_have_as_needed" = xno; then + libgcob_cv_as_needed_option="--as-needed" + libgcob_cv_no_as_needed_option="--no-as-needed" + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,$libgcob_cv_as_needed_option -lm -Wl,$libgcob_cv_no_as_needed_option" + libgcob_cv_have_as_needed=no ac_cxx_werror_flag=yes - if test x$gcc_no_link = xyes; then + if test x$gcc_no_link = xyes; then as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17363,44 +17429,43 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - fi - ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag + LDFLAGS="$save_LDFLAGS" + fi + ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcob_cv_have_as_needed" >&5 $as_echo "$libgcob_cv_have_as_needed" >&6; } - touch conftest1.$ac_objext conftest2.$ac_objext - LQUADMATH=-lquadmath - $CXX -static-libgcobol -### -o conftest \ - conftest1.$ac_objext -lgcobol conftest2.$ac_objext 2>&1 >/dev/null \ - | grep "conftest1.$ac_objext.*conftest2.$ac_objext" > conftest.cmd - if grep "conftest1.$ac_objext.* -Bstatic -lgcobol -Bdynamic .*conftest2.$ac_objext" \ - conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:-Bstatic} -lquadmath %{static-libquadmath:-Bdynamic}" - elif grep "conftest1.$ac_objext.* -bstatic -lgcobol -bdynamic .*conftest2.$ac_objext" \ + touch conftest1.$ac_objext conftest2.$ac_objext + LQUADMATH=-lquadmath + $CXX -static-libgcobol -### -o conftest \ + conftest1.$ac_objext -lgcobol conftest2.$ac_objext 2>&1 >/dev/null \ + | grep "conftest1.$ac_objext.*conftest2.$ac_objext" > conftest.cmd + if grep "conftest1.$ac_objext.* -Bstatic -lgcobol -Bdynamic .*conftest2.$ac_objext" \ + conftest.cmd >/dev/null 2>&1; then + LQUADMATH="%{static-libquadmath:-Bstatic} -lquadmath %{static-libquadmath:-Bdynamic}" + elif grep "conftest1.$ac_objext.* -bstatic -lgcobol -bdynamic .*conftest2.$ac_objext" \ + conftest.cmd >/dev/null 2>&1; then + LQUADMATH="%{static-libquadmath:-bstatic} -lquadmath %{static-libquadmath:-bdynamic}" + elif grep "conftest1.$ac_objext.* -aarchive_shared -lgcobol -adefault .*conftest2.$ac_objext" \ + conftest.cmd >/dev/null 2>&1; then + LQUADMATH="%{static-libquadmath:-aarchive_shared} -lquadmath %{static-libquadmath:-adefault}" + elif grep "conftest1.$ac_objext.*libgcobol.a .*conftest2.$ac_objext" \ conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:-bstatic} -lquadmath %{static-libquadmath:-bdynamic}" - elif grep "conftest1.$ac_objext.* -aarchive_shared -lgcobol -adefault .*conftest2.$ac_objext" \ - conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:-aarchive_shared} -lquadmath %{static-libquadmath:-adefault}" - elif grep "conftest1.$ac_objext.*libgcobol.a .*conftest2.$ac_objext" \ - conftest.cmd >/dev/null 2>&1; then - LQUADMATH="%{static-libquadmath:libquadmath.a%s;:-lquadmath}" - fi - rm -f conftest1.$ac_objext conftest2.$ac_objext conftest conftest.cmd + LQUADMATH="%{static-libquadmath:libquadmath.a%s;:-lquadmath}" + fi + rm -f conftest1.$ac_objext conftest2.$ac_objext conftest conftest.cmd - if test "x$libgcob_cv_have_as_needed" = xyes; then - if test "x$USE_IEC_60559" = xyes; then - LIBQUADSPEC="$libgcob_cv_as_needed_option $LQUADMATH $libgcob_cv_no_as_needed_option" + if test "x$libgcob_cv_have_as_needed" = xyes; then + if test "x$USE_IEC_60559" = xyes; then + LIBQUADSPEC="$libgcob_cv_as_needed_option $LQUADMATH $libgcob_cv_no_as_needed_option" + else + LIBQUADSPEC="%{static-libgcobol:$libgcob_cv_as_needed_option} $LQUADMATH %{static-libgcobol:$libgcob_cv_no_as_needed_option}" + fi else - LIBQUADSPEC="%{static-libgcobol:$libgcob_cv_as_needed_option} $LQUADMATH %{static-libgcobol:$libgcob_cv_no_as_needed_option}" + LIBQUADSPEC="$LQUADMATH" fi - else - LIBQUADSPEC="$LQUADMATH" - fi - if test "x$USE_IEC_60559" != xyes; then if test -f ../libquadmath/libquadmath.la; then LIBQUADLIB=../libquadmath/libquadmath.la LIBQUADLIB_DEP=../libquadmath/libquadmath.la @@ -17426,6 +17491,19 @@ $as_echo "#define USE_IEC_60559 1" >>confdefs.h +# struct tm tm_zone is a POSIX.1-2024 addition. +ac_fn_cxx_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <time.h> +" +if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TM_TM_ZONE 1 +_ACEOF + + +fi + + if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" else diff --git a/libgcobol/configure.ac b/libgcobol/configure.ac index a1e9513..4bb6905 100644 --- a/libgcobol/configure.ac +++ b/libgcobol/configure.ac @@ -231,6 +231,9 @@ elif test "${ENABLE_LIBQUADMATH_SUPPORT}" = "default" ; then fi LIBGCOBOL_CHECK_FLOAT128 +# struct tm tm_zone is a POSIX.1-2024 addition. +AC_CHECK_MEMBERS([struct tm.tm_zone],,,[#include <time.h>]) + if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" else diff --git a/libgcobol/configure.tgt b/libgcobol/configure.tgt index c5e263a..a239252 100644 --- a/libgcobol/configure.tgt +++ b/libgcobol/configure.tgt @@ -34,7 +34,12 @@ case "${target}" in LIBGCOBOL_SUPPORTED=yes fi ;; - x86_64-*-linux* | i?86-*-linux*) + riscv64-*-linux*) + if test x$ac_cv_sizeof_void_p = x8; then + LIBGCOBOL_SUPPORTED=yes + fi + ;; + x86_64-*-linux* | i?86-*-linux* | x86_64-*-darwin*) if test x$ac_cv_sizeof_void_p = x8; then LIBGCOBOL_SUPPORTED=yes fi diff --git a/libgcobol/gfileio.cc b/libgcobol/gfileio.cc index e297e95..e6ad03fc 100644 --- a/libgcobol/gfileio.cc +++ b/libgcobol/gfileio.cc @@ -4055,34 +4055,6 @@ file_indexed_close(cblc_file_t *file) file->supplemental = NULL; } -static void -report_open_failure(const char *type, - const char *structure_name, - const char *filename) - { - bool quiet = true; - if( !quiet ) - { - if( getenv(filename) ) - { - fprintf(stderr, - "Trying to 'OPEN %s %s %s -> \"%s\"', which doesn't exist\n", - type, - structure_name, - filename, - getenv(filename)); - } - else - { - fprintf(stderr, - "Trying to 'OPEN %s %s \"%s\"', which doesn't exist\n", - type, - structure_name, - filename); - } - } - } - extern "C" void __gg__file_reopen(cblc_file_t *file, int mode_char) @@ -4211,7 +4183,6 @@ __gg__file_reopen(cblc_file_t *file, int mode_char) } else { - report_open_failure("INPUT", file->name, trimmed_name); file->io_status = FsNoFile; // "35" goto done; } @@ -4253,7 +4224,6 @@ __gg__file_reopen(cblc_file_t *file, int mode_char) else { // Trying to extend a non-optional non-existing file is against the rules - report_open_failure("EXTEND", file->name, trimmed_name); file->io_status = FsNoFile; // "35" goto done; } @@ -4269,7 +4239,6 @@ __gg__file_reopen(cblc_file_t *file, int mode_char) } else { - report_open_failure("I-O", file->name, trimmed_name); file->io_status = FsNoFile; // "35" goto done; } diff --git a/libgcobol/intrinsic.cc b/libgcobol/intrinsic.cc index 844cd38..97f2bdc 100644 --- a/libgcobol/intrinsic.cc +++ b/libgcobol/intrinsic.cc @@ -55,19 +55,11 @@ #include "charmaps.h" -#if !defined (HAVE_STRTOF128) -# if USE_QUADMATH -# define strtof128 strtoflt128 -# else -# error "no available string to float 128" -# endif -#endif - #pragma GCC diagnostic ignored "-Wformat-truncation" #define JD_OF_1601_01_02 2305812.5 -#define WEIRD_TRANSCENDENT_RETURN_VALUE (0.0Q) +#define WEIRD_TRANSCENDENT_RETURN_VALUE GCOB_FP128_LITERAL (0.0) #define NO_RDIGITS (0) struct cobol_tm @@ -1490,7 +1482,9 @@ __gg__formatted_current_date( cblc_field_t *dest, // Destination string __gg__clock_gettime(CLOCK_REALTIME, &ts); struct tm tm = {}; +#ifdef HAVE_STRUCT_TM_TM_ZONE tm.tm_zone = "GMT"; +#endif if( is_zulu ) { gmtime_r(&ts.tv_sec, &tm); @@ -5016,7 +5010,7 @@ __gg__numval_f( cblc_field_t *dest, } } *p++ = '\0'; - value = strtof128(ach, NULL); + value = strtofp128(ach, NULL); } __gg__float128_to_field(dest, value, diff --git a/libgcobol/libgcobol-fp.h b/libgcobol/libgcobol-fp.h index bd443f3..fcfa0a7 100644 --- a/libgcobol/libgcobol-fp.h +++ b/libgcobol/libgcobol-fp.h @@ -28,17 +28,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see # define GCOB_FP128 long double # define GCOB_FP128_LITERAL(lit) (lit ## l) # define FP128_FUNC(funcname) funcname ## l +# define FP128_FMT "L" +# define strtofp128(nptr, endptr) strtold(nptr, endptr) +# define strfromfp128(str, n, format, fp) snprintf(str, n, format, fp) #elif __FLT128_MANT_DIG__ == 113 && __FLT128_MIN_EXP__ == -16381 \ && defined(USE_IEC_60559) // Use _Float128, f128 suffix on calls, f128 or F128 suffix on literals # define GCOB_FP128 _Float128 # define GCOB_FP128_LITERAL(lit) (lit ## f128) # define FP128_FUNC(funcname) funcname ## f128 +# define FP128_FMT "" +# define strtofp128(nptr, endptr) strtof128(nptr, endptr) +# define strfromfp128(str, n, format, fp) strfromf128(str, n, format, fp) #elif __FLT128_MANT_DIG__ == 113 && __FLT128_MIN_EXP__ == -16381 // Use __float128, q suffix on calls, q or Q suffix on literals # define GCOB_FP128 __float128 # define GCOB_FP128_LITERAL(lit) (lit ## q) # define FP128_FUNC(funcname) funcname ## q +# define FP128_FMT "Q" +# define strtofp128(nptr, endptr) strtoflt128(nptr, endptr) +# define strfromfp128(str, n, format, fp) quadmath_snprintf(str, n, format, fp) #else # error "libgcobol requires 128b floating point" #endif diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc index d912ea3..c438d6b 100644 --- a/libgcobol/libgcobol.cc +++ b/libgcobol/libgcobol.cc @@ -93,20 +93,6 @@ strfromf64 (char *s, size_t n, const char *f, double v) # endif #endif -#if !defined (HAVE_STRFROMF128) -# if !USE_QUADMATH -# error "no available float 128 to string" -# endif -#endif - -#if !defined (HAVE_STRTOF128) -# if USE_QUADMATH -# define strtof128 strtoflt128 -# else -# error "no available string to float 128" -# endif -#endif - // This couldn't be defined in symbols.h because it conflicts with a LEVEL66 // in parse.h #define LEVEL66 (66) @@ -231,12 +217,16 @@ local_ec_type_descr( ec_type_t type ) { return p; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +// Keep this debugging function around for when it is needed static const char * local_ec_type_str( ec_type_t type ) { if( type == ec_none_e ) return "EC-NONE"; auto p = local_ec_type_descr(type); return p->name; } +#pragma GCC diagnostic pop ec_status_t& ec_status_t::update() { handled = ec_type_t(__gg__exception_handled); @@ -248,13 +238,6 @@ ec_status_t& ec_status_t::update() { snprintf(statement, sizeof(statement), "%s", __gg__exception_statement); } - if( type != ec_none_e && getenv("match_declarative") ) { - warnx( "ec_status_t::update:%d: EC %s by %s handled %02X " , __LINE__, - local_ec_type_str(type), - __gg__exception_statement? statement : "<none>", - handled ); // might be file-status, not ec_type_t - } - return *this; } @@ -2221,7 +2204,7 @@ extern "C" void __gg__clock_gettime(clockid_t clk_id, struct timespec *tp) { - const char *p = getenv("COB_CURRENT_DATE"); + const char *p = getenv("GCOBOL_CURRENT_DATE"); if( p ) { @@ -3265,11 +3248,7 @@ format_for_display_internal(char **dest, // on a 16-bit boundary. GCOB_FP128 floatval; memcpy(&floatval, actual_location, 16); -#if !defined (HAVE_STRFROMF128) && USE_QUADMATH - quadmath_snprintf(ach, sizeof(ach), "%.36QE", floatval); -#else - strfromf128(ach, sizeof(ach), "%.36E", floatval); -#endif + strfromfp128(ach, sizeof(ach), "%.36" FP128_FMT "E", floatval); char *p = strchr(ach, 'E'); if( !p ) { @@ -3291,13 +3270,8 @@ format_for_display_internal(char **dest, int precision = 36 - exp; char achFormat[24]; -#if !defined (HAVE_STRFROMF128) && USE_QUADMATH - sprintf(achFormat, "%%.%dQf", precision); - quadmath_snprintf(ach, sizeof(ach), achFormat, floatval); -#else - sprintf(achFormat, "%%.%df", precision); - strfromf128(ach, sizeof(ach), achFormat, floatval); -#endif + sprintf(achFormat, "%%.%d" FP128_FMT "f", precision); + strfromfp128(ach, sizeof(ach), achFormat, floatval); } __gg__remove_trailing_zeroes(ach); __gg__realloc_if_necessary(dest, dest_size, strlen(ach)+1); @@ -3536,7 +3510,7 @@ get_float128( cblc_field_t *field, { if( __gg__decimal_point == '.' ) { - retval = strtof128(field->initial, NULL); + retval = strtofp128(field->initial, NULL); } else { @@ -3554,7 +3528,7 @@ get_float128( cblc_field_t *field, { *p = '.'; } - retval = strtof128(buffer, NULL); + retval = strtofp128(buffer, NULL); } } else @@ -4251,7 +4225,7 @@ __gg__compare_2(cblc_field_t *left_side, //_Float128 left_value = *(_Float128 *)left_location; GCOB_FP128 left_value; memcpy(&left_value, left_location, 16); - GCOB_FP128 right_value = strtof128(buffer, NULL); + GCOB_FP128 right_value = strtofp128(buffer, NULL); retval = 0; retval = left_value < right_value ? -1 : retval; retval = left_value > right_value ? 1 : retval; @@ -6001,8 +5975,8 @@ __gg__move( cblc_field_t *fdest, } case 16: { - //*(_Float128 *)(fdest->data+dest_offset) = strtof128(ach, NULL); - GCOB_FP128 t = strtof128(ach, NULL); + //*(_Float128 *)(fdest->data+dest_offset) = strtofp128(ach, NULL); + GCOB_FP128 t = strtofp128(ach, NULL); memcpy(fdest->data+dest_offset, &t, 16); break; } @@ -6171,7 +6145,7 @@ __gg__move_literala(cblc_field_t *field, } case 16: { - GCOB_FP128 t = strtof128(ach, NULL); + GCOB_FP128 t = strtofp128(ach, NULL); memcpy(field->data+field_offset, &t, 16); break; } @@ -11011,13 +10985,6 @@ class match_file_declarative { bool operator()( const cbl_declarative_t& dcl ) { - if( getenv("match_declarative") && oops.type) { - warnx("match_file_declarative: checking: oops %s dcl %s (handled %s) ", - local_ec_type_str(oops.type), - local_ec_type_str(dcl.type), - local_ec_type_str(handled_type)); - } - // Declarative is for the raised exception and not handled by the statement. if( handled() ) return false; bool matches = enabled_ECs.match(dcl.type); @@ -11031,13 +10998,6 @@ class match_file_declarative { } } - if( matches && getenv("match_declarative") ) { - warnx(" matches exception %s (file %zu mode %s)", - local_ec_type_str(oops.type), - oops.file, - cbl_file_mode_str(oops.mode)); - } - return matches; } }; @@ -11237,25 +11197,12 @@ __gg__match_exception( cblc_field_t *index, p = std::find_if( dcls + 1, eodcls, [ec] (const cbl_declarative_t& dcl) { if( ! enabled_ECs.match(dcl.type) ) return false; if( ! ec_cmp(ec, dcl.type) ) return false; - - if( getenv("match_declarative") ) { - warnx("__gg__match_exception:%d: matched " - "%s against mask %s for section #%zu", - __LINE__, - local_ec_type_str(ec), local_ec_type_str(dcl.type), - dcl.section); - } return true; } ); if( p == eodcls ) { default_exception_handler(ec); } } else { // not enabled - if( getenv("match_declarative") ) { - warnx("__gg__match_exception:%d: raised exception " - "%s is disabled (%zu enabled)", __LINE__, - local_ec_type_str(ec), enabled_ECs.nec); - } } } @@ -11487,10 +11434,6 @@ extern "C" void __gg__set_exception_file(cblc_file_t *file) { - if( getenv("match_declarative") ) - { - warnx("%s: %s", __func__, file->name); - } recent_file = file; ec_type_t ec = local_ec_type_of( file->io_status ); if( ec ) @@ -11547,10 +11490,6 @@ extern "C" void __gg__set_exception_code(ec_type_t ec, int from_raise_statement) { - if( getenv("match_declarative") ) - { - warnx("%s: raised %02x", __func__, ec); - } sv_from_raise_statement = from_raise_statement; __gg__exception_code = ec; @@ -11746,7 +11685,7 @@ __gg__float64_from_128( cblc_field_t *dest, // _Float128 value = *(_Float128*)(source->data+source_offset); GCOB_FP128 value; memcpy(&value, source->data+source_offset, 16); - if( FP128_FUNC(fabs)(value) > 1.7976931348623157E308 ) + if( FP128_FUNC(fabs)(value) > GCOB_FP128_LITERAL(1.7976931348623157E308) ) { retval = 1; } @@ -11998,7 +11937,7 @@ __gg__function_handle_from_cobpath( char *unmangled_name, char *mangled_name) } if( !retval ) { - const char *COBPATH = getenv("COBPATH"); + const char *COBPATH = getenv("GCOBOL_LIBRARY_PATH"); retval = find_in_dirs(COBPATH, unmangled_name, mangled_name); } if( !retval ) diff --git a/libgcobol/valconv.cc b/libgcobol/valconv.cc index 33d9a0d..7e58301 100644 --- a/libgcobol/valconv.cc +++ b/libgcobol/valconv.cc @@ -853,14 +853,14 @@ got_float: } else { - const char *decimal_location = index(dest, __gg__decimal_point); + const char *decimal_location = strchr(dest, __gg__decimal_point); if( !decimal_location ) { - decimal_location = index(dest, ascii_v); + decimal_location = strchr(dest, ascii_v); } if( !decimal_location ) { - decimal_location = index(dest, ascii_V); + decimal_location = strchr(dest, ascii_V); } if( !decimal_location ) { diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 3eaf75d..aa92b02 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,83 @@ +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + * caf/libcaf.h: Add mapping mode to coarray's register. + * caf/single.c (_gfortran_caf_register): Create a token sharing + another token's memory. + (check_team): Check team parameters to coindexed expressions are + valid. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + * caf/libcaf.h (_gfortran_caf_num_images): Correct prototype. + * caf/single.c (_gfortran_caf_num_images): Default + implementation. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87326 + * caf/libcaf.h (_gfortran_caf_this_image): Correct prototype. + * caf/single.c (struct caf_single_team): Add new_index of image. + (_gfortran_caf_this_image): Return the image index in the given team. + (_gfortran_caf_form_team): Set new_index in team structure. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/88154 + PR fortran/88960 + PR fortran/97210 + PR fortran/103001 + * caf/libcaf.h: Add constants for get_team's level argument and + update stat values for failed images. + (_gfortran_caf_team_number): Add prototype. + (_gfortran_caf_get_team): Same. + * caf/single.c (_gfortran_caf_team_number): Get the given team's + team number. + (_gfortran_caf_get_team): Get the current team or the team given + by level when the argument is present. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87326 + PR fortran/87556 + PR fortran/88254 + PR fortran/103796 + * caf/libcaf.h: Remove commented block. + (_gfortran_caf_form_team): Allow for all relevant arguments. + (_gfortran_caf_change_team): Same. + (_gfortran_caf_end_team): Same. + (_gfortran_caf_sync_team): Same. + * caf/single.c (struct caf_single_team): Team handling + structures. + (_gfortran_caf_init): Initialize initial team. + (free_team_list): Free all teams and the memory they hold. + (_gfortran_caf_finalize): Free initial and sibling teams. + (_gfortran_caf_register): Add memory registered to current team. + (_gfortran_caf_deregister): Unregister memory from current team. + (_gfortran_caf_is_present_on_remote): Check token's memptr for + llocation. May have been deallocated by an end team. + (_gfortran_caf_form_team): Push a new team stub to the list. + (_gfortran_caf_change_team): Push a formed team on top of the + ctive teams stack. + (_gfortran_caf_end_team): End the active team, free all memory + allocated during its livespan. + (_gfortran_caf_sync_team): Take stat and errmsg into account. + +2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org> + + PR fortran/87939 + * caf/single.c (_gfortran_caf_lock): Correct stat value, if + lock is already locked by current image. + (_gfortran_caf_unlock): Correct stat value, if lock is not + locked. + +2025-04-13 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/119502 + * io/close.c (st_close): Issue an error and avoid + calling close_share when there is no stream assigned. + * io/open.c (st_open): If there is no stream assigned + to the unit, unlock the unit and issue an error. + 2025-04-09 Paul Thomas <pault@gcc.gnu.org> and Harald Anlauf <anlauf@gcc.gnu.org> diff --git a/libgfortran/caf/libcaf.h b/libgfortran/caf/libcaf.h index 0b371d0..7267bc7 100644 --- a/libgfortran/caf/libcaf.h +++ b/libgfortran/caf/libcaf.h @@ -31,17 +31,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "libgfortran.h" -#if 0 -#ifndef __GNUC__ -#define __attribute__(x) -#define likely(x) (x) -#define unlikely(x) (x) -#else -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) -#endif -#endif - /* Definitions of the Fortran 2008 standard; need to kept in sync with ISO_FORTRAN_ENV, cf. gcc/fortran/libgfortran.h. */ typedef enum @@ -50,14 +39,24 @@ typedef enum CAF_STAT_LOCKED, CAF_STAT_LOCKED_OTHER_IMAGE, CAF_STAT_STOPPED_IMAGE = 6000, - CAF_STAT_FAILED_IMAGE = 6001 + CAF_STAT_FAILED_IMAGE = 6001, + CAF_STAT_UNLOCKED_FAILED_IMAGE = 6002 } caf_stat_codes_t; +/* Definitions of the Fortran 2018 standard; need to kept in sync with + ISO_FORTRAN_ENV, cf. gcc/fortran/libgfortran.h. */ +typedef enum +{ + CAF_INITIAL_TEAM = 0, + CAF_PARENT_TEAM, + CAF_CURRENT_TEAM +} caf_team_level_t; /* Describes what type of array we are registerring. Keep in sync with gcc/fortran/trans.h. */ -typedef enum caf_register_t { +typedef enum caf_register_t +{ CAF_REGTYPE_COARRAY_STATIC, CAF_REGTYPE_COARRAY_ALLOC, CAF_REGTYPE_LOCK_STATIC, @@ -66,9 +65,9 @@ typedef enum caf_register_t { CAF_REGTYPE_EVENT_STATIC, CAF_REGTYPE_EVENT_ALLOC, CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY, - CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY -} -caf_register_t; + CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY, + CAF_REGTYPE_COARRAY_MAP_EXISTING, +} caf_register_t; /* Describes the action to take on _caf_deregister. Keep in sync with gcc/fortran/trans.h. */ @@ -78,8 +77,8 @@ typedef enum caf_deregister_t { } caf_deregister_t; -typedef void* caf_token_t; -typedef void * caf_team_t; +typedef void *caf_token_t; +typedef void *caf_team_t; typedef gfc_array_void gfc_descriptor_t; /* Linked list of static coarrays registered. */ @@ -93,8 +92,8 @@ caf_static_t; void _gfortran_caf_init (int *, char ***); void _gfortran_caf_finalize (void); -int _gfortran_caf_this_image (int); -int _gfortran_caf_num_images (int, int); +int _gfortran_caf_this_image (caf_team_t); +int _gfortran_caf_num_images (caf_team_t, int32_t *); void _gfortran_caf_register (size_t, caf_register_t, caf_token_t *, gfc_descriptor_t *, int *, char *, size_t); @@ -185,4 +184,11 @@ void _gfortran_caf_stopped_images (gfc_descriptor_t *, void _gfortran_caf_random_init (bool, bool); +void _gfortran_caf_form_team (int, caf_team_t *, int *, int *, char *, size_t); +void _gfortran_caf_change_team (caf_team_t, int *, char *, size_t); +void _gfortran_caf_end_team (int *, char *, size_t); +void _gfortran_caf_sync_team (caf_team_t, int *, char *, size_t); +int _gfortran_caf_team_number (caf_team_t); +caf_team_t _gfortran_caf_get_team (int32_t *); + #endif /* LIBCAF_H */ diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c index 9c1c0c1..97876fa 100644 --- a/libgfortran/caf/single.c +++ b/libgfortran/caf/single.c @@ -50,6 +50,22 @@ typedef struct caf_single_token *caf_single_token_t; #define TOKEN(X) ((caf_single_token_t) (X)) #define MEMTOK(X) ((caf_single_token_t) (X))->memptr +struct caf_single_team +{ + struct caf_single_team *parent; + int team_no; + int index; + struct coarray_allocated + { + struct coarray_allocated *next; + caf_single_token_t token; + } *allocated; +}; +typedef struct caf_single_team *caf_single_team_t; +/* This points to the most current team. */ +static caf_single_team_t caf_team_stack = NULL, caf_initial_team; +static caf_single_team_t caf_teams_formed = NULL; + /* Single-image implementation of the CAF library. Note: For performance reasons -fcoarry=single should be used rather than this library. */ @@ -125,13 +141,39 @@ caf_internal_error (const char *msg, int *stat, char *errmsg, va_end (args); } +static void +init_caf_team_stack (void) +{ + caf_initial_team = caf_team_stack + = (caf_single_team_t) calloc (1, sizeof (struct caf_single_team)); + caf_initial_team->team_no = -1; +} void _gfortran_caf_init (int *argc __attribute__ ((unused)), char ***argv __attribute__ ((unused))) { + if (likely (!caf_team_stack)) + init_caf_team_stack (); } +static void +free_team_list (caf_single_team_t l) +{ + while (l != NULL) + { + caf_single_team_t p = l->parent; + struct coarray_allocated *ca = l->allocated; + while (ca) + { + struct coarray_allocated *nca = ca->next; + free (ca); + ca = nca; + } + free (l); + l = p; + } +} void _gfortran_caf_finalize (void) @@ -146,19 +188,22 @@ _gfortran_caf_finalize (void) free (caf_static_list); caf_static_list = tmp; } -} + free_team_list (caf_team_stack); + caf_initial_team = caf_team_stack = NULL; + free_team_list (caf_teams_formed); + caf_teams_formed = NULL; +} int -_gfortran_caf_this_image (int distance __attribute__ ((unused))) +_gfortran_caf_this_image (caf_team_t team) { - return 1; + return team ? ((caf_single_team_t) team)->index : 1; } - int -_gfortran_caf_num_images (int distance __attribute__ ((unused)), - int failed __attribute__ ((unused))) +_gfortran_caf_num_images (caf_team_t team __attribute__ ((unused)), + int32_t *team_number __attribute__ ((unused))) { return 1; } @@ -182,6 +227,8 @@ _gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token, local = calloc (size, sizeof (uint32_t)); else if (type == CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY) local = NULL; + else if (type == CAF_REGTYPE_COARRAY_MAP_EXISTING) + local = GFC_DESCRIPTOR_DATA (data); else local = malloc (size); @@ -203,9 +250,12 @@ _gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token, single_token = TOKEN (*token); single_token->memptr = local; - single_token->owning_memory = type != CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY; + single_token->owning_memory = type != CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY + && type != CAF_REGTYPE_COARRAY_MAP_EXISTING; single_token->desc = GFC_DESCRIPTOR_RANK (data) > 0 ? data : NULL; + if (unlikely (!caf_team_stack)) + init_caf_team_stack (); if (stat) *stat = 0; @@ -219,6 +269,20 @@ _gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token, tmp->token = *token; caf_static_list = tmp; } + else + { + struct coarray_allocated *ca = caf_team_stack->allocated; + for (; ca && ca->token != single_token; ca = ca->next) + ; + if (!ca) + { + ca = (struct coarray_allocated *) malloc ( + sizeof (struct coarray_allocated)); + *ca = (struct coarray_allocated) {caf_team_stack->allocated, + single_token}; + caf_team_stack->allocated = ca; + } + } GFC_DESCRIPTOR_DATA (data) = local; } @@ -231,10 +295,30 @@ _gfortran_caf_deregister (caf_token_t *token, caf_deregister_t type, int *stat, caf_single_token_t single_token = TOKEN (*token); if (single_token->owning_memory && single_token->memptr) - free (single_token->memptr); + { + free (single_token->memptr); + if (single_token->desc) + GFC_DESCRIPTOR_DATA (single_token->desc) = NULL; + } if (type != CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY) { + struct coarray_allocated *ca = caf_team_stack->allocated; + if (ca && caf_team_stack->allocated->token == single_token) + caf_team_stack->allocated = ca->next; + else + { + struct coarray_allocated *pca = NULL; + for (; ca && ca->token != single_token; pca = ca, ca = ca->next) + ; + if (!ca) + caf_runtime_error ( + "Coarray token to be freeed is not in current team %d", type); + /* Unhook found coarray_allocated node from list... */ + pca->next = ca->next; + } + /* ... and free. */ + free (ca); free (TOKEN (*token)); *token = NULL; } @@ -539,6 +623,37 @@ _gfortran_caf_get_remote_function_index (const int hash) return index; } +static bool +check_team (caf_team_t *team, int *team_number, int *stat) +{ + if (team || team_number) + { + caf_single_team_t cur = caf_team_stack; + + if (team) + { + caf_single_team_t single_team = (caf_single_team_t) (*team); + while (cur && cur != single_team) + cur = cur->parent; + } + else + while (cur && cur->team_no != *team_number) + cur = cur->parent; + + if (!cur) + { + if (stat) + { + *stat = 1; + return false; + } + else + caf_runtime_error ("requested team not found"); + } + } + return true; +} + void _gfortran_caf_get_from_remote ( caf_token_t token, const gfc_descriptor_t *opt_src_desc, @@ -547,8 +662,7 @@ _gfortran_caf_get_from_remote ( size_t *opt_dst_charlen, gfc_descriptor_t *opt_dst_desc, const bool may_realloc_dst, const int getter_index, void *add_data, const size_t add_data_size __attribute__ ((unused)), int *stat, - caf_team_t *team __attribute__ ((unused)), - int *team_number __attribute__ ((unused))) + caf_team_t *team, int *team_number) { caf_single_token_t single_token = TOKEN (token); void *src_ptr = opt_src_desc ? (void *) opt_src_desc : single_token->memptr; @@ -563,6 +677,9 @@ _gfortran_caf_get_from_remote ( if (stat) *stat = 0; + if (!check_team (team, team_number, stat)) + return; + if (opt_dst_desc && !may_realloc_dst) { old_dst_data_ptr = opt_dst_desc->base_addr; @@ -599,11 +716,10 @@ _gfortran_caf_is_present_on_remote (caf_token_t token, const int image_index, int32_t result; struct caf_single_token cb_token = {add_data, NULL, false}; - - accessor_hash_table[present_index].u.is_present (add_data, &image_index, - &result, - single_token->memptr, - &cb_token, 0); + accessor_hash_table[present_index].u.is_present ( + add_data, &image_index, &result, + single_token->desc ? single_token->desc : (void *) &single_token->memptr, + &cb_token, 0); return result; } @@ -616,8 +732,7 @@ _gfortran_caf_send_to_remote ( const size_t *opt_src_charlen, const gfc_descriptor_t *opt_src_desc, const int accessor_index, void *add_data, const size_t add_data_size __attribute__ ((unused)), int *stat, - caf_team_t *team __attribute__ ((unused)), - int *team_number __attribute__ ((unused))) + caf_team_t *team, int *team_number) { caf_single_token_t single_token = TOKEN (token); void *dst_ptr = opt_dst_desc ? (void *) opt_dst_desc : single_token->memptr; @@ -630,6 +745,9 @@ _gfortran_caf_send_to_remote ( if (stat) *stat = 0; + if (!check_team (team, team_number, stat)) + return; + accessor_hash_table[accessor_index].u.receiver (add_data, &image_index, dst_ptr, src_ptr, &cb_token, 0, opt_dst_charlen, @@ -647,10 +765,8 @@ _gfortran_caf_transfer_between_remotes ( const int src_access_index, void *src_add_data, const size_t src_add_data_size __attribute__ ((unused)), const size_t src_size, const bool scalar_transfer, int *dst_stat, - int *src_stat, caf_team_t *dst_team __attribute__ ((unused)), - int *dst_team_number __attribute__ ((unused)), - caf_team_t *src_team __attribute__ ((unused)), - int *src_team_number __attribute__ ((unused))) + int *src_stat, caf_team_t *dst_team, int *dst_team_number, + caf_team_t *src_team, int *src_team_number) { caf_single_token_t src_single_token = TOKEN (src_token), dst_single_token = TOKEN (dst_token); @@ -669,6 +785,9 @@ _gfortran_caf_transfer_between_remotes ( if (src_stat) *src_stat = 0; + if (!check_team (src_team, src_team_number, src_stat)) + return; + if (!scalar_transfer) { const size_t desc_size = sizeof (*transfer_desc); @@ -691,6 +810,9 @@ _gfortran_caf_transfer_between_remotes ( if (dst_stat) *dst_stat = 0; + if (!check_team (dst_team, dst_team_number, dst_stat)) + return; + if (scalar_transfer) transfer_ptr = *(void **) transfer_ptr; @@ -859,14 +981,14 @@ _gfortran_caf_lock (caf_token_t token, size_t index, { *acquired_lock = (int) false; if (stat) - *stat = 0; - return; + *stat = GFC_STAT_LOCKED; + return; } if (stat) { - *stat = 1; + *stat = GFC_STAT_LOCKED; if (errmsg_len > 0) { size_t len = (sizeof (msg) > errmsg_len) ? errmsg_len @@ -899,7 +1021,7 @@ _gfortran_caf_unlock (caf_token_t token, size_t index, if (stat) { - *stat = 1; + *stat = GFC_STAT_UNLOCKED; if (errmsg_len > 0) { size_t len = (sizeof (msg) > errmsg_len) ? errmsg_len @@ -923,3 +1045,109 @@ void _gfortran_caf_random_init (bool repeatable, bool image_distinct) routine. */ _gfortran_random_init (repeatable, image_distinct, 1); } + +void +_gfortran_caf_form_team (int team_no, caf_team_t *team, int *new_index, + int *stat, char *errmsg __attribute__ ((unused)), + size_t errmsg_len __attribute__ ((unused))) +{ + const char alloc_fail_msg[] = "Failed to allocate team"; + caf_single_team_t t; + if (stat) + *stat = 0; + + *team = malloc (sizeof (struct caf_single_team)); + if (unlikely (*team == NULL)) + { + caf_internal_error (alloc_fail_msg, stat, errmsg, errmsg_len); + return; + } + t = *((caf_single_team_t *) team); + t->parent = caf_teams_formed; + t->team_no = team_no; + t->index = new_index ? *new_index : 1; + t->allocated = NULL; + caf_teams_formed = t; +} + +void +_gfortran_caf_change_team (caf_team_t team, int *stat, + char *errmsg __attribute__ ((unused)), + size_t errmsg_len __attribute__ ((unused))) +{ + caf_single_team_t t = (caf_single_team_t) team; + + if (stat) + *stat = 0; + + if (t == caf_teams_formed) + caf_teams_formed = t->parent; + else + for (caf_single_team_t p = caf_teams_formed; p; p = p->parent) + if (p->parent == t) + { + p->parent = t->parent; + break; + } + + t->parent = caf_team_stack; + caf_team_stack = t; +} + +void +_gfortran_caf_end_team (int *stat, char *errmsg, size_t errmsg_len) +{ + caf_single_team_t t = caf_team_stack; + + if (stat) + *stat = 0; + + caf_team_stack = caf_team_stack->parent; + for (struct coarray_allocated *ca = t->allocated; ca;) + { + struct coarray_allocated *nca = ca->next; + _gfortran_caf_deregister ((caf_token_t *) &ca->token, + CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY, stat, + errmsg, errmsg_len); + free (ca); + ca = nca; + } + t->allocated = NULL; + t->parent = caf_teams_formed; + caf_teams_formed = t; +} + +void +_gfortran_caf_sync_team (caf_team_t team __attribute__ ((unused)), int *stat, + char *errmsg __attribute__ ((unused)), + size_t errmsg_len __attribute__ ((unused))) +{ + if (stat) + *stat = 0; +} + +int +_gfortran_caf_team_number (caf_team_t team) +{ + return ((caf_single_team_t) team)->team_no; +} + +caf_team_t +_gfortran_caf_get_team (int32_t *level) +{ + if (!level) + return caf_team_stack; + + switch ((caf_team_level_t) *level) + { + case CAF_INITIAL_TEAM: + return caf_initial_team; + case CAF_PARENT_TEAM: + return caf_team_stack->parent ? caf_team_stack->parent : caf_team_stack; + case CAF_CURRENT_TEAM: + return caf_team_stack; + default: + caf_runtime_error ("Illegal value for GET_TEAM"); + } + return NULL; /* To prevent any warnings. */ +} diff --git a/libgfortran/io/close.c b/libgfortran/io/close.c index 8122311..41d278c 100644 --- a/libgfortran/io/close.c +++ b/libgfortran/io/close.c @@ -84,8 +84,17 @@ st_close (st_parameter_close *clp) if (u != NULL) { - if (close_share (u) < 0) - generate_error (&clp->common, LIBERROR_OS, "Problem in CLOSE"); + if (u->s == NULL) + { + if (u->unit_number < 0) + generate_error (&clp->common, LIBERROR_BAD_UNIT, + "Unit number is negative with no associated file"); + library_end (); + return; + } + else + if (close_share (u) < 0) + generate_error (&clp->common, LIBERROR_OS, "Problem in CLOSE"); if (u->flags.status == STATUS_SCRATCH) { if (status == CLOSE_KEEP) diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c index 06ddf7f..e9fb0a7 100644 --- a/libgfortran/io/open.c +++ b/libgfortran/io/open.c @@ -912,6 +912,16 @@ st_open (st_parameter_open *opp) library_end (); return; } + + if (u->s == NULL) + { + unlock_unit (u); + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Unit number is negative and unit was not already " + "opened with OPEN(NEWUNIT=...)"); + library_end (); + return; + } } if (u == NULL) diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 6592b0b..096e17b 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,169 @@ +2025-04-17 Jakub Jelinek <jakub@redhat.com> + + PR libgomp/119849 + * testsuite/libgomp.c++/allocator-1.C (test_inequality, main): Guard + ompx::allocator::gnu_pinned_mem uses with #ifdef __gnu_linux__. + * testsuite/libgomp.c++/allocator-2.C (main): Likewise. + +2025-04-17 Tobias Burnus <tburnus@baylibre.com> + + * libgomp.texi (gcn interop, nvptx interop): For HIP with C/C++, add + a note about setting a preprocessor define. + +2025-04-16 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-pr118794-1.C: Remove + 'ALWAYS_INLINE' workaround. + +2025-04-16 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/106445 + * testsuite/libgomp.c++/pr106445-1.C: New. + * testsuite/libgomp.c++/pr106445-1-O0.C: Likewise. + +2025-04-16 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/97106 + * testsuite/libgomp.c++/pr96390.C: Un-XFAIL nvptx offloading. + * testsuite/libgomp.c-c++-common/pr96390.c: Adjust. + +2025-04-15 Tobias Burnus <tburnus@baylibre.com> + + * libgomp.texi (gcn, nvptx): Mention self_maps clause + besides unified_shared_memory in the requirements item. + +2025-04-15 waffl3x <waffl3x@baylibre.com> + + * omp.h.in: Add omp::allocator::* and ompx::allocator::* allocators. + (__detail::__allocator_templ<T, omp_allocator_handle_t>): + New struct template. + (null_allocator<T>): New struct template. + (default_mem<T>): Likewise. + (large_cap_mem<T>): Likewise. + (const_mem<T>): Likewise. + (high_bw_mem<T>): Likewise. + (low_lat_mem<T>): Likewise. + (cgroup_mem<T>): Likewise. + (pteam_mem<T>): Likewise. + (thread_mem<T>): Likewise. + (ompx::allocator::gnu_pinned_mem<T>): Likewise. + * testsuite/libgomp.c++/allocator-1.C: New test. + * testsuite/libgomp.c++/allocator-2.C: New test. + +2025-04-15 Tobias Burnus <tburnus@baylibre.com> + + * libgomp.texi (5.0 Impl. Status): Mark mapping alloc comps as 'Y'. + * testsuite/libgomp.fortran/allocatable-comp.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-3.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-4.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-5.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-6.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-7.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-8.f90: New test. + * testsuite/libgomp.fortran/map-alloc-comp-9.f90: New test. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/118794 + * testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C: + Set '-foffload-options=-mno-fake-exceptions'. + * testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C: + Likewise. + * testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C: + Likewise. + * testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C: + Likewise. + * testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-GCN.C: + Likewise. + * testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-nvptx.C: + Likewise. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C: + Likewise. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C: + Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C: + Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-nvptx.C: + Likewise. + * testsuite/libgomp.c++/target-exceptions-bad_cast-2.C: Adjust. + * testsuite/libgomp.c++/target-exceptions-pr118794-1.C: Likewise. + * testsuite/libgomp.c++/target-exceptions-throw-2.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-2.C: Likewise. + * testsuite/libgomp.c++/target-exceptions-throw-2-O0.C: New. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-throw-3.C: New. + * testsuite/libgomp.oacc-c++/exceptions-throw-3.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-throw-2.C: New. + * testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-GCN.C: Likewise. + * testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-nvptx.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-2.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-nvptx.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-throw-1.C: New. + * testsuite/libgomp.c++/target-exceptions-throw-1-O0.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-throw-1.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-bad_cast-3.C: New. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-bad_cast-2.C: New. + * testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C: Likewise. + * testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C: Likewise. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c++/target-exceptions-bad_cast-1.C: New. + * testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C: Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR target/118794 + * testsuite/libgomp.c++/target-exceptions-pr118794-1.C: New. + * testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C: + Likewise. + * testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C: + Likewise. + +2025-04-14 Thomas Schwinge <tschwinge@baylibre.com> + + PR c++/119692 + * testsuite/libgomp.c++/pr119692-1-1.C: New. + * testsuite/libgomp.c++/pr119692-1-2.C: Likewise. + * testsuite/libgomp.c++/pr119692-1-3.C: Likewise. + * testsuite/libgomp.c++/pr119692-1-4.C: Likewise. + * testsuite/libgomp.c++/pr119692-1-5.C: Likewise. + * testsuite/libgomp.oacc-c++/pr119692-1-1.C: Likewise. + * testsuite/libgomp.oacc-c++/pr119692-1-2.C: Likewise. + * testsuite/libgomp.oacc-c++/pr119692-1-3.C: Likewise. + +2025-04-10 Richard Sandiford <richard.sandiford@arm.com> + + * testsuite/libgomp.c-target/aarch64/firstprivate.c: Add +sve pragma. + * testsuite/libgomp.c-target/aarch64/lastprivate.c: Likewise. + * testsuite/libgomp.c-target/aarch64/private.c: Likewise. + * testsuite/libgomp.c-target/aarch64/shared.c: Likewise. + * testsuite/libgomp.c-target/aarch64/simd-aligned.c: Likewise. + * testsuite/libgomp.c-target/aarch64/simd-nontemporal.c: Likewise. + * testsuite/libgomp.c-target/aarch64/threadprivate.c: Likewise. + * testsuite/libgomp.c-target/aarch64/udr-sve.c: Add an -march option. + (for_reduction): Use "+=" in the reduction loop. + 2025-04-08 Tobias Burnus <tburnus@baylibre.com> PR middle-end/119662 diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index fed9d5e..6909c2b 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -258,7 +258,7 @@ The OpenMP 4.5 specification is fully supported. device memory mapped by an array section @tab P @tab @item Mapping of Fortran pointer and allocatable variables, including pointer and allocatable components of variables - @tab P @tab Mapping of vars with allocatable components unsupported + @tab Y @tab @item @code{defaultmap} extensions @tab Y @tab @item @code{declare mapper} directive @tab N @tab @item @code{omp_get_supported_active_levels} routine @tab Y @tab @@ -6888,7 +6888,7 @@ The implementation remark: @code{device(ancestor:1)}) are processed serially per @code{target} region such that the next reverse offload region is only executed after the previous one returned. -@item OpenMP code that has a @code{requires} directive with +@item OpenMP code that has a @code{requires} directive with @code{self_maps} or @code{unified_shared_memory} is only supported if all AMD GPUs have the @code{HSA_AMD_SYSTEM_INFO_SVM_ACCESSIBLE_BY_DEFAULT} property; for discrete GPUs, this may require setting the @code{HSA_XNACK} environment @@ -6945,6 +6945,9 @@ or string (str) data type, call @code{omp_get_interop_int}, Note that @code{device_num} is the OpenMP device number while @code{device} is the HIP device number or HSA device handle. +When using HIP with C and C++, the @code{__HIP_PLATFORM_AMD__} preprocessor +macro must be defined before including the HIP header files. + For the API routine call, add the prefix @code{omp_ipr_} to the property name; for instance: @smallexample @@ -7045,7 +7048,7 @@ The implementation remark: Per device, reverse offload regions are processed serially such that the next reverse offload region is only executed after the previous one returned. -@item OpenMP code that has a @code{requires} directive with +@item OpenMP code that has a @code{requires} directive with @code{self_maps} or @code{unified_shared_memory} runs on nvptx devices if and only if all of those support the @code{pageableMemoryAccess} property;@footnote{ @uref{https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-requirements}} @@ -7107,6 +7110,9 @@ or string (str) data type, call @code{omp_get_interop_int}, Note that @code{device_num} is the OpenMP device number while @code{device} is the CUDA, CUDA Driver, or HIP device number. +When using HIP with C and C++, the @code{__HIP_PLATFORM_NVIDIA__} preprocessor +macro must be defined before including the HIP header files. + For the API routine call, add the prefix @code{omp_ipr_} to the property name; for instance: @smallexample diff --git a/libgomp/omp.h.in b/libgomp/omp.h.in index d5e8be4..8d17db1 100644 --- a/libgomp/omp.h.in +++ b/libgomp/omp.h.in @@ -432,4 +432,136 @@ extern const char *omp_get_uid_from_device (int) __GOMP_NOTHROW; } #endif +#if __cplusplus >= 201103L + +/* std::__throw_bad_alloc and std::__throw_bad_array_new_length. */ +#include <bits/functexcept.h> + +namespace omp +{ +namespace allocator +{ + +namespace __detail +{ + +template<typename __T, omp_allocator_handle_t __Handle> +struct __allocator_templ +{ + using value_type = __T; + using pointer = __T*; + using const_pointer = const __T*; + using size_type = __SIZE_TYPE__; + using difference_type = __PTRDIFF_TYPE__; + + __T* + allocate (size_type __n) + { + if (__SIZE_MAX__ / sizeof(__T) < __n) + std::__throw_bad_array_new_length (); + void *__p = omp_aligned_alloc (alignof(__T), __n * sizeof(__T), __Handle); + if (!__p) + std::__throw_bad_alloc (); + return static_cast<__T*>(__p); + } + + void + deallocate (__T *__p, size_type) __GOMP_NOTHROW + { + omp_free (static_cast<void*>(__p), __Handle); + } +}; + +template<typename __T, typename __U, omp_allocator_handle_t __Handle> +constexpr bool +operator== (const __allocator_templ<__T, __Handle>&, + const __allocator_templ<__U, __Handle>&) __GOMP_NOTHROW +{ + return true; +} + +template<typename __T, omp_allocator_handle_t __Handle, + typename __U, omp_allocator_handle_t __UHandle> +constexpr bool +operator== (const __allocator_templ<__T, __Handle>&, + const __allocator_templ<__U, __UHandle>&) __GOMP_NOTHROW +{ + return false; +} + +template<typename __T, typename __U, omp_allocator_handle_t __Handle> +constexpr bool +operator!= (const __allocator_templ<__T, __Handle>&, + const __allocator_templ<__U, __Handle>&) __GOMP_NOTHROW +{ + return false; +} + +template<typename __T, omp_allocator_handle_t __Handle, + typename __U, omp_allocator_handle_t __UHandle> +constexpr bool +operator!= (const __allocator_templ<__T, __Handle>&, + const __allocator_templ<__U, __UHandle>&) __GOMP_NOTHROW +{ + return true; +} + +} /* namespace __detail */ + +template<typename __T> +struct null_allocator + : __detail::__allocator_templ<__T, omp_null_allocator> {}; + +template<typename __T> +struct default_mem + : __detail::__allocator_templ<__T, omp_default_mem_alloc> {}; + +template<typename __T> +struct large_cap_mem + : __detail::__allocator_templ<__T, omp_large_cap_mem_alloc> {}; + +template<typename __T> +struct const_mem + : __detail::__allocator_templ<__T, omp_const_mem_alloc> {}; + +template<typename __T> +struct high_bw_mem + : __detail::__allocator_templ<__T, omp_high_bw_mem_alloc> {}; + +template<typename __T> +struct low_lat_mem + : __detail::__allocator_templ<__T, omp_low_lat_mem_alloc> {}; + +template<typename __T> +struct cgroup_mem + : __detail::__allocator_templ<__T, omp_cgroup_mem_alloc> {}; + +template<typename __T> +struct pteam_mem + : __detail::__allocator_templ<__T, omp_pteam_mem_alloc> {}; + +template<typename __T> +struct thread_mem + : __detail::__allocator_templ<__T, omp_thread_mem_alloc> {}; + +} /* namespace allocator */ + +} /* namespace omp */ + +namespace ompx +{ + +namespace allocator +{ + +template<typename __T> +struct gnu_pinned_mem + : omp::allocator::__detail::__allocator_templ<__T, ompx_gnu_pinned_mem_alloc> {}; + +} /* namespace allocator */ + +} /* namespace ompx */ + +#endif /* __cplusplus */ + #endif /* _OMP_H */ diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp index bc38e3c..54f2f708 100644 --- a/libgomp/testsuite/lib/libgomp.exp +++ b/libgomp/testsuite/lib/libgomp.exp @@ -553,7 +553,23 @@ int main() { } } "-lcuda" ] } -# Return 1 if cublas_v2.h and -lcublas are available. +# Return 1 if -lcuda is available (header not required). + +proc check_effective_target_openacc_libcuda { } { + return [check_no_compiler_messages openacc_libcuda executable { +typedef enum { CUDA_SUCCESS } CUresult; +typedef int CUdevice; +CUresult cuDeviceGet (CUdevice *, int); +int main() { + CUdevice dev; + CUresult r = cuDeviceGet (&dev, 0); + if (r != CUDA_SUCCESS) + return 1; + return 0; +} } "-lcuda" ] +} + +# Return 1 if cublas_v2.h, cuda.h, -lcublas and -lcuda are available. proc check_effective_target_openacc_cublas { } { return [check_no_compiler_messages openacc_cublas executable { @@ -573,7 +589,25 @@ int main() { } } "-lcuda -lcublas" ] } -# Return 1 if cuda_runtime_api.h and -lcudart are available. +# Return 1 if -lcublas is available header not required). + +proc check_effective_target_openacc_libcublas { } { + return [check_no_compiler_messages openacc_libcublas executable { +typedef enum { CUBLAS_STATUS_SUCCESS } cublasStatus_t; +typedef struct cublasContext* cublasHandle_t; +#define cublasCreate cublasCreate_v2 +cublasStatus_t cublasCreate_v2 (cublasHandle_t *); +int main() { + cublasStatus_t s; + cublasHandle_t h; + s = cublasCreate (&h); + if (s != CUBLAS_STATUS_SUCCESS) + return 1; + return 0; +} } "-lcublas" ] +} + +# Return 1 if cuda_runtime_api.h, cuda.h, -lcuda and -lcudart are available. proc check_effective_target_openacc_cudart { } { return [check_no_compiler_messages openacc_cudart executable { @@ -592,3 +626,98 @@ int main() { return 0; } } "-lcuda -lcudart" ] } + +# Return 1 if -lcudart is available (no header required). + +proc check_effective_target_openacc_libcudart { } { + return [check_no_compiler_messages openacc_libcudart executable { +typedef int cudaError_t; +cudaError_t cudaGetDevice(int *); +enum { cudaSuccess }; +int main() { + cudaError_t e; + int devn; + e = cudaGetDevice (&devn); + if (e != cudaSuccess) + return 1; + return 0; +} } "-lcudart" ] +} + +# Return 1 if hip.h is available (no link check; AMD platform). + +proc check_effective_target_gomp_hip_header_amd { } { + return [check_no_compiler_messages gomp_hip_header_amd assembly { +#define __HIP_PLATFORM_AMD__ +#include <hip/hip_runtime_api.h> +int main() { + hipDevice_t dev; + hipError_t r = hipDeviceGet (&dev, 0); + if (r != hipSuccess) + return 1; + return 0; +} }] +} + +# Return 1 if hip.h is available (no link check; Nvidia/CUDA platform). + +proc check_effective_target_gomp_hip_header_nvidia { } { + return [check_no_compiler_messages gomp_hip_header_nvidia assembly { +#define __HIP_PLATFORM_NVIDIA__ +#include <hip/hip_runtime_api.h> +int main() { + hipDevice_t dev; + hipError_t r = hipDeviceGet (&dev, 0); + if (r != hipSuccess) + return 1; + return 0; +} } "-Wno-deprecated-declarations"] +} + +# Return 1 if the Fortran hipfort module is available (no link check) + +proc check_effective_target_gomp_hipfort_module { } { + return [check_no_compiler_messages gomp_hipfort_module assembly { +! Fortran +use hipfort +implicit none +integer(kind(hipSuccess)) :: r +integer(c_int) :: dev +r = hipDeviceGet (dev, 0) +if (r /= hipSuccess) error stop +end +}] +} + +# Return 1 if AMD HIP's -lamdhip64 is available (no header required). + +proc check_effective_target_gomp_libamdhip64 { } { + return [check_no_compiler_messages gomp_libamdhip64 executable { +typedef int hipError_t; +typedef int hipDevice_t; +enum { hipSuccess = 0 }; +hipError_t hipDeviceGet(hipDevice_t*, int); +int main() { + hipDevice_t dev; + hipError_t r = hipDeviceGet (&dev, 0); + if (r != hipSuccess) + return 1; + return 0; +} } "-lamdhip64" ] +} + +# Return 1 if AMD HIP's -lamdhip64 is available (no header required). + +proc check_effective_target_gomp_libhipblas { } { + return [check_no_compiler_messages gomp_libhipblas executable { +typedef enum { HIPBLAS_STATUS_SUCCESS = 0 } hipblasStatus_t; +typedef void* hipblasHandle_t; +hipblasStatus_t hipblasCreate (hipblasHandle_t*); +int main() { + hipblasHandle_t handle; + hipblasStatus_t stat = hipblasCreate (&handle); + if (stat != HIPBLAS_STATUS_SUCCESS) + return 1; + return 0; +} } "-lhipblas" ] +} diff --git a/libgomp/testsuite/libgomp.c++/allocator-1.C b/libgomp/testsuite/libgomp.c++/allocator-1.C new file mode 100644 index 0000000..49425386 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/allocator-1.C @@ -0,0 +1,171 @@ +// { dg-do run } + +#include <omp.h> +#include <memory> +#include <limits> + +template<typename T, template<typename> class Alloc> +void test (T const initial_value = T()) +{ + using Allocator = Alloc<T>; + Allocator a; + using Traits = std::allocator_traits<Allocator>; + static_assert (__is_same(typename Traits::allocator_type, Allocator )); + static_assert (__is_same(typename Traits::value_type, T )); + static_assert (__is_same(typename Traits::pointer, T* )); + static_assert (__is_same(typename Traits::const_pointer, T const* )); + static_assert (__is_same(typename Traits::void_pointer, void* )); + static_assert (__is_same(typename Traits::const_void_pointer, void const* )); + static_assert (__is_same(typename Traits::difference_type, __PTRDIFF_TYPE__)); + static_assert (__is_same(typename Traits::size_type, __SIZE_TYPE__ )); + static_assert (Traits::propagate_on_container_copy_assignment::value == false); + static_assert (Traits::propagate_on_container_move_assignment::value == false); + static_assert (Traits::propagate_on_container_swap::value == false); + static_assert (Traits::is_always_equal::value == true); + + static constexpr __SIZE_TYPE__ correct_max_size + = std::numeric_limits<__SIZE_TYPE__>::max () / sizeof (T); + if (Traits::max_size (a) != correct_max_size) + __builtin_abort (); + + static constexpr __SIZE_TYPE__ alloc_count = 1; + T *p = Traits::allocate (a, alloc_count); + if (p == nullptr) + __builtin_abort (); + Traits::construct (a, p, initial_value); + if (*p != initial_value) + __builtin_abort (); + Traits::destroy (a, p); + Traits::deallocate (a, p, alloc_count); + /* Not interesting but might as well test it. */ + static_cast<void>(Traits::select_on_container_copy_construction (a)); + + if (!(a == Allocator())) + __builtin_abort (); + if (a != Allocator()) + __builtin_abort (); + if (!(a == Alloc<void>())) + __builtin_abort (); + if (a != Alloc<void>()) + __builtin_abort (); +} + +#define CHECK_INEQUALITY(other_alloc_templ, type) \ +do { \ + /* Skip tests for itself, those are equal. Intantiate each */ \ + /* one with void so we can easily tell if they are the same. */ \ + if (!__is_same (AllocTempl<void>, other_alloc_templ<void>)) \ + { \ + other_alloc_templ<type> other; \ + if (a == other) \ + __builtin_abort (); \ + if (!(a != other)) \ + __builtin_abort (); \ + } \ +} while (false) + +template<typename T, template<typename> class AllocTempl> +void test_inequality () +{ + using Allocator = AllocTempl<T>; + Allocator a; + CHECK_INEQUALITY (omp::allocator::null_allocator, void); + CHECK_INEQUALITY (omp::allocator::default_mem, void); + CHECK_INEQUALITY (omp::allocator::large_cap_mem, void); + CHECK_INEQUALITY (omp::allocator::const_mem, void); + CHECK_INEQUALITY (omp::allocator::high_bw_mem, void); + CHECK_INEQUALITY (omp::allocator::low_lat_mem, void); + CHECK_INEQUALITY (omp::allocator::cgroup_mem, void); + CHECK_INEQUALITY (omp::allocator::pteam_mem, void); + CHECK_INEQUALITY (omp::allocator::thread_mem, void); +#ifdef __gnu_linux__ + /* Pinning not implemented on other targets. */ + CHECK_INEQUALITY (ompx::allocator::gnu_pinned_mem, void); +#endif + /* And again with the same type passed to the allocator. */ + CHECK_INEQUALITY (omp::allocator::null_allocator, T); + CHECK_INEQUALITY (omp::allocator::default_mem, T); + CHECK_INEQUALITY (omp::allocator::large_cap_mem, T); + CHECK_INEQUALITY (omp::allocator::const_mem, T); + CHECK_INEQUALITY (omp::allocator::high_bw_mem, T); + CHECK_INEQUALITY (omp::allocator::low_lat_mem, T); + CHECK_INEQUALITY (omp::allocator::cgroup_mem, T); + CHECK_INEQUALITY (omp::allocator::pteam_mem, T); + CHECK_INEQUALITY (omp::allocator::thread_mem, T); +#ifdef __gnu_linux__ + CHECK_INEQUALITY (ompx::allocator::gnu_pinned_mem, T); +#endif +} + +#undef CHECK_INEQUALITY + +struct S +{ + int _v0; + bool _v1; + float _v2; + + bool operator== (S const& other) const noexcept { + return _v0 == other._v0 + && _v1 == other._v1 + && _v2 == other._v2; + } + bool operator!= (S const& other) const noexcept { + return !this->operator==(other); + } +}; + +int main () +{ + test<int, omp::allocator::null_allocator>(42); + test<int, omp::allocator::default_mem>(42); + test<int, omp::allocator::large_cap_mem>(42); + test<int, omp::allocator::const_mem>(42); + test<int, omp::allocator::high_bw_mem>(42); + test<int, omp::allocator::low_lat_mem>(42); + test<int, omp::allocator::cgroup_mem>(42); + test<int, omp::allocator::pteam_mem>(42); + test<int, omp::allocator::thread_mem>(42); +#ifdef __gnu_linux__ + test<int, ompx::allocator::gnu_pinned_mem>(42); +#endif + + test<long long, omp::allocator::null_allocator>(42); + test<long long, omp::allocator::default_mem>(42); + test<long long, omp::allocator::large_cap_mem>(42); + test<long long, omp::allocator::const_mem>(42); + test<long long, omp::allocator::high_bw_mem>(42); + test<long long, omp::allocator::low_lat_mem>(42); + test<long long, omp::allocator::cgroup_mem>(42); + test<long long, omp::allocator::pteam_mem>(42); + test<long long, omp::allocator::thread_mem>(42); +#ifdef __gnu_linux__ + test<long long, ompx::allocator::gnu_pinned_mem>(42); +#endif + + test<S, omp::allocator::null_allocator>( S{42, true, 128.f}); + test<S, omp::allocator::default_mem>( S{42, true, 128.f}); + test<S, omp::allocator::large_cap_mem>( S{42, true, 128.f}); + test<S, omp::allocator::const_mem>( S{42, true, 128.f}); + test<S, omp::allocator::high_bw_mem>( S{42, true, 128.f}); + test<S, omp::allocator::low_lat_mem>( S{42, true, 128.f}); + test<S, omp::allocator::cgroup_mem>( S{42, true, 128.f}); + test<S, omp::allocator::pteam_mem>( S{42, true, 128.f}); + test<S, omp::allocator::thread_mem>( S{42, true, 128.f}); +#ifdef __gnu_linux__ + test<S, ompx::allocator::gnu_pinned_mem>(S{42, true, 128.f}); +#endif + + test_inequality<int, omp::allocator::null_allocator>(); + test_inequality<int, omp::allocator::default_mem>(); + test_inequality<int, omp::allocator::large_cap_mem>(); + test_inequality<int, omp::allocator::const_mem>(); + test_inequality<int, omp::allocator::high_bw_mem>(); + test_inequality<int, omp::allocator::low_lat_mem>(); + test_inequality<int, omp::allocator::cgroup_mem>(); + test_inequality<int, omp::allocator::pteam_mem>(); + test_inequality<int, omp::allocator::thread_mem>(); +#ifdef __gnu_linux__ + test_inequality<int, ompx::allocator::gnu_pinned_mem>(); +#endif +} diff --git a/libgomp/testsuite/libgomp.c++/allocator-2.C b/libgomp/testsuite/libgomp.c++/allocator-2.C new file mode 100644 index 0000000..ca94fc7 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/allocator-2.C @@ -0,0 +1,141 @@ +// { dg-do run } +// { dg-additional-options "-Wno-psabi" } + +#include <omp.h> +#include <vector> + +template<typename T> +bool ptr_is_aligned(T *ptr, std::size_t alignment) +{ + /* ALIGNMENT must be a power of 2. */ + if ((alignment & (alignment - 1)) != 0) + __builtin_abort (); + __UINTPTR_TYPE__ ptr_value + = reinterpret_cast<__UINTPTR_TYPE__>(static_cast<void*>(ptr)); + return (ptr_value % alignment) == 0; +} + +template<typename T, template<typename> class Alloc> +void f (T v0, T v1, T v2, T v3) +{ + std::vector<T, Alloc<T>> vec; + vec.push_back (v0); + vec.push_back (v1); + vec.push_back (v2); + vec.push_back (v3); + if (vec.at (0) != v0) + __builtin_abort (); + if (vec.at (1) != v1) + __builtin_abort (); + if (vec.at (2) != v2) + __builtin_abort (); + if (vec.at (3) != v3) + __builtin_abort (); + if (!ptr_is_aligned (&vec.at (0), alignof (T))) + __builtin_abort (); + if (!ptr_is_aligned (&vec.at (1), alignof (T))) + __builtin_abort (); + if (!ptr_is_aligned (&vec.at (2), alignof (T))) + __builtin_abort (); + if (!ptr_is_aligned (&vec.at (3), alignof (T))) + __builtin_abort (); +} + +struct S0 +{ + int _v0; + bool _v1; + float _v2; + + bool operator== (S0 const& other) const noexcept { + return _v0 == other._v0 + && _v1 == other._v1 + && _v2 == other._v2; + } + bool operator!= (S0 const& other) const noexcept { + return !this->operator==(other); + } +}; + +struct alignas(128) S1 +{ + int _v0; + bool _v1; + float _v2; + + bool operator== (S1 const& other) const noexcept { + return _v0 == other._v0 + && _v1 == other._v1 + && _v2 == other._v2; + } + bool operator!= (S1 const& other) const noexcept { + return !this->operator==(other); + } +}; + +/* Note: the test for const_mem should be disabled in the future. */ + +int main () +{ + f<int, omp::allocator::null_allocator >(0, 1, 2, 3); + f<int, omp::allocator::default_mem >(0, 1, 2, 3); + f<int, omp::allocator::large_cap_mem >(0, 1, 2, 3); + f<int, omp::allocator::const_mem >(0, 1, 2, 3); + f<int, omp::allocator::high_bw_mem >(0, 1, 2, 3); + f<int, omp::allocator::low_lat_mem >(0, 1, 2, 3); + f<int, omp::allocator::cgroup_mem >(0, 1, 2, 3); + f<int, omp::allocator::pteam_mem >(0, 1, 2, 3); + f<int, omp::allocator::thread_mem >(0, 1, 2, 3); +#ifdef __gnu_linux__ + /* Pinning not implemented on other targets. */ + f<int, ompx::allocator::gnu_pinned_mem>(0, 1, 2, 3); +#endif + + f<long long, omp::allocator::null_allocator >(0, 1, 2, 3); + f<long long, omp::allocator::default_mem >(0, 1, 2, 3); + f<long long, omp::allocator::large_cap_mem >(0, 1, 2, 3); + f<long long, omp::allocator::const_mem >(0, 1, 2, 3); + f<long long, omp::allocator::high_bw_mem >(0, 1, 2, 3); + f<long long, omp::allocator::low_lat_mem >(0, 1, 2, 3); + f<long long, omp::allocator::cgroup_mem >(0, 1, 2, 3); + f<long long, omp::allocator::pteam_mem >(0, 1, 2, 3); + f<long long, omp::allocator::thread_mem >(0, 1, 2, 3); +#ifdef __gnu_linux__ + f<long long, ompx::allocator::gnu_pinned_mem>(0, 1, 2, 3); +#endif + + S0 s0_0{ 42, true, 111128.f}; + S0 s0_1{ 142, false, 11128.f}; + S0 s0_2{ 1142, true, 1128.f}; + S0 s0_3{11142, false, 128.f}; + f<S0, omp::allocator::null_allocator >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::default_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::large_cap_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::const_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::high_bw_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::low_lat_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::cgroup_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::pteam_mem >(s0_0, s0_1, s0_2, s0_3); + f<S0, omp::allocator::thread_mem >(s0_0, s0_1, s0_2, s0_3); +#ifdef __gnu_linux__ + f<S0, ompx::allocator::gnu_pinned_mem>(s0_0, s0_1, s0_2, s0_3); +#endif + + S1 s1_0{ 42, true, 111128.f}; + S1 s1_1{ 142, false, 11128.f}; + S1 s1_2{ 1142, true, 1128.f}; + S1 s1_3{11142, false, 128.f}; + + f<S1, omp::allocator::null_allocator >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::default_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::large_cap_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::const_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::high_bw_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::low_lat_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::cgroup_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::pteam_mem >(s1_0, s1_1, s1_2, s1_3); + f<S1, omp::allocator::thread_mem >(s1_0, s1_1, s1_2, s1_3); +#ifdef __gnu_linux__ + f<S1, ompx::allocator::gnu_pinned_mem>(s1_0, s1_1, s1_2, s1_3); +#endif +} diff --git a/libgomp/testsuite/libgomp.c++/pr106445-1-O0.C b/libgomp/testsuite/libgomp.c++/pr106445-1-O0.C new file mode 100644 index 0000000..bcd499c --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr106445-1-O0.C @@ -0,0 +1,3 @@ +// { dg-additional-options -O0 } + +#include "pr106445-1.C" diff --git a/libgomp/testsuite/libgomp.c++/pr106445-1.C b/libgomp/testsuite/libgomp.c++/pr106445-1.C new file mode 100644 index 0000000..329ce62 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr106445-1.C @@ -0,0 +1,18 @@ +#include <vector> + +int main() +{ +#pragma omp target + { + { + std::vector<int> v; + if (!v.empty()) + __builtin_abort(); + } + { + std::vector<int> v(100); + if (v.capacity() < 100) + __builtin_abort(); + } + } +} diff --git a/libgomp/testsuite/libgomp.c++/pr119692-1-1.C b/libgomp/testsuite/libgomp.c++/pr119692-1-1.C new file mode 100644 index 0000000..1f59b15 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr119692-1-1.C @@ -0,0 +1,10 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -UDEFAULT } + Wrong code for offloading execution. + { dg-additional-options -foffload=disable } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +#include "../libgomp.oacc-c++/pr119692-1-1.C" + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target .* map\(tofrom:_ZTI2C2 \[len: [0-9]+\] \[runtime_implicit\]\) map\(tofrom:_ZTI2C1 \[len: [0-9]+\] \[runtime_implicit\]\) map\(tofrom:_ZTV2C1 \[len: [0-9]+\] \[runtime_implicit\]\)$} gimple { xfail *-*-* } } } */ diff --git a/libgomp/testsuite/libgomp.c++/pr119692-1-2.C b/libgomp/testsuite/libgomp.c++/pr119692-1-2.C new file mode 100644 index 0000000..e7ac818 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr119692-1-2.C @@ -0,0 +1,11 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -DDEFAULT=defaultmap(none) } + Fails to compile. + { dg-do compile } */ + +#include "pr119692-1-1.C" + +/* { dg-bogus {error: '_ZTV2C1' not specified in enclosing 'target'} PR119692 { xfail *-*-* } 0 } + { dg-bogus {error: '_ZTI2C2' not specified in enclosing 'target'} PR119692 { xfail *-*-* } 0 } + { dg-bogus {error: '_ZTI2C1' not specified in enclosing 'target'} PR119692 { xfail *-*-* } 0 } */ diff --git a/libgomp/testsuite/libgomp.c++/pr119692-1-3.C b/libgomp/testsuite/libgomp.c++/pr119692-1-3.C new file mode 100644 index 0000000..733feb8 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr119692-1-3.C @@ -0,0 +1,10 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -DDEFAULT=defaultmap(present) } + Wrong code for offloading execution. + { dg-xfail-run-if PR119692 { offload_device } } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +#include "pr119692-1-1.C" + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target .* defaultmap\(present\) map\(force_present:_ZTI2C2 \[len: [0-9]+\] \[runtime_implicit\]\) map\(force_present:_ZTI2C1 \[len: [0-9]+\] \[runtime_implicit\]\) map\(force_present:_ZTV2C1 \[len: [0-9]+\] \[runtime_implicit\]\)$} gimple { xfail *-*-* } } } */ diff --git a/libgomp/testsuite/libgomp.c++/pr119692-1-4.C b/libgomp/testsuite/libgomp.c++/pr119692-1-4.C new file mode 100644 index 0000000..6995f26 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr119692-1-4.C @@ -0,0 +1,10 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -DDEFAULT=defaultmap(firstprivate) } + Wrong code for offloading execution. + { dg-xfail-run-if PR119692 { offload_device } } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +#include "pr119692-1-1.C" + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target .* defaultmap\(firstprivate\) firstprivate\(_ZTI2C2\) firstprivate\(_ZTI2C1\) firstprivate\(_ZTV2C1\)$} gimple { xfail *-*-* } } } */ diff --git a/libgomp/testsuite/libgomp.c++/pr119692-1-5.C b/libgomp/testsuite/libgomp.c++/pr119692-1-5.C new file mode 100644 index 0000000..02121b6 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr119692-1-5.C @@ -0,0 +1,10 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -DDEFAULT=defaultmap(to) } + Wrong code for offloading execution. + { dg-xfail-run-if PR119692 { offload_device } } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +#include "pr119692-1-1.C" + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target .* defaultmap\(to\) map\(to:_ZTI2C2 \[len: [0-9]+\] \[runtime_implicit\]\) map\(to:_ZTI2C1 \[len: [0-9]+\] \[runtime_implicit\]\) map\(to:_ZTV2C1 \[len: [0-9]+\] \[runtime_implicit\]\)$} gimple { xfail *-*-* } } } */ diff --git a/libgomp/testsuite/libgomp.c++/pr96390.C b/libgomp/testsuite/libgomp.c++/pr96390.C index 1f3c3e0..be19601 100644 --- a/libgomp/testsuite/libgomp.c++/pr96390.C +++ b/libgomp/testsuite/libgomp.c++/pr96390.C @@ -1,6 +1,4 @@ /* { dg-additional-options "-O0 -fdump-tree-omplower" } */ -/* { dg-additional-options "-foffload=-Wa,--verify" { target offload_target_nvptx } } */ -/* { dg-xfail-if "PR 97106/PR 97102 - .alias not (yet) supported for nvptx" { offload_target_nvptx } } */ #include <cstdlib> #include <type_traits> diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C new file mode 100644 index 0000000..3848295 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C @@ -0,0 +1,25 @@ +/* 'std::bad_cast' exception in OpenMP 'target' region. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "../libgomp.oacc-c++/exceptions-bad_cast-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + For host execution, we print something like: + terminate called after throwing an instance of 'std::bad_cast' + what(): std::bad_cast + Aborted (core dumped) + { dg-output {.*std::bad_cast} { target { ! offload_device } } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + TODO For GCN, nvptx offload execution, this currently doesn't 'abort' due to + the 'std::bad_cast' exception, but rather due to SIGSEGV in 'dynamic_cast'; + PR119692. + + { dg-shouldfail {'std::bad_cast' exception} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C new file mode 100644 index 0000000..93884df --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C @@ -0,0 +1,19 @@ +/* 'std::bad_cast' exception in OpenMP 'target' region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target offload_target_amdgcn } } + { dg-additional-options -foffload=amdgcn-amdhsa } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-bad_cast-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C new file mode 100644 index 0000000..83ec89b --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C @@ -0,0 +1,19 @@ +/* 'std::bad_cast' exception in OpenMP 'target' region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target offload_target_nvptx } } + { dg-additional-options -foffload=nvptx-none } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-bad_cast-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C new file mode 100644 index 0000000..8861740 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C @@ -0,0 +1,24 @@ +/* 'std::bad_cast' exception in OpenMP 'target' region, caught. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {_ZTISt8bad_cast} PR119734 { target offload_target_nvptx xfail *-*-* } 0 } + { dg-excess-errors {'mkoffload' failure etc.} { xfail offload_target_nvptx } } */ + +#include "../libgomp.oacc-c++/exceptions-bad_cast-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-output {.*caught 'std::bad_cast'[\r\n]+} { target { ! offload_device } } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + TODO For GCN, nvptx offload execution, this currently doesn't 'abort' due to + the 'std::bad_cast' exception, but rather due to SIGSEGV in 'dynamic_cast'; + PR119692. + + For GCN, nvptx offload execution, there is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'MyException' exception} { offload_device } } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-3.C b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-3.C new file mode 100644 index 0000000..efed64f --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-3.C @@ -0,0 +1,17 @@ +/* 'std::bad_cast' exception in OpenMP 'target' region, dead code. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -DDEFAULT=defaultmap(to) } + ... to avoid wrong code for offloading execution; PR119692. + With this, the device code still isn't correct, but the defects are in dead code. + { dg-additional-options -fdump-tree-gimple } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "../libgomp.oacc-c++/exceptions-bad_cast-3.C" + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target .* defaultmap\(to\) map\(to:_ZTI2C2 \[len: [0-9]+\] \[runtime_implicit\]\) map\(to:_ZTI2C1 \[len: [0-9]+\] \[runtime_implicit\]\) map\(to:_ZTV2C1 \[len: [0-9]+\] \[runtime_implicit\]\)$} gimple { xfail *-*-* } } } */ + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C b/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C new file mode 100644 index 0000000..3cdedf4 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C @@ -0,0 +1,24 @@ +/* Exception handling constructs in dead code, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target offload_target_amdgcn } } + { dg-additional-options -foffload=amdgcn-amdhsa } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-pr118794-1.C" + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + Given '-O0' and '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'f':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C b/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C new file mode 100644 index 0000000..ef996cf --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C @@ -0,0 +1,24 @@ +/* Exception handling constructs in dead code, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target offload_target_nvptx } } + { dg-additional-options -foffload=nvptx-none } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-pr118794-1.C" + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + Given '-O0' and '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'f':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1.C b/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1.C new file mode 100644 index 0000000..24e3d07 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1.C @@ -0,0 +1,57 @@ +/* Exception handling constructs in dead code. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -O0 } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-pr118794-1.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1.C'. */ + +#pragma omp begin declare target + +bool ok = false; + +template <typename T> +struct C +{ + C() + { + ok = true; + } + C(int) {}; + ~C() {}; + + __attribute__((noipa)) + void m() + { + C c; + } +}; + +inline void f() +{ + C<double> c(1); + c.m(); +} + +#pragma omp end declare target + +int main() +{ +#pragma omp target + { + f(); + } +#pragma omp target update from(ok) + if (!ok) + __builtin_abort(); +} + +/* In this specific C++ arrangement, distilled from PR118794, GCC synthesizes + '__builtin_eh_pointer', '__builtin_unwind_resume' calls as dead code in 'f': + { dg-final { scan-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__builtin_eh_pointer, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__builtin_unwind_resume, } 1 optimized } } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-1-O0.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-1-O0.C new file mode 100644 index 0000000..00d7c13 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-1-O0.C @@ -0,0 +1,23 @@ +/* 'throw' in OpenMP 'target' region. */ + +/* { dg-additional-options -O0 } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-throw-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + For host execution, we print something like: + terminate called after throwing an instance of 'MyException' + Aborted (core dumped) + { dg-output {.*MyException} { target { ! offload_device } } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + { dg-shouldfail {'MyException' exception} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-1.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-1.C new file mode 100644 index 0000000..2467061 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-1.C @@ -0,0 +1,25 @@ +/* 'throw' in OpenMP 'target' region. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {Size expression must be absolute\.} PR119737 { target offload_target_amdgcn xfail *-*-* } 0 } + { dg-ice PR119737 { offload_target_amdgcn } } + { dg-excess-errors {'mkoffload' failures etc.} { xfail offload_target_amdgcn } } */ + +#include "../libgomp.oacc-c++/exceptions-throw-1.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + For host execution, we print something like: + terminate called after throwing an instance of 'MyException' + Aborted (core dumped) + { dg-output {.*MyException} { target { ! offload_device } } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + { dg-shouldfail {'MyException' exception} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-O0.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-O0.C new file mode 100644 index 0000000..b7a311d --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-O0.C @@ -0,0 +1,25 @@ +/* 'throw' in OpenMP 'target' region, caught. */ + +/* { dg-additional-options -O0 } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {undefined symbol: typeinfo name for MyException} PR119806 { target offload_target_amdgcn xfail *-*-* } 0 } + { dg-excess-errors {'mkoffload' failure etc.} { xfail offload_target_amdgcn } } */ +/* { dg-bogus {Initial value type mismatch} PR119806 { target offload_target_nvptx xfail *-*-* } 0 } + { dg-excess-errors {'mkoffload' failure etc.} { xfail offload_target_nvptx } } */ + +#include "target-exceptions-throw-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-output {.*caught 'MyException'[\r\n]+} { target { ! offload_device } } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + For GCN, nvptx offload execution, there is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'MyException' exception} { offload_device } } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-GCN.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-GCN.C new file mode 100644 index 0000000..9905b1f --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-GCN.C @@ -0,0 +1,21 @@ +/* 'throw' in OpenMP 'target' region, caught, -foffload-options=-mno-fake-exceptions. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target offload_target_amdgcn } } + { dg-additional-options -foffload=amdgcn-amdhsa } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-throw-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-nvptx.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-nvptx.C new file mode 100644 index 0000000..da267d6 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-nvptx.C @@ -0,0 +1,21 @@ +/* 'throw' in OpenMP 'target' region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target offload_target_nvptx } } + { dg-additional-options -foffload=nvptx-none } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "target-exceptions-throw-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2.C new file mode 100644 index 0000000..e85e6c3 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-2.C @@ -0,0 +1,23 @@ +/* 'throw' in OpenMP 'target' region, caught. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {Size expression must be absolute\.} PR119737 { target offload_target_amdgcn xfail *-*-* } 0 } + { dg-ice PR119737 { offload_target_amdgcn } } + { dg-excess-errors {'mkoffload' failures etc.} { xfail offload_target_amdgcn } } */ + +#include "../libgomp.oacc-c++/exceptions-throw-2.C" + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-output {.*caught 'MyException'[\r\n]+} { target { ! offload_device } } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + For GCN, nvptx offload execution, there is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'MyException' exception} { offload_device } } */ diff --git a/libgomp/testsuite/libgomp.c++/target-exceptions-throw-3.C b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-3.C new file mode 100644 index 0000000..c35180d --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-exceptions-throw-3.C @@ -0,0 +1,19 @@ +/* 'throw' in OpenMP 'target' region, dead code. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -DDEFAULT=defaultmap(to) } + ... to avoid wrong code for offloading execution; PR119692. + With this, the device code still isn't correct, but the defects are in dead code. + { dg-additional-options -fdump-tree-gimple } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "../libgomp.oacc-c++/exceptions-throw-3.C" + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target .* defaultmap\(to\) map\(to:_ZTI11MyException \[len: [0-9]+\] \[runtime_implicit\]\)$} gimple { xfail *-*-* } } } */ + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } */ diff --git a/libgomp/testsuite/libgomp.c-c++-common/interop-2.c b/libgomp/testsuite/libgomp.c-c++-common/interop-2.c new file mode 100644 index 0000000..a7526dc --- /dev/null +++ b/libgomp/testsuite/libgomp.c-c++-common/interop-2.c @@ -0,0 +1,129 @@ +/* { dg-do run } */ +/* { dg-additional-options "-lm" } */ + +/* Note: At the time this program was written, Nvptx was not asynchronous + enough to trigger the issue (with a 'nowait' added); however, one + AMD GPUs, it triggered. */ + +/* Test whether nowait / dependency is handled correctly. + Motivated by OpenMP_VV's 5.1/interop/test_interop_target.c + + The code actually only creates a streaming object without actually using it, + except for dependency tracking. + + Note that there is a difference between having a steaming (targetsync) object + and not (= omp_interop_none); at least if one assumes that omp_interop_none + does not include 'targetsync' as (effective) interop type - in that case, + 'nowait' has no effect and the 'depend' is active as included task, otherwise + the code continues with the depend being active only for the about to be + destroyed or used thread. + + The OpenMP spec states (here 6.0): + "If the interop-type set includes 'targetsync', an empty mergeable task is + generated. If the 'nowait' clause is not present on the construct then + the task is also an included task. If the interop-type set does not + include 'targetsync', the 'nowait' clause has no effect. Any depend + clauses that are present on the construct apply to the generated task. */ + +#include <omp.h> + +void +test_async (const int dev) +{ + constexpr int N = 2048; + constexpr int ulp = 4; + constexpr double M_PI = 2.0 * __builtin_acos (0.0); + omp_interop_t obj1, obj2; + double A[N] = { }; + int B[N] = { }; + + /* Create interop object. */ + #pragma omp interop device(dev) init(targetsync : obj1, obj2) + + if (dev == omp_initial_device || dev == omp_get_num_devices ()) + { + if (obj1 != omp_interop_none || obj2 != omp_interop_none) + __builtin_abort (); + } + else + { + if (obj1 == omp_interop_none || obj2 == omp_interop_none) + __builtin_abort (); + } + + /* DOUBLE */ + + /* Now in the background update it, slowly enough that the + code afterwards is reached while still running asynchronously. + As OpenMP_VV's Issue #863 shows, the overhead is high enough to + fail even when only doing an atomic integer increment. */ + + #pragma omp target device(dev) map(A) depend(out: A[:N]) nowait + for (int i = 0; i < N; i++) + #pragma omp atomic update + A[i] += __builtin_sin (2*i*M_PI/N); + + /* DESTROY take care of the dependeny such that ... */ + + if (obj1 == omp_interop_none) + { + // Same as below as 'nowait' is ignored. + #pragma omp interop destroy(obj1) depend(in: A[:N]) nowait + } + else + { + #pragma omp interop destroy(obj1) depend(in: A[:N]) + } + + /* ... this code is only executed once the dependency as been fulfilled. */ + + /* Check the value - part I: quick, avoid A[0] == sin(0) = 0. */ + for (int i = 1; i < N; i++) + if (A[i] == 0.0) + __builtin_abort (); + + /* Check the value - part II: throughly */ + for (int i = 0; i < N; i++) + { + double x = A[i]; + double y = __builtin_sin (2*i*M_PI/N); + if (__builtin_fabs (x - y) > ulp * __builtin_fabs (x+y) * __DBL_EPSILON__) + __builtin_abort (); + } + + /* Integer */ + + #pragma omp target device(dev) map(B) depend(out: B[:N]) nowait + for (int i = 0; i < N; i++) + #pragma omp atomic update + B[i] += 42; + + /* Same - but using USE. */ + if (obj2 == omp_interop_none) + { + // Same as below as 'nowait' is ignored. + #pragma omp interop use(obj2) depend(in: B[:N]) nowait + } + else + { + #pragma omp interop use(obj2) depend(in: B[:N]) + } + + for (int i = 0; i < N; i++) + if (B[i] != 42) + __builtin_abort (); + + #pragma omp interop destroy(obj2) +} + +int +main () +{ + int ndev = omp_get_num_devices (); + + for (int dev = 0; dev <= ndev; dev++) + test_async (dev); + test_async (omp_initial_device); + + return 0; +} diff --git a/libgomp/testsuite/libgomp.c-c++-common/pr96390.c b/libgomp/testsuite/libgomp.c-c++-common/pr96390.c index b89f934..ca7865d 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/pr96390.c +++ b/libgomp/testsuite/libgomp.c-c++-common/pr96390.c @@ -1,7 +1,7 @@ /* { dg-additional-options "-O0 -fdump-tree-omplower" } */ /* { dg-additional-options "-foffload=-Wa,--verify" { target offload_target_nvptx } } */ /* { dg-require-alias "" } */ -/* { dg-xfail-if "PR 97102/PR 97106 - .alias not (yet) supported for nvptx" { offload_target_nvptx } } */ +/* { dg-xfail-if PR105018 { offload_target_nvptx } } */ #ifdef __cplusplus extern "C" { diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c b/libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c index 930ca62..58674e2 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <omp.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c b/libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c index be5a618..2f93d7b 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <omp.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/private.c b/libgomp/testsuite/libgomp.c-target/aarch64/private.c index 0ca74fe..fed5370 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/private.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/private.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <omp.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/shared.c b/libgomp/testsuite/libgomp.c-target/aarch64/shared.c index dec41b8..340a668 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/shared.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/shared.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <stdlib.h> #include <omp.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c b/libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c index cc41139..14642c9 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <stdint.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c b/libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c index 3385427..6fe4616 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <stdint.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c b/libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c index 4a39312..aa7d2f9 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c @@ -1,6 +1,8 @@ /* { dg-do run { target aarch64_sve256_hw } } */ /* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +#pragma GCC target "+sve" + #include <arm_sve.h> #include <stdint.h> diff --git a/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c b/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c index c79f4a9..03d93cc 100644 --- a/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c +++ b/libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c @@ -1,5 +1,5 @@ /* { dg-do run { target aarch64_sve256_hw } } */ -/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */ +/* { dg-options "-march=armv8-a+sve -msve-vector-bits=256 -fopenmp -O2" } */ #include <arm_sve.h> @@ -38,7 +38,7 @@ for_reduction () #pragma omp parallel for reduction (+:va) for (j = 0; j < 8; j++) - va = svld1_s32 (svptrue_b32 (), a); + va += svld1_s32 (svptrue_b32 (), a); res = svaddv_s32 (svptrue_b32 (), va); diff --git a/libgomp/testsuite/libgomp.c/interop-cublas-full.c b/libgomp/testsuite/libgomp.c/interop-cublas-full.c new file mode 100644 index 0000000..2df5277 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-cublas-full.c @@ -0,0 +1,176 @@ +/* { dg-require-effective-target openacc_cublas } */ +/* { dg-additional-options "-lcublas" } */ + +/* NOTE: This file is also included by libgomp.c-c++-common/interop-cudablas-libonly.c + to test the fallback version. */ + +/* Check whether cuBlas' daxpy works with an interop object. + daxpy(N, DA, DX, INCX, DY, INCY) + calculates (for DX = DY = 1): + DY(1:N) = DY(1:N) + DA * DX(1:N) + and otherwise N array elements, taking every INCX-th or INCY-th one, repectively. + +Based on the interop example in OpenMP's example document */ + +/* Minimal check whether CUDA works - by checking whether the API routines + seem to work. This includes a fallback if the header is not + available. */ + +#include <assert.h> +#include <omp.h> +#include "../libgomp.c-c++-common/on_device_arch.h" + + +#if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && __has_include(<cublas_v2.h>) && !defined(USE_CUDA_FALLBACK_HEADER) + #include <cuda.h> + #include <cudaTypedefs.h> + #include <cuda_runtime.h> + #include <cublas_v2.h> + +#else + /* Add a poor man's fallback declaration. */ + #if USE_CUDA_FALLBACK_HEADER + // Don't warn. + #elif !__has_include(<cuda.h>) + #warning "Using GCC's cuda.h as fallback for cuda.h" + #elif !__has_include(<cudaTypedefs.h>) + #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h" + #elif !__has_include(<cuda_runtime.h>) + #warning "Using GCC's cuda.h as fallback for cuda_runtime.h" + #else + #warning "Using GCC's cuda.h as fallback for cublas_v2.h" + #endif + #include "../../../include/cuda/cuda.h" + + typedef enum { + CUBLAS_STATUS_SUCCESS = 0, + } cublasStatus_t; + + typedef CUstream cudaStream_t; + typedef struct cublasContext* cublasHandle_t; + + #define cublasCreate cublasCreate_v2 + cublasStatus_t cublasCreate_v2 (cublasHandle_t *); + + #define cublasSetStream cublasSetStream_v2 + cublasStatus_t cublasSetStream_v2 (cublasHandle_t, cudaStream_t); + + #define cublasDaxpy cublasDaxpy_v2 + cublasStatus_t cublasDaxpy_v2(cublasHandle_t, int, const double*, const double*, int, double*, int); +#endif + +static int used_variant = 0; + +void +run_cuBlasdaxpy (int n, double da, const double *dx, int incx, double *dy, int incy, omp_interop_t obj) +{ + used_variant = 1; + + omp_interop_rc_t res; + cublasStatus_t stat; + + omp_intptr_t fr = omp_get_interop_int(obj, omp_ipr_fr_id, &res); + assert (res == omp_irc_success && fr == omp_ifr_cuda); + + cudaStream_t stream = (cudaStream_t) omp_get_interop_ptr (obj, omp_ipr_targetsync, &res); + assert (res == omp_irc_success); + + cublasHandle_t handle; + stat = cublasCreate (&handle); + assert (stat == CUBLAS_STATUS_SUCCESS); + + stat = cublasSetStream (handle, stream); + assert (stat == CUBLAS_STATUS_SUCCESS); + + /* 'da' can be in host or device space, 'dx' and 'dy' must be in device space. */ + stat = cublasDaxpy (handle, n, &da, dx, 1, dy, 1) ; + assert (stat == CUBLAS_STATUS_SUCCESS); +} + + +#pragma omp declare variant(run_cuBlasdaxpy) \ + match(construct={dispatch}, target_device={kind(nohost), arch("nvptx")}) \ + adjust_args(need_device_ptr : dx, dy) \ + append_args(interop(targetsync, prefer_type("cuda"))) + +void +run_daxpy (int n, double da, const double *dx, int incx, double *dy, int incy) +{ + used_variant = 2; + + if (incx == 1 && incy == 1) + #pragma omp simd + for (int i = 0; i < n; i++) + dy[i] += da * dx[i]; + else + { + int ix = 0; + int iy = 0; + for (int i = 0; i < n; i++) + { + dy[iy] += da * dx[ix]; + ix += incx; + iy += incy; + } + } +} + + +void +run_test (int dev) +{ + constexpr int N = 1024; + + // A = {1,2,...,N} + // B = {-1, -2, ..., N} + // B' = daxpy (N, 3, A, incx=1, B, incy=1) + // = B + 3*A + // -> B' = {0, 2, 4, 6, ... } + + double A[N], B[N]; + double factor = 3.0; + for (int i = 0; i < N; i++) + { + A[i] = i; + B[i] = -i; + } + + if (dev != omp_initial_device && dev != omp_get_num_devices ()) + { + #pragma omp target enter data device(dev) map(A, B) + } + + used_variant = 99; + #pragma omp dispatch device(dev) + run_daxpy (N, factor, A, 1, B, 1); + + if (dev != omp_initial_device && dev != omp_get_num_devices ()) + { + #pragma omp target exit data device(dev) map(release: A) map(from: B) + + int tmp = omp_get_default_device (); + omp_set_default_device (dev); + if (on_device_arch_nvptx ()) + assert (used_variant == 1); + else + assert (used_variant == 2); + omp_set_default_device (tmp); + } + else + assert (used_variant == 2); + + for (int i = 0; i < N; i++) + assert (B[i] == 2*i); +} + +int +main () +{ + int ndev = omp_get_num_devices (); + + for (int dev = 0; dev <= ndev; dev++) + run_test (dev); + run_test (omp_initial_device); + + return 0; +} diff --git a/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c b/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c new file mode 100644 index 0000000..89c0652 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c @@ -0,0 +1,7 @@ +/* { dg-require-effective-target openacc_libcublas } */ +/* { dg-additional-options "-lcublas" } */ + +/* Same as interop-cudablas-full.c, but also works if the header is not available. */ + +#define USE_CUDA_FALLBACK_HEADER 1 +#include "interop-cublas-full.c" diff --git a/libgomp/testsuite/libgomp.c/interop-cuda-full.c b/libgomp/testsuite/libgomp.c/interop-cuda-full.c new file mode 100644 index 0000000..38aa6b1 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-cuda-full.c @@ -0,0 +1,159 @@ +/* { dg-require-effective-target openacc_cuda } */ +/* { dg-require-effective-target openacc_cudart } */ +/* { dg-additional-options "-lcuda -lcudart" } */ + +/* NOTE: This file is also included by libgomp.c-c++-common/interop-cuda-libonly.c + to test the fallback version, which defines USE_CUDA_FALLBACK_HEADER. */ + +/* Minimal check whether CUDA works - by checking whether the API routines + seem to work. This includes a fallback if the header is not + available. */ + +#include <assert.h> +#include <omp.h> + +#if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && !defined(USE_CUDA_FALLBACK_HEADER) + #include <cuda.h> + #include <cudaTypedefs.h> + #include <cuda_runtime.h> + +#else + /* Add a poor man's fallback declaration. */ + #if USE_CUDA_FALLBACK_HEADER + // Don't warn. + #elif !__has_include(<cuda.h>) + #warning "Using GCC's cuda.h as fallback for cuda.h" + #elif !__has_include(<cudaTypedefs.h>) + #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h" + #else + #warning "Using GCC's cuda.h as fallback for cuda_runtime.h" + #endif + #include "../../../include/cuda/cuda.h" + + typedef int cudaError_t; + typedef CUstream cudaStream_t; + enum { + cudaSuccess = 0 + }; + + enum cudaDeviceAttr { + cudaDevAttrClockRate = 13, + cudaDevAttrMaxGridDimX = 5 + }; + + cudaError_t cudaDeviceGetAttribute (int *, enum cudaDeviceAttr, int); + cudaError_t cudaStreamQuery(cudaStream_t); + CUresult cuCtxGetApiVersion(CUcontext, unsigned int *); + CUresult cuStreamGetCtx (CUstream, CUcontext *); +#endif + +int +main () +{ + int ivar; + unsigned uvar; + omp_interop_rc_t res; + omp_interop_t obj_cuda = omp_interop_none; + omp_interop_t obj_cuda_driver = omp_interop_none; + cudaError_t cuda_err; + CUresult cu_err; + + #pragma omp interop init(target, targetsync, prefer_type("cuda") : obj_cuda) \ + init(target, targetsync, prefer_type("cuda_driver") : obj_cuda_driver) \ + + omp_interop_fr_t fr = (omp_interop_fr_t) omp_get_interop_int (obj_cuda, omp_ipr_fr_id, &res); + assert (res == omp_irc_success); + assert (fr == omp_ifr_cuda); + + fr = (omp_interop_fr_t) omp_get_interop_int (obj_cuda_driver, omp_ipr_fr_id, &res); + assert (res == omp_irc_success); + assert (fr == omp_ifr_cuda_driver); + + ivar = (int) omp_get_interop_int (obj_cuda, omp_ipr_vendor, &res); + assert (res == omp_irc_success); + assert (ivar == 11); + + ivar = (int) omp_get_interop_int (obj_cuda_driver, omp_ipr_vendor, &res); + assert (res == omp_irc_success); + assert (ivar == 11); + + + /* Check whether the omp_ipr_device -> cudaDevice_t yields a valid device. */ + + CUdevice cu_dev = (int) omp_get_interop_int (obj_cuda_driver, omp_ipr_device, &res); + assert (res == omp_irc_success); + + /* Assume a clock size is available and > 1 GHz; value is in kHz. */ + cu_err = cuDeviceGetAttribute (&ivar, cudaDevAttrClockRate, cu_dev); + assert (cu_err == CUDA_SUCCESS); + assert (ivar > 1000000 /* kHz */); + + /* Assume that the MaxGridDimX is available and > 1024. */ + cu_err = cuDeviceGetAttribute (&ivar, cudaDevAttrMaxGridDimX, cu_dev); + assert (cu_err == CUDA_SUCCESS); + assert (ivar > 1024); + + int cuda_dev = (int) omp_get_interop_int (obj_cuda, omp_ipr_device, &res); + assert (res == omp_irc_success); + assert (cuda_dev == (CUdevice) cu_dev); // Assume they are the same ... + + /* Assume a clock size is available and > 1 GHz; value is in kHz. */ + cuda_err = cudaDeviceGetAttribute (&ivar, cudaDevAttrClockRate, cuda_dev); + assert (cuda_err == cudaSuccess); + assert (ivar > 1000000 /* kHz */); + + /* Assume that the MaxGridDimX is available and > 1024. */ + cuda_err = cudaDeviceGetAttribute (&ivar, cudaDevAttrMaxGridDimX, cuda_dev); + assert (cuda_err == cudaSuccess); + assert (ivar > 1024); + + + + + /* Check whether the omp_ipr_device_context -> CUcontext yields a context. */ + + CUcontext cu_ctx = (CUcontext) omp_get_interop_ptr (obj_cuda_driver, omp_ipr_device_context, &res); + assert (res == omp_irc_success); + + /* Assume API Version > 0 for Nvidia, cudaErrorNotSupported for AMD. */ + uvar = 99; + cu_err = cuCtxGetApiVersion (cu_ctx, &uvar); + assert (cu_err == CUDA_SUCCESS); + assert (uvar > 0); + + + /* Check whether the omp_ipr_targetsync -> cudaStream_t yields a stream. */ + + cudaStream_t cuda_sm = (cudaStream_t) omp_get_interop_ptr (obj_cuda, omp_ipr_targetsync, &res); + assert (res == omp_irc_success); + + CUstream cu_sm = (cudaStream_t) omp_get_interop_ptr (obj_cuda_driver, omp_ipr_targetsync, &res); + assert (res == omp_irc_success); + + assert ((void*) cu_sm != (void*) cuda_sm); // Type compatible but should have created two streams + + int dev_stream = 99; +#if CUDA_VERSION >= 12080 + cuda_err = cudaStreamGetDevice (cuda_sm, &dev_stream); + assert (cuda_err == cudaSuccess); +#else + cu_err = cuStreamGetCtx (cu_sm, &cu_ctx) != CUDA_SUCCESS; + if (cu_err == CUDA_SUCCESS) + cuda_err = cuCtxPushCurrent (cu_ctx) != CUDA_SUCCESS; + if (cu_err == CUDA_SUCCESS) + cuda_err = cuCtxGetDevice (&dev_stream) != CUDA_SUCCESS; + if (cu_err == CUDA_SUCCESS) + cu_err = cuCtxPopCurrent (&cu_ctx) != CUDA_SUCCESS; + assert (cu_err == CUDA_SUCCESS); +#endif + assert (dev_stream == cuda_dev); + + /* All jobs should have been completed (as there were none none) */ + cuda_err = cudaStreamQuery (cuda_sm); + assert (cuda_err == cudaSuccess); + + cu_err = cuStreamQuery (cu_sm); + assert (cu_err == CUDA_SUCCESS); + + #pragma omp interop destroy(obj_cuda, obj_cuda_driver) +} diff --git a/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c b/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c new file mode 100644 index 0000000..17cbb15 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c @@ -0,0 +1,8 @@ +/* { dg-require-effective-target openacc_libcudart } */ +/* { dg-require-effective-target openacc_libcuda } */ +/* { dg-additional-options "-lcuda -lcudart" } */ + +/* Same as interop-cuda-full.c, but also works if the header is not available. */ + +#define USE_CUDA_FALLBACK_HEADER 1 +#include "interop-cuda-full.c" diff --git a/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c b/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c new file mode 100644 index 0000000..d7725fc --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c @@ -0,0 +1,7 @@ +/* { dg-require-effective-target gomp_hip_header_amd } */ +/* { dg-require-effective-target gomp_libamdhip64 } */ +/* { dg-additional-options "-lamdhip64" } */ + +#define __HIP_PLATFORM_AMD__ 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c b/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c new file mode 100644 index 0000000..2584537 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c @@ -0,0 +1,8 @@ +/* { dg-require-effective-target gomp_libamdhip64 } */ +/* { dg-additional-options "-lamdhip64" } */ + +#define __HIP_PLATFORM_AMD__ 1 + +#define USE_HIP_FALLBACK_HEADER 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c b/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c new file mode 100644 index 0000000..79af47d --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c @@ -0,0 +1,8 @@ +/* { dg-require-effective-target openacc_cudart } */ +/* { dg-require-effective-target openacc_cuda } */ +/* { dg-require-effective-target gomp_hip_header_nvidia } */ +/* { dg-additional-options "-lcuda -lcudart -Wno-deprecated-declarations" } */ + +#define __HIP_PLATFORM_NVIDIA__ 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c b/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c new file mode 100644 index 0000000..4586398 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c @@ -0,0 +1,10 @@ +/* { dg-require-effective-target openacc_libcudart } */ +/* { dg-require-effective-target openacc_libcuda } */ +/* { dg-additional-options "-lcuda -lcudart" } */ + +#define __HIP_PLATFORM_NVIDIA__ 1 + +#define USE_HIP_FALLBACK_HEADER 1 +#define USE_CUDA_FALLBACK_HEADER 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c b/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c new file mode 100644 index 0000000..4186984 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c @@ -0,0 +1,9 @@ +/* { dg-require-effective-target openacc_cudart } */ +/* { dg-require-effective-target openacc_cuda } */ +/* { dg-additional-options "-lcuda -lcudart" } */ + +#define __HIP_PLATFORM_NVIDIA__ 1 + +#define USE_HIP_FALLBACK_HEADER 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hip.h b/libgomp/testsuite/libgomp.c/interop-hip.h new file mode 100644 index 0000000..20a1ccb --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hip.h @@ -0,0 +1,234 @@ +/* Minimal check whether HIP works - by checking whether the API routines + seem to work. This includes various fallbacks if the header is not + available. */ + +#include <assert.h> +#include <omp.h> + +#if !defined(__HIP_PLATFORM_AMD__) && !defined(__HIP_PLATFORM_NVIDIA__) + #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined" +#endif + +#if defined(__HIP_PLATFORM_AMD__) && defined(__HIP_PLATFORM_NVIDIA__) + #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined" +#endif + +#if __has_include(<hip/hip_runtime_api.h>) && !defined(USE_HIP_FALLBACK_HEADER) + #include <hip/hip_runtime_api.h> + +#elif defined(__HIP_PLATFORM_AMD__) + /* Add a poor man's fallback declaration. */ + #if !defined(USE_HIP_FALLBACK_HEADER) + #warning "Using fallback declaration for <hip/hip_runtime_api.h> for __HIP_PLATFORM_AMD__" + #endif + + typedef struct ihipStream_t* hipStream_t; + typedef struct ihipCtx_t* hipCtx_t; + typedef int hipError_t; + typedef int hipDevice_t; + enum { + hipSuccess = 0, + hipErrorNotSupported = 801 + }; + + typedef enum hipDeviceAttribute_t { + hipDeviceAttributeClockRate = 5, + hipDeviceAttributeMaxGridDimX = 29 + } hipDeviceAttribute_t; + + hipError_t hipDeviceGetAttribute (int *, hipDeviceAttribute_t, hipDevice_t); + hipError_t hipCtxGetApiVersion (hipCtx_t, int *); + hipError_t hipStreamGetDevice (hipStream_t, hipDevice_t *); + hipError_t hipStreamQuery (hipStream_t); + +#elif defined(__HIP_PLATFORM_NVIDIA__) + /* Add a poor man's fallback declaration. */ + #if !defined(USE_HIP_FALLBACK_HEADER) + #warning "Using fallback declaration for <hip/hip_runtime_api.h> for __HIP_PLATFORM_NVIDIA__" + #endif + + #if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && !defined(USE_CUDA_FALLBACK_HEADER) + #include <cuda.h> + #include <cudaTypedefs.h> + #include <cuda_runtime.h> + #else + #if defined(USE_CUDA_FALLBACK_HEADER) + // no warning + #elif !__has_include(<cuda.h>) + #warning "Using GCC's cuda.h as fallback for cuda.h" + #elif !__has_include(<cudaTypedefs.h>) + #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h" + #else + #warning "Using GCC's cuda.h as fallback for cuda_runtime.h" + #endif + + #include "../../../include/cuda/cuda.h" + + typedef int cudaError_t; + enum { + cudaSuccess = 0 + }; + + enum cudaDeviceAttr { + cudaDevAttrClockRate = 13, + cudaDevAttrMaxGridDimX = 5 + }; + + cudaError_t cudaDeviceGetAttribute (int *, enum cudaDeviceAttr, int); + CUresult cuCtxGetApiVersion(CUcontext, unsigned int *); + CUresult cuStreamGetCtx (CUstream, CUcontext *); + #endif + + typedef CUstream hipStream_t; + typedef CUcontext hipCtx_t; + typedef CUdevice hipDevice_t; + + typedef int hipError_t; + typedef int hipDevice_t; + enum { + hipSuccess = 0, + hipErrorNotSupported = 801 + }; + + + typedef enum hipDeviceAttribute_t { + hipDeviceAttributeClockRate = 5, + hipDeviceAttributeMaxGridDimX = 29 + } hipDeviceAttribute_t; + + inline static hipError_t + hipDeviceGetAttribute (int *ival, hipDeviceAttribute_t attr, hipDevice_t dev) + { + enum cudaDeviceAttr cuattr; + switch (attr) + { + case hipDeviceAttributeClockRate: + cuattr = cudaDevAttrClockRate; + break; + case hipDeviceAttributeMaxGridDimX: + cuattr = cudaDevAttrMaxGridDimX; + break; + default: + assert (0); + } + return cudaDeviceGetAttribute (ival, cuattr, dev) != cudaSuccess; + } + + inline static hipError_t + hipCtxGetApiVersion (hipCtx_t ctx, int *ver) + { + unsigned uver; + hipError_t err; + err = cuCtxGetApiVersion (ctx, &uver) != CUDA_SUCCESS; + *ver = (int) uver; + return err; + } + + inline static hipError_t + hipStreamGetDevice (hipStream_t stream, hipDevice_t *dev) + { +#if CUDA_VERSION >= 12080 + return cudaStreamGetDevice (stream, dev); +#else + hipError_t err; + CUcontext ctx; + err = cuStreamGetCtx (stream, &ctx) != CUDA_SUCCESS; + if (err == hipSuccess) + err = cuCtxPushCurrent (ctx) != CUDA_SUCCESS; + if (err == hipSuccess) + err = cuCtxGetDevice (dev) != CUDA_SUCCESS; + if (err == hipSuccess) + err = cuCtxPopCurrent (&ctx) != CUDA_SUCCESS; + return err; +#endif + } + + inline static hipError_t + hipStreamQuery (hipStream_t stream) + { + return cuStreamQuery (stream) != CUDA_SUCCESS; + } + +#else + #error "should be unreachable" +#endif + +int +main () +{ + int ivar; + omp_interop_rc_t res; + omp_interop_t obj = omp_interop_none; + hipError_t hip_err; + + #pragma omp interop init(target, targetsync, prefer_type("hip") : obj) + + omp_interop_fr_t fr = (omp_interop_fr_t) omp_get_interop_int (obj, omp_ipr_fr_id, &res); + assert (res == omp_irc_success); + assert (fr == omp_ifr_hip); + + ivar = (int) omp_get_interop_int (obj, omp_ipr_vendor, &res); + assert (res == omp_irc_success); + int vendor_is_amd = ivar == 1; + #if defined(__HIP_PLATFORM_AMD__) + assert (ivar == 1); + #elif defined(__HIP_PLATFORM_NVIDIA__) + assert (ivar == 11); + #else + assert (0); + #endif + + + /* Check whether the omp_ipr_device -> hipDevice_t yields a valid device. */ + + hipDevice_t hip_dev = (int) omp_get_interop_int (obj, omp_ipr_device, &res); + assert (res == omp_irc_success); + + /* Assume a clock size is available and > 1 GHz; value is in kHz. */ + hip_err = hipDeviceGetAttribute (&ivar, hipDeviceAttributeClockRate, hip_dev); + assert (hip_err == hipSuccess); + assert (ivar > 1000000 /* kHz */); + + /* Assume that the MaxGridDimX is available and > 1024. */ + hip_err = hipDeviceGetAttribute (&ivar, hipDeviceAttributeMaxGridDimX, hip_dev); + assert (hip_err == hipSuccess); + assert (ivar > 1024); + + + /* Check whether the omp_ipr_device_context -> hipCtx_t yields a context. */ + + hipCtx_t hip_ctx = (hipCtx_t) omp_get_interop_ptr (obj, omp_ipr_device_context, &res); + assert (res == omp_irc_success); + + /* Assume API Version > 0 for Nvidia, hipErrorNotSupported for AMD. */ + ivar = -99; + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wdeprecated-declarations" + hip_err = hipCtxGetApiVersion (hip_ctx, &ivar); + #pragma GCC diagnostic pop + + if (vendor_is_amd) + assert (hip_err == hipErrorNotSupported && ivar == -99); + else + { + assert (hip_err == hipSuccess); + assert (ivar > 0); + } + + + /* Check whether the omp_ipr_targetsync -> hipStream_t yields a stream. */ + + hipStream_t hip_sm = (hipStream_t) omp_get_interop_ptr (obj, omp_ipr_targetsync, &res); + assert (res == omp_irc_success); + + hipDevice_t dev_stream = 99; + hip_err = hipStreamGetDevice (hip_sm, &dev_stream); + assert (hip_err == hipSuccess); + assert (dev_stream == hip_dev); + + /* All jobs should have been completed (as there were none none) */ + hip_err = hipStreamQuery (hip_sm); + assert (hip_err == hipSuccess); + + #pragma omp interop destroy(obj) +} diff --git a/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c b/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c new file mode 100644 index 0000000..53c05bd --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c @@ -0,0 +1,7 @@ +/* { dg-require-effective-target gomp_hip_header_amd } */ +/* { dg-require-effective-target gomp_libhipblas } */ +/* { dg-additional-options "-lhipblas" } */ + +#define __HIP_PLATFORM_AMD__ 1 + +#include "interop-hipblas.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c b/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c new file mode 100644 index 0000000..0ea3133 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c @@ -0,0 +1,8 @@ +/* { dg-require-effective-target gomp_libhipblas } */ +/* { dg-additional-options "-lhipblas" } */ + +#define __HIP_PLATFORM_AMD__ 1 + +#define USE_HIP_FALLBACK_HEADER 1 + +#include "interop-hipblas.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c b/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c new file mode 100644 index 0000000..ed428c6 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c @@ -0,0 +1,7 @@ +/* { dg-require-effective-target openacc_cublas } */ +/* { dg-require-effective-target gomp_hip_header_nvidia } */ +/* { dg-additional-options "-lcublas -Wno-deprecated-declarations" } */ + +#define __HIP_PLATFORM_NVIDIA__ 1 + +#include "interop-hipblas.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c b/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c new file mode 100644 index 0000000..1a31b30 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c @@ -0,0 +1,9 @@ +/* { dg-require-effective-target openacc_libcublas } */ +/* { dg-additional-options "-lcublas" } */ + +#define __HIP_PLATFORM_NVIDIA__ 1 + +#define USE_HIP_FALLBACK_HEADER 1 +#define USE_CUDA_FALLBACK_HEADER 1 + +#include "interop-hipblas.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c b/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c new file mode 100644 index 0000000..f85c13b --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c @@ -0,0 +1,8 @@ +/* { dg-require-effective-target openacc_cublas } */ +/* { dg-additional-options "-lcublas" } */ + +#define __HIP_PLATFORM_NVIDIA__ 1 + +#define USE_HIP_FALLBACK_HEADER 1 + +#include "interop-hipblas.h" diff --git a/libgomp/testsuite/libgomp.c/interop-hipblas.h b/libgomp/testsuite/libgomp.c/interop-hipblas.h new file mode 100644 index 0000000..d7cb174 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/interop-hipblas.h @@ -0,0 +1,240 @@ +/* Check whether hipBlas' daxpy works with an interop object. + daxpy(N, DA, DX, INCX, DY, INCY) + calculates (for DX = DY = 1): + DY(1:N) = DY(1:N) + DA * DX(1:N) + and otherwise N array elements, taking every INCX-th or INCY-th one, repectively. + +Based on the interop example in OpenMP's example document */ + +/* Minimal check whether HIP works - by checking whether the API routines + seem to work. This includes a fallback if the header is not + available. */ + +#if !defined(__HIP_PLATFORM_AMD__) && !defined(__HIP_PLATFORM_NVIDIA__) + #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined" +#endif + +#if defined(__HIP_PLATFORM_AMD__) && defined(__HIP_PLATFORM_NVIDIA__) + #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined" +#endif + + +#include <assert.h> +#include <omp.h> +#include "../libgomp.c-c++-common/on_device_arch.h" + + +#if __has_include(<hipblas/hipblas.h>) && (__has_include(<library_types.h>) || !defined(__HIP_PLATFORM_NVIDIA__)) && !defined(USE_HIP_FALLBACK_HEADER) + #ifdef __HIP_PLATFORM_NVIDIA__ + /* There seems to be an issue with hip/library_types.h including + CUDA's "library_types.h". Include CUDA's one explicitly here. + Could possibly worked around by using -isystem vs. -I. */ + #include <library_types.h> + + /* For some reasons, the following symbols do not seem to get + mapped from HIP to CUDA, causing link errors. */ + #define hipblasSetStream cublasSetStream_v2 + #define hipblasDaxpy cublasDaxpy_v2 + #define hipblasCreate cublasCreate_v2 + #endif + #include <hipblas/hipblas.h> + +#elif defined(__HIP_PLATFORM_AMD__) + /* Add a poor man's fallback declaration. */ + #if !defined(USE_HIP_FALLBACK_HEADER) + #warning "Using fallback declaration for <hipblas/hipblas.h> for __HIP_PLATFORM_AMD__" + #endif + + typedef enum + { + HIPBLAS_STATUS_SUCCESS = 0 + + } hipblasStatus_t; + + typedef struct ihipStream_t* hipStream_t; + typedef void* hipblasHandle_t; + + hipblasStatus_t hipblasCreate (hipblasHandle_t*); + hipblasStatus_t hipblasSetStream (hipblasHandle_t, hipStream_t); + hipblasStatus_t hipblasDaxpy (hipblasHandle_t, int, const double*, const double*, int, double*, int); + +#else + /* Add a poor man's fallback declaration. */ + #if !defined(USE_HIP_FALLBACK_HEADER) + #warning "Using fallback declaration for <hipblas/hipblas.h> for __HIP_PLATFORM_NVIDA__" + #endif + + #if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && __has_include(<cublas_v2.h>) && !defined(USE_CUDA_FALLBACK_HEADER) + #include <cuda.h> + #include <cudaTypedefs.h> + #include <cuda_runtime.h> + #include <cublas_v2.h> + + #else + /* Add a poor man's fallback declaration. */ + #if defined(USE_CUDA_FALLBACK_HEADER) + // no warning + #elif !__has_include(<cuda.h>) + #warning "Using GCC's cuda.h as fallback for cuda.h" + #elif !__has_include(<cudaTypedefs.h>) + #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h" + #elif !__has_include(<cuda_runtime.h>) + #warning "Using GCC's cuda.h as fallback for cuda_runtime.h" + #else + #warning "Using GCC's cuda.h as fallback for cublas_v2.h" + #endif + #include "../../../include/cuda/cuda.h" + + typedef enum { + CUBLAS_STATUS_SUCCESS = 0, + } cublasStatus_t; + + typedef CUstream cudaStream_t; + typedef struct cublasContext* cublasHandle_t; + + #define cublasCreate cublasCreate_v2 + cublasStatus_t cublasCreate_v2 (cublasHandle_t *); + + #define cublasSetStream cublasSetStream_v2 + cublasStatus_t cublasSetStream_v2 (cublasHandle_t, cudaStream_t); + + #define cublasDaxpy cublasDaxpy_v2 + cublasStatus_t cublasDaxpy_v2(cublasHandle_t, int, const double*, const double*, int, double*, int); + #endif + + #define HIPBLAS_STATUS_SUCCESS CUBLAS_STATUS_SUCCESS + #define hipblasStatus_t cublasStatus_t + #define hipStream_t cudaStream_t + #define hipblasHandle_t cublasHandle_t + #define hipblasCreate cublasCreate + #define hipblasSetStream cublasSetStream + #define hipblasDaxpy cublasDaxpy +#endif + +static int used_variant = 0; + +void +run_hipBlasdaxpy (int n, double da, const double *dx, int incx, double *dy, int incy, omp_interop_t obj) +{ + used_variant = 1; + + omp_interop_rc_t res; + hipblasStatus_t stat; + + omp_intptr_t fr = omp_get_interop_int(obj, omp_ipr_fr_id, &res); + assert (res == omp_irc_success && fr == omp_ifr_hip); + + hipStream_t stream = (hipStream_t) omp_get_interop_ptr (obj, omp_ipr_targetsync, &res); + assert (res == omp_irc_success); + + hipblasHandle_t handle; + stat = hipblasCreate (&handle); + assert (stat == HIPBLAS_STATUS_SUCCESS); + + stat = hipblasSetStream (handle, stream); + assert (stat == HIPBLAS_STATUS_SUCCESS); + + /* 'da' can be in host or device space, 'dx' and 'dy' must be in device space. */ + stat = hipblasDaxpy (handle, n, &da, dx, 1, dy, 1) ; + assert (stat == HIPBLAS_STATUS_SUCCESS); +} + +#if defined(__HIP_PLATFORM_AMD__) +#pragma omp declare variant(run_hipBlasdaxpy) \ + match(construct={dispatch}, target_device={kind(nohost), arch("amdgcn")}) \ + adjust_args(need_device_ptr : dx, dy) \ + append_args(interop(targetsync, prefer_type("hip"))) +#elif defined(__HIP_PLATFORM_NVIDIA__) +#pragma omp declare variant(run_hipBlasdaxpy) \ + match(construct={dispatch}, target_device={kind(nohost), arch("nvptx")}) \ + adjust_args(need_device_ptr : dx, dy) \ + append_args(interop(targetsync, prefer_type("hip"))) +#else + #error "wrong platform" +#endif + +void +run_daxpy (int n, double da, const double *dx, int incx, double *dy, int incy) +{ + used_variant = 2; + + if (incx == 1 && incy == 1) + #pragma omp simd + for (int i = 0; i < n; i++) + dy[i] += da * dx[i]; + else + { + int ix = 0; + int iy = 0; + for (int i = 0; i < n; i++) + { + dy[iy] += da * dx[ix]; + ix += incx; + iy += incy; + } + } +} + + +void +run_test (int dev) +{ + constexpr int N = 1024; + + // A = {1,2,...,N} + // B = {-1, -2, ..., N} + // B' = daxpy (N, 3, A, incx=1, B, incy=1) + // = B + 3*A + // -> B' = {0, 2, 4, 6, ... } + + double A[N], B[N]; + double factor = 3.0; + for (int i = 0; i < N; i++) + { + A[i] = i; + B[i] = -i; + } + + if (dev != omp_initial_device && dev != omp_get_num_devices ()) + { + #pragma omp target enter data device(dev) map(A, B) + } + + used_variant = 99; + #pragma omp dispatch device(dev) + run_daxpy (N, factor, A, 1, B, 1); + + if (dev != omp_initial_device && dev != omp_get_num_devices ()) + { + #pragma omp target exit data device(dev) map(release: A) map(from: B) + + int tmp = omp_get_default_device (); + omp_set_default_device (dev); +#if defined(__HIP_PLATFORM_AMD__) + if (on_device_arch_gcn ()) +#else + if (on_device_arch_nvptx ()) +#endif + assert (used_variant == 1); + else + assert (used_variant == 2); + omp_set_default_device (tmp); + } + else + assert (used_variant == 2); + + for (int i = 0; i < N; i++) + assert (B[i] == 2*i); +} + +int +main () +{ + int ndev = omp_get_num_devices (); + + for (int dev = 0; dev <= ndev; dev++) + run_test (dev); + run_test (omp_initial_device); + + return 0; +} diff --git a/libgomp/testsuite/libgomp.fortran/allocatable-comp.f90 b/libgomp/testsuite/libgomp.fortran/allocatable-comp.f90 new file mode 100644 index 0000000..383ecba --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/allocatable-comp.f90 @@ -0,0 +1,53 @@ +implicit none +type t + integer, allocatable :: a, b(:) +end type t +type(t) :: x, y, z +integer :: i + +!$omp target map(to: x) + if (allocated(x%a)) stop 1 + if (allocated(x%b)) stop 2 +!$omp end target + +allocate(x%a, x%b(-4:6)) +x%b(:) = [(i, i=-4,6)] + +!$omp target map(to: x) + if (.not. allocated(x%a)) stop 3 + if (.not. allocated(x%b)) stop 4 + if (lbound(x%b,1) /= -4) stop 5 + if (ubound(x%b,1) /= 6) stop 6 + if (any (x%b /= [(i, i=-4,6)])) stop 7 +!$omp end target + + +! The following only works with arrays due to +! PR fortran/96668 + +!$omp target enter data map(to: y, z) + +!$omp target map(to: y, z) + if (allocated(y%b)) stop 8 + if (allocated(z%b)) stop 9 +!$omp end target + +allocate(y%b(5), z%b(3)) +y%b = 42 +z%b = 99 + +! (implicitly) 'tofrom' mapped +! Planned for OpenMP 6.0 (but common extension) +! OpenMP <= 5.0 unclear +!$omp target map(to: y) + if (.not.allocated(y%b)) stop 10 + if (any (y%b /= 42)) stop 11 +!$omp end target + +! always map: OpenMP 5.1 (clarified) +!$omp target map(always, tofrom: z) + if (.not.allocated(z%b)) stop 12 + if (any (z%b /= 99)) stop 13 +!$omp end target + +end diff --git a/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90 b/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90 new file mode 100644 index 0000000..bbd49dd --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90 @@ -0,0 +1,7 @@ +! { dg-require-effective-target gomp_hipfort_module } +! { dg-require-effective-target gomp_libamdhip64 } +! { dg-additional-options "-lamdhip64" } + +#define HAVE_HIPFORT 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90 b/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90 new file mode 100644 index 0000000..0afec83 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90 @@ -0,0 +1,6 @@ +! { dg-require-effective-target gomp_libamdhip64 } +! { dg-additional-options "-lamdhip64" } + +#define USE_HIP_FALLBACK_MODULE 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90 b/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90 new file mode 100644 index 0000000..cef592f --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90 @@ -0,0 +1,9 @@ +! { dg-require-effective-target gomp_hipfort_module } +! { dg-require-effective-target openacc_cudart } +! { dg-require-effective-target openacc_cuda } +! { dg-additional-options "-lcuda -lcudart" } + +#define HAVE_HIPFORT 1 +#define USE_CUDA_NAMES 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90 b/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90 new file mode 100644 index 0000000..c1ef29d --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90 @@ -0,0 +1,8 @@ +! { dg-require-effective-target openacc_libcudart } +! { dg-require-effective-target openacc_libcuda } +! { dg-additional-options "-lcuda -lcudart" } + +#define USE_CUDA_NAMES 1 +#define USE_HIP_FALLBACK_MODULE 1 + +#include "interop-hip.h" diff --git a/libgomp/testsuite/libgomp.fortran/interop-hip.h b/libgomp/testsuite/libgomp.fortran/interop-hip.h new file mode 100644 index 0000000..753ccce --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/interop-hip.h @@ -0,0 +1,214 @@ +! Minimal check whether HIP works - by checking whether the API routines +! seem to work. This includes a fallback if hipfort is not available + +#ifndef HAVE_HIPFORT +#ifndef USE_HIP_FALLBACK_MODULE +#if USE_CUDA_NAMES +#warning "Using fallback implementation for module hipfort as HAVE_HIPFORT is undefined (for NVIDA/CUDA)" +#else +#warning "Using fallback implementation for module hipfort as HAVE_HIPFORT is undefined - assume AMD as USE_CUDA_NAMES is unset" +#endif +#endif +module hipfort ! Minimal implementation for the testsuite + implicit none + + enum, bind(c) + enumerator :: hipSuccess = 0 + enumerator :: hipErrorNotSupported = 801 + end enum + + enum, bind(c) + enumerator :: hipDeviceAttributeClockRate = 5 + enumerator :: hipDeviceAttributeMaxGridDimX = 29 + end enum + + interface + integer(kind(hipSuccess)) function hipDeviceGetAttribute (ip, attr, dev) & +#if USE_CUDA_NAMES + bind(c, name="cudaDeviceGetAttribute") +#else + bind(c, name="hipDeviceGetAttribute") +#endif + use iso_c_binding, only: c_ptr, c_int + import + implicit none + type(c_ptr), value :: ip + integer(kind(hipDeviceAttributeClockRate)), value :: attr + integer(c_int), value :: dev + end + + integer(kind(hipSuccess)) function hipCtxGetApiVersion (ctx, ip) & +#if USE_CUDA_NAMES + bind(c, name="cudaCtxGetApiVersion") +#else + bind(c, name="hipCtxGetApiVersion") +#endif + use iso_c_binding, only: c_ptr + import + implicit none + type(c_ptr), value :: ctx, ip + end + + integer(kind(hipSuccess)) function hipStreamQuery (stream) & +#if USE_CUDA_NAMES + bind(c, name="cudaStreamQuery") +#else + bind(c, name="hipStreamQuery") +#endif + use iso_c_binding, only: c_ptr + import + implicit none + type(c_ptr), value :: stream + end + + integer(kind(hipSuccess)) function hipStreamGetFlags (stream, flags) & +#if USE_CUDA_NAMES + bind(c, name="cudaStreamGetFlags") +#else + bind(c, name="hipStreamGetFlags") +#endif + use iso_c_binding, only: c_ptr + import + implicit none + type(c_ptr), value :: stream + type(c_ptr), value :: flags + end + end interface +end module +#endif + +program main + use iso_c_binding, only: c_ptr, c_int, c_loc + use omp_lib + use hipfort + implicit none (type, external) + +! Only supported since CUDA 12.8 - skip for better compatibility +! ! Manally implement hipStreamGetDevice as hipfort misses it +! ! -> https://github.com/ROCm/hipfort/issues/238 +! interface +! integer(kind(hipSuccess)) function my_hipStreamGetDevice(stream, dev) & +!#if USE_CUDA_NAMES +! bind(c, name="cudaStreamGetDevice") +!#else +! bind(c, name="hipStreamGetDevice") +!#endif +! use iso_c_binding, only: c_ptr, c_int +! import +! implicit none +! type(c_ptr), value :: stream +! integer(c_int) :: dev +! end +! end interface + + integer(c_int), target :: ivar + integer(omp_interop_rc_kind) :: res + integer(omp_interop_kind) :: obj + integer(omp_interop_fr_kind) :: fr + integer(kind(hipSuccess)) :: hip_err + integer(c_int) :: hip_dev, dev_stream + type(c_ptr) :: hip_ctx, hip_sm + + logical :: vendor_is_amd + + obj = omp_interop_none + + !$omp interop init(target, targetsync, prefer_type("hip") : obj) + + fr = omp_get_interop_int (obj, omp_ipr_fr_id, res) + if (res /= omp_irc_success) error stop 1 + if (fr /= omp_ifr_hip) error stop 1 + + ivar = omp_get_interop_int (obj, omp_ipr_vendor, res) + if (ivar == 1) then ! AMD + vendor_is_amd = .true. + else if (ivar == 11) then ! Nvidia + vendor_is_amd = .false. + else + error stop 1 ! Unknown + endif +#if USE_CUDA_NAMES + if (vendor_is_amd) error stop 1 +#else + if (.not. vendor_is_amd) error stop 1 +#endif + + ! Check whether the omp_ipr_device -> hipDevice_t yields a valid device. + + hip_dev = omp_get_interop_int (obj, omp_ipr_device, res) + if (res /= omp_irc_success) error stop 1 + +! AMD messed up in Fortran with the attribute handling, missing the +! translation table it has for C. +block + enum, bind(c) + enumerator :: cudaDevAttrClockRate = 13 + enumerator :: cudaDevAttrMaxGridDimX = 5 + end enum + + ! Assume a clock size is available and > 1 GHz; value is in kHz. + ! c_loc is completely bogus, but as AMD messed up the interface ... + ! Cf. https://github.com/ROCm/hipfort/issues/239 +if (vendor_is_amd) then + hip_err = hipDeviceGetAttribute (c_loc(ivar), hipDeviceAttributeClockRate, hip_dev) +else + hip_err = hipDeviceGetAttribute (c_loc(ivar), cudaDevAttrClockRate, hip_dev) +endif + if (hip_err /= hipSuccess) error stop 1 + if (ivar <= 1000000) error stop 1 ! in kHz + + ! Assume that the MaxGridDimX is available and > 1024 + ! c_loc is completely bogus, but as AMD messed up the interface ... + ! Cf. https://github.com/ROCm/hipfort/issues/239 +if (vendor_is_amd) then + hip_err = hipDeviceGetAttribute (c_loc(ivar), hipDeviceAttributeMaxGridDimX, hip_dev) +else + hip_err = hipDeviceGetAttribute (c_loc(ivar), cudaDevAttrMaxGridDimX, hip_dev) +endif + if (hip_err /= hipSuccess) error stop 1 + if (ivar <= 1024) error stop 1 +end block + + + ! Check whether the omp_ipr_device_context -> hipCtx_t yields a context. + + hip_ctx = omp_get_interop_ptr (obj, omp_ipr_device_context, res) + if (res /= omp_irc_success) error stop 1 + +! ! Assume API Version > 0 for Nvidia, hipErrorNotSupported for AMD. */ +! ivar = -99 +! ! AMD deprectated hipCtxGetApiVersion (in C/C++) +! hip_err = hipCtxGetApiVersion (hip_ctx, c_loc(ivar)) +! +! if (vendor_is_amd) then +! if (hip_err /= hipErrorNotSupported .or. ivar /= -99) error stop 1 +! else +! if (hip_err /= hipSuccess) error stop 1 +! if (ivar <= 0) error stop 1 +! end if + + + ! Check whether the omp_ipr_targetsync -> hipStream_t yields a stream. + + hip_sm = omp_get_interop_ptr (obj, omp_ipr_targetsync, res) + if (res /= omp_irc_success) error stop 1 + +! Skip as this is only in CUDA 12.8 +! dev_stream = 99 +! ! Not (yet) implemented: https://github.com/ROCm/hipfort/issues/238 +! ! hip_err = hipStreamGetDevice (hip_sm, dev_stream) +! hip_err = my_hipStreamGetDevice (hip_sm, dev_stream) +! if (hip_err /= hipSuccess) error stop 1 +! if (dev_stream /= hip_dev) error stop 1 + + ! Get flags of the stream + hip_err = hipStreamGetFlags (hip_sm, c_loc (ivar)) + if (hip_err /= hipSuccess) error stop 1 + ! Accept any value + + ! All jobs should have been completed (as there were none none) + hip_err = hipStreamQuery (hip_sm) + if (hip_err /= hipSuccess) error stop 1 + + !$omp interop destroy(obj) +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-3.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-3.f90 new file mode 100644 index 0000000..9d48c7c --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-3.f90 @@ -0,0 +1,121 @@ +type t2 + integer x, y, z +end type t2 +type t + integer, allocatable :: A + integer, allocatable :: B(:) + type(t2), allocatable :: C + type(t2), allocatable :: D(:,:) +end type t + +type t3 + type(t) :: Q + type(t) :: R(5) +end type + +type(t) :: var, var2 +type(t3) :: var3, var4 + +! -------------------------------------- +! Assign + allocate +var%A = 45 +var%B = [1,2,3] +var%C = t2(6,5,4) +var%D = reshape([t2(1,2,3), t2(4,5,6), t2(11,12,13), t2(14,15,16)], [2,2]) + +! Assign + allocate +var2%A = 145 +var2%B = [991,992,993] +var2%C = t2(996,995,994) +var2%D = reshape([t2(199,299,399), t2(499,599,699), t2(1199,1299,1399), t2(1499,1599,1699)], [2,2]) + + +!$omp target map(to: var) map(tofrom: var2) + call foo(var, var2) +!$omp end target + +if (var2%A /= 45) stop 9 +if (any (var2%B /= [1,2,3])) stop 10 +if (var2%C%x /= 6) stop 11 +if (var2%C%y /= 5) stop 11 +if (var2%C%z /= 4) stop 11 +if (any (var2%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 12 +if (any (var2%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 12 +if (any (var2%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 12 + +! -------------------------------------- +! Assign + allocate +var3%Q%A = 45 +var3%Q%B = [1,2,3] +var3%Q%C = t2(6,5,4) +var3%Q%D = reshape([t2(1,2,3), t2(4,5,6), t2(11,12,13), t2(14,15,16)], [2,2]) + +var3%R(2)%A = 45 +var3%R(2)%B = [1,2,3] +var3%R(2)%C = t2(6,5,4) +var3%R(2)%D = reshape([t2(1,2,3), t2(4,5,6), t2(11,12,13), t2(14,15,16)], [2,2]) + +! Assign + allocate +var4%Q%A = 145 +var4%Q%B = [991,992,993] +var4%Q%C = t2(996,995,994) +var4%Q%D = reshape([t2(199,299,399), t2(499,599,699), t2(1199,1299,1399), t2(1499,1599,1699)], [2,2]) + +var4%R(3)%A = 145 +var4%R(3)%B = [991,992,993] +var4%R(3)%C = t2(996,995,994) +var4%R(3)%D = reshape([t2(199,299,399), t2(499,599,699), t2(1199,1299,1399), t2(1499,1599,1699)], [2,2]) + +!$omp target map(to: var3%Q) map(tofrom: var4%Q) + call foo(var3%Q, var4%Q) +!$omp end target + +!$omp target map(to: var3%R(2)) map(tofrom: var4%R(3)) + call foo(var3%R(2), var4%R(3)) +!$omp end target + +if (var4%Q%A /= 45) stop 13 +if (any (var4%Q%B /= [1,2,3])) stop 14 +if (var4%Q%C%x /= 6) stop 15 +if (var4%Q%C%y /= 5) stop 15 +if (var4%Q%C%z /= 4) stop 15 +if (any (var4%Q%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 16 +if (any (var4%Q%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 16 +if (any (var4%Q%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 16 + +if (var4%R(3)%A /= 45) stop 17 +if (any (var4%R(3)%B /= [1,2,3])) stop 18 +if (var4%R(3)%C%x /= 6) stop 19 +if (var4%R(3)%C%y /= 5) stop 19 +if (var4%R(3)%C%z /= 4) stop 19 +if (any (var4%R(3)%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 20 +if (any (var4%R(3)%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 20 +if (any (var4%R(3)%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 20 + +contains + subroutine foo(x, y) + type(t) :: x, y + if (x%A /= 45) stop 1 + if (any (x%B /= [1,2,3])) stop 2 + if (x%C%x /= 6) stop 3 + if (x%C%y /= 5) stop 3 + if (x%C%z /= 4) stop 3 + if (any (x%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 4 + if (any (x%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 4 + if (any (x%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 4 + + if (y%A /= 145) stop 5 + if (any (y%B /= [991,992,993])) stop 6 + if (y%C%x /= 996) stop 7 + if (y%C%y /= 995) stop 7 + if (y%C%z /= 994) stop 7 + if (any (y%D(:,:)%x /= reshape([199, 499, 1199, 1499], [2,2]))) stop 8 + if (any (y%D(:,:)%y /= reshape([299, 599, 1299, 1599], [2,2]))) stop 8 + if (any (y%D(:,:)%z /= reshape([399, 699, 1399, 1699], [2,2]))) stop 8 + + y%A = x%A + y%B(:) = x%B + y%C = x%C + y%D(:,:) = x%D(:,:) + end +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-4.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-4.f90 new file mode 100644 index 0000000..fb9859d --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-4.f90 @@ -0,0 +1,124 @@ +type t2 + integer x, y, z +end type t2 +type t + integer, allocatable :: A + integer, allocatable :: B(:) + type(t2), allocatable :: C + type(t2), allocatable :: D(:,:) +end type t + +type t3 + type(t) :: Q + type(t) :: R(5) +end type + +type(t) :: var, var2 +type(t3) :: var3, var4 + +! -------------------------------------- +! Assign + allocate +var%A = 45 +var%B = [1,2,3] +var%C = t2(6,5,4) +var%D = reshape([t2(1,2,3), t2(4,5,6), t2(11,12,13), t2(14,15,16)], [2,2]) + +! Assign + allocate +var2%A = 145 +var2%B = [991,992,993] +var2%C = t2(996,995,994) +var2%D = reshape([t2(199,299,399), t2(499,599,699), t2(1199,1299,1399), t2(1499,1599,1699)], [2,2]) + + +!$omp target map(to: var%A, var%B, var%C, var%D) & +!$omp& map(tofrom: var2%A, var2%B, var2%C, var2%D) + call foo(var, var2) +!$omp end target + +if (var2%A /= 45) stop 9 +if (any (var2%B /= [1,2,3])) stop 10 +if (var2%C%x /= 6) stop 11 +if (var2%C%y /= 5) stop 11 +if (var2%C%z /= 4) stop 11 +if (any (var2%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 12 +if (any (var2%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 12 +if (any (var2%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 12 + +! -------------------------------------- +! Assign + allocate +var3%Q%A = 45 +var3%Q%B = [1,2,3] +var3%Q%C = t2(6,5,4) +var3%Q%D = reshape([t2(1,2,3), t2(4,5,6), t2(11,12,13), t2(14,15,16)], [2,2]) + +var3%R(2)%A = 45 +var3%R(2)%B = [1,2,3] +var3%R(2)%C = t2(6,5,4) +var3%R(2)%D = reshape([t2(1,2,3), t2(4,5,6), t2(11,12,13), t2(14,15,16)], [2,2]) + +! Assign + allocate +var4%Q%A = 145 +var4%Q%B = [991,992,993] +var4%Q%C = t2(996,995,994) +var4%Q%D = reshape([t2(199,299,399), t2(499,599,699), t2(1199,1299,1399), t2(1499,1599,1699)], [2,2]) + +var4%R(3)%A = 145 +var4%R(3)%B = [991,992,993] +var4%R(3)%C = t2(996,995,994) +var4%R(3)%D = reshape([t2(199,299,399), t2(499,599,699), t2(1199,1299,1399), t2(1499,1599,1699)], [2,2]) + +!$omp target map(to: var3%Q%A, var3%Q%B, var3%Q%C, var3%Q%D) & +!$omp& map(tofrom: var4%Q%A, var4%Q%B, var4%Q%C, var4%Q%D) + call foo(var3%Q, var4%Q) +!$omp end target + +if (var4%Q%A /= 45) stop 13 +if (any (var4%Q%B /= [1,2,3])) stop 14 +if (var4%Q%C%x /= 6) stop 15 +if (var4%Q%C%y /= 5) stop 15 +if (var4%Q%C%z /= 4) stop 15 +if (any (var4%Q%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 16 +if (any (var4%Q%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 16 +if (any (var4%Q%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 16 + +!$omp target map(to: var3%R(2)%A, var3%R(2)%B, var3%R(2)%C, var3%R(2)%D) & +!$omp& map(tofrom: var4%R(3)%A, var4%R(3)%B, var4%R(3)%C, var4%R(3)%D) + call foo(var3%R(2), var4%R(3)) +!$omp end target + +if (var4%R(3)%A /= 45) stop 17 +if (any (var4%R(3)%B /= [1,2,3])) stop 18 +if (var4%R(3)%C%x /= 6) stop 19 +if (var4%R(3)%C%y /= 5) stop 19 +if (var4%R(3)%C%z /= 4) stop 19 +if (any (var4%R(3)%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 20 +if (any (var4%R(3)%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 20 +if (any (var4%R(3)%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 20 + +contains + subroutine foo(x, y) + type(t) :: x, y + if (x%A /= 45) stop 1 + if (any (x%B /= [1,2,3])) stop 2 + if (x%C%x /= 6) stop 3 + if (x%C%y /= 5) stop 3 + if (x%C%z /= 4) stop 3 + if (any (x%D(:,:)%x /= reshape([1, 4, 11, 14], [2,2]))) stop 4 + if (any (x%D(:,:)%y /= reshape([2, 5, 12, 15], [2,2]))) stop 4 + if (any (x%D(:,:)%z /= reshape([3, 6, 13, 16], [2,2]))) stop 4 + + if (y%A /= 145) stop 5 + if (any (y%B /= [991,992,993])) stop 6 + if (y%C%x /= 996) stop 7 + if (y%C%y /= 995) stop 7 + if (y%C%z /= 994) stop 7 + if (any (y%D(:,:)%x /= reshape([199, 499, 1199, 1499], [2,2]))) stop 8 + if (any (y%D(:,:)%y /= reshape([299, 599, 1299, 1599], [2,2]))) stop 8 + if (any (y%D(:,:)%z /= reshape([399, 699, 1399, 1699], [2,2]))) stop 8 + + y%A = x%A + y%B(:) = x%B + y%C = x%C + y%D(:,:) = x%D(:,:) + end +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-5.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-5.f90 new file mode 100644 index 0000000..b2e36b2 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-5.f90 @@ -0,0 +1,53 @@ +implicit none +type t + integer, allocatable :: a, b(:) +end type t +type(t) :: x, y, z +integer :: i + +!$omp target + if (allocated(x%a)) stop 1 + if (allocated(x%b)) stop 2 +!$omp end target + +allocate(x%a, x%b(-4:6)) +x%b(:) = [(i, i=-4,6)] + +!$omp target + if (.not. allocated(x%a)) stop 3 + if (.not. allocated(x%b)) stop 4 + if (lbound(x%b,1) /= -4) stop 5 + if (ubound(x%b,1) /= 6) stop 6 + if (any (x%b /= [(i, i=-4,6)])) stop 7 +!$omp end target + + +! The following only works with arrays due to +! PR fortran/96668 + +!$omp target enter data map(to: y, z) + +!$omp target + if (allocated(y%b)) stop 8 + if (allocated(z%b)) stop 9 +!$omp end target + +allocate(y%b(5), z%b(3)) +y%b = 42 +z%b = 99 + +! (implicitly) 'tofrom' mapped +! Planned for OpenMP 6.0 (but common extension) +! OpenMP <= 5.0 unclear +!$omp target + if (.not.allocated(y%b)) stop 10 + if (any (y%b /= 42)) stop 11 +!$omp end target + +! always map: OpenMP 5.1 (clarified) +!$omp target map(always, tofrom: z) + if (.not.allocated(z%b)) stop 12 + if (any (z%b /= 99)) stop 13 +!$omp end target + +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90 new file mode 100644 index 0000000..48d4aea --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90 @@ -0,0 +1,308 @@ +! NOTE: This code uses POINTER. +! While map(p, var%p) etc. maps the ptr/ptr comp p / var%p (incl. allocatable comps), +! map(var) does not map var%p. + +use iso_c_binding +implicit none +type t2 + integer, allocatable :: x, y, z +end type t2 +type t + integer, pointer :: A => null() + integer, pointer :: B(:) => null() + type(t2), pointer :: C => null() + type(t2), pointer :: D(:,:) => null() +end type t + +type t3 + type(t) :: Q + type(t) :: R(5) +end type + +type(t) :: var, var2 +type(t3) :: var3, var4 +integer(c_intptr_t) :: iptr + +! -------------------------------------- +! Assign + allocate +allocate (var%A, source=45) +allocate (var%B(3), source=[1,2,3]) +allocate (var%C) +var%C%x = 6; var%C%y = 5; var%C%z = 4 +allocate (var%D(2,2)) +var%D(1,1)%x = 1 +var%D(1,1)%y = 2 +var%D(1,1)%z = 3 +var%D(2,1)%x = 4 +var%D(2,1)%y = 5 +var%D(2,1)%z = 6 +var%D(1,2)%x = 11 +var%D(1,2)%y = 12 +var%D(1,2)%z = 13 +var%D(2,2)%x = 14 +var%D(2,2)%y = 15 +var%D(2,2)%z = 16 + +! Assign + allocate +allocate (var2%A, source=145) +allocate (var2%B, source=[991,992,993]) +allocate (var2%C) +var2%C%x = 996; var2%C%y = 995; var2%C%z = 994 +allocate (var2%D(2,2)) +var2%D(1,1)%x = 199 +var2%D(1,1)%y = 299 +var2%D(1,1)%z = 399 +var2%D(2,1)%x = 499 +var2%D(2,1)%y = 599 +var2%D(2,1)%z = 699 +var2%D(1,2)%x = 1199 +var2%D(1,2)%y = 1299 +var2%D(1,2)%z = 1399 +var2%D(2,2)%x = 1499 +var2%D(2,2)%y = 1599 +var2%D(2,2)%z = 1699 + +block + integer(c_intptr_t) :: loc_a, loc_b, loc_c, loc_d, loc2_a, loc2_b, loc2_c, loc2_d + loc_a = loc (var%a) + loc_b = loc (var%b) + loc_c = loc (var%d) + loc_d = loc (var%d) + loc2_a = loc (var2%a) + loc2_b = loc (var2%b) + loc2_c = loc (var2%c) + loc2_d = loc (var2%d) + ! var/var2 are mapped, but the pointer components aren't + !$omp target map(to: var) map(tofrom: var2) + if (loc_a /= loc (var%a)) stop 31 + if (loc_b /= loc (var%b)) stop 32 + if (loc_c /= loc (var%d)) stop 33 + if (loc_d /= loc (var%d)) stop 34 + if (loc2_a /= loc (var2%a)) stop 35 + if (loc2_b /= loc (var2%b)) stop 36 + if (loc2_c /= loc (var2%c)) stop 37 + if (loc2_d /= loc (var2%d)) stop 38 + !$omp end target + if (loc_a /= loc (var%a)) stop 41 + if (loc_b /= loc (var%b)) stop 42 + if (loc_c /= loc (var%d)) stop 43 + if (loc_d /= loc (var%d)) stop 44 + if (loc2_a /= loc (var2%a)) stop 45 + if (loc2_b /= loc (var2%b)) stop 46 + if (loc2_c /= loc (var2%c)) stop 47 + if (loc2_d /= loc (var2%d)) stop 48 +end block + +block + ! Map only (all) components, but this maps also the alloc comps + !$omp target map(to: var%a, var%b, var%c, var%d) map(tofrom: var2%a, var2%b, var2%c, var2%d) + call foo (var,var2) + !$omp end target +end block + +if (var2%A /= 45) stop 9 +if (any (var2%B /= [1,2,3])) stop 10 +if (var2%C%x /= 6) stop 11 +if (var2%C%y /= 5) stop 11 +if (var2%C%z /= 4) stop 11 +block + integer :: tmp_x(2,2), tmp_y(2,2), tmp_z(2,2), i, j + tmp_x = reshape([1, 4, 11, 14], [2,2]) + tmp_y = reshape([2, 5, 12, 15], [2,2]) + tmp_z = reshape([3, 6, 13, 16], [2,2]) + do j = 1, 2 + do i = 1, 2 + if (var2%D(i,j)%x /= tmp_x(i,j)) stop 12 + if (var2%D(i,j)%y /= tmp_y(i,j)) stop 12 + if (var2%D(i,j)%z /= tmp_z(i,j)) stop 12 + end do + end do +end block + +! Extra deallocates due to PR fortran/104697 +deallocate(var%C%x, var%C%y, var%C%z) +deallocate(var%D(1,1)%x, var%D(1,1)%y, var%D(1,1)%z) +deallocate(var%D(2,1)%x, var%D(2,1)%y, var%D(2,1)%z) +deallocate(var%D(1,2)%x, var%D(1,2)%y, var%D(1,2)%z) +deallocate(var%D(2,2)%x, var%D(2,2)%y, var%D(2,2)%z) +deallocate(var%A, var%B, var%C, var%D) + +deallocate(var2%C%x, var2%C%y, var2%C%z) +deallocate(var2%D(1,1)%x, var2%D(1,1)%y, var2%D(1,1)%z) +deallocate(var2%D(2,1)%x, var2%D(2,1)%y, var2%D(2,1)%z) +deallocate(var2%D(1,2)%x, var2%D(1,2)%y, var2%D(1,2)%z) +deallocate(var2%D(2,2)%x, var2%D(2,2)%y, var2%D(2,2)%z) +deallocate(var2%A, var2%B, var2%C, var2%D) + +! -------------------------------------- +! Assign + allocate +allocate (var3%Q%A, source=45) +allocate (var3%Q%B, source=[1,2,3]) +allocate (var3%Q%C, source=t2(6,5,4)) +allocate (var3%Q%D(2,2)) +var3%Q%D(1,1) = t2(1,2,3) +var3%Q%D(2,1) = t2(4,5,6) +var3%Q%D(1,2) = t2(11,12,13) +var3%Q%D(2,2) = t2(14,15,16) + +allocate (var3%R(2)%A, source=45) +allocate (var3%R(2)%B, source=[1,2,3]) +allocate (var3%R(2)%C, source=t2(6,5,4)) +allocate (var3%R(2)%D(2,2)) +var3%R(2)%D(1,1) = t2(1,2,3) +var3%R(2)%D(2,1) = t2(4,5,6) +var3%R(2)%D(1,2) = t2(11,12,13) +var3%R(2)%D(2,2) = t2(14,15,16) + +! Assign + allocate +allocate (var4%Q%A, source=145) +allocate (var4%Q%B, source=[991,992,993]) +allocate (var4%Q%C, source=t2(996,995,994)) +allocate (var4%Q%D(2,2)) +var4%Q%D(1,1) = t2(199,299,399) +var4%Q%D(2,1) = t2(499,599,699) +var4%Q%D(1,2) = t2(1199,1299,1399) +var4%Q%D(2,2) = t2(1499,1599,1699) + +allocate (var4%R(3)%A, source=145) +allocate (var4%R(3)%B, source=[991,992,993]) +allocate (var4%R(3)%C, source=t2(996,995,994)) +allocate (var4%R(3)%D(2,2)) +var4%R(3)%D(1,1) = t2(199,299,399) +var4%R(3)%D(2,1) = t2(499,599,699) +var4%R(3)%D(1,2) = t2(1199,1299,1399) +var4%R(3)%D(2,2) = t2(1499,1599,1699) + +!$omp target map(to: var3%Q%A, var3%Q%B, var3%Q%C, var3%Q%D) & +!$omp& map(tofrom: var4%Q%A, var4%Q%B, var4%Q%C, var4%Q%D) + call foo(var3%Q, var4%Q) +!$omp end target + +iptr = loc(var3%R(2)%A) + +!$omp target map(to: var3%R(2)%A, var3%R(2)%B, var3%R(2)%C, var3%R(2)%D) & +!$omp& map(tofrom: var4%R(3)%A, var4%R(3)%B, var4%R(3)%C, var4%R(3)%D) + call foo(var3%R(2), var4%R(3)) +!$omp end target + +if (var4%Q%A /= 45) stop 13 +if (any (var4%Q%B /= [1,2,3])) stop 14 +if (var4%Q%C%x /= 6) stop 15 +if (var4%Q%C%y /= 5) stop 15 +if (var4%Q%C%z /= 4) stop 15 +block + integer :: tmp_x(2,2), tmp_y(2,2), tmp_z(2,2), i, j + tmp_x = reshape([1, 4, 11, 14], [2,2]) + tmp_y = reshape([2, 5, 12, 15], [2,2]) + tmp_z = reshape([3, 6, 13, 16], [2,2]) + do j = 1, 2 + do i = 1, 2 + if (var4%Q%D(i,j)%x /= tmp_x(i,j)) stop 16 + if (var4%Q%D(i,j)%y /= tmp_y(i,j)) stop 16 + if (var4%Q%D(i,j)%z /= tmp_z(i,j)) stop 16 + end do + end do +end block + +! Cf. PR fortran/104696 +! { dg-output "valid mapping, OK" { xfail { offload_device_nonshared_as } } } +if (iptr /= loc(var3%R(2)%A)) then + print *, "invalid mapping, cf. PR fortran/104696" +else + +if (var4%R(3)%A /= 45) stop 17 +if (any (var4%R(3)%B /= [1,2,3])) stop 18 +if (var4%R(3)%C%x /= 6) stop 19 +if (var4%R(3)%C%y /= 5) stop 19 +if (var4%R(3)%C%z /= 4) stop 19 +block + integer :: tmp_x(2,2), tmp_y(2,2), tmp_z(2,2), i, j + tmp_x = reshape([1, 4, 11, 14], [2,2]) + tmp_y = reshape([2, 5, 12, 15], [2,2]) + tmp_z = reshape([3, 6, 13, 16], [2,2]) + do j = 1, 2 + do i = 1, 2 + if (var4%R(3)%D(i,j)%x /= tmp_x(i,j)) stop 20 + if (var4%R(3)%D(i,j)%y /= tmp_y(i,j)) stop 20 + if (var4%R(3)%D(i,j)%z /= tmp_z(i,j)) stop 20 + end do + end do +end block + +! Extra deallocates due to PR fortran/104697 +deallocate(var3%Q%C%x, var3%Q%D(1,1)%x, var3%Q%D(2,1)%x, var3%Q%D(1,2)%x, var3%Q%D(2,2)%x) +deallocate(var3%Q%C%y, var3%Q%D(1,1)%y, var3%Q%D(2,1)%y, var3%Q%D(1,2)%y, var3%Q%D(2,2)%y) +deallocate(var3%Q%C%z, var3%Q%D(1,1)%z, var3%Q%D(2,1)%z, var3%Q%D(1,2)%z, var3%Q%D(2,2)%z) +deallocate(var3%Q%A, var3%Q%B, var3%Q%C, var3%Q%D) + +deallocate(var4%Q%C%x, var4%Q%D(1,1)%x, var4%Q%D(2,1)%x, var4%Q%D(1,2)%x, var4%Q%D(2,2)%x) +deallocate(var4%Q%C%y, var4%Q%D(1,1)%y, var4%Q%D(2,1)%y, var4%Q%D(1,2)%y, var4%Q%D(2,2)%y) +deallocate(var4%Q%C%z, var4%Q%D(1,1)%z, var4%Q%D(2,1)%z, var4%Q%D(1,2)%z, var4%Q%D(2,2)%z) +deallocate(var4%Q%A, var4%Q%B, var4%Q%C, var4%Q%D) + +deallocate(var3%R(2)%C%x, var3%R(2)%D(1,1)%x, var3%R(2)%D(2,1)%x, var3%R(2)%D(1,2)%x, var3%R(2)%D(2,2)%x) +deallocate(var3%R(2)%C%y, var3%R(2)%D(1,1)%y, var3%R(2)%D(2,1)%y, var3%R(2)%D(1,2)%y, var3%R(2)%D(2,2)%y) +deallocate(var3%R(2)%C%z, var3%R(2)%D(1,1)%z, var3%R(2)%D(2,1)%z, var3%R(2)%D(1,2)%z, var3%R(2)%D(2,2)%z) +deallocate(var3%R(2)%A, var3%R(2)%B, var3%R(2)%C, var3%R(2)%D) + +deallocate(var4%R(3)%C%x, var4%R(3)%D(1,1)%x, var4%R(3)%D(2,1)%x, var4%R(3)%D(1,2)%x, var4%R(3)%D(2,2)%x) +deallocate(var4%R(3)%C%y, var4%R(3)%D(1,1)%y, var4%R(3)%D(2,1)%y, var4%R(3)%D(1,2)%y, var4%R(3)%D(2,2)%y) +deallocate(var4%R(3)%C%z, var4%R(3)%D(1,1)%z, var4%R(3)%D(2,1)%z, var4%R(3)%D(1,2)%z, var4%R(3)%D(2,2)%z) +deallocate(var4%R(3)%A, var4%R(3)%B, var4%R(3)%C, var4%R(3)%D) + + print *, "valid mapping, OK" +endif + +contains + subroutine foo(x, y) + type(t) :: x, y + intent(in) :: x + intent(inout) :: y + integer :: tmp_x(2,2), tmp_y(2,2), tmp_z(2,2), i, j + if (x%A /= 45) stop 1 + if (any (x%B /= [1,2,3])) stop 2 + if (x%C%x /= 6) stop 3 + if (x%C%y /= 5) stop 3 + if (x%C%z /= 4) stop 3 + + tmp_x = reshape([1, 4, 11, 14], [2,2]) + tmp_y = reshape([2, 5, 12, 15], [2,2]) + tmp_z = reshape([3, 6, 13, 16], [2,2]) + do j = 1, 2 + do i = 1, 2 + if (x%D(i,j)%x /= tmp_x(i,j)) stop 4 + if (x%D(i,j)%y /= tmp_y(i,j)) stop 4 + if (x%D(i,j)%z /= tmp_z(i,j)) stop 4 + end do + end do + + if (y%A /= 145) stop 5 + if (any (y%B /= [991,992,993])) stop 6 + if (y%C%x /= 996) stop 7 + if (y%C%y /= 995) stop 7 + if (y%C%z /= 994) stop 7 + tmp_x = reshape([199, 499, 1199, 1499], [2,2]) + tmp_y = reshape([299, 599, 1299, 1599], [2,2]) + tmp_z = reshape([399, 699, 1399, 1699], [2,2]) + do j = 1, 2 + do i = 1, 2 + if (y%D(i,j)%x /= tmp_x(i,j)) stop 8 + if (y%D(i,j)%y /= tmp_y(i,j)) stop 8 + if (y%D(i,j)%z /= tmp_z(i,j)) stop 8 + end do + end do + + y%A = x%A + y%B(:) = x%B + y%C%x = x%C%x + y%C%y = x%C%y + y%C%z = x%C%z + do j = 1, 2 + do i = 1, 2 + y%D(i,j)%x = x%D(i,j)%x + y%D(i,j)%y = x%D(i,j)%y + y%D(i,j)%z = x%D(i,j)%z + end do + end do + end +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90 new file mode 100644 index 0000000..1493c5f --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90 @@ -0,0 +1,672 @@ +module m + implicit none (type, external) + type t + integer, allocatable :: arr(:,:) + integer :: var + integer, allocatable :: slr + end type t + +contains + + subroutine check_it (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array, & + opt_scalar, opt_array, a_opt_scalar, a_opt_array) + type(t), intent(inout) :: & + scalar, array(:,:), opt_scalar, opt_array(:,:), a_scalar, a_array(:,:), & + a_opt_scalar, a_opt_array(:,:), & + l_scalar, l_array(:,:), la_scalar, la_array(:,:) + optional :: opt_scalar, opt_array, a_opt_scalar, a_opt_array + allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array, la_scalar, la_array + logical, value :: is_present, dummy_alloced, inner_alloc + integer :: i, j, k, l + + ! CHECK VALUE + if (scalar%var /= 42) stop 1 + if (l_scalar%var /= 42) stop 1 + if (is_present) then + if (opt_scalar%var /= 42) stop 2 + end if + if (any (shape(array) /= [3,2])) stop 1 + if (any (shape(l_array) /= [3,2])) stop 1 + if (is_present) then + if (any (shape(opt_array) /= [3,2])) stop 1 + end if + do j = 1, 2 + do i = 1, 3 + if (array(i,j)%var /= i*97 + 100*41*j) stop 3 + if (l_array(i,j)%var /= i*97 + 100*41*j) stop 3 + if (is_present) then + if (opt_array(i,j)%var /= i*97 + 100*41*j) stop 4 + end if + end do + end do + + if (dummy_alloced) then + if (a_scalar%var /= 42) stop 1 + if (la_scalar%var /= 42) stop 1 + if (is_present) then + if (a_opt_scalar%var /= 42) stop 1 + end if + if (any (shape(a_array) /= [3,2])) stop 1 + if (any (shape(la_array) /= [3,2])) stop 1 + if (is_present) then + if (any (shape(a_opt_array) /= [3,2])) stop 1 + end if + do j = 1, 2 + do i = 1, 3 + if (a_array(i,j)%var /= i*97 + 100*41*j) stop 1 + if (la_array(i,j)%var /= i*97 + 100*41*j) stop 1 + if (is_present) then + if (a_opt_array(i,j)%var /= i*97 + 100*41*j) stop 1 + end if + end do + end do + else + if (allocated (a_scalar)) stop 1 + if (allocated (la_scalar)) stop 1 + if (allocated (a_array)) stop 1 + if (allocated (la_array)) stop 1 + if (is_present) then + if (allocated (a_opt_scalar)) stop 1 + if (allocated (a_opt_array)) stop 1 + end if + end if + + if (inner_alloc) then + if (scalar%slr /= 467) stop 5 + if (l_scalar%slr /= 467) stop 5 + if (a_scalar%slr /= 467) stop 6 + if (la_scalar%slr /= 467) stop 6 + if (is_present) then + if (opt_scalar%slr /= 467) stop 7 + if (a_opt_scalar%slr /= 467) stop 8 + end if + do j = 1, 2 + do i = 1, 3 + if (array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 9 + if (l_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 9 + if (a_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 10 + if (la_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 10 + if (is_present) then + if (opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 11 + if (a_opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467) stop 12 + end if + end do + end do + + do l = 1, 5 + do k = 1, 4 + if (any (shape(scalar%arr) /= [4,5])) stop 1 + if (any (shape(l_scalar%arr) /= [4,5])) stop 1 + if (any (shape(a_scalar%arr) /= [4,5])) stop 1 + if (any (shape(la_scalar%arr) /= [4,5])) stop 1 + if (scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 13 + if (l_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 13 + if (a_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 14 + if (la_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 14 + if (is_present) then + if (any (shape(opt_scalar%arr) /= [4,5])) stop 1 + if (any (shape(a_opt_scalar%arr) /= [4,5])) stop 1 + if (opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 15 + if (a_opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467) stop 16 + end if + end do + end do + do j = 1, 2 + do i = 1, 3 + if (any (shape(array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(l_array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(a_array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(la_array(i,j)%arr) /= [i,j])) stop 1 + if (is_present) then + if (any (shape(opt_array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(a_opt_array(i,j)%arr) /= [i,j])) stop 1 + endif + do l = 1, j + do k = 1, i + if (array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 17 + if (l_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 17 + if (a_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 18 + if (la_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 18 + if (is_present) then + if (opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 19 + if (a_opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l) stop 20 + end if + end do + end do + end do + end do + else if (dummy_alloced) then + if (allocated (scalar%slr)) stop 1 + if (allocated (l_scalar%slr)) stop 1 + if (allocated (a_scalar%slr)) stop 1 + if (allocated (la_scalar%slr)) stop 1 + if (is_present) then + if (allocated (opt_scalar%slr)) stop 1 + if (allocated (a_opt_scalar%slr)) stop 1 + endif + if (allocated (scalar%arr)) stop 1 + if (allocated (l_scalar%arr)) stop 1 + if (allocated (a_scalar%arr)) stop 1 + if (allocated (la_scalar%arr)) stop 1 + if (is_present) then + if (allocated (opt_scalar%arr)) stop 1 + if (allocated (a_opt_scalar%arr)) stop 1 + endif + end if + + ! SET VALUE + scalar%var = 42 + 13 + l_scalar%var = 42 + 13 + if (is_present) then + opt_scalar%var = 42 + 13 + endif + do j = 1, 2 + do i = 1, 3 + array(i,j)%var = i*97 + 100*41*j + 13 + l_array(i,j)%var = i*97 + 100*41*j + 13 + if (is_present) then + opt_array(i,j)%var = i*97 + 100*41*j + 13 + end if + end do + end do + + if (dummy_alloced) then + a_scalar%var = 42 + 13 + la_scalar%var = 42 + 13 + if (is_present) then + a_opt_scalar%var = 42 + 13 + endif + do j = 1, 2 + do i = 1, 3 + a_array(i,j)%var = i*97 + 100*41*j + 13 + la_array(i,j)%var = i*97 + 100*41*j + 13 + if (is_present) then + a_opt_array(i,j)%var = i*97 + 100*41*j + 13 + endif + end do + end do + end if + + if (inner_alloc) then + scalar%slr = 467 + 13 + l_scalar%slr = 467 + 13 + a_scalar%slr = 467 + 13 + la_scalar%slr = 467 + 13 + if (is_present) then + opt_scalar%slr = 467 + 13 + a_opt_scalar%slr = 467 + 13 + end if + do j = 1, 2 + do i = 1, 3 + array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13 + l_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13 + a_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13 + la_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13 + if (is_present) then + opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13 + a_opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + 13 + end if + end do + end do + + do l = 1, 5 + do k = 1, 4 + scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13 + l_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13 + a_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13 + la_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13 + if (is_present) then + opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13 + a_opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + 13 + end if + end do + end do + do j = 1, 2 + do i = 1, 3 + do l = 1, j + do k = 1, i + array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13 + l_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13 + a_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13 + la_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13 + if (is_present) then + opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13 + a_opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + 13 + end if + end do + end do + end do + end do + end if + + end subroutine + subroutine check_reset (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array, & + opt_scalar, opt_array, a_opt_scalar, a_opt_array) + type(t), intent(inout) :: & + scalar, array(:,:), opt_scalar, opt_array(:,:), a_scalar, a_array(:,:), & + a_opt_scalar, a_opt_array(:,:), & + l_scalar, l_array(:,:), la_scalar, la_array(:,:) + optional :: opt_scalar, opt_array, a_opt_scalar, a_opt_array + allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array, la_scalar, la_array + logical, value :: is_present, dummy_alloced, inner_alloc + integer :: i, j, k, l + + ! CHECK VALUE + if (scalar%var /= 42 + 13) stop 1 + if (l_scalar%var /= 42 + 13) stop 1 + if (is_present) then + if (opt_scalar%var /= 42 + 13) stop 2 + end if + if (any (shape(array) /= [3,2])) stop 1 + if (any (shape(l_array) /= [3,2])) stop 1 + if (is_present) then + if (any (shape(opt_array) /= [3,2])) stop 1 + end if + do j = 1, 2 + do i = 1, 3 + if (array(i,j)%var /= i*97 + 100*41*j + 13) stop 3 + if (l_array(i,j)%var /= i*97 + 100*41*j + 13) stop 3 + if (is_present) then + if (opt_array(i,j)%var /= i*97 + 100*41*j + 13) stop 4 + end if + end do + end do + + if (dummy_alloced) then + if (a_scalar%var /= 42 + 13) stop 1 + if (la_scalar%var /= 42 + 13) stop 1 + if (is_present) then + if (a_opt_scalar%var /= 42 + 13) stop 1 + end if + if (any (shape(a_array) /= [3,2])) stop 1 + if (any (shape(la_array) /= [3,2])) stop 1 + if (is_present) then + if (any (shape(a_opt_array) /= [3,2])) stop 1 + end if + do j = 1, 2 + do i = 1, 3 + if (a_array(i,j)%var /= i*97 + 100*41*j + 13) stop 1 + if (la_array(i,j)%var /= i*97 + 100*41*j + 13) stop 1 + if (is_present) then + if (a_opt_array(i,j)%var /= i*97 + 100*41*j + 13) stop 1 + end if + end do + end do + else + if (allocated (a_scalar)) stop 1 + if (allocated (la_scalar)) stop 1 + if (allocated (a_array)) stop 1 + if (allocated (la_array)) stop 1 + if (is_present) then + if (allocated (a_opt_scalar)) stop 1 + if (allocated (a_opt_array)) stop 1 + end if + end if + + if (inner_alloc) then + if (scalar%slr /= 467 + 13) stop 5 + if (l_scalar%slr /= 467 + 13) stop 5 + if (a_scalar%slr /= 467 + 13) stop 6 + if (la_scalar%slr /= 467 + 13) stop 6 + if (is_present) then + if (opt_scalar%slr /= 467 + 13) stop 7 + if (a_opt_scalar%slr /= 467 + 13) stop 8 + end if + do j = 1, 2 + do i = 1, 3 + if (array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 9 + if (l_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 9 + if (a_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 10 + if (la_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 10 + if (is_present) then + if (opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 11 + if (a_opt_array(i,j)%slr /= (i*97 + 100*41*j) + 467 + 13) stop 12 + end if + end do + end do + + do l = 1, 5 + do k = 1, 4 + if (any (shape(scalar%arr) /= [4,5])) stop 1 + if (any (shape(l_scalar%arr) /= [4,5])) stop 1 + if (any (shape(a_scalar%arr) /= [4,5])) stop 1 + if (any (shape(la_scalar%arr) /= [4,5])) stop 1 + if (scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 13 + if (l_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 13 + if (a_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 14 + if (la_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 14 + if (is_present) then + if (any (shape(opt_scalar%arr) /= [4,5])) stop 1 + if (any (shape(a_opt_scalar%arr) /= [4,5])) stop 1 + if (opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 15 + if (a_opt_scalar%arr(k,l) /= (i*27 + 1000*11*j) + 467 + 13) stop 16 + end if + end do + end do + do j = 1, 2 + do i = 1, 3 + if (any (shape(array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(l_array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(a_array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(la_array(i,j)%arr) /= [i,j])) stop 1 + if (is_present) then + if (any (shape(opt_array(i,j)%arr) /= [i,j])) stop 1 + if (any (shape(a_opt_array(i,j)%arr) /= [i,j])) stop 1 + endif + do l = 1, j + do k = 1, i + if (array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 17 + if (l_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 17 + if (a_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 18 + if (la_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 18 + if (is_present) then + if (opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 19 + if (a_opt_array(i,j)%arr(k,l) /= i*27 + 1000*11*j + 467 + 3*k +53*l + 13) stop 20 + end if + end do + end do + end do + end do + else if (dummy_alloced) then + if (allocated (scalar%slr)) stop 1 + if (allocated (l_scalar%slr)) stop 1 + if (allocated (a_scalar%slr)) stop 1 + if (allocated (la_scalar%slr)) stop 1 + if (is_present) then + if (allocated (opt_scalar%slr)) stop 1 + if (allocated (a_opt_scalar%slr)) stop 1 + endif + if (allocated (scalar%arr)) stop 1 + if (allocated (l_scalar%arr)) stop 1 + if (allocated (a_scalar%arr)) stop 1 + if (allocated (la_scalar%arr)) stop 1 + if (is_present) then + if (allocated (opt_scalar%arr)) stop 1 + if (allocated (a_opt_scalar%arr)) stop 1 + endif + end if + + ! (RE)SET VALUE + scalar%var = 42 + l_scalar%var = 42 + if (is_present) then + opt_scalar%var = 42 + endif + do j = 1, 2 + do i = 1, 3 + array(i,j)%var = i*97 + 100*41*j + l_array(i,j)%var = i*97 + 100*41*j + if (is_present) then + opt_array(i,j)%var = i*97 + 100*41*j + end if + end do + end do + + if (dummy_alloced) then + a_scalar%var = 42 + la_scalar%var = 42 + if (is_present) then + a_opt_scalar%var = 42 + endif + do j = 1, 2 + do i = 1, 3 + a_array(i,j)%var = i*97 + 100*41*j + la_array(i,j)%var = i*97 + 100*41*j + if (is_present) then + a_opt_array(i,j)%var = i*97 + 100*41*j + endif + end do + end do + end if + + if (inner_alloc) then + scalar%slr = 467 + l_scalar%slr = 467 + a_scalar%slr = 467 + la_scalar%slr = 467 + if (is_present) then + opt_scalar%slr = 467 + a_opt_scalar%slr = 467 + end if + do j = 1, 2 + do i = 1, 3 + array(i,j)%slr = (i*97 + 100*41*j) + 467 + l_array(i,j)%slr = (i*97 + 100*41*j) + 467 + a_array(i,j)%slr = (i*97 + 100*41*j) + 467 + la_array(i,j)%slr = (i*97 + 100*41*j) + 467 + if (is_present) then + opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + a_opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + end if + end do + end do + + do l = 1, 5 + do k = 1, 4 + scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + l_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + a_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + la_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + if (is_present) then + opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + a_opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + end if + end do + end do + do j = 1, 2 + do i = 1, 3 + do l = 1, j + do k = 1, i + array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + l_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + a_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + la_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + if (is_present) then + opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + a_opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + end if + end do + end do + end do + end do + end if + end subroutine + + subroutine test(scalar, array, a_scalar, a_array, opt_scalar, opt_array, & + a_opt_scalar, a_opt_array) + type(t) :: scalar, array(:,:), opt_scalar, opt_array(:,:), a_scalar, a_array(:,:) + type(t) :: a_opt_scalar, a_opt_array(:,:) + type(t) :: l_scalar, l_array(3,2), la_scalar, la_array(:,:) + allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array, la_scalar, la_array + optional :: opt_scalar, opt_array, a_opt_scalar, a_opt_array + + integer :: i, j, k, l + logical :: is_present, dummy_alloced, local_alloced, inner_alloc + is_present = present(opt_scalar) + dummy_alloced = allocated(a_scalar) + inner_alloc = allocated(scalar%slr) + + l_scalar%var = 42 + do j = 1, 2 + do i = 1, 3 + l_array(i,j)%var = i*97 + 100*41*j + end do + end do + + if (dummy_alloced) then + allocate(la_scalar, la_array(3,2)) + a_scalar%var = 42 + la_scalar%var = 42 + do j = 1, 2 + do i = 1, 3 + l_array(i,j)%var = i*97 + 100*41*j + la_array(i,j)%var = i*97 + 100*41*j + end do + end do + end if + + if (inner_alloc) then + l_scalar%slr = 467 + la_scalar%slr = 467 + do j = 1, 2 + do i = 1, 3 + l_array(i,j)%slr = (i*97 + 100*41*j) + 467 + la_array(i,j)%slr = (i*97 + 100*41*j) + 467 + end do + end do + + allocate(l_scalar%arr(4,5), la_scalar%arr(4,5)) + do l = 1, 5 + do k = 1, 4 + l_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + la_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + end do + end do + do j = 1, 2 + do i = 1, 3 + allocate(l_array(i,j)%arr(i,j), la_array(i,j)%arr(i,j)) + do l = 1, j + do k = 1, i + l_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + la_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + end do + end do + end do + end do + end if + + ! implicit mapping + !$omp target + if (is_present) then + call check_it (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array, & + opt_scalar, opt_array, a_opt_scalar, a_opt_array) + else + call check_it (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array) + end if + !$omp end target + + if (is_present) then + call check_reset (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array, & + opt_scalar, opt_array, a_opt_scalar, a_opt_array) + else + call check_reset (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array) + endif + + ! explicit mapping + !$omp target map(scalar, array, opt_scalar, opt_array, a_scalar, a_array) & + !$omp& map(a_opt_scalar, a_opt_array) & + !$omp& map(l_scalar, l_array, la_scalar, la_array) + if (is_present) then + call check_it (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array, & + opt_scalar, opt_array, a_opt_scalar, a_opt_array) + else + call check_it (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array) + endif + !$omp end target + + if (is_present) then + call check_reset (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array, & + opt_scalar, opt_array, a_opt_scalar, a_opt_array) + else + call check_reset (is_present, dummy_alloced, inner_alloc, & + scalar, array, a_scalar, a_array, & + l_scalar, l_array, la_scalar, la_array) + endif + end subroutine +end module + +program main + use m + implicit none (type, external) + type(t) :: scalar, array(3,2), opt_scalar, opt_array(3,2), a_scalar, a_array(:,:) + type(t) :: a_opt_scalar, a_opt_array(:,:) + allocatable :: a_scalar, a_array, a_opt_scalar, a_opt_array + integer :: i, j, k, l, n + + scalar%var = 42 + opt_scalar%var = 42 + do j = 1, 2 + do i = 1, 3 + array(i,j)%var = i*97 + 100*41*j + opt_array(i,j)%var = i*97 + 100*41*j + end do + end do + + ! unallocated + call test (scalar, array, a_scalar, a_array) + call test (scalar, array, a_scalar, a_array, opt_scalar, opt_array, a_opt_scalar, a_opt_array) + + ! allocated + allocate(a_scalar, a_opt_scalar, a_array(3,2), a_opt_array(3,2)) + a_scalar%var = 42 + a_opt_scalar%var = 42 + do j = 1, 2 + do i = 1, 3 + a_array(i,j)%var = i*97 + 100*41*j + a_opt_array(i,j)%var = i*97 + 100*41*j + end do + end do + + call test (scalar, array, a_scalar, a_array) + call test (scalar, array, a_scalar, a_array, opt_scalar, opt_array, a_opt_scalar, a_opt_array) + + ! comps allocated + scalar%slr = 467 + a_scalar%slr = 467 + opt_scalar%slr = 467 + a_opt_scalar%slr = 467 + do j = 1, 2 + do i = 1, 3 + array(i,j)%slr = (i*97 + 100*41*j) + 467 + a_array(i,j)%slr = (i*97 + 100*41*j) + 467 + opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + a_opt_array(i,j)%slr = (i*97 + 100*41*j) + 467 + end do + end do + + allocate(scalar%arr(4,5), a_scalar%arr(4,5), opt_scalar%arr(4,5), a_opt_scalar%arr(4,5)) + do l = 1, 5 + do k = 1, 4 + scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + a_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + a_opt_scalar%arr(k,l) = (i*27 + 1000*11*j) + 467 + end do + end do + do j = 1, 2 + do i = 1, 3 + allocate(array(i,j)%arr(i,j), a_array(i,j)%arr(i,j), opt_array(i,j)%arr(i,j), a_opt_array(i,j)%arr(i,j)) + do l = 1, j + do k = 1, i + array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + a_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + a_opt_array(i,j)%arr(k,l) = i*27 + 1000*11*j + 467 + 3*k +53*l + end do + end do + end do + end do + + call test (scalar, array, a_scalar, a_array) + call test (scalar, array, a_scalar, a_array, opt_scalar, opt_array, a_opt_scalar, a_opt_array) + + deallocate(a_scalar, a_opt_scalar, a_array, a_opt_array) +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90 new file mode 100644 index 0000000..f5a286e --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90 @@ -0,0 +1,268 @@ +module m + implicit none (type, external) + type t + integer, allocatable :: A(:) + end type t + type t2 + type(t), allocatable :: vT + integer, allocatable :: x + end type t2 + +contains + + subroutine test_alloc() + type(t) :: var + type(t), allocatable :: var2 + + allocate(var2) + allocate(var%A(4), var2%A(5)) + + !$omp target enter data map(alloc: var, var2) + !$omp target + if (.not. allocated(Var2)) stop 1 + if (.not. allocated(Var%A)) stop 2 + if (.not. allocated(Var2%A)) stop 3 + if (lbound(var%A, 1) /= 1 .or. ubound(var%A, 1) /= 4) stop 4 + if (lbound(var2%A, 1) /= 1 .or. ubound(var2%A, 1) /= 5) stop 5 + var%A = [1,2,3,4] + var2%A = [11,22,33,44,55] + !$omp end target + !$omp target exit data map(from: var, var2) + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%A)) error stop + if (.not. allocated(Var2%A)) error stop + if (lbound(var%A, 1) /= 1 .or. ubound(var%A, 1) /= 4) error stop + if (lbound(var2%A, 1) /= 1 .or. ubound(var2%A, 1) /= 5) error stop + if (any(var%A /= [1,2,3,4])) error stop + if (any(var2%A /= [11,22,33,44,55])) error stop + end subroutine test_alloc + + subroutine test2_alloc() + type(t2) :: var + type(t2), allocatable :: var2 + + allocate(var2) + allocate(var%x, var2%x) + + !$omp target enter data map(alloc: var, var2) + !$omp target + if (.not. allocated(Var2)) stop 6 + if (.not. allocated(Var%x)) stop 7 + if (.not. allocated(Var2%x)) stop 8 + var%x = 42 + var2%x = 43 + !$omp end target + !$omp target exit data map(from: var, var2) + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%x)) error stop + if (.not. allocated(Var2%x)) error stop + if (var%x /= 42) error stop + if (var2%x /= 43) error stop + + allocate(var%vt, var2%vt) + allocate(var%vt%A(-1:3), var2%vt%A(0:4)) + + !$omp target enter data map(alloc: var, var2) + !$omp target + if (.not. allocated(Var2)) stop 11 + if (.not. allocated(Var%x)) stop 12 + if (.not. allocated(Var2%x)) stop 13 + if (.not. allocated(Var%vt)) stop 14 + if (.not. allocated(Var2%vt)) stop 15 + if (.not. allocated(Var%vt%a)) stop 16 + if (.not. allocated(Var2%vt%a)) stop 17 + var%x = 42 + var2%x = 43 + if (lbound(var%vt%A, 1) /= -1 .or. ubound(var%vt%A, 1) /= 3) stop 4 + if (lbound(var2%vt%A, 1) /= 0 .or. ubound(var2%vt%A, 1) /= 4) stop 5 + var%vt%A = [1,2,3,4,5] + var2%vt%A = [11,22,33,44,55] + !$omp end target + !$omp target exit data map(from: var, var2) + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%x)) error stop + if (.not. allocated(Var2%x)) error stop + if (.not. allocated(Var%vt)) error stop + if (.not. allocated(Var2%vt)) error stop + if (.not. allocated(Var%vt%a)) error stop + if (.not. allocated(Var2%vt%a)) error stop + if (var%x /= 42) error stop + if (var2%x /= 43) error stop + if (lbound(var%vt%A, 1) /= -1 .or. ubound(var%vt%A, 1) /= 3) error stop + if (lbound(var2%vt%A, 1) /= 0 .or. ubound(var2%vt%A, 1) /= 4) error stop + if (any(var%vt%A /= [1,2,3,4,5])) error stop + if (any(var2%vt%A /= [11,22,33,44,55])) error stop + end subroutine test2_alloc + + + subroutine test_alloc_target() + type(t) :: var + type(t), allocatable :: var2 + + allocate(var2) + allocate(var%A(4), var2%A(5)) + + !$omp target map(alloc: var, var2) + if (.not. allocated(Var2)) stop 1 + if (.not. allocated(Var%A)) stop 2 + if (.not. allocated(Var2%A)) stop 3 + if (lbound(var%A, 1) /= 1 .or. ubound(var%A, 1) /= 4) stop 4 + if (lbound(var2%A, 1) /= 1 .or. ubound(var2%A, 1) /= 5) stop 5 + var%A = [1,2,3,4] + var2%A = [11,22,33,44,55] + !$omp end target + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%A)) error stop + if (.not. allocated(Var2%A)) error stop + if (lbound(var%A, 1) /= 1 .or. ubound(var%A, 1) /= 4) error stop + if (lbound(var2%A, 1) /= 1 .or. ubound(var2%A, 1) /= 5) error stop + end subroutine test_alloc_target + + subroutine test2_alloc_target() + type(t2) :: var + type(t2), allocatable :: var2 + + allocate(var2) + allocate(var%x, var2%x) + + !$omp target map(alloc: var, var2) + if (.not. allocated(Var2)) stop 6 + if (.not. allocated(Var%x)) stop 7 + if (.not. allocated(Var2%x)) stop 8 + var%x = 42 + var2%x = 43 + !$omp end target + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%x)) error stop + if (.not. allocated(Var2%x)) error stop + + allocate(var%vt, var2%vt) + allocate(var%vt%A(-1:3), var2%vt%A(0:4)) + + !$omp target map(alloc: var, var2) + if (.not. allocated(Var2)) stop 11 + if (.not. allocated(Var%x)) stop 12 + if (.not. allocated(Var2%x)) stop 13 + if (.not. allocated(Var%vt)) stop 14 + if (.not. allocated(Var2%vt)) stop 15 + if (.not. allocated(Var%vt%a)) stop 16 + if (.not. allocated(Var2%vt%a)) stop 17 + var%x = 42 + var2%x = 43 + if (lbound(var%vt%A, 1) /= -1 .or. ubound(var%vt%A, 1) /= 3) stop 4 + if (lbound(var2%vt%A, 1) /= 0 .or. ubound(var2%vt%A, 1) /= 4) stop 5 + var%vt%A = [1,2,3,4,5] + var2%vt%A = [11,22,33,44,55] + !$omp end target + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%x)) error stop + if (.not. allocated(Var2%x)) error stop + if (.not. allocated(Var%vt)) error stop + if (.not. allocated(Var2%vt)) error stop + if (.not. allocated(Var%vt%a)) error stop + if (.not. allocated(Var2%vt%a)) error stop + if (lbound(var%vt%A, 1) /= -1 .or. ubound(var%vt%A, 1) /= 3) error stop + if (lbound(var2%vt%A, 1) /= 0 .or. ubound(var2%vt%A, 1) /= 4) error stop + end subroutine test2_alloc_target + + + + subroutine test_from() + type(t) :: var + type(t), allocatable :: var2 + + allocate(var2) + allocate(var%A(4), var2%A(5)) + + !$omp target map(from: var, var2) + if (.not. allocated(Var2)) stop 1 + if (.not. allocated(Var%A)) stop 2 + if (.not. allocated(Var2%A)) stop 3 + if (lbound(var%A, 1) /= 1 .or. ubound(var%A, 1) /= 4) stop 4 + if (lbound(var2%A, 1) /= 1 .or. ubound(var2%A, 1) /= 5) stop 5 + var%A = [1,2,3,4] + var2%A = [11,22,33,44,55] + !$omp end target + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%A)) error stop + if (.not. allocated(Var2%A)) error stop + if (lbound(var%A, 1) /= 1 .or. ubound(var%A, 1) /= 4) error stop + if (lbound(var2%A, 1) /= 1 .or. ubound(var2%A, 1) /= 5) error stop + if (any(var%A /= [1,2,3,4])) error stop + if (any(var2%A /= [11,22,33,44,55])) error stop + end subroutine test_from + + subroutine test2_from() + type(t2) :: var + type(t2), allocatable :: var2 + + allocate(var2) + allocate(var%x, var2%x) + + !$omp target map(from: var, var2) + if (.not. allocated(Var2)) stop 6 + if (.not. allocated(Var%x)) stop 7 + if (.not. allocated(Var2%x)) stop 8 + var%x = 42 + var2%x = 43 + !$omp end target + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%x)) error stop + if (.not. allocated(Var2%x)) error stop + if (var%x /= 42) error stop + if (var2%x /= 43) error stop + + allocate(var%vt, var2%vt) + allocate(var%vt%A(-1:3), var2%vt%A(0:4)) + + !$omp target map(from: var, var2) + if (.not. allocated(Var2)) stop 11 + if (.not. allocated(Var%x)) stop 12 + if (.not. allocated(Var2%x)) stop 13 + if (.not. allocated(Var%vt)) stop 14 + if (.not. allocated(Var2%vt)) stop 15 + if (.not. allocated(Var%vt%a)) stop 16 + if (.not. allocated(Var2%vt%a)) stop 17 + var%x = 42 + var2%x = 43 + if (lbound(var%vt%A, 1) /= -1 .or. ubound(var%vt%A, 1) /= 3) stop 4 + if (lbound(var2%vt%A, 1) /= 0 .or. ubound(var2%vt%A, 1) /= 4) stop 5 + var%vt%A = [1,2,3,4,5] + var2%vt%A = [11,22,33,44,55] + !$omp end target + + if (.not. allocated(Var2)) error stop + if (.not. allocated(Var%x)) error stop + if (.not. allocated(Var2%x)) error stop + if (.not. allocated(Var%vt)) error stop + if (.not. allocated(Var2%vt)) error stop + if (.not. allocated(Var%vt%a)) error stop + if (.not. allocated(Var2%vt%a)) error stop + if (var%x /= 42) error stop + if (var2%x /= 43) error stop + if (lbound(var%vt%A, 1) /= -1 .or. ubound(var%vt%A, 1) /= 3) error stop + if (lbound(var2%vt%A, 1) /= 0 .or. ubound(var2%vt%A, 1) /= 4) error stop + if (any(var%vt%A /= [1,2,3,4,5])) error stop + if (any(var2%vt%A /= [11,22,33,44,55])) error stop + end subroutine test2_from + +end module m + +use m + implicit none (type, external) + call test_alloc + call test2_alloc + call test_alloc_target + call test2_alloc_target + + call test_from + call test2_from +end diff --git a/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90 b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90 new file mode 100644 index 0000000..3cec392 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90 @@ -0,0 +1,559 @@ +! Ensure that polymorphic mapping is diagnosed as undefined behavior +! Ensure that static access to polymorphic variables works + +subroutine test(case) +implicit none(type, external) +type t + integer :: x(4) +end type t + +type ta + integer, allocatable :: x(:) +end type ta + +type t2 + class(t), allocatable :: x + class(t), allocatable :: x2(:) +end type t2 + +type t3 + type(t2) :: y + type(t2) :: y2(2) +end type t3 + +type t4 + type(t3), allocatable :: y + type(t3), allocatable :: y2(:) +end type t4 + +integer, value :: case + +logical :: is_shared_mem + +! Mangle stack addresses +integer, volatile :: case_var(100*case) + +type(t), allocatable :: var1 +type(ta), allocatable :: var1a +class(t), allocatable :: var2 +type(t2), allocatable :: var3 +type(t4), allocatable :: var4 + +case_var(100) = 0 +!print *, 'case', case + +var1 = t([1,2,3,4]) +var1a = ta([-1,-2,-3,-4,-5]) + +var2 = t([11,22,33,44]) + +allocate(t2 :: var3) +allocate(t :: var3%x) +allocate(t :: var3%x2(2)) +var3%x%x = [111,222,333,444] +var3%x2(1)%x = 2*[111,222,333,444] +var3%x2(2)%x = 3*[111,222,333,444] + +allocate(t4 :: var4) +allocate(t3 :: var4%y) +allocate(t3 :: var4%y2(2)) +allocate(t :: var4%y%y%x) +allocate(t :: var4%y%y%x2(2)) +allocate(t :: var4%y2(1)%y%x) +allocate(t :: var4%y2(1)%y%x2(2)) +allocate(t :: var4%y2(2)%y%x) +allocate(t :: var4%y2(2)%y%x2(2)) +var4%y%y%x%x = -1 * [1111,2222,3333,4444] +var4%y%y%x2(1)%x = -2 * [1111,2222,3333,4444] +var4%y%y%x2(2)%x = -3 * [1111,2222,3333,4444] +var4%y2(1)%y%x%x = -4 * [1111,2222,3333,4444] +var4%y2(1)%y%x2(1)%x = -5 * [1111,2222,3333,4444] +var4%y2(1)%y%x2(2)%x = -6 * [1111,2222,3333,4444] +var4%y2(2)%y%x%x = -7 * [1111,2222,3333,4444] +var4%y2(2)%y%x2(1)%x = -8 * [1111,2222,3333,4444] +var4%y2(2)%y%x2(2)%x = -9 * [1111,2222,3333,4444] + +is_shared_mem = .false. +!$omp target map(to: is_shared_mem) + is_shared_mem = .true. +!$omp end target + +if (case == 1) then + ! implicit mapping + !$omp target + if (any (var1%x /= [1,2,3,4])) stop 1 + var1%x = 2 * var1%x + !$omp end target + + !$omp target + if (any (var1a%x /= [-1,-2,-3,-4])) stop 2 + var1a%x = 3 * var1a%x + !$omp end target + + !$omp target ! { dg-warning "Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var2%x /= [11,22,33,44])) stop 3 + var2%x = 4 * var2%x + !$omp end target + + !$omp target ! { dg-warning "Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var3%x%x /= [111,222,333,444])) stop 4 + var3%x%x = 5 * var3%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 4 + if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 4 + var3%x2(1)%x = 5 * var3%x2(1)%x + var3%x2(2)%x = 5 * var3%x2(2)%x + end if + !$omp end target + + !$omp target ! { dg-warning "Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 5 + end if + var4%y%y%x%x = 6 * var4%y%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y%y%x2(1)%x = 6 * var4%y%y%x2(1)%x + var4%y%y%x2(2)%x = 6 * var4%y%y%x2(2)%x + endif + var4%y2(1)%y%x%x = 6 * var4%y2(1)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(1)%y%x2(1)%x = 6 * var4%y2(1)%y%x2(1)%x + var4%y2(1)%y%x2(2)%x = 6 * var4%y2(1)%y%x2(2)%x + endif + var4%y2(2)%y%x%x = 6 * var4%y2(2)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(2)%y%x2(1)%x = 6 * var4%y2(2)%y%x2(1)%x + var4%y2(2)%y%x2(2)%x = 6 * var4%y2(2)%y%x2(2)%x + endif + !$omp end target + +else if (case == 2) then + ! Use target with defaultmap(TO) + + !$omp target defaultmap(to : all) + if (any (var1%x /= [1,2,3,4])) stop 1 + var1%x = 2 * var1%x + !$omp end target + + !$omp target defaultmap(to : all) + if (any (var1a%x /= [-1,-2,-3,-4])) stop 2 + var1a%x = 3 * var1a%x + !$omp end target + + !$omp target defaultmap(to : all) ! { dg-warning "Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var2%x /= [11,22,33,44])) stop 3 + var2%x = 4 * var2%x + !$omp end target + + !$omp target defaultmap(to : all) ! { dg-warning "Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var3%x%x /= [111,222,333,444])) stop 4 + var3%x%x = 5 * var3%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 4 + if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 4 + var3%x2(1)%x = 5 * var3%x2(1)%x + var3%x2(2)%x = 5 * var3%x2(2)%x + endif + !$omp end target + + !$omp target defaultmap(to : all) firstprivate(is_shared_mem) ! { dg-warning "Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 5 + endif + var4%y%y%x%x = 6 * var4%y%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y%y%x2(1)%x = 6 * var4%y%y%x2(1)%x + var4%y%y%x2(2)%x = 6 * var4%y%y%x2(2)%x + endif + var4%y2(1)%y%x%x = 6 * var4%y2(1)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(1)%y%x2(1)%x = 6 * var4%y2(1)%y%x2(1)%x + var4%y2(1)%y%x2(2)%x = 6 * var4%y2(1)%y%x2(2)%x + endif + var4%y2(2)%y%x%x = 6 * var4%y2(2)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(2)%y%x2(1)%x = 6 * var4%y2(2)%y%x2(1)%x + var4%y2(2)%y%x2(2)%x = 6 * var4%y2(2)%y%x2(2)%x + endif + !$omp end target + +else if (case == 3) then + ! Use target with map clause + + !$omp target map(tofrom: var1) + if (any (var1%x /= [1,2,3,4])) stop 1 + var1%x = 2 * var1%x + !$omp end target + + !$omp target map(tofrom: var1a) + if (any (var1a%x /= [-1,-2,-3,-4])) stop 2 + var1a%x = 3 * var1a%x + !$omp end target + + !$omp target map(tofrom: var2) ! { dg-warning "28: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var2%x /= [11,22,33,44])) stop 3 + var2%x = 4 * var2%x + !$omp end target + + !$omp target map(tofrom: var3) ! { dg-warning "28: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var3%x%x /= [111,222,333,444])) stop 4 + var3%x%x = 5 * var3%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 4 + if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 4 + var3%x2(1)%x = 5 * var3%x2(1)%x + var3%x2(2)%x = 5 * var3%x2(2)%x + endif + !$omp end target + + !$omp target map(tofrom: var4) ! { dg-warning "28: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 5 + end if + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 5 + endif + var4%y%y%x%x = 6 * var4%y%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y%y%x2(1)%x = 6 * var4%y%y%x2(1)%x + var4%y%y%x2(2)%x = 6 * var4%y%y%x2(2)%x + endif + var4%y2(1)%y%x%x = 6 * var4%y2(1)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(1)%y%x2(1)%x = 6 * var4%y2(1)%y%x2(1)%x + var4%y2(1)%y%x2(2)%x = 6 * var4%y2(1)%y%x2(2)%x + endif + var4%y2(2)%y%x%x = 6 * var4%y2(2)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(2)%y%x2(1)%x = 6 * var4%y2(2)%y%x2(1)%x + var4%y2(2)%y%x2(2)%x = 6 * var4%y2(2)%y%x2(2)%x + endif + !$omp end target + +else if (case == 4) then + ! Use target with map clause -- NOTE: This uses TO not TOFROM + + !$omp target map(to: var1) + if (any (var1%x /= [1,2,3,4])) stop 1 + var1%x = 2 * var1%x + !$omp end target + + !$omp target map(to: var1a) + if (any (var1a%x /= [-1,-2,-3,-4])) stop 2 + var1a%x = 3 * var1a%x + !$omp end target + + !$omp target map(to: var2) ! { dg-warning "24: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var2%x /= [11,22,33,44])) stop 3 + var2%x = 4 * var2%x + !$omp end target + + !$omp target map(to: var3) ! { dg-warning "24: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var3%x%x /= [111,222,333,444])) stop 4 + var3%x%x = 5 * var3%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 4 + if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 4 + var3%x2(1)%x = 5 * var3%x2(1)%x + var3%x2(2)%x = 5 * var3%x2(2)%x + endif + !$omp end target + + !$omp target map(to: var4) ! { dg-warning "24: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 5 + endif + var4%y%y%x%x = 6 * var4%y%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y%y%x2(1)%x = 6 * var4%y%y%x2(1)%x + var4%y%y%x2(2)%x = 6 * var4%y%y%x2(2)%x + endif + var4%y2(1)%y%x%x = 6 * var4%y2(1)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(1)%y%x2(1)%x = 6 * var4%y2(1)%y%x2(1)%x + var4%y2(1)%y%x2(2)%x = 6 * var4%y2(1)%y%x2(2)%x + endif + var4%y2(2)%y%x%x = 6 * var4%y2(2)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(2)%y%x2(1)%x = 6 * var4%y2(2)%y%x2(1)%x + var4%y2(2)%y%x2(2)%x = 6 * var4%y2(2)%y%x2(2)%x + endif + !$omp end target + +else if (case == 5) then + ! Use target enter/exit data + target with explicit map + !$omp target enter data map(to: var1) + !$omp target enter data map(to: var1a) + !$omp target enter data map(to: var2) ! { dg-warning "35: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target enter data map(to: var3) ! { dg-warning "35: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target enter data map(to: var4) ! { dg-warning "35: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + + !$omp target map(to: var1) + if (any (var1%x /= [1,2,3,4])) stop 1 + var1%x = 2 * var1%x + !$omp end target + + !$omp target map(to: var1a) + if (any (var1a%x /= [-1,-2,-3,-4])) stop 2 + var1a%x = 3 * var1a%x + !$omp end target + + !$omp target map(to: var2) ! { dg-warning "24: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var2%x /= [11,22,33,44])) stop 3 + var2%x = 4 * var2%x + !$omp end target + + !$omp target map(to: var3) ! { dg-warning "24: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var3%x%x /= [111,222,333,444])) stop 4 + var3%x%x = 5 * var3%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 4 + if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 4 + var3%x2(1)%x = 5 * var3%x2(1)%x + var3%x2(2)%x = 5 * var3%x2(2)%x + endif + !$omp end target + + !$omp target map(to: var4) ! { dg-warning "24: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 5 + endif + var4%y%y%x%x = 6 * var4%y%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y%y%x2(1)%x = 6 * var4%y%y%x2(1)%x + var4%y%y%x2(2)%x = 6 * var4%y%y%x2(2)%x + endif + var4%y2(1)%y%x%x = 6 * var4%y2(1)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(1)%y%x2(1)%x = 6 * var4%y2(1)%y%x2(1)%x + var4%y2(1)%y%x2(2)%x = 6 * var4%y2(1)%y%x2(2)%x + endif + var4%y2(2)%y%x%x = 6 * var4%y2(2)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(2)%y%x2(1)%x = 6 * var4%y2(2)%y%x2(1)%x + var4%y2(2)%y%x2(2)%x = 6 * var4%y2(2)%y%x2(2)%x + endif + !$omp end target + + !$omp target exit data map(from: var1) + !$omp target exit data map(from: var1a) + !$omp target exit data map(from: var2) ! { dg-warning "36: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target exit data map(from: var3) ! { dg-warning "36: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target exit data map(from: var4) ! { dg-warning "36: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + +else if (case == 6) then + ! Use target enter/exit data + target with implicit map + + !$omp target enter data map(to: var1) + !$omp target enter data map(to: var1a) + !$omp target enter data map(to: var2) ! { dg-warning "35: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target enter data map(to: var3) ! { dg-warning "35: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target enter data map(to: var4) ! { dg-warning "35: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + + !$omp target + if (any (var1%x /= [1,2,3,4])) stop 1 + var1%x = 2 * var1%x + !$omp end target + + !$omp target + if (any (var1a%x /= [-1,-2,-3,-4])) stop 2 + var1a%x = 3 * var1a%x + !$omp end target + + !$omp target ! { dg-warning "Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var2%x /= [11,22,33,44])) stop 3 + var2%x = 4 * var2%x + !$omp end target + + !$omp target ! { dg-warning "Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var3%x%x /= [111,222,333,444])) stop 4 + var3%x%x = 5 * var3%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 4 + if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 4 + var3%x2(1)%x = 5 * var3%x2(1)%x + var3%x2(2)%x = 5 * var3%x2(2)%x + endif + !$omp end target + + !$omp target ! { dg-warning "Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 5 + endif + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 5 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 5 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 5 + endif + var4%y%y%x%x = 6 * var4%y%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y%y%x2(1)%x = 6 * var4%y%y%x2(1)%x + var4%y%y%x2(2)%x = 6 * var4%y%y%x2(2)%x + endif + var4%y2(1)%y%x%x = 6 * var4%y2(1)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(1)%y%x2(1)%x = 6 * var4%y2(1)%y%x2(1)%x + var4%y2(1)%y%x2(2)%x = 6 * var4%y2(1)%y%x2(2)%x + endif + var4%y2(2)%y%x%x = 6 * var4%y2(2)%y%x%x + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + var4%y2(2)%y%x2(1)%x = 6 * var4%y2(2)%y%x2(1)%x + var4%y2(2)%y%x2(2)%x = 6 * var4%y2(2)%y%x2(2)%x + endif + !$omp end target + + !$omp target exit data map(from: var1) + !$omp target exit data map(from: var1a) + !$omp target exit data map(from: var2) ! { dg-warning "36: Mapping of polymorphic list item 'var2' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target exit data map(from: var3) ! { dg-warning "36: Mapping of polymorphic list item 'var3->x' is unspecified behavior \\\[-Wopenmp\\\]" } + !$omp target exit data map(from: var4) ! { dg-warning "36: Mapping of polymorphic list item 'var4\.\[0-9\]+->y->y\.x' is unspecified behavior \\\[-Wopenmp\\\]" } + +else + error stop +end if + +if ((case /= 2 .and. case /= 4) .or. is_shared_mem) then + ! The target update should have been active, check for the updated values + if (any (var1%x /= 2 * [1,2,3,4])) stop 11 + if (any (var1a%x /= 3 * [-1,-2,-3,-4])) stop 22 + if (any (var2%x /= 4 * [11,22,33,44])) stop 33 + + if (any (var3%x%x /= 5 * [111,222,333,444])) stop 44 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var3%x2(1)%x /= 2 * 5 * [111,222,333,444])) stop 44 + if (any (var3%x2(2)%x /= 3 * 5 * [111,222,333,444])) stop 44 + endif + + if (any (var4%y%y%x%x /= -1 * 6 * [1111,2222,3333,4444])) stop 55 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y%y%x2(1)%x /= -2 * 6 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y%y%x2(2)%x /= -3 * 6 * [1111,2222,3333,4444])) stop 55 + endif + if (any (var4%y2(1)%y%x%x /= -4 * 6 * [1111,2222,3333,4444])) stop 55 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(1)%y%x2(1)%x /= -5 * 6 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y2(1)%y%x2(2)%x /= -6 * 6 * [1111,2222,3333,4444])) stop 55 + endif + if (any (var4%y2(2)%y%x%x /= -7 * 6 * [1111,2222,3333,4444])) stop 55 + if (is_shared_mem) then ! For stride data, this accesses the host's _vtab + if (any (var4%y2(2)%y%x2(1)%x /= -8 * 6 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y2(2)%y%x2(2)%x /= -9 * 6 * [1111,2222,3333,4444])) stop 55 + endif +else + ! The old host values should still be there as 'to:' created a device copy + if (any (var1%x /= [1,2,3,4])) stop 12 + if (any (var1a%x /= [-1,-2,-3,-4])) stop 22 + if (any (var2%x /= [11,22,33,44])) stop 33 + + if (any (var3%x%x /= [111,222,333,444])) stop 44 + ! .not. is_shared_mem: + ! if (any (var3%x2(1)%x /= 2*[111,222,333,444])) stop 44 + ! if (any (var3%x2(2)%x /= 3*[111,222,333,444])) stop 44 + + if (any (var4%y%y%x%x /= -1 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y%y%x2(1)%x /= -2 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y%y%x2(2)%x /= -3 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y2(1)%y%x%x /= -4 * [1111,2222,3333,4444])) stop 55 + ! .not. is_shared_mem: + !if (any (var4%y2(1)%y%x2(1)%x /= -5 * [1111,2222,3333,4444])) stop 55 + !if (any (var4%y2(1)%y%x2(2)%x /= -6 * [1111,2222,3333,4444])) stop 55 + if (any (var4%y2(2)%y%x%x /= -7 * [1111,2222,3333,4444])) stop 55 + ! .not. is_shared_mem: + !if (any (var4%y2(2)%y%x2(1)%x /= -8 * [1111,2222,3333,4444])) stop 55 + !if (any (var4%y2(2)%y%x2(2)%x /= -9 * [1111,2222,3333,4444])) stop 55 +end if +if (case_var(100) /= 0) stop 123 +end subroutine test + +program main + use omp_lib + implicit none(type, external) + interface + subroutine test(case) + integer, value :: case + end + end interface + integer :: dev + call run_it(omp_get_default_device()) + do dev = 0, omp_get_num_devices() + call run_it(dev) + end do + call run_it(omp_initial_device) +! print *, 'all done' +contains +subroutine run_it(dev) + integer, value :: dev +! print *, 'DEVICE', dev + call omp_set_default_device(dev) + call test(1) + call test(2) + call test(3) + call test(4) + call test(5) + call test(6) +end +end diff --git a/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90 b/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90 new file mode 100644 index 0000000..c6d671c --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90 @@ -0,0 +1,532 @@ +! { dg-additional-options "-cpp" } + +! FIXME: Some tests do not work yet. Those are for now in '#if 0' + +! Check that 'map(alloc:' properly works with +! - deferred-length character strings +! - arrays with array descriptors +! For those, the array descriptor / string length must be mapped with 'to:' + +program main +implicit none + +type t + integer :: ic(2:5), ic2 + character(len=11) :: ccstr(3:4), ccstr2 + character(len=11,kind=4) :: cc4str(3:7), cc4str2 + integer, pointer :: pc(:), pc2 + character(len=:), pointer :: pcstr(:), pcstr2 + character(len=:,kind=4), pointer :: pc4str(:), pc4str2 +end type t + +type(t) :: dt + +integer :: ii(5), ii2 +character(len=11) :: clstr(-1:1), clstr2 +character(len=11,kind=4) :: cl4str(0:3), cl4str2 +integer, pointer :: ip(:), ip2 +integer, allocatable :: ia(:), ia2 +character(len=:), pointer :: pstr(:), pstr2 +character(len=:), allocatable :: astr(:), astr2 +character(len=:,kind=4), pointer :: p4str(:), p4str2 +character(len=:,kind=4), allocatable :: a4str(:), a4str2 + + +allocate(dt%pc(5), dt%pc2) +allocate(character(len=2) :: dt%pcstr(2)) +allocate(character(len=4) :: dt%pcstr2) + +allocate(character(len=3,kind=4) :: dt%pc4str(2:3)) +allocate(character(len=5,kind=4) :: dt%pc4str2) + +allocate(ip(5), ip2, ia(8), ia2) +allocate(character(len=2) :: pstr(-2:0)) +allocate(character(len=4) :: pstr2) +allocate(character(len=6) :: astr(3:5)) +allocate(character(len=8) :: astr2) + +allocate(character(len=3,kind=4) :: p4str(2:4)) +allocate(character(len=5,kind=4) :: p4str2) +allocate(character(len=7,kind=4) :: a4str(-2:3)) +allocate(character(len=9,kind=4) :: a4str2) + + +! integer :: ic(2:5), ic2 + +!$omp target enter data map(alloc: dt%ic) +!$omp target map(alloc: dt%ic) + if (size(dt%ic) /= 4) error stop + if (lbound(dt%ic, 1) /= 2) error stop + if (ubound(dt%ic, 1) /= 5) error stop + dt%ic = [22, 33, 44, 55] +!$omp end target +!$omp target exit data map(from: dt%ic) +if (size(dt%ic) /= 4) error stop +if (lbound(dt%ic, 1) /= 2) error stop +if (ubound(dt%ic, 1) /= 5) error stop +if (any (dt%ic /= [22, 33, 44, 55])) error stop + +!$omp target enter data map(alloc: dt%ic2) +!$omp target map(alloc: dt%ic2) + dt%ic2 = 42 +!$omp end target +!$omp target exit data map(from: dt%ic2) +if (dt%ic2 /= 42) error stop + + +! character(len=11) :: ccstr(3:4), ccstr2 + +!$omp target enter data map(alloc: dt%ccstr) +!$omp target map(alloc: dt%ccstr) + if (len(dt%ccstr) /= 11) error stop + if (size(dt%ccstr) /= 2) error stop + if (lbound(dt%ccstr, 1) /= 3) error stop + if (ubound(dt%ccstr, 1) /= 4) error stop + dt%ccstr = ["12345678901", "abcdefghijk"] +!$omp end target +!$omp target exit data map(from: dt%ccstr) +if (len(dt%ccstr) /= 11) error stop +if (size(dt%ccstr) /= 2) error stop +if (lbound(dt%ccstr, 1) /= 3) error stop +if (ubound(dt%ccstr, 1) /= 4) error stop +if (any (dt%ccstr /= ["12345678901", "abcdefghijk"])) error stop + +!$omp target enter data map(alloc: dt%ccstr2) +!$omp target map(alloc: dt%ccstr2) + if (len(dt%ccstr2) /= 11) error stop + dt%ccstr2 = "ABCDEFGHIJK" +!$omp end target +!$omp target exit data map(from: dt%ccstr2) +if (len(dt%ccstr2) /= 11) error stop +if (dt%ccstr2 /= "ABCDEFGHIJK") error stop + + +! character(len=11,kind=4) :: cc4str(3:7), cc4str2 + +#if 0 +! Value check fails +!$omp target map(alloc: dt%cc4str) + if (len(dt%cc4str) /= 11) error stop + if (size(dt%cc4str) /= 5) error stop + if (lbound(dt%cc4str, 1) /= 3) error stop + if (ubound(dt%cc4str, 1) /= 7) error stop + dt%cc4str = [4_"12345678901", 4_"abcdefghijk", & + 4_"qerftcea6ds", 4_"a1f9g37ga4.", & + 4_"45ngwj56sj2"] +!$omp end target +!$omp target exit data map(from: dt%cc4str) +if (len(dt%cc4str) /= 11) error stop +if (size(dt%cc4str) /= 5) error stop +if (lbound(dt%cc4str, 1) /= 3) error stop +if (ubound(dt%cc4str, 1) /= 7) error stop +if (dt%cc4str(3) /= 4_"12345678901") error stop +if (dt%cc4str(4) /= 4_"abcdefghijk") error stop +if (dt%cc4str(5) /= 4_"qerftcea6ds") error stop +if (dt%cc4str(6) /= 4_"a1f9g37ga4.") error stop +if (dt%cc4str(7) /= 4_"45ngwj56sj2") error stop +#endif + +!$omp target enter data map(alloc: dt%cc4str2) +!$omp target map(alloc: dt%cc4str2) + if (len(dt%cc4str2) /= 11) error stop + dt%cc4str2 = 4_"ABCDEFGHIJK" +!$omp end target +!$omp target exit data map(from: dt%cc4str2) +if (len(dt%cc4str2) /= 11) error stop +if (dt%cc4str2 /= 4_"ABCDEFGHIJK") error stop + + +! integer, pointer :: pc(:), pc2 +! allocate(dt%pc(5), dt%pc2) + +!$omp target enter data map(alloc: dt%pc) +!$omp target map(alloc: dt%pc) + if (.not. associated(dt%pc)) error stop + if (size(dt%pc) /= 5) error stop + if (lbound(dt%pc, 1) /= 1) error stop + if (ubound(dt%pc, 1) /= 5) error stop + dt%pc = [11, 22, 33, 44, 55] +!$omp end target +!$omp target exit data map(from: dt%pc) +if (.not. associated(dt%pc)) error stop +if (size(dt%pc) /= 5) error stop +if (lbound(dt%pc, 1) /= 1) error stop +if (ubound(dt%pc, 1) /= 5) error stop +if (any (dt%pc /= [11, 22, 33, 44, 55])) error stop + +!$omp target enter data map(alloc: dt%pc2) +!$omp target map(alloc: dt%pc2) + if (.not. associated(dt%pc2)) error stop + dt%pc2 = 99 +!$omp end target +!$omp target exit data map(from: dt%pc2) +if (dt%pc2 /= 99) error stop +if (.not. associated(dt%pc2)) error stop + + +! character(len=:), pointer :: pcstr(:), pcstr2 +! allocate(character(len=2) :: dt%pcstr(2)) +! allocate(character(len=4) :: dt%pcstr2) + +!$omp target enter data map(alloc: dt%pcstr) +!$omp target map(alloc: dt%pcstr) + if (.not. associated(dt%pcstr)) error stop + if (len(dt%pcstr) /= 2) error stop + if (size(dt%pcstr) /= 2) error stop + if (lbound(dt%pcstr, 1) /= 1) error stop + if (ubound(dt%pcstr, 1) /= 2) error stop + dt%pcstr = ["01", "jk"] +!$omp end target +!$omp target exit data map(from: dt%pcstr) +if (.not. associated(dt%pcstr)) error stop +if (len(dt%pcstr) /= 2) error stop +if (size(dt%pcstr) /= 2) error stop +if (lbound(dt%pcstr, 1) /= 1) error stop +if (ubound(dt%pcstr, 1) /= 2) error stop +if (any (dt%pcstr /= ["01", "jk"])) error stop + + +!$omp target enter data map(alloc: dt%pcstr2) +!$omp target map(alloc: dt%pcstr2) + if (.not. associated(dt%pcstr2)) error stop + if (len(dt%pcstr2) /= 4) error stop + dt%pcstr2 = "HIJK" +!$omp end target +!$omp target exit data map(from: dt%pcstr2) +if (.not. associated(dt%pcstr2)) error stop +if (len(dt%pcstr2) /= 4) error stop +if (dt%pcstr2 /= "HIJK") error stop + + +! character(len=:,kind=4), pointer :: pc4str(:), pc4str2 +! allocate(character(len=3,kind=4) :: dt%pc4str(2:3)) +! allocate(character(len=5,kind=4) :: dt%pc4str2) + +!$omp target enter data map(alloc: dt%pc4str) +!$omp target map(alloc: dt%pc4str) + if (.not. associated(dt%pc4str)) error stop + if (len(dt%pc4str) /= 3) error stop + if (size(dt%pc4str) /= 2) error stop + if (lbound(dt%pc4str, 1) /= 2) error stop + if (ubound(dt%pc4str, 1) /= 3) error stop + dt%pc4str = [4_"456", 4_"tzu"] +!$omp end target +!$omp target exit data map(from: dt%pc4str) +if (.not. associated(dt%pc4str)) error stop +if (len(dt%pc4str) /= 3) error stop +if (size(dt%pc4str) /= 2) error stop +if (lbound(dt%pc4str, 1) /= 2) error stop +if (ubound(dt%pc4str, 1) /= 3) error stop +if (dt%pc4str(2) /= 4_"456") error stop +if (dt%pc4str(3) /= 4_"tzu") error stop + +!$omp target enter data map(alloc: dt%pc4str2) +!$omp target map(alloc: dt%pc4str2) + if (.not. associated(dt%pc4str2)) error stop + if (len(dt%pc4str2) /= 5) error stop + dt%pc4str2 = 4_"98765" +!$omp end target +!$omp target exit data map(from: dt%pc4str2) +if (.not. associated(dt%pc4str2)) error stop +if (len(dt%pc4str2) /= 5) error stop +if (dt%pc4str2 /= 4_"98765") error stop + + +! integer :: ii(5), ii2 + +!$omp target enter data map(alloc: ii) +!$omp target map(alloc: ii) + if (size(ii) /= 5) error stop + if (lbound(ii, 1) /= 1) error stop + if (ubound(ii, 1) /= 5) error stop + ii = [-1, -2, -3, -4, -5] +!$omp end target +!$omp target exit data map(from: ii) +if (size(ii) /= 5) error stop +if (lbound(ii, 1) /= 1) error stop +if (ubound(ii, 1) /= 5) error stop +if (any (ii /= [-1, -2, -3, -4, -5])) error stop + +!$omp target enter data map(alloc: ii2) +!$omp target map(alloc: ii2) + ii2 = -410 +!$omp end target +!$omp target exit data map(from: ii2) +if (ii2 /= -410) error stop + + +! character(len=11) :: clstr(-1:1), clstr2 + +!$omp target enter data map(alloc: clstr) +!$omp target map(alloc: clstr) + if (len(clstr) /= 11) error stop + if (size(clstr) /= 3) error stop + if (lbound(clstr, 1) /= -1) error stop + if (ubound(clstr, 1) /= 1) error stop + clstr = ["12345678901", "abcdefghijk", "ABCDEFGHIJK"] +!$omp end target +!$omp target exit data map(from: clstr) +if (len(clstr) /= 11) error stop +if (size(clstr) /= 3) error stop +if (lbound(clstr, 1) /= -1) error stop +if (ubound(clstr, 1) /= 1) error stop +if (any (clstr /= ["12345678901", "abcdefghijk", "ABCDEFGHIJK"])) error stop + +!$omp target enter data map(alloc: clstr2) +!$omp target map(alloc: clstr2) + if (len(clstr2) /= 11) error stop + clstr2 = "ABCDEFghijk" +!$omp end target +!$omp target exit data map(from: clstr2) +if (len(clstr2) /= 11) error stop +if (clstr2 /= "ABCDEFghijk") error stop + + +! character(len=11,kind=4) :: cl4str(0:3), cl4str2 + +!$omp target enter data map(alloc: cl4str) +!$omp target map(alloc: cl4str) + if (len(cl4str) /= 11) error stop + if (size(cl4str) /= 4) error stop + if (lbound(cl4str, 1) /= 0) error stop + if (ubound(cl4str, 1) /= 3) error stop + cl4str = [4_"12345678901", 4_"abcdefghijk", & + 4_"qerftcea6ds", 4_"a1f9g37ga4."] +!$omp end target +!$omp target exit data map(from: cl4str) +if (len(cl4str) /= 11) error stop +if (size(cl4str) /= 4) error stop +if (lbound(cl4str, 1) /= 0) error stop +if (ubound(cl4str, 1) /= 3) error stop +if (cl4str(0) /= 4_"12345678901") error stop +if (cl4str(1) /= 4_"abcdefghijk") error stop +if (cl4str(2) /= 4_"qerftcea6ds") error stop +if (cl4str(3) /= 4_"a1f9g37ga4.") error stop + +!$omp target enter data map(alloc: cl4str2) +!$omp target map(alloc: cl4str2) + if (len(cl4str2) /= 11) error stop + cl4str2 = 4_"ABCDEFGHIJK" +!$omp end target +!$omp target exit data map(from: cl4str2) +if (len(cl4str2) /= 11) error stop +if (cl4str2 /= 4_"ABCDEFGHIJK") error stop + + +! allocate(ip(5), ip2, ia(8), ia2) + +!$omp target enter data map(alloc: ip) +!$omp target map(alloc: ip) + if (.not. associated(ip)) error stop + if (size(ip) /= 5) error stop + if (lbound(ip, 1) /= 1) error stop + if (ubound(ip, 1) /= 5) error stop + ip = [11, 22, 33, 44, 55] +!$omp end target +!$omp target exit data map(from: ip) +if (.not. associated(ip)) error stop +if (size(ip) /= 5) error stop +if (lbound(ip, 1) /= 1) error stop +if (ubound(ip, 1) /= 5) error stop +if (any (ip /= [11, 22, 33, 44, 55])) error stop + +!$omp target enter data map(alloc: ip2) +!$omp target map(alloc: ip2) + if (.not. associated(ip2)) error stop + ip2 = 99 +!$omp end target +!$omp target exit data map(from: ip2) +if (ip2 /= 99) error stop +if (.not. associated(ip2)) error stop + + +! allocate(ip(5), ip2, ia(8), ia2) + +!$omp target enter data map(alloc: ia) +!$omp target map(alloc: ia) + if (.not. allocated(ia)) error stop + if (size(ia) /= 8) error stop + if (lbound(ia, 1) /= 1) error stop + if (ubound(ia, 1) /= 8) error stop + ia = [1,2,3,4,5,6,7,8] +!$omp end target +!$omp target exit data map(from: ia) +if (.not. allocated(ia)) error stop +if (size(ia) /= 8) error stop +if (lbound(ia, 1) /= 1) error stop +if (ubound(ia, 1) /= 8) error stop +if (any (ia /= [1,2,3,4,5,6,7,8])) error stop + +!$omp target enter data map(alloc: ia2) +!$omp target map(alloc: ia2) + if (.not. allocated(ia2)) error stop + ia2 = 102 +!$omp end target +!$omp target exit data map(from: ia2) +if (ia2 /= 102) error stop +if (.not. allocated(ia2)) error stop + + +! character(len=:), pointer :: pstr(:), pstr2 +! allocate(character(len=2) :: pstr(-2:0)) +! allocate(character(len=4) :: pstr2) + +!$omp target enter data map(alloc: pstr) +!$omp target map(alloc: pstr) + if (.not. associated(pstr)) error stop + if (len(pstr) /= 2) error stop + if (size(pstr) /= 3) error stop + if (lbound(pstr, 1) /= -2) error stop + if (ubound(pstr, 1) /= 0) error stop + pstr = ["01", "jk", "aq"] +!$omp end target +!$omp target exit data map(from: pstr) +if (.not. associated(pstr)) error stop +if (len(pstr) /= 2) error stop +if (size(pstr) /= 3) error stop +if (lbound(pstr, 1) /= -2) error stop +if (ubound(pstr, 1) /= 0) error stop +if (any (pstr /= ["01", "jk", "aq"])) error stop + +!$omp target enter data map(alloc: pstr2) +!$omp target map(alloc: pstr2) + if (.not. associated(pstr2)) error stop + if (len(pstr2) /= 4) error stop + pstr2 = "HIJK" +!$omp end target +!$omp target exit data map(from: pstr2) +if (.not. associated(pstr2)) error stop +if (len(pstr2) /= 4) error stop +if (pstr2 /= "HIJK") error stop + + +! character(len=:), allocatable :: astr(:), astr2 +! allocate(character(len=6) :: astr(3:5)) +! allocate(character(len=8) :: astr2) + + +!$omp target enter data map(alloc: astr) +!$omp target map(alloc: astr) + if (.not. allocated(astr)) error stop + if (len(astr) /= 6) error stop + if (size(astr) /= 3) error stop + if (lbound(astr, 1) /= 3) error stop + if (ubound(astr, 1) /= 5) error stop + astr = ["01db45", "jk$D%S", "zutg47"] +!$omp end target +!$omp target exit data map(from: astr) +if (.not. allocated(astr)) error stop +if (len(astr) /= 6) error stop +if (size(astr) /= 3) error stop +if (lbound(astr, 1) /= 3) error stop +if (ubound(astr, 1) /= 5) error stop +if (any (astr /= ["01db45", "jk$D%S", "zutg47"])) error stop + + +!$omp target enter data map(alloc: astr2) +!$omp target map(alloc: astr2) + if (.not. allocated(astr2)) error stop + if (len(astr2) /= 8) error stop + astr2 = "HIJKhijk" +!$omp end target +!$omp target exit data map(from: astr2) +if (.not. allocated(astr2)) error stop +if (len(astr2) /= 8) error stop +if (astr2 /= "HIJKhijk") error stop + + +! character(len=:,kind=4), pointer :: p4str(:), p4str2 +! allocate(character(len=3,kind=4) :: p4str(2:4)) +! allocate(character(len=5,kind=4) :: p4str2) + +! FAILS with value check + +!$omp target enter data map(alloc: p4str) +!$omp target map(alloc: p4str) + if (.not. associated(p4str)) error stop + if (len(p4str) /= 3) error stop + if (size(p4str) /= 3) error stop + if (lbound(p4str, 1) /= 2) error stop + if (ubound(p4str, 1) /= 4) error stop + p4str(:) = [4_"f85", 4_"8af", 4_"A%F"] +!$omp end target +!$omp target exit data map(from: p4str) +if (.not. associated(p4str)) error stop +if (len(p4str) /= 3) error stop +if (size(p4str) /= 3) error stop +if (lbound(p4str, 1) /= 2) error stop +if (ubound(p4str, 1) /= 4) error stop +if (p4str(2) /= 4_"f85") error stop +if (p4str(3) /= 4_"8af") error stop +if (p4str(4) /= 4_"A%F") error stop + +!$omp target enter data map(alloc: p4str2) +!$omp target map(alloc: p4str2) + if (.not. associated(p4str2)) error stop + if (len(p4str2) /= 5) error stop + p4str2 = 4_"9875a" +!$omp end target +!$omp target exit data map(from: p4str2) +if (.not. associated(p4str2)) error stop +if (len(p4str2) /= 5) error stop +if (p4str2 /= 4_"9875a") error stop + + +! character(len=:,kind=4), allocatable :: a4str(:), a4str2 +! allocate(character(len=7,kind=4) :: a4str(-2:3)) +! allocate(character(len=9,kind=4) :: a4str2) + +!$omp target enter data map(alloc: a4str) +!$omp target map(alloc: a4str) + if (.not. allocated(a4str)) error stop + if (len(a4str) /= 7) error stop + if (size(a4str) /= 6) error stop + if (lbound(a4str, 1) /= -2) error stop + if (ubound(a4str, 1) /= 3) error stop + ! See PR fortran/107508 why '(:)' is required + a4str(:) = [4_"sf456aq", 4_"3dtzu24", 4_"_4fh7sm", 4_"=ff85s7", 4_"j=8af4d", 4_".,A%Fsz"] +!$omp end target +!$omp target exit data map(from: a4str) +if (.not. allocated(a4str)) error stop +if (len(a4str) /= 7) error stop +if (size(a4str) /= 6) error stop +if (lbound(a4str, 1) /= -2) error stop +if (ubound(a4str, 1) /= 3) error stop +if (a4str(-2) /= 4_"sf456aq") error stop +if (a4str(-1) /= 4_"3dtzu24") error stop +if (a4str(0) /= 4_"_4fh7sm") error stop +if (a4str(1) /= 4_"=ff85s7") error stop +if (a4str(2) /= 4_"j=8af4d") error stop +if (a4str(3) /= 4_".,A%Fsz") error stop + +!$omp target enter data map(alloc: a4str2) +!$omp target map(alloc: a4str2) + if (.not. allocated(a4str2)) error stop + if (len(a4str2) /= 9) error stop + a4str2 = 4_"98765a23d" +!$omp end target +!$omp target exit data map(from: a4str2) +if (.not. allocated(a4str2)) error stop +if (len(a4str2) /= 9) error stop +if (a4str2 /= 4_"98765a23d") error stop + + +deallocate(dt%pc, dt%pc2) +deallocate(dt%pcstr) +deallocate(dt%pcstr2) + +deallocate(dt%pc4str) +deallocate(dt%pc4str2) + +deallocate(ip, ip2, ia, ia2) +deallocate(pstr) +deallocate(pstr2) +deallocate(astr) +deallocate(astr2) + +deallocate(p4str) +deallocate(p4str2) +deallocate(a4str) +deallocate(a4str2) + +end diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C new file mode 100644 index 0000000..0545601 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C @@ -0,0 +1,54 @@ +/* 'std::bad_cast' exception in OpenACC compute region. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +/* See also '../libgomp.c++/target-exceptions-bad_cast-1.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-bad_cast-1.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-1.C'. */ + +#include <iostream> + +struct C1 +{ + virtual void f() + {} +}; + +struct C2 : C1 +{ +}; + +int main() +{ + std::cerr << "CheCKpOInT\n"; +#pragma omp target +#pragma acc serial + /* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } .-1 } */ + { + C1 c1; + [[maybe_unused]] + C2 &c2 = dynamic_cast<C2 &>(c1); + /* 'std::bad_cast' is thrown. */ + } +} + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + For host execution, we print something like: + terminate called after throwing an instance of 'std::bad_cast' + what(): std::bad_cast + Aborted (core dumped) + { dg-output {.*std::bad_cast} { target openacc_host_selected } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + TODO For GCN, nvptx offload execution, this currently doesn't 'abort' due to + the 'std::bad_cast' exception, but rather due to SIGSEGV in 'dynamic_cast'; + PR119692. + + { dg-shouldfail {'std::bad_cast' exception} } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C new file mode 100644 index 0000000..8260966 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C @@ -0,0 +1,18 @@ +/* 'std::bad_cast' exception in OpenACC compute region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target openacc_radeon_accel_selected } } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "exceptions-bad_cast-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C new file mode 100644 index 0000000..86d3f6c --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C @@ -0,0 +1,20 @@ +/* 'std::bad_cast' exception in OpenACC compute region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target openacc_nvidia_accel_selected } } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "exceptions-bad_cast-2.C" + +/* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } 0 } */ + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C new file mode 100644 index 0000000..24399ef --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C @@ -0,0 +1,60 @@ +/* 'std::bad_cast' exception in OpenACC compute region, caught. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {_ZTISt8bad_cast} PR119734 { target openacc_nvidia_accel_selected xfail *-*-* } 0 } + { dg-excess-errors {'mkoffload' failure etc.} { xfail openacc_nvidia_accel_selected } } */ + +/* See also '../libgomp.c++/target-exceptions-bad_cast-2.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2.C'. */ + +#include <iostream> +#include <typeinfo> + +struct C1 +{ + virtual void f() + {} +}; + +struct C2 : C1 +{ +}; + +int main() +{ + std::cerr << "CheCKpOInT\n"; +#pragma omp target +#pragma acc serial + { + C1 c1; + try + { + [[maybe_unused]] + C2 &c2 = dynamic_cast<C2 &>(c1); + /* 'std::bad_cast' is thrown. */ + } + catch (const std::bad_cast &e) + { + __builtin_printf("caught '%s'\n", e.what()); + } + } +} + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } + { dg-output {.*caught 'std::bad_cast'[\r\n]+} { target openacc_host_selected } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + TODO For GCN, nvptx offload execution, this currently doesn't 'abort' due to + the 'std::bad_cast' exception, but rather due to SIGSEGV in 'dynamic_cast'; + PR119692. + + For GCN, nvptx offload execution, there is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'std::bad_cast' exception} { ! openacc_host_selected } } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C new file mode 100644 index 0000000..4fa419f --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C @@ -0,0 +1,49 @@ +/* 'std::bad_cast' exception in OpenACC compute region, dead code. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* Wrong code for offloading execution. + { dg-skip-if PR119692 { ! openacc_host_selected } } + { dg-additional-options -fdump-tree-gimple } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +/* See also '../libgomp.c++/target-exceptions-bad_cast-3.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-bad_cast-3.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-3.C'. */ + +/* For PR119692 workarounds. */ +#ifndef DEFAULT +# define DEFAULT +#endif + +struct C1 +{ + virtual void f() + {} +}; + +struct C2 : C1 +{ +}; + +int main() +{ +#pragma omp target DEFAULT +#pragma acc serial DEFAULT + { + C1 c1; + bool a = false; + asm volatile ("" : : "r" (&a) : "memory"); + if (a) + { + [[maybe_unused]] + C2 &c2 = dynamic_cast<C2 &>(c1); + /* 'std::bad_cast' is thrown. */ + } + } +} + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target oacc_serial map\(tofrom:_ZTI2C2 \[len: [0-9]+\]\) map\(tofrom:_ZTI2C1 \[len: [0-9]+\]\) map\(tofrom:_ZTV2C1 \[len: [0-9]+\]\)$} gimple { xfail *-*-* } } } */ + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_bad_cast, } 1 optimized } } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C new file mode 100644 index 0000000..f2ef751 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C @@ -0,0 +1,46 @@ +/* 'throw' in OpenACC compute region. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {Size expression must be absolute\.} PR119737 { target { openacc_radeon_accel_selected && __OPTIMIZE__ } xfail *-*-* } 0 } + { dg-ice PR119737 { openacc_radeon_accel_selected && __OPTIMIZE__ } } + { dg-excess-errors {'mkoffload' failure etc.} { xfail { openacc_radeon_accel_selected && __OPTIMIZE__ } } } */ + +/* See also '../libgomp.c++/target-exceptions-throw-1.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-throw-1.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-throw-1.C'. */ + +#include <iostream> + +class MyException +{ +}; + +int main() +{ + std::cerr << "CheCKpOInT\n"; +#pragma omp target +#pragma acc serial + /* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } .-1 } */ + { + MyException e1; + throw e1; + } +} + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + For host execution, we print something like: + terminate called after throwing an instance of 'MyException' + Aborted (core dumped) + { dg-output {.*MyException} { target openacc_host_selected } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + { dg-shouldfail {'MyException' exception} } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C new file mode 100644 index 0000000..40be837 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C @@ -0,0 +1,20 @@ +/* 'throw' in OpenACC compute region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target openacc_radeon_accel_selected } } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "exceptions-throw-2.C" + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-nvptx.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-nvptx.C new file mode 100644 index 0000000..9461455 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-nvptx.C @@ -0,0 +1,22 @@ +/* 'throw' in OpenACC compute region, caught, '-foffload-options=-mno-fake-exceptions'. */ + +/* As this test case involves an expected offload compilation failure, we have to handle each offload target individually. + { dg-do link { target openacc_nvidia_accel_selected } } */ +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -foffload-options=-mno-fake-exceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ + +#include "exceptions-throw-2.C" + +/* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } 0 } */ + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + Given '-foffload-options=-mno-fake-exceptions', offload compilation fails: + { dg-regexp {[^\r\n]+: In function 'main[^']+':[\r\n]+(?:[^\r\n]+: sorry, unimplemented: exception handling not supported[\r\n]+)+} } + (Note, using 'dg-regexp' instead of 'dg-message', as the former runs before the auto-mark-UNSUPPORTED.) + { dg-excess-errors {'mkoffload' failure etc.} } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2.C new file mode 100644 index 0000000..f6dc970 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2.C @@ -0,0 +1,55 @@ +/* 'throw' in OpenACC compute region, caught. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* { dg-additional-options -fdump-tree-optimized-raw } + { dg-additional-options -foffload-options=-fdump-tree-optimized-raw } */ +/* { dg-bogus {undefined symbol: typeinfo name for MyException} PR119806 { target { openacc_radeon_accel_selected && { ! __OPTIMIZE__ } } xfail *-*-* } 0 } + { dg-excess-errors {'mkoffload' failure etc.} { xfail { openacc_radeon_accel_selected && { ! __OPTIMIZE__ } } } } */ +/* { dg-bogus {Size expression must be absolute\.} PR119737 { target { openacc_radeon_accel_selected && __OPTIMIZE__ } xfail *-*-* } 0 } + { dg-ice PR119737 { openacc_radeon_accel_selected && __OPTIMIZE__ } } + { dg-excess-errors {'mkoffload' failures etc.} { xfail { openacc_radeon_accel_selected && __OPTIMIZE__ } } } */ +/* { dg-bogus {Initial value type mismatch} PR119806 { target { openacc_nvidia_accel_selected && { ! __OPTIMIZE__ } } xfail *-*-* } 0 } + { dg-excess-errors {'mkoffload' failure etc.} { xfail { openacc_nvidia_accel_selected && { ! __OPTIMIZE__ } } } } */ + +/* See also '../libgomp.c++/target-exceptions-throw-2.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-throw-2.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-throw-2.C'. */ + +#include <iostream> + +class MyException +{ +}; + +int main() +{ + std::cerr << "CheCKpOInT\n"; +#pragma omp target +#pragma acc serial + /* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } .-1 } */ + { + try + { + MyException e1; + throw e1; + } + catch (const MyException &e) + { + __builtin_printf("caught '%s'\n", "MyException"); + } + } +} + +/* { dg-output {CheCKpOInT[\r\n]+} } + + { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-offload-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } + { dg-output {.*caught 'MyException'[\r\n]+} { target openacc_host_selected } } + For GCN, nvptx offload execution, we don't print anything, but just 'abort'. + + For GCN, nvptx offload execution, there is no 'catch'ing; any exception is fatal. + { dg-shouldfail {'MyException' exception} { ! openacc_host_selected } } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-3.C b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-3.C new file mode 100644 index 0000000..74a62b3 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-3.C @@ -0,0 +1,43 @@ +/* 'throw' in OpenACC compute region, dead code. */ + +/* { dg-require-effective-target exceptions } + { dg-additional-options -fexceptions } */ +/* Wrong code for offloading execution. + { dg-skip-if PR119692 { ! openacc_host_selected } } + { dg-additional-options -fdump-tree-gimple } */ +/* { dg-additional-options -fdump-tree-optimized-raw } */ + +/* See also '../libgomp.c++/target-exceptions-throw-3.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/exceptions-throw-3.C', + '../../../gcc/testsuite/g++.target/nvptx/exceptions-throw-3.C'. */ + +/* For PR119692 workarounds. */ +#ifndef DEFAULT +# define DEFAULT +#endif + +class MyException +{ +}; + +int main() +{ +#pragma omp target DEFAULT +#pragma acc serial DEFAULT + /* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } .-1 } */ + { + bool a = false; + asm volatile ("" : : "r" (&a) : "memory"); + if (a) + { + MyException e1; + throw e1; + } + } +} + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target oacc_serial map\(tofrom:_ZTI11MyException \[len: [0-9]+\]\)$} gimple { xfail *-*-* } } } */ + +/* { dg-final { scan-tree-dump-times {gimple_call <__cxa_allocate_exception, } 1 optimized } } + { dg-final { scan-tree-dump-times {gimple_call <__cxa_throw, } 1 optimized } } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-1.C b/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-1.C new file mode 100644 index 0000000..5c3e037 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-1.C @@ -0,0 +1,42 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -UDEFAULT } + Wrong code for offloading execution. + { dg-skip-if PR119692 { ! openacc_host_selected } } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +/* See also '../libgomp.c++/pr119692-1-1.C'. */ + +/* See also '../../../gcc/testsuite/g++.target/gcn/pr119692-1-1.C', + '../../../gcc/testsuite/g++.target/nvptx/pr119692-1-1.C'. */ + +#ifndef DEFAULT +# define DEFAULT +#endif + +struct C1 +{ + virtual void f() + {} +}; + +struct C2 : C1 +{ +}; + +int main() +{ +#pragma omp target DEFAULT +#pragma acc serial DEFAULT + /* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } .-1 } */ + { + C1 c1; + C1 *c1p = &c1; + asm volatile ("" : : "r" (&c1p) : "memory"); + C2 *c2 = dynamic_cast<C2 *>(c1p); + if (c2) + __builtin_abort(); + } +} + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target oacc_serial map\(tofrom:_ZTI2C2 \[len: [0-9]+\]\) map\(tofrom:_ZTI2C1 \[len: [0-9]+\]\) map\(tofrom:_ZTV2C1 \[len: [0-9]+\]\)$} gimple { xfail *-*-* } } } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-2.C b/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-2.C new file mode 100644 index 0000000..207b183 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-2.C @@ -0,0 +1,12 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -DDEFAULT=default(none) } + Wrong code for offloading execution. + { dg-skip-if PR119692 { ! openacc_host_selected } } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +#include "pr119692-1-1.C" + +/* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } 0 } */ + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target oacc_serial default\(none\) map\(tofrom:_ZTI2C2 \[len: [0-9]+\]\) map\(tofrom:_ZTI2C1 \[len: [0-9]+\]\) map\(tofrom:_ZTV2C1 \[len: [0-9]+\]\)$} gimple { xfail *-*-* } } } */ diff --git a/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-3.C b/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-3.C new file mode 100644 index 0000000..e9b44de --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/pr119692-1-3.C @@ -0,0 +1,12 @@ +/* PR119692 "C++ 'typeinfo', 'vtable' vs. OpenACC, OpenMP 'target' offloading" */ + +/* { dg-additional-options -DDEFAULT=default(present) } + Wrong code for offloading execution. + { dg-xfail-run-if PR119692 { ! openacc_host_selected } } */ +/* { dg-additional-options -fdump-tree-gimple } */ + +#include "pr119692-1-1.C" + +/* { dg-bogus {using 'vector_length \(32\)', ignoring 1} {} { target openacc_nvidia_accel_selected xfail *-*-* } 0 } */ + +/* { dg-final { scan-tree-dump-not {(?n)#pragma omp target oacc_serial default\(present\) map\(force_present:_ZTI2C2 \[len: [0-9]+\]\) map\(force_present:_ZTI2C1 \[len: [0-9]+\]\) map\(force_present:_ZTV2C1 \[len: [0-9]+\]\)$} gimple { xfail *-*-* } } } */ diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index 6022d65..e97b427 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,27 @@ +2025-04-12 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/119761 + * libdruntime/MERGE: Merge upstream druntime 09ed02ce56. + * libdruntime/Makefile.am (DRUNTIME_DISOURCES): Rename __builtins.di + to __importc_builtins.di. + * libdruntime/Makefile.in: Regenerate. + * libdruntime/__builtins.di: Move to... + * libdruntime/__importc_builtins.di: ...here. + +2025-04-11 Iain Buclaw <ibuclaw@gdcproject.org> + + * src/MERGE: Merge upstream phobos 40ffbb364. + * Makefile.in: Regenerate. + * configure: Regenerate. + * configure.ac: Call DRUNTIME_OS_FEATURES. + * libdruntime/Makefile.am (AM_DFLAGS): Add OS_DFLAGS. + * libdruntime/Makefile.in: Regenerate. + * m4/druntime/os.m4 (DRUNTIME_OS_FEATURES): Define. + * src/Makefile.am: Add OS_DFLAGS. + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + * testsuite/testsuite_flags.in: Add OS_DFLAGS. + 2025-04-08 Iain Buclaw <ibuclaw@gdcproject.org> * src/MERGE: Merge upstream phobos 35977c802. diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index 162e83b..cd64fd5 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -258,6 +258,7 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OS_DFLAGS = @OS_DFLAGS@ OS_LINK_SPEC = @OS_LINK_SPEC@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ diff --git a/libphobos/configure b/libphobos/configure index df48a6b..4f5be7d 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -655,6 +655,7 @@ DCFG_HAVE_LIBATOMIC DCFG_HAVE_64BIT_ATOMICS DCFG_HAVE_ATOMIC_BUILTINS DCFG_HAVE_QSORT_R +OS_DFLAGS OS_LINK_SPEC DCFG_DLPI_TLS_MODID DRUNTIME_OS_MINFO_BRACKETING_FALSE @@ -11863,7 +11864,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11866 "configure" +#line 11867 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11969,7 +11970,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11972 "configure" +#line 11973 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14717,6 +14718,54 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + OS_DFLAGS= + + case "$druntime_cv_target_os" in + linux*) druntime_target_os_parsed="linux" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getrandom" >&5 +$as_echo_n "checking for getrandom... " >&6; } + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/syscall.h> +#include <unistd.h> +int +main () +{ + + syscall (__NR_getrandom); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + OS_DFLAGS=-fversion=linux_legacy_emulate_getrandom +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + ;; + esac + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' diff --git a/libphobos/configure.ac b/libphobos/configure.ac index 3b2ec2c..406373b 100644 --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -143,6 +143,7 @@ DRUNTIME_OS_ARM_EABI_UNWINDER DRUNTIME_OS_MINFO_BRACKETING DRUNTIME_OS_DLPI_TLS_MODID DRUNTIME_OS_LINK_SPEC +DRUNTIME_OS_FEATURES DRUNTIME_LIBRARIES_CLIB WITH_LOCAL_DRUNTIME([ diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE index 00c8518..840f8dd 100644 --- a/libphobos/libdruntime/MERGE +++ b/libphobos/libdruntime/MERGE @@ -1,4 +1,4 @@ -c6863be7206eef3c393726363a480baf0a0c6530 +09ed02ce56ea5bf3e59f21ee0390cd85eb8bfaa7 The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am index 252c6a3..4098310 100644 --- a/libphobos/libdruntime/Makefile.am +++ b/libphobos/libdruntime/Makefile.am @@ -25,7 +25,8 @@ D_EXTRA_DFLAGS=-fpreview=dip1000 -fpreview=fieldwise -fpreview=dtorfields \ # D flags for compilation AM_DFLAGS= \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) \ + $(OS_DFLAGS) # Flags for other kinds of sources AM_CFLAGS=$(CET_FLAGS) @@ -444,4 +445,4 @@ DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \ core/sys/windows/winuser.d core/sys/windows/winver.d \ core/sys/windows/wtsapi32.d core/sys/windows/wtypes.d -DRUNTIME_DISOURCES = __builtins.di __main.di +DRUNTIME_DISOURCES = __importc_builtins.di __main.di diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 52b0c37..1c0fa54 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -676,6 +676,7 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OS_DFLAGS = @OS_DFLAGS@ OS_LINK_SPEC = @OS_LINK_SPEC@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ @@ -783,7 +784,8 @@ D_EXTRA_DFLAGS = -fpreview=dip1000 -fpreview=fieldwise -fpreview=dtorfields \ # D flags for compilation AM_DFLAGS = \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) \ + $(OS_DFLAGS) # Flags for other kinds of sources @@ -1124,7 +1126,7 @@ DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \ core/sys/windows/winuser.d core/sys/windows/winver.d \ core/sys/windows/wtsapi32.d core/sys/windows/wtypes.d -DRUNTIME_DISOURCES = __builtins.di __main.di +DRUNTIME_DISOURCES = __importc_builtins.di __main.di all: all-am .SUFFIXES: diff --git a/libphobos/libdruntime/__builtins.di b/libphobos/libdruntime/__importc_builtins.di index b4fef09..9493962 100644 --- a/libphobos/libdruntime/__builtins.di +++ b/libphobos/libdruntime/__importc_builtins.di @@ -3,10 +3,10 @@ * The purpose is to make it unnecessary to hardwire them into the compiler. * As the leading double underscore suggests, this is for internal use only. * - * Copyright: Copyright Digital Mars 2022 + * Copyright: Copyright D Language Foundation 2022-2025 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). * Authors: Walter Bright - * Source: $(DRUNTIMESRC __builtins.d) + * Source: $(DRUNTIMESRC __importc_builtins.di) */ @@ -86,6 +86,12 @@ version (DigitalMars) return core.bitop.bswap(value); } + uint __builtin__popcount()(ulong value) + { + import core.bitop; + return core.bitop._popcnt(value); + } + // Lazily imported on first use private alias c_long = imported!"core.stdc.config".c_long; diff --git a/libphobos/m4/druntime/os.m4 b/libphobos/m4/druntime/os.m4 index 15cde3b..ef8ca43 100644 --- a/libphobos/m4/druntime/os.m4 +++ b/libphobos/m4/druntime/os.m4 @@ -121,6 +121,33 @@ AC_DEFUN([DRUNTIME_OS_SOURCES], ]) +# DRUNTIME_OS_FEATURES +# ----------------------- +# Perform various feature checks on the target platform. +AC_DEFUN([DRUNTIME_OS_FEATURES], +[ + AC_REQUIRE([DRUNTIME_OS_DETECT]) + OS_DFLAGS= + + case "$druntime_cv_target_os" in + linux*) druntime_target_os_parsed="linux" + AC_MSG_CHECKING([for getrandom]) + AC_LANG_PUSH([C]) + AC_TRY_COMPILE([#include <sys/syscall.h> +#include <unistd.h>],[ + syscall (__NR_getrandom); + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + OS_DFLAGS=-fversion=linux_legacy_emulate_getrandom]) + AC_LANG_POP([C]) + ;; + esac + + AC_SUBST(OS_DFLAGS) +]) + + # DRUNTIME_OS_ARM_EABI_UNWINDER # ------------------------ # Check if using ARM unwinder and substitute DCFG_ARM_EABI_UNWINDER diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE index d870a91..a28116a 100644 --- a/libphobos/src/MERGE +++ b/libphobos/src/MERGE @@ -1,4 +1,4 @@ -35977c8029e7bb4dbe1b887688dabebe04ebea02 +40ffbb3641495b02815891ee004d4c6e173b1089 The first line of this file holds the git revision number of the last merge done from the dlang/phobos repository. diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am index 5d690dd..a84fc4d 100644 --- a/libphobos/src/Makefile.am +++ b/libphobos/src/Makefile.am @@ -26,7 +26,8 @@ D_EXTRA_DFLAGS=-fpreview=dip1000 -fpreview=dtorfields -fpreview=fieldwise \ # D flags for compilation AM_DFLAGS= \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) \ + $(OS_DFLAGS) # Flags for other kinds of sources AM_CFLAGS=$(CET_FLAGS) diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index 2bf7e3f..64cc9c3 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -411,6 +411,7 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OS_DFLAGS = @OS_DFLAGS@ OS_LINK_SPEC = @OS_LINK_SPEC@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ @@ -519,7 +520,8 @@ D_EXTRA_DFLAGS = -fpreview=dip1000 -fpreview=dtorfields -fpreview=fieldwise \ # D flags for compilation AM_DFLAGS = \ $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(SECTION_FLAGS) $(CET_FLAGS) \ + $(OS_DFLAGS) # Flags for other kinds of sources diff --git a/libphobos/src/std/format/write.d b/libphobos/src/std/format/write.d index d704c14..68a96d4 100644 --- a/libphobos/src/std/format/write.d +++ b/libphobos/src/std/format/write.d @@ -534,6 +534,8 @@ uint formattedWrite(Writer, Char, Args...)(auto ref Writer w, const scope Char[] // Are we already done with formats? Then just dump each parameter in turn uint currentArg = 0; + bool lastWasConsumeAll; + while (spec.writeUpToNextSpec(w)) { if (currentArg == Args.length && !spec.indexStart) @@ -649,7 +651,10 @@ uint formattedWrite(Writer, Char, Args...)(auto ref Writer w, const scope Char[] } default: if (spec.indexEnd == spec.indexEnd.max) + { + lastWasConsumeAll = true; break; + } else if (spec.indexEnd == spec.indexStart) throw new FormatException( text("Positional specifier %", spec.indexStart, '$', spec.spec, @@ -660,7 +665,8 @@ uint formattedWrite(Writer, Char, Args...)(auto ref Writer w, const scope Char[] " index exceeds ", Args.length)); } } - return currentArg; + + return lastWasConsumeAll ? Args.length : currentArg; } /// @@ -1212,7 +1218,8 @@ if (isSomeString!(typeof(fmt))) import std.array : appender; auto w = appender!(char[])(); - formattedWrite(w, "%1:$d", 1, 2, 3); + uint count = formattedWrite(w, "%1:$d", 1, 2, 3); + assert(count == 3); assert(w.data == "123"); } diff --git a/libphobos/src/std/random.d b/libphobos/src/std/random.d index dc1763c..edb8902c 100644 --- a/libphobos/src/std/random.d +++ b/libphobos/src/std/random.d @@ -1774,19 +1774,65 @@ else version (linux) { - // `getrandom()` was introduced in Linux 3.17. + version (linux_legacy_emulate_getrandom) + { + /+ + Emulates `getrandom()` for backwards compatibility + with outdated kernels and legacy libc versions. + + `getrandom()` was added to the GNU C Library in v2.25. + +/ + pragma(msg, "`getrandom()` emulation for legacy Linux targets is enabled."); + + /+ + On modern kernels (5.6+), `/dev/random` would behave more similar + to `getrandom()`. + However, this emulator was specifically written for systems older + than that. Hence, `/dev/urandom` is the CSPRNG of choice. + + <https://web.archive.org/web/20200914181930/https://www.2uo.de/myths-about-urandom/> + +/ + private static immutable _pathLinuxSystemCSPRNG = "/dev/urandom"; + + import core.sys.posix.sys.types : ssize_t; + + /+ + Linux `getrandom()` emulation built upon `/dev/urandom`. + The fourth parameter (`uint flags`) is happily ignored. + +/ + private ssize_t getrandom( + void* buf, + size_t buflen, + uint, + ) @system nothrow @nogc + { + import core.stdc.stdio : fclose, fopen, fread; - // Shim for missing bindings in druntime - version (none) - import core.sys.linux.sys.random : getrandom; + auto blockDev = fopen(_pathLinuxSystemCSPRNG.ptr, "r"); + if (blockDev is null) + assert(false, "System CSPRNG unavailable: `fopen(\"" ~ _pathLinuxSystemCSPRNG ~ "\")` failed."); + scope (exit) fclose(blockDev); + + const bytesRead = fread(buf, 1, buflen, blockDev); + return bytesRead; + } + } else { - import core.sys.posix.sys.types : ssize_t; - extern extern(C) ssize_t getrandom( - void* buf, - size_t buflen, - uint flags, - ) @system nothrow @nogc; + // `getrandom()` was introduced in Linux 3.17. + + // Shim for missing bindings in druntime + version (none) + import core.sys.linux.sys.random : getrandom; + else + { + import core.sys.posix.sys.types : ssize_t; + private extern extern(C) ssize_t getrandom( + void* buf, + size_t buflen, + uint flags, + ) @system nothrow @nogc; + } } } diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index b410f17..3df0815 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -202,6 +202,7 @@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OS_DFLAGS = @OS_DFLAGS@ OS_LINK_SPEC = @OS_LINK_SPEC@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ diff --git a/libphobos/testsuite/testsuite_flags.in b/libphobos/testsuite/testsuite_flags.in index 9933667..d691272 100755 --- a/libphobos/testsuite/testsuite_flags.in +++ b/libphobos/testsuite/testsuite_flags.in @@ -28,7 +28,7 @@ case ${query} in ;; --gdcflags) GDCFLAGS_default="-fmessage-length=0 -fno-show-column" - GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGS@ @CET_FLAGS@ + GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGS@ @CET_FLAGS@ @OS_DFLAGS@ @phobos_compiler_shared_flag@ -fall-instantiations -fpreview=dip1000 -fno-release -funittest" diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 074a13d..4615d0f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,419 @@ +2025-04-22 Patrick Palka <ppalka@redhat.com> + + Revert: + 2024-08-22 Patrick Palka <ppalka@redhat.com> + + * include/bits/iterator_concepts.h (__detail::__projected): Define + an optimized partial specialization for when the projection is + std::identity. + * testsuite/24_iterators/indirect_callable/projected.cc: Verify the + optimization. + +2025-04-22 Andreas Schwab <schwab@linux-m68k.org> + + * config/abi/post/m68k-linux-gnu/baseline_symbols.txt: Update. + +2025-04-22 Andreas Schwab <schwab@linux-m68k.org> + + * config/abi/post/riscv64-linux-gnu/baseline_symbols.txt: Update. + +2025-04-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/abi/post/sparc64-linux-gnu/baseline_symbols.txt: Regenerate. + * config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt: Likewise. + +2025-04-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/abi/post/i386-solaris/baseline_symbols.txt: Regenerate. + * config/abi/post/i386-solaris/amd64/baseline_symbols.txt: + Likewise. + * config/abi/post/sparc-solaris/baseline_symbols.txt: Likewise. + * config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt: + Likewise. + +2025-04-22 Jakub Jelinek <jakub@redhat.com> + + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update. + * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/aarch64-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt: Update. + +2025-04-22 Tomasz Kamiński <tkaminsk@redhat.com> + + * testsuite/23_containers/flat_map/1.cc: Add dg-timeout-factor 2. + * testsuite/23_containers/flat_multimap/1.cc: Likewise. + * testsuite/std/format/ranges/map.cc: Likewise. + * testsuite/std/format/ranges/sequence.cc: Likewise. + * testsuite/std/format/ranges/string.cc: Likewise. + +2025-04-22 Andreas Schwab <schwab@linux-m68k.org> + + * testsuite/util/testsuite_abi.cc (check_version): Update latestp + to use GLIBCXX_3.4.35 and CXXABI_1.3.17. + +2025-04-18 François Dumont <frs.dumont@gmail.com> + + * testsuite/util/debug/unordered_checks.h (fill_container): New helper method. + (use_erased_local_iterator, invalid_local_iterator_pre_increment) + (invalid_local_iterator_post_increment, invalid_local_iterator_compare) + (invalid_local_iterator_range): Use latter. + (fill_and_get_local_iterator): New, use fill_container. + (use_invalid_local_iterator): Use latter. + (invalid_local_iterator_arrow_operator): New test function. + (invalid_local_iterator_copy_instantiation): New test function. + (invalid_local_iterator_move_instantiation): New test function. + (invalid_local_iterator_copy_assignment): New test function. + (invalid_local_iterator_move_assignment): New test function. + (invalid_local_iterator_const_conversion): New test function. + * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_arrow_operator_neg.cc: + New test case. + * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_const_conversion_neg.cc: + New test case. + * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc: Test unordered_map. + * testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc: Test unordered_multimap. + * testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc: Likewise. + * testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc: Likewise. + * testsuite/23_containers/unordered_multimap/debug/cend_neg.cc: Likewise. + * testsuite/23_containers/unordered_multimap/debug/end1_neg.cc: Likewise. + * testsuite/23_containers/unordered_multimap/debug/end2_neg.cc: Likewise. + * testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_arrow_operator_neg.cc: + New test case. + * testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_const_conversion_neg.cc: + New test case. + * testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc: + Test unordered_multimap. + * testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_arrow_operator_neg.cc: + New test case. + * testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_const_conversion_neg.cc: + New test case. + * testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_set/debug/invalid_local_iterator_arrow_operator_neg.cc: + New test case. + * testsuite/23_containers/unordered_set/debug/invalid_local_iterator_const_conversion_neg.cc: + New test case. + * testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_construction_neg.cc: + New test case. + * testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_assignment_neg.cc: + New test case. + * testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_construction_neg.cc: + New test case. + +2025-04-18 Tomasz Kamiński <tkaminsk@redhat.com> + + * doc/xml/manual/appendix_contributing.xml: Add 'and functions'. + +2025-04-17 Jason Merrill <jason@redhat.com> + + * testsuite/20_util/tuple/element_access/get_neg.cc: Adjust + diagnostic. + +2025-04-17 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/119840 + * include/std/format (_M_parse_fill_and_align): Cast elements of + __not_fill to _CharT. + +2025-04-17 Jonathan Wakely <jwakely@redhat.com> + + * include/std/format (format_kind): Do not use 'not' + alternative token to make the primary template ill-formed. Use + the undeclared identifier __primary_template_not_defined and a + comment that will appear in diagnostics. + * testsuite/std/format/ranges/format_kind_neg.cc: New test. + +2025-04-17 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/109162 + * include/std/format (__format::__simply_formattable_range): Define. + (range_formatter::format): Do not instantiate _M_format for mutable + _Rg if const _Rg can be used. + +2025-04-16 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/109162 + * include/std/format (range_formatter::format): Format const range, + only if reference type is not changed. + * testsuite/std/format/ranges/formatter.cc: New tests. + +2025-04-16 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/109162 + * include/std/format (__formatter_int::_M_format_character_escaped) + (__formatter_str::format): Use __sink.out() to produce _Sink_iter. + (__format::__const_formattable_range): Moved closer to range_formatter. + (__format::__maybe_const_range): Use `__conditional_t` and moved closer + to range_formatter. + (__format::__format_padded, __format::maybe_const) + (__format::__indexed_formatter_storage, __format::__tuple_formatter) + (std::formatter<pair<_Fp, _Sp>, _CharT>>) + (std::formatter<tuple<_Tps...>, _CharT): Define. + (std::formatter<_Rg, _CharT>::format): Cast incoming range to + __format::__maybe_const_range<_Rg, _CharT>&. + (std::formatter<_Rg, _CharT>::_M_format): Extracted from format, + and use __format_padded. + (std::formatter<_Rg, _CharT>::_M_format_no_padding): Rename... + (std::formatter<_Rg, _CharT>::_M_format_elems): ...to this. + (std::formatter<_Rg, _CharT>::_M_format_with_padding): Extracted as + __format_padded. + * testsuite/util/testsuite_iterators.h (test_input_range_nocopy): + Define. + * testsuite/std/format/ranges/formatter.cc: Tests for `m` specifier. + * testsuite/std/format/ranges/sequence.cc: Tests for array and subrange. + * testsuite/std/format/ranges/map.cc: New test. + * testsuite/std/format/tuple.cc: New test. + +2025-04-15 Jonathan Wakely <jwakely@redhat.com> + + * include/std/ranges (__glibcxx_want_ranges_iota): Do not + define. + +2025-04-15 Jonathan Wakely <jwakely@redhat.com> + + * include/std/numeric (ranges): Only declare namespace for C++23 + and later. + (ranges::iota_result): Fix indentation. + * testsuite/17_intro/names.cc: Check ranges is not used as an + identifier before C++20. + +2025-04-15 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/109162 + * include/std/format (__format::__has_debug_format, _Pres_type::_Pres_seq) + (_Pres_type::_Pres_str, __format::__Stackbuf_size): Define. + (_Separators::_S_squares, _Separators::_S_parens, _Separators::_S_comma) + (_Separators::_S_colon): Define additional constants. + (_Spec::_M_parse_fill_and_align): Define overload accepting + list of excluded characters for fill, and forward existing overload. + (__formatter_str::_M_format_range): Define. + (__format::_Buf_sink) Use __Stackbuf_size for size of array. + (__format::__is_map_formattable, std::range_formatter) + (std::formatter<_Rg, _CharT>): Define. + * src/c++23/std.cc.in (std::format_kind, std::range_format) + (std::range_formatter): Export. + * testsuite/std/format/formatter/lwg3944.cc: Guarded tests with + __glibcxx_format_ranges. + * testsuite/std/format/formatter/requirements.cc: Adjusted for standard + behavior. + * testsuite/23_containers/vector/bool/format.cc: Test vector<bool> formatting. + * testsuite/std/format/ranges/format_kind.cc: New test. + * testsuite/std/format/ranges/formatter.cc: New test. + * testsuite/std/format/ranges/sequence.cc: New test. + * testsuite/std/format/ranges/string.cc: New test. + +2025-04-15 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/119748 + * include/bits/basic_string.h (_S_copy_chars): Only optimize for + contiguous iterators that are convertible to const charT*. Use + explicit conversion to charT after dereferencing iterator. + (_S_copy_range): Likewise for contiguous ranges. + * include/bits/basic_string.tcc (_M_construct): Use explicit + conversion to charT after dereferencing iterator. + * include/bits/cow_string.h (_S_copy_chars): Likewise. + (basic_string(from_range_t, R&&, const Allocator&)): Likewise. + Only optimize for contiguous iterators that are convertible to + const charT*. + * testsuite/21_strings/basic_string/cons/char/119748.cc: New + test. + * testsuite/21_strings/basic_string/cons/wchar_t/119748.cc: + New test. + +2025-04-15 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/util/testsuite_iterators.h (test_container): Define + array constructor for C++98 as well. + +2025-04-14 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/21334 + * doc/xml/manual/using.xml: Document that container data race + avoidance rules do not apply to COW std::string. + * doc/html/*: Regenerate. + +2025-04-14 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/119725 + * testsuite/std/format/debug.cc: Updated dg-options. + * testsuite/std/format/debug_nonunicode.cc: Updated dg-options. + +2025-04-11 Jonathan Wakely <jwakely@redhat.com> + + * src/c++17/fast_float/LOCAL_PATCHES: Update. + +2025-04-11 Evgeny Karpov <Evgeny.Karpov@microsoft.com> + + * src/c++17/fast_float/fast_float.h (full_multiplication): + Support aarch64-w64-mingw32 target. + +2025-04-11 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/basic_string.h (_S_copy_chars): Replace overloads + with constexpr-if and extend optimization to all contiguous + iterators. + * src/c++11/string-inst.cc: Extend comment. + +2025-04-11 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/111055 + * include/bits/version.def (containers_ranges): Define. + * include/bits/version.h: Regenerate. + * include/bits/ranges_base.h (__detail::__container_compatible_range) + (__detail::__range_to_alloc_type, __detail::__range_mapped_type) + (__detail::__range_key_type): Depend on __glibcxx_containers_ranges + instead of __glibcxx_ranges_to_container. + * include/bits/basic_string.h: Replace __glibcxx_ranges_to_container with + __glibcxx_containers_ranges. + * include/bits/cow_string.h: Likewise. + * include/bits/deque.tcc: Likewise. + * include/bits/forward_list.h: Likewise. + * include/bits/stl_bvector.h: Likewise. + * include/bits/stl_deque.h: Likewise. + * include/bits/stl_list.h: Likewise. + * include/bits/stl_map.h: Likewise. + * include/bits/stl_multimap.h: Likewise. + * include/bits/stl_multiset.h: Likewise. + * include/bits/stl_queue.h: Likewise. + * include/bits/stl_set.h: Likewise. + * include/bits/stl_stack.h: Likewise. + * include/bits/stl_vector.h: Likewise. + * include/bits/unordered_map.h: Likewise. + * include/bits/unordered_set.h: Likewise. + * include/bits/vector.tcc: Likewise. + * include/debug/deque: Likewise. + * include/debug/forward_list: Likewise. + * include/debug/list: Likewise. + * include/debug/map.h: Likewise. + * include/debug/multimap.h: Likewise. + * include/debug/multiset.h: Likewise. + * include/debug/set.h: Likewise. + * include/debug/unordered_map: Likewise. + * include/debug/unordered_set: Likewise. + * include/debug/vector: Likewise. + * include/std/deque: Provide __cpp_lib_containers_ranges. + * include/std/forward_list: Likewise. + * include/std/list: Likewise. + * include/std/map: Likewise. + * include/std/queue: Likewise. + * include/std/set: Likewise. + * include/std/stack: Likewise. + * include/std/string: Likewise. + * include/std/unordered_map: Likewise. + * include/std/unordered_set: Likewise. + * include/std/vector: Likewise. + * testsuite/21_strings/basic_string/cons/from_range.cc: Test for value + __cpp_lib_containers_ranges. + * testsuite/23_containers/deque/cons/from_range.cc: Likewise. + * testsuite/23_containers/forward_list/cons/from_range.cc: Likewise. + * testsuite/23_containers/list/cons/from_range.cc: Likewise. + * testsuite/23_containers/map/cons/from_range.cc: Likewise. + * testsuite/23_containers/multimap/cons/from_range.cc: Likewise. + * testsuite/23_containers/multiset/cons/from_range.cc: Likewise. + * testsuite/23_containers/priority_queue/cons_from_range.cc: Likewise. + * testsuite/23_containers/queue/cons_from_range.cc: Likewise. + * testsuite/23_containers/set/cons/from_range.cc: Likewise. + * testsuite/23_containers/stack/cons_from_range.cc: Likewise. + * testsuite/23_containers/unordered_map/cons/from_range.cc: Likewise. + * testsuite/23_containers/unordered_multimap/cons/from_range.cc: Likewise. + * testsuite/23_containers/unordered_multiset/cons/from_range.cc: Likewise. + * testsuite/23_containers/unordered_set/cons/from_range.cc: Likewise. + * testsuite/23_containers/vector/bool/cons/from_range.cc: Likewise. + * testsuite/23_containers/vector/cons/from_range.cc: Likewise. + +2025-04-11 Jonathan Wakely <jwakely@redhat.com> + Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/111055 + * include/bits/basic_string.h (_S_copy_range): New function. + (basic_string(from_range_t, R%%, const Alloc&)): New + constructor. + (append_range, assign_range, insert_range, replace_with_range): + New functions. + * include/bits/cow_string.h: Likewise. + * testsuite/21_strings/basic_string/cons/from_range.cc: New + test. + * testsuite/21_strings/basic_string/modifiers/append/append_range.cc: + New test. + * testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc: + New test. + * testsuite/21_strings/basic_string/modifiers/insert/insert_range.cc: + New test. + * testsuite/21_strings/basic_string/modifiers/replace/replace_with_range.cc: + New test. + +2025-04-11 Tomasz Kamiński <tkaminsk@redhat.com> + + PR libstdc++/109162 + * include/bits/chrono_io.h (__detail::_Widen): Moved to std/format file. + * include/bits/unicode-data.h: Regnerate. + * include/bits/unicode.h (__unicode::_Utf_iterator::_M_units) + (__unicode::__should_escape_category): Define. + * include/std/format (_GLIBCXX_WIDEN_, _GLIBCXX_WIDEN): Copied from + include/bits/chrono_io.h. + (__format::_Widen): Moved from include/bits/chrono_io.h. + (__format::_Term_char, __format::_Escapes, __format::_Separators) + (__format::__should_escape_ascii, __format::__should_escape_unicode) + (__format::__write_escape_seq, __format::__write_escaped_char) + (__format::__write_escaped_acii, __format::__write_escaped_unicode) + (__format::__write_escaped): Define. + (__formatter_str::_S_trunc): Extracted truncation of character + sequences. + (__formatter_str::format): Handle _Pres_esc. + (__formatter_int::_M_do_parse) [__glibcxx_format_ranges]: Parse '?'. + (__formatter_int::_M_format_character_escaped): Define. + (formatter<_CharT, _CharT>::format, formatter<char, wchar_t>::format): + Handle _Pres_esc. + (__formatter_str::set_debug_format, formatter<...>::set_debug_format) + Guard with __glibcxx_format_ranges. + (__format::_Fixedbuf_sink): Define. + * testsuite/23_containers/vector/bool/format.cc: Use __format::_Widen + and remove unnecessary <chrono> include. + * testsuite/std/format/debug.cc: New test. + * testsuite/std/format/debug_nonunicode.cc: New test. + * testsuite/std/format/parse_ctx.cc (escaped_strings_supported): Define + to true if __glibcxx_format_ranges is defined. + * testsuite/std/format/string.cc (escaped_strings_supported): Define to + true if __glibcxx_format_ranges is defined. + +2025-04-10 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/version.def (constrained_equality): Only define + as 202411 for C++23 and later, use 202403 for C++20. + * include/bits/version.h: Regenerate. + * testsuite/20_util/expected/equality_constrained.cc: Remove + TODO comment. + +2025-04-10 John David Anglin <danglin@gcc.gnu.org> + + * config/os/hpux/os_defines.h: Remove _GLIBCXX_USE_LONG_LONG + define. + 2025-04-09 Patrick Palka <ppalka@redhat.com> PR libstdc++/115046 diff --git a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt index 27b5937..1ee0966 100644 --- a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt @@ -2124,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3221,6 +3225,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3374,6 +3380,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3941,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4612,6 +4622,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt index d8b8b75..c5fb077 100644 --- a/libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt @@ -2095,6 +2095,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3182,6 +3186,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3335,6 +3341,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3902,6 +3910,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4571,6 +4581,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt index fb9444c..b0007de 100644 --- a/libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt @@ -2095,6 +2095,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3182,6 +3186,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3335,6 +3341,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3902,6 +3910,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4571,6 +4581,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt index 4228453..938e914 100644 --- a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt @@ -2124,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3221,6 +3225,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3374,6 +3380,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3941,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4617,6 +4627,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt index 675a949..089ae24 100644 --- a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt @@ -2124,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3221,6 +3225,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3374,6 +3380,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3941,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4612,6 +4622,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt index c383865..b8b27d0 100644 --- a/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt @@ -2270,6 +2270,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3411,6 +3415,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3564,6 +3570,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -4131,6 +4139,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4858,6 +4868,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt index c383865..b8b27d0 100644 --- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt @@ -2270,6 +2270,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3411,6 +3415,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3564,6 +3570,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -4131,6 +4139,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4858,6 +4868,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt index a843885..15c08ce 100644 --- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt @@ -2270,6 +2270,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3411,6 +3415,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3564,6 +3570,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -4131,6 +4139,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4858,6 +4868,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt index 18ec97d..601d60b 100644 --- a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt @@ -2416,6 +2416,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3582,6 +3586,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3735,6 +3741,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -4302,6 +4310,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -5067,6 +5077,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt index 9229ad3..7c2c19b 100644 --- a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt @@ -2124,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3221,6 +3225,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3374,6 +3380,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3941,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4575,6 +4585,7 @@ OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 OBJECT:0:CXXABI_1.3.15 +OBJECT:0:CXXABI_1.3.16 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4612,6 +4623,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 @@ -4685,6 +4697,7 @@ OBJECT:15:_ZTSSt8numpunctIcE@@GLIBCXX_3.4 OBJECT:15:_ZTSSt8numpunctIwE@@GLIBCXX_3.4 OBJECT:16:_ZTIDF128_@@CXXABI_1.3.14 OBJECT:16:_ZTIDF16_@@CXXABI_1.3.14 +OBJECT:16:_ZTIDF16b@@CXXABI_1.3.16 OBJECT:16:_ZTIDF32_@@CXXABI_1.3.14 OBJECT:16:_ZTIDF32x@@CXXABI_1.3.14 OBJECT:16:_ZTIDF64_@@CXXABI_1.3.14 @@ -5327,6 +5340,7 @@ OBJECT:32:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3 OBJECT:32:_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 OBJECT:32:_ZTIPDF128_@@CXXABI_1.3.14 OBJECT:32:_ZTIPDF16_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPDF16b@@CXXABI_1.3.16 OBJECT:32:_ZTIPDF32_@@CXXABI_1.3.14 OBJECT:32:_ZTIPDF32x@@CXXABI_1.3.14 OBJECT:32:_ZTIPDF64_@@CXXABI_1.3.14 @@ -5340,6 +5354,7 @@ OBJECT:32:_ZTIPDs@@CXXABI_1.3.3 OBJECT:32:_ZTIPDu@@CXXABI_1.3.12 OBJECT:32:_ZTIPKDF128_@@CXXABI_1.3.14 OBJECT:32:_ZTIPKDF16_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPKDF16b@@CXXABI_1.3.16 OBJECT:32:_ZTIPKDF32_@@CXXABI_1.3.14 OBJECT:32:_ZTIPKDF32x@@CXXABI_1.3.14 OBJECT:32:_ZTIPKDF64_@@CXXABI_1.3.14 diff --git a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt index 771d87a..8c204af 100644 --- a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt @@ -2270,6 +2270,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3411,6 +3415,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3564,6 +3570,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -4131,6 +4139,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4858,6 +4868,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt b/libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt index 1ec9405..aa2e5ac 100644 --- a/libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt @@ -2095,6 +2095,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3182,6 +3186,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3335,6 +3341,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3902,6 +3910,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4570,6 +4580,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt index 2bf5c85..b9118c0 100644 --- a/libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt @@ -2095,6 +2095,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3182,6 +3186,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3335,6 +3341,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3902,6 +3910,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4570,6 +4580,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt index 94f5f5e..689b11e 100644 --- a/libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt @@ -199,6 +199,14 @@ FUNC:_ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv@@GLIBCXX_3.4.10 FUNC:_ZNK11__gnu_debug16_Error_formatter8_M_errorEv@@GLIBCXX_3.4 FUNC:_ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@@GLIBCXX_3.4 FUNC:_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@@GLIBCXX_3.4 +FUNC:_ZNKRSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.5 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@@GLIBCXX_3.4 @@ -467,6 +475,7 @@ FUNC:_ZNKSt10moneypunctIwLb1EE8groupingEv@@GLIBCXX_3.4 FUNC:_ZNKSt10ostrstream5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt10ostrstream6pcountEv@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE15_M_am_pm_formatEPKc@@GLIBCXX_3.4 +FUNC:_ZNKSt11__timepunctIcE15_M_am_pm_formatEPPKc@@GLIBCXX_3.4.30 FUNC:_ZNKSt11__timepunctIcE15_M_date_formatsEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE15_M_time_formatsEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE19_M_days_abbreviatedEPPKc@@GLIBCXX_3.4 @@ -477,6 +486,7 @@ FUNC:_ZNKSt11__timepunctIcE7_M_daysEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE8_M_am_pmEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE9_M_monthsEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE15_M_am_pm_formatEPKw@@GLIBCXX_3.4 +FUNC:_ZNKSt11__timepunctIwE15_M_am_pm_formatEPPKw@@GLIBCXX_3.4.30 FUNC:_ZNKSt11__timepunctIwE15_M_date_formatsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE15_M_time_formatsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE19_M_days_abbreviatedEPPKw@@GLIBCXX_3.4 @@ -487,7 +497,12 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12bad_weak_ptr4whatEv@@GLIBCXX_3.4.15 FUNC:_ZNKSt12future_error4whatEv@@GLIBCXX_3.4.14 FUNC:_ZNKSt12strstreambuf6pcountEv@@GLIBCXX_3.4 @@ -658,6 +673,13 @@ FUNC:_ZNKSt5ctypeIwE8do_widenEPKcS2_Pw@@GLIBCXX_3.4 FUNC:_ZNKSt5ctypeIwE8do_widenEc@@GLIBCXX_3.4 FUNC:_ZNKSt5ctypeIwE9do_narrowEPKwS2_cPc@@GLIBCXX_3.4 FUNC:_ZNKSt5ctypeIwE9do_narrowEwc@@GLIBCXX_3.4 +FUNC:_ZNKSt6chrono4tzdb11locate_zoneESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono4tzdb12current_zoneEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9time_zone15_M_get_sys_infoENS_10time_pointINS_3_V212system_clockENS_8durationIxSt5ratioILx1ELx1EEEEEE@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9time_zone17_M_get_local_infoENS_10time_pointINS_7local_tENS_8durationIxSt5ratioILx1ELx1EEEEEE@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9tzdb_list14const_iteratordeEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9tzdb_list5beginEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9tzdb_list5frontEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt6locale2id5_M_idEv@@GLIBCXX_3.4 FUNC:_ZNKSt6locale4nameB5cxx11Ev@@GLIBCXX_3.4.21 FUNC:_ZNKSt6locale4nameEv@@GLIBCXX_3.4 @@ -856,19 +878,29 @@ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS2_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE13get_allocatorEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 +FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE13get_allocatorEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx117collateIcE10_M_compareEPKcS3_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx117collateIcE10do_compareEPKcS3_S3_S3_@@GLIBCXX_3.4.21 @@ -936,6 +968,7 @@ FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_ FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES4_S4_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKcRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES4_S4_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKcSD_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 @@ -955,6 +988,7 @@ FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_ FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES4_S4_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKwRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES4_S4_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKwSD_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 @@ -1207,6 +1241,7 @@ FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_week FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4 +FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKcRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKcSC_@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 @@ -1226,6 +1261,7 @@ FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_get_week FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4 +FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKwRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKwSC_@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 @@ -1300,6 +1336,14 @@ FUNC:_ZNKSt9type_info10__do_catchEPKS_PPvj@@GLIBCXX_3.4 FUNC:_ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@@GLIBCXX_3.4 FUNC:_ZNKSt9type_info14__is_pointer_pEv@@GLIBCXX_3.4 FUNC:_ZNKSt9type_info15__is_function_pEv@@GLIBCXX_3.4 +FUNC:_ZNOSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 FUNC:_ZNSaIcEC1ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIcEC1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIcEC2ERKS_@@GLIBCXX_3.4 @@ -1401,6 +1445,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 @@ -1665,6 +1710,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSs7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4 @@ -2078,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -2564,7 +2614,9 @@ FUNC:_ZNSt15_List_node_base7_M_hookEPS_@@GLIBCXX_3.4.14 FUNC:_ZNSt15_List_node_base7reverseEv@@GLIBCXX_3.4 FUNC:_ZNSt15_List_node_base8transferEPS_S0_@@GLIBCXX_3.4 FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14 +FUNC:_ZNSt15__exception_ptr13exception_ptr10_M_releaseEv@@CXXABI_1.3.13 FUNC:_ZNSt15__exception_ptr13exception_ptr4swapERS0_@@CXXABI_1.3.3 +FUNC:_ZNSt15__exception_ptr13exception_ptr9_M_addrefEv@@CXXABI_1.3.13 FUNC:_ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptr13exception_ptrC1EPv@@CXXABI_1.3.11 FUNC:_ZNSt15__exception_ptr13exception_ptrC1ERKS0_@@CXXABI_1.3.3 @@ -2788,6 +2840,7 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Ej@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16__time_get_state17_M_finalize_stateEP2tm@@GLIBCXX_3.4.30 FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 @@ -2898,7 +2951,8 @@ FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEaSEOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18condition_variable10notify_allEv@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variable10notify_oneEv@@GLIBCXX_3.4.11 -FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@@GLIBCXX_3.4.11 +FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@@GLIBCXX_3.4.30 +FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableC1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableD1Ev@@GLIBCXX_3.4.11 @@ -3000,6 +3054,7 @@ FUNC:_ZNSt25__codecvt_utf8_utf16_baseIwED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt25__codecvt_utf8_utf16_baseIwED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj@@GLIBCXX_3.4.21 FUNC:_ZNSt28__atomic_futex_unsigned_base19_M_futex_wait_untilEPjjbNSt6chrono8durationIxSt5ratioILx1ELx1EEEENS2_IxS3_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.21 +FUNC:_ZNSt28__atomic_futex_unsigned_base26_M_futex_wait_until_steadyEPjjbNSt6chrono8durationIxSt5ratioILx1ELx1EEEENS2_IxS3_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.29 FUNC:_ZNSt3_V214error_categoryD0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V214error_categoryD1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V214error_categoryD2Ev@@GLIBCXX_3.4.21 @@ -3056,9 +3111,18 @@ FUNC:_ZNSt6__norm15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.14 FUNC:_ZNSt6__norm15_List_node_base7reverseEv@@GLIBCXX_3.4.9 FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9 FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14 +FUNC:_ZNSt6chrono11locate_zoneESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono11reload_tzdbEv@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono12current_zoneEv@@GLIBCXX_3.4.31 FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11 +FUNC:_ZNSt6chrono13get_tzdb_listEv@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono14remote_versionB5cxx11Ev@@GLIBCXX_3.4.31 FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19 FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19 +FUNC:_ZNSt6chrono8get_tzdbEv@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono9tzdb_list11erase_afterENS0_14const_iteratorE@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono9tzdb_list14const_iteratorppEi@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono9tzdb_list14const_iteratorppEv@@GLIBCXX_3.4.31 FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4 FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4 FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4 @@ -3155,11 +3219,14 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEjjPKcj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3174,6 +3241,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcPKcS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcS5_S5_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE14_M_replace_auxEjjjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE15_M_replace_coldEPcjPKcjj@@GLIBCXX_3.4.31 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE17_S_to_string_viewESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE18_M_construct_aux_2Ejc@@GLIBCXX_3.4.21 @@ -3245,6 +3313,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEjjRKS4_@@GLIB FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEjjRKS4_jj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEjjjc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8_M_eraseEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8pop_backEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcj@@GLIBCXX_3.4.21 @@ -3305,11 +3374,14 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEjjPKwj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3324,6 +3396,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS5_S5_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE15_M_replace_coldEPwjPKwjj@@GLIBCXX_3.4.31 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE18_M_construct_aux_2Ejw@@GLIBCXX_3.4.21 @@ -3395,6 +3468,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEjjRKS4_@@GLIB FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEjjRKS4_jj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8_M_eraseEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_M_appendEPKwj@@GLIBCXX_3.4.21 @@ -3470,6 +3544,7 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE14__xfer_bufptrsD1E FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE14__xfer_bufptrsD2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE15_M_update_egptrEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4.21 @@ -3481,15 +3556,25 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCX FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 @@ -3501,6 +3586,7 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE14__xfer_bufptrsD1E FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE14__xfer_bufptrsD2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE15_M_update_egptrEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4.21 @@ -3512,15 +3598,25 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCX FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9underflowEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 @@ -3596,85 +3692,115 @@ FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EEC2ERKNS_12basic_stringIcSt11char_tra FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED2Ev@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 @@ -3823,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4015,6 +4143,9 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11 FUNC:_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11 +FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.29 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvjj@@CXXABI_1.3.5 FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 @@ -4025,6 +4156,50 @@ FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCX FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvjj@@CXXABI_1.3.5 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIcLb0EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIcLb1EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIwLb0EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIwLb1EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx117collateIcEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx117collateIwEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118messagesIcEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118messagesIwEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118numpunctIcEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118numpunctIwEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIcLb0EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIcLb1EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIwLb0EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIwLb1EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt11__timepunctIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt11__timepunctIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt5ctypeIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt5ctypeIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7codecvtIcc11__mbstate_tEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7codecvtIwc11__mbstate_tEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7collateIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7collateIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8messagesIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8messagesIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8numpunctIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8numpunctIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 @@ -4035,6 +4210,8 @@ FUNC:_ZSt16__throw_bad_castv@@GLIBCXX_3.4 FUNC:_ZSt16generic_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6 FUNC:_ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.6 +FUNC:_ZSt17__istream_extractIwSt11char_traitsIwEEvRSt13basic_istreamIT_T0_EPS3_i@@GLIBCXX_3.4.29 +FUNC:_ZSt17__istream_extractRSiPci@@GLIBCXX_3.4.29 FUNC:_ZSt17__throw_bad_allocv@@GLIBCXX_3.4 FUNC:_ZSt17__verify_groupingPKcjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZSt17__verify_groupingPKcjRKSs@@GLIBCXX_3.4.10 @@ -4060,18 +4237,25 @@ FUNC:_ZSt20__throw_future_errori@@GLIBCXX_3.4.14 FUNC:_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt20__throw_out_of_rangePKc@@GLIBCXX_3.4 FUNC:_ZSt20__throw_system_errori@@GLIBCXX_3.4.11 +FUNC:_ZSt20__to_chars_float16_tPcS_fSt12chars_format@@GLIBCXX_3.4.31 FUNC:_ZSt21_Rb_tree_rotate_rightPSt18_Rb_tree_node_baseRS0_@@GLIBCXX_3.4 FUNC:_ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9 FUNC:_ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9 +FUNC:_ZSt21__glibcxx_assert_failPKciS0_S0_@@GLIBCXX_3.4.30 FUNC:_ZSt21__throw_bad_exceptionv@@GLIBCXX_3.4 FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 +FUNC:_ZSt21__to_chars_bfloat16_tPcS_fSt12chars_format@@GLIBCXX_3.4.31 +FUNC:_ZSt21ios_base_library_initv@@GLIBCXX_3.4.32 +FUNC:_ZSt22__from_chars_float16_tPKcS0_RfSt12chars_format@@GLIBCXX_3.4.31 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 +FUNC:_ZSt23__from_chars_bfloat16_tPKcS0_RfSt12chars_format@@GLIBCXX_3.4.31 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt25notify_all_at_thread_exitRSt18condition_variableSt11unique_lockISt5mutexE@@GLIBCXX_3.4.21 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 +FUNC:_ZSt28__throw_bad_array_new_lengthv@@GLIBCXX_3.4.29 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 FUNC:_ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4 FUNC:_ZSt2wsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4 @@ -4089,6 +4273,15 @@ FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cx FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_@@GLIBCXX_3.4.21 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCXX_3.4 +FUNC:_ZSt8to_charsPcS_d@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_dSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_dSt12chars_formati@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_e@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_eSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_eSt12chars_formati@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_f@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_fSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_fSt12chars_formati@@GLIBCXX_3.4.29 FUNC:_ZSt9has_facetINSt7__cxx1110moneypunctIcLb0EEEEbRKSt6locale@@GLIBCXX_3.4.21 FUNC:_ZSt9has_facetINSt7__cxx1110moneypunctIwLb0EEEEbRKSt6locale@@GLIBCXX_3.4.21 FUNC:_ZSt9has_facetINSt7__cxx117collateIcEEEbRKSt6locale@@GLIBCXX_3.4.21 @@ -4347,6 +4540,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4388,6 +4582,9 @@ OBJECT:0:CXXABI_1.3.1 OBJECT:0:CXXABI_1.3.10 OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 +OBJECT:0:CXXABI_1.3.13 +OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4419,7 +4616,13 @@ OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.28 +OBJECT:0:GLIBCXX_3.4.29 OBJECT:0:GLIBCXX_3.4.3 +OBJECT:0:GLIBCXX_3.4.30 +OBJECT:0:GLIBCXX_3.4.31 +OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 @@ -4602,6 +4805,9 @@ OBJECT:15:_ZTSSt8numpunctIcE@@GLIBCXX_3.4 OBJECT:15:_ZTSSt8numpunctIwE@@GLIBCXX_3.4 OBJECT:16:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 OBJECT:16:_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 +OBJECT:16:_ZTIPDF32_@@CXXABI_1.3.14 +OBJECT:16:_ZTIPDF32x@@CXXABI_1.3.14 +OBJECT:16:_ZTIPDF64_@@CXXABI_1.3.14 OBJECT:16:_ZTIPDd@@CXXABI_1.3.4 OBJECT:16:_ZTIPDe@@CXXABI_1.3.4 OBJECT:16:_ZTIPDf@@CXXABI_1.3.4 @@ -4609,6 +4815,9 @@ OBJECT:16:_ZTIPDi@@CXXABI_1.3.3 OBJECT:16:_ZTIPDn@@CXXABI_1.3.5 OBJECT:16:_ZTIPDs@@CXXABI_1.3.3 OBJECT:16:_ZTIPDu@@CXXABI_1.3.12 +OBJECT:16:_ZTIPKDF32_@@CXXABI_1.3.14 +OBJECT:16:_ZTIPKDF32x@@CXXABI_1.3.14 +OBJECT:16:_ZTIPKDF64_@@CXXABI_1.3.14 OBJECT:16:_ZTIPKDd@@CXXABI_1.3.4 OBJECT:16:_ZTIPKDe@@CXXABI_1.3.4 OBJECT:16:_ZTIPKDf@@CXXABI_1.3.4 @@ -5752,6 +5961,9 @@ OBJECT:8:_ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@G OBJECT:8:_ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4 OBJECT:8:_ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4 OBJECT:8:_ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4 +OBJECT:8:_ZTIDF32_@@CXXABI_1.3.14 +OBJECT:8:_ZTIDF32x@@CXXABI_1.3.14 +OBJECT:8:_ZTIDF64_@@CXXABI_1.3.14 OBJECT:8:_ZTIDd@@CXXABI_1.3.4 OBJECT:8:_ZTIDe@@CXXABI_1.3.4 OBJECT:8:_ZTIDf@@CXXABI_1.3.4 diff --git a/libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt index f0bdad2..b15cf68 100644 --- a/libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt @@ -199,6 +199,14 @@ FUNC:_ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv@@GLIBCXX_3.4.10 FUNC:_ZNK11__gnu_debug16_Error_formatter8_M_errorEv@@GLIBCXX_3.4 FUNC:_ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@@GLIBCXX_3.4 FUNC:_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@@GLIBCXX_3.4 +FUNC:_ZNKRSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.5 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm@@GLIBCXX_3.4 @@ -467,6 +475,7 @@ FUNC:_ZNKSt10moneypunctIwLb1EE8groupingEv@@GLIBCXX_3.4 FUNC:_ZNKSt10ostrstream5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt10ostrstream6pcountEv@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE15_M_am_pm_formatEPKc@@GLIBCXX_3.4 +FUNC:_ZNKSt11__timepunctIcE15_M_am_pm_formatEPPKc@@GLIBCXX_3.4.30 FUNC:_ZNKSt11__timepunctIcE15_M_date_formatsEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE15_M_time_formatsEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE19_M_days_abbreviatedEPPKc@@GLIBCXX_3.4 @@ -477,6 +486,7 @@ FUNC:_ZNKSt11__timepunctIcE7_M_daysEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE8_M_am_pmEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIcE9_M_monthsEPPKc@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE15_M_am_pm_formatEPKw@@GLIBCXX_3.4 +FUNC:_ZNKSt11__timepunctIwE15_M_am_pm_formatEPPKw@@GLIBCXX_3.4.30 FUNC:_ZNKSt11__timepunctIwE15_M_date_formatsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE15_M_time_formatsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE19_M_days_abbreviatedEPPKw@@GLIBCXX_3.4 @@ -487,7 +497,12 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12bad_weak_ptr4whatEv@@GLIBCXX_3.4.15 FUNC:_ZNKSt12future_error4whatEv@@GLIBCXX_3.4.14 FUNC:_ZNKSt12strstreambuf6pcountEv@@GLIBCXX_3.4 @@ -658,6 +673,13 @@ FUNC:_ZNKSt5ctypeIwE8do_widenEPKcS2_Pw@@GLIBCXX_3.4 FUNC:_ZNKSt5ctypeIwE8do_widenEc@@GLIBCXX_3.4 FUNC:_ZNKSt5ctypeIwE9do_narrowEPKwS2_cPc@@GLIBCXX_3.4 FUNC:_ZNKSt5ctypeIwE9do_narrowEwc@@GLIBCXX_3.4 +FUNC:_ZNKSt6chrono4tzdb11locate_zoneESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono4tzdb12current_zoneEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9time_zone15_M_get_sys_infoENS_10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1EEEEEE@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9time_zone17_M_get_local_infoENS_10time_pointINS_7local_tENS_8durationIlSt5ratioILl1ELl1EEEEEE@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9tzdb_list14const_iteratordeEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9tzdb_list5beginEv@@GLIBCXX_3.4.31 +FUNC:_ZNKSt6chrono9tzdb_list5frontEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt6locale2id5_M_idEv@@GLIBCXX_3.4 FUNC:_ZNKSt6locale4nameB5cxx11Ev@@GLIBCXX_3.4.21 FUNC:_ZNKSt6locale4nameEv@@GLIBCXX_3.4 @@ -856,19 +878,29 @@ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS2_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEixEm@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE13get_allocatorEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 +FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE13get_allocatorEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29 FUNC:_ZNKSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx117collateIcE10_M_compareEPKcS3_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx117collateIcE10do_compareEPKcS3_S3_S3_@@GLIBCXX_3.4.21 @@ -936,6 +968,7 @@ FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_ FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES4_S4_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKcRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES4_S4_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKcSD_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 @@ -955,6 +988,7 @@ FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_ FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES4_S4_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKwRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES4_S4_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmPKwSD_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 @@ -1207,6 +1241,7 @@ FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_week FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4 +FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKcRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKcSC_@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 @@ -1226,6 +1261,7 @@ FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_get_week FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4 +FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKwRSt16__time_get_state@@GLIBCXX_3.4.30 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKwSC_@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 @@ -1300,6 +1336,14 @@ FUNC:_ZNKSt9type_info10__do_catchEPKS_PPvj@@GLIBCXX_3.4 FUNC:_ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@@GLIBCXX_3.4 FUNC:_ZNKSt9type_info14__is_pointer_pEv@@GLIBCXX_3.4 FUNC:_ZNKSt9type_info15__is_function_pEv@@GLIBCXX_3.4 +FUNC:_ZNOSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29 +FUNC:_ZNOSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29 FUNC:_ZNSaIcEC1ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIcEC1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIcEC2ERKS_@@GLIBCXX_3.4 @@ -1401,6 +1445,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 @@ -1665,6 +1710,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSs7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4 @@ -2078,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -2564,7 +2614,9 @@ FUNC:_ZNSt15_List_node_base7_M_hookEPS_@@GLIBCXX_3.4.14 FUNC:_ZNSt15_List_node_base7reverseEv@@GLIBCXX_3.4 FUNC:_ZNSt15_List_node_base8transferEPS_S0_@@GLIBCXX_3.4 FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14 +FUNC:_ZNSt15__exception_ptr13exception_ptr10_M_releaseEv@@CXXABI_1.3.13 FUNC:_ZNSt15__exception_ptr13exception_ptr4swapERS0_@@CXXABI_1.3.3 +FUNC:_ZNSt15__exception_ptr13exception_ptr9_M_addrefEv@@CXXABI_1.3.13 FUNC:_ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptr13exception_ptrC1EPv@@CXXABI_1.3.11 FUNC:_ZNSt15__exception_ptr13exception_ptrC1ERKS0_@@CXXABI_1.3.3 @@ -2788,6 +2840,7 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Em@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16__time_get_state17_M_finalize_stateEP2tm@@GLIBCXX_3.4.30 FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 @@ -2898,7 +2951,8 @@ FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEaSEOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18condition_variable10notify_allEv@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variable10notify_oneEv@@GLIBCXX_3.4.11 -FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@@GLIBCXX_3.4.11 +FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@@GLIBCXX_3.4.30 +FUNC:_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableC1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableD1Ev@@GLIBCXX_3.4.11 @@ -3000,6 +3054,7 @@ FUNC:_ZNSt25__codecvt_utf8_utf16_baseIwED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt25__codecvt_utf8_utf16_baseIwED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj@@GLIBCXX_3.4.21 FUNC:_ZNSt28__atomic_futex_unsigned_base19_M_futex_wait_untilEPjjbNSt6chrono8durationIlSt5ratioILl1ELl1EEEENS2_IlS3_ILl1ELl1000000000EEEE@@GLIBCXX_3.4.21 +FUNC:_ZNSt28__atomic_futex_unsigned_base26_M_futex_wait_until_steadyEPjjbNSt6chrono8durationIlSt5ratioILl1ELl1EEEENS2_IlS3_ILl1ELl1000000000EEEE@@GLIBCXX_3.4.29 FUNC:_ZNSt3_V214error_categoryD0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V214error_categoryD1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V214error_categoryD2Ev@@GLIBCXX_3.4.21 @@ -3056,9 +3111,18 @@ FUNC:_ZNSt6__norm15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.14 FUNC:_ZNSt6__norm15_List_node_base7reverseEv@@GLIBCXX_3.4.9 FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9 FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14 +FUNC:_ZNSt6chrono11locate_zoneESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono11reload_tzdbEv@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono12current_zoneEv@@GLIBCXX_3.4.31 FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11 +FUNC:_ZNSt6chrono13get_tzdb_listEv@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono14remote_versionB5cxx11Ev@@GLIBCXX_3.4.31 FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19 FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19 +FUNC:_ZNSt6chrono8get_tzdbEv@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono9tzdb_list11erase_afterENS0_14const_iteratorE@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono9tzdb_list14const_iteratorppEi@@GLIBCXX_3.4.31 +FUNC:_ZNSt6chrono9tzdb_list14const_iteratorppEv@@GLIBCXX_3.4.31 FUNC:_ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@@GLIBCXX_3.4 FUNC:_ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@@GLIBCXX_3.4 FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4 @@ -3155,11 +3219,14 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3174,6 +3241,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcPKcS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcS5_S5_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE14_M_replace_auxEmmmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE15_M_replace_coldEPcmPKcmm@@GLIBCXX_3.4.31 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE17_S_to_string_viewESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE18_M_construct_aux_2Emc@@GLIBCXX_3.4.21 @@ -3245,6 +3313,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEmmRKS4_@@GLIB FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEmmRKS4_mm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7replaceEmmmc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8_M_eraseEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8pop_backEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm@@GLIBCXX_3.4.21 @@ -3305,11 +3374,14 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3324,6 +3396,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS5_S5_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE15_M_replace_coldEPwmPKwmm@@GLIBCXX_3.4.31 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE18_M_construct_aux_2Emw@@GLIBCXX_3.4.21 @@ -3395,6 +3468,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEmmRKS4_@@GLIB FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEmmRKS4_mm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE7reserveEv@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8_M_eraseEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_M_appendEPKwm@@GLIBCXX_3.4.21 @@ -3470,6 +3544,7 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE14__xfer_bufptrsD1E FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE14__xfer_bufptrsD2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE15_M_update_egptrEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4.21 @@ -3481,15 +3556,25 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCX FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 @@ -3501,6 +3586,7 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE14__xfer_bufptrsD1E FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE14__xfer_bufptrsD2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE15_M_update_egptrEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4.21 @@ -3512,15 +3598,25 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCX FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE9underflowEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_@@GLIBCXX_3.4.29 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 @@ -3596,85 +3692,115 @@ FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EEC2ERKNS_12basic_stringIcSt11char_tra FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1117moneypunct_bynameIwLb1EED2Ev@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEONS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKNS_12basic_stringIcS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EONS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEaSEOS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEONS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strERKNS_12basic_stringIwS2_S3_EE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EONS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_OpenmodeRKS3_@@GLIBCXX_3.4.29 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 @@ -3823,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4015,6 +4143,9 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11 FUNC:_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11 +FUNC:_ZSt10from_charsPKcS0_RdSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt10from_charsPKcS0_ReSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt10from_charsPKcS0_RfSt12chars_format@@GLIBCXX_3.4.29 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvmm@@CXXABI_1.3.5 FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 @@ -4025,6 +4156,50 @@ FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@@GLIBCX FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvmm@@CXXABI_1.3.5 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIcLb0EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIcLb1EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIwLb0EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx1110moneypunctIwLb1EEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx117collateIcEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx117collateIwEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118messagesIcEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118messagesIwEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118numpunctIcEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118numpunctIwEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx118time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetINSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIcLb0EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIcLb1EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIwLb0EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt10moneypunctIwLb1EEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt11__timepunctIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt11__timepunctIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt5ctypeIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt5ctypeIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7codecvtIcc11__mbstate_tEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7codecvtIwc11__mbstate_tEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7collateIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7collateIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8messagesIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8messagesIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8numpunctIcEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8numpunctIwEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 +FUNC:_ZSt15__try_use_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEPKT_RKSt6locale@@GLIBCXX_3.4.31 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 @@ -4035,6 +4210,8 @@ FUNC:_ZSt16__throw_bad_castv@@GLIBCXX_3.4 FUNC:_ZSt16generic_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt17__copy_streambufsIcSt11char_traitsIcEElPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.8 FUNC:_ZSt17__copy_streambufsIwSt11char_traitsIwEElPSt15basic_streambufIT_T0_ES6_@@GLIBCXX_3.4.8 +FUNC:_ZSt17__istream_extractIwSt11char_traitsIwEEvRSt13basic_istreamIT_T0_EPS3_l@@GLIBCXX_3.4.29 +FUNC:_ZSt17__istream_extractRSiPcl@@GLIBCXX_3.4.29 FUNC:_ZSt17__throw_bad_allocv@@GLIBCXX_3.4 FUNC:_ZSt17__verify_groupingPKcmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZSt17__verify_groupingPKcmRKSs@@GLIBCXX_3.4.10 @@ -4060,18 +4237,25 @@ FUNC:_ZSt20__throw_future_errori@@GLIBCXX_3.4.14 FUNC:_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt20__throw_out_of_rangePKc@@GLIBCXX_3.4 FUNC:_ZSt20__throw_system_errori@@GLIBCXX_3.4.11 +FUNC:_ZSt20__to_chars_float16_tPcS_fSt12chars_format@@GLIBCXX_3.4.31 FUNC:_ZSt21_Rb_tree_rotate_rightPSt18_Rb_tree_node_baseRS0_@@GLIBCXX_3.4 FUNC:_ZSt21__copy_streambufs_eofIcSt11char_traitsIcEElPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9 FUNC:_ZSt21__copy_streambufs_eofIwSt11char_traitsIwEElPSt15basic_streambufIT_T0_ES6_Rb@@GLIBCXX_3.4.9 +FUNC:_ZSt21__glibcxx_assert_failPKciS0_S0_@@GLIBCXX_3.4.30 FUNC:_ZSt21__throw_bad_exceptionv@@GLIBCXX_3.4 FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 +FUNC:_ZSt21__to_chars_bfloat16_tPcS_fSt12chars_format@@GLIBCXX_3.4.31 +FUNC:_ZSt21ios_base_library_initv@@GLIBCXX_3.4.32 +FUNC:_ZSt22__from_chars_float16_tPKcS0_RfSt12chars_format@@GLIBCXX_3.4.31 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 +FUNC:_ZSt23__from_chars_bfloat16_tPKcS0_RfSt12chars_format@@GLIBCXX_3.4.31 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt25notify_all_at_thread_exitRSt18condition_variableSt11unique_lockISt5mutexE@@GLIBCXX_3.4.21 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 +FUNC:_ZSt28__throw_bad_array_new_lengthv@@GLIBCXX_3.4.29 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 FUNC:_ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4 FUNC:_ZSt2wsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_@@GLIBCXX_3.4 @@ -4089,6 +4273,15 @@ FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cx FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EES4_@@GLIBCXX_3.4.21 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCXX_3.4 FUNC:_ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCXX_3.4 +FUNC:_ZSt8to_charsPcS_d@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_dSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_dSt12chars_formati@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_e@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_eSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_eSt12chars_formati@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_f@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_fSt12chars_format@@GLIBCXX_3.4.29 +FUNC:_ZSt8to_charsPcS_fSt12chars_formati@@GLIBCXX_3.4.29 FUNC:_ZSt9has_facetINSt7__cxx1110moneypunctIcLb0EEEEbRKSt6locale@@GLIBCXX_3.4.21 FUNC:_ZSt9has_facetINSt7__cxx1110moneypunctIwLb0EEEEbRKSt6locale@@GLIBCXX_3.4.21 FUNC:_ZSt9has_facetINSt7__cxx117collateIcEEEbRKSt6locale@@GLIBCXX_3.4.21 @@ -4347,6 +4540,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4388,6 +4582,9 @@ OBJECT:0:CXXABI_1.3.1 OBJECT:0:CXXABI_1.3.10 OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 +OBJECT:0:CXXABI_1.3.13 +OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4419,7 +4616,13 @@ OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.28 +OBJECT:0:GLIBCXX_3.4.29 OBJECT:0:GLIBCXX_3.4.3 +OBJECT:0:GLIBCXX_3.4.30 +OBJECT:0:GLIBCXX_3.4.31 +OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 @@ -4491,6 +4694,11 @@ OBJECT:15:_ZTSSt8messagesIcE@@GLIBCXX_3.4 OBJECT:15:_ZTSSt8messagesIwE@@GLIBCXX_3.4 OBJECT:15:_ZTSSt8numpunctIcE@@GLIBCXX_3.4 OBJECT:15:_ZTSSt8numpunctIwE@@GLIBCXX_3.4 +OBJECT:16:_ZTIDF128_@@CXXABI_1.3.14 +OBJECT:16:_ZTIDF32_@@CXXABI_1.3.14 +OBJECT:16:_ZTIDF32x@@CXXABI_1.3.14 +OBJECT:16:_ZTIDF64_@@CXXABI_1.3.14 +OBJECT:16:_ZTIDF64x@@CXXABI_1.3.14 OBJECT:16:_ZTIDd@@CXXABI_1.3.4 OBJECT:16:_ZTIDe@@CXXABI_1.3.4 OBJECT:16:_ZTIDf@@CXXABI_1.3.4 @@ -5127,6 +5335,11 @@ OBJECT:30:_ZTSSt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:30:_ZTSSt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:32:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 OBJECT:32:_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 +OBJECT:32:_ZTIPDF128_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPDF32_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPDF32x@@CXXABI_1.3.14 +OBJECT:32:_ZTIPDF64_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPDF64x@@CXXABI_1.3.14 OBJECT:32:_ZTIPDd@@CXXABI_1.3.4 OBJECT:32:_ZTIPDe@@CXXABI_1.3.4 OBJECT:32:_ZTIPDf@@CXXABI_1.3.4 @@ -5134,6 +5347,11 @@ OBJECT:32:_ZTIPDi@@CXXABI_1.3.3 OBJECT:32:_ZTIPDn@@CXXABI_1.3.5 OBJECT:32:_ZTIPDs@@CXXABI_1.3.3 OBJECT:32:_ZTIPDu@@CXXABI_1.3.12 +OBJECT:32:_ZTIPKDF128_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPKDF32_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPKDF32x@@CXXABI_1.3.14 +OBJECT:32:_ZTIPKDF64_@@CXXABI_1.3.14 +OBJECT:32:_ZTIPKDF64x@@CXXABI_1.3.14 OBJECT:32:_ZTIPKDd@@CXXABI_1.3.4 OBJECT:32:_ZTIPKDe@@CXXABI_1.3.4 OBJECT:32:_ZTIPKDf@@CXXABI_1.3.4 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt index 4228453..938e914 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt @@ -2124,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3221,6 +3225,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3374,6 +3380,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3941,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4617,6 +4627,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt index 2470f81..01f606c 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt @@ -2124,6 +2124,10 @@ FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policy FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34 +FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -3221,6 +3225,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3374,6 +3380,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwm@@GLIBCXX_3.4.34 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwm@@GLIBCXX_3.4.34 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 @@ -3941,6 +3949,8 @@ FUNC:_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15 FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15 +FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34 +FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34 FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4 @@ -4617,6 +4627,7 @@ OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 OBJECT:0:GLIBCXX_3.4.33 +OBJECT:0:GLIBCXX_3.4.34 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/doc/html/manual/using_concurrency.html b/libstdc++-v3/doc/html/manual/using_concurrency.html index d21f158..d570d3a 100644 --- a/libstdc++-v3/doc/html/manual/using_concurrency.html +++ b/libstdc++-v3/doc/html/manual/using_concurrency.html @@ -126,6 +126,16 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) the container the iterator refers to (for example incrementing a list iterator must access the pointers between nodes, which are part of the container and so conflict with other accesses to the container). + </p><p> + The Copy-On-Write <code class="classname">std::string</code> implementation + used before GCC 5 (and with + <a class="link" href="using_dual_abi.html" title="Dual ABI">_GLIBCXX_USE_CXX11_ABI=0</a>) + is not a standard container and does not conform to the data race + avoidance rules described above. For the Copy-On-Write + <code class="classname">std::string</code>, non-const member functions such as + <code class="function">begin()</code> are considered to be modifying accesses + and so must not be used concurrently with any other accesses to the + same object. </p><p>Programs which follow the rules above will not encounter data races in library code, even when using library types which share state between distinct objects. In the example below the diff --git a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml index ac607fc..b924545 100644 --- a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml +++ b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml @@ -895,7 +895,7 @@ indicate a place that may require attention for multi-thread safety. Examples: <code>_M_num_elements _M_initialize ()</code> - Static data members, constants, and enumerations: <literal>_S_.*</literal> + Static data and function members, constants, and enumerations: <literal>_S_.*</literal> Examples: <code>_S_max_elements _S_default_value</code> diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index 7ca3a3f..bf92c49 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -2069,6 +2069,18 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) of the container and so conflict with other accesses to the container). </para> + <para> + The Copy-On-Write <classname>std::string</classname> implementation + used before GCC 5 (and with + <link linkend="manual.intro.using.abi">_GLIBCXX_USE_CXX11_ABI=0</link>) + is not a standard container and does not conform to the data race + avoidance rules described above. For the Copy-On-Write + <classname>std::string</classname>, non-const member functions such as + <function>begin()</function> are considered to be modifying accesses + and so must not be used concurrently with any other accesses to the + same object. + </para> + <para>Programs which follow the rules above will not encounter data races in library code, even when using library types which share state between distinct objects. In the example below the diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 886e7e6..c90bd09 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -51,6 +51,11 @@ # include <string_view> #endif +#if __glibcxx_containers_ranges // C++ >= 23 +# include <bits/ranges_algobase.h> // ranges::copy +# include <bits/ranges_util.h> // ranges::subrange +#endif + #if __cplusplus > 202302L # include <charconv> #endif @@ -468,6 +473,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 traits_type::assign(__d, __n, __c); } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // _S_copy_chars is a separate template to permit specialization // to optimize for the common case of pointers as iterators. template<class _Iterator> @@ -475,31 +482,69 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 static void _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) { +#if __cplusplus >= 201103L + using _IterBase = decltype(std::__niter_base(__k1)); + if constexpr (__or_<is_same<_IterBase, _CharT*>, + is_same<_IterBase, const _CharT*>>::value) + _S_copy(__p, std::__niter_base(__k1), __k2 - __k1); +#if __cpp_lib_concepts + else if constexpr (requires { + requires contiguous_iterator<_Iterator>; + { std::to_address(__k1) } + -> convertible_to<const _CharT*>; + }) + { + const auto __d = __k2 - __k1; + (void) (__k1 + __d); // See P3349R1 + _S_copy(__p, std::to_address(__k1), static_cast<size_type>(__d)); + } +#endif + else +#endif for (; __k1 != __k2; ++__k1, (void)++__p) - traits_type::assign(*__p, *__k1); // These types are off. + traits_type::assign(*__p, static_cast<_CharT>(*__k1)); } +#pragma GCC diagnostic pop - _GLIBCXX20_CONSTEXPR +#if __cplusplus < 201103L || defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS static void - _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) _GLIBCXX_NOEXCEPT + _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) { _S_copy_chars(__p, __k1.base(), __k2.base()); } - _GLIBCXX20_CONSTEXPR static void _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) - _GLIBCXX_NOEXCEPT { _S_copy_chars(__p, __k1.base(), __k2.base()); } - _GLIBCXX20_CONSTEXPR static void - _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) _GLIBCXX_NOEXCEPT + _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) { _S_copy(__p, __k1, __k2 - __k1); } - _GLIBCXX20_CONSTEXPR static void _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) - _GLIBCXX_NOEXCEPT { _S_copy(__p, __k1, __k2 - __k1); } +#endif + +#if __glibcxx_containers_ranges // C++ >= 23 + // pre: __n == ranges::distance(__rg). __p+[0,__n) is a valid range. + template<typename _Rg> + static constexpr void + _S_copy_range(pointer __p, _Rg&& __rg, size_type __n) + { + if constexpr (requires { + requires ranges::contiguous_range<_Rg>; + { ranges::data(std::forward<_Rg>(__rg)) } + -> convertible_to<const _CharT*>; + }) + _S_copy(__p, ranges::data(std::forward<_Rg>(__rg)), __n); + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + traits_type::assign(*__p++, static_cast<_CharT>(*__first)); + } + } +#endif _GLIBCXX20_CONSTEXPR static int @@ -717,6 +762,33 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 __str._M_set_length(0); } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Construct a string from a range. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr + basic_string(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) + : basic_string(__a) + { + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = static_cast<size_type>(ranges::distance(__rg)); + reserve(__n); + _S_copy_range(_M_data(), std::forward<_Rg>(__rg), __n); + _M_set_length(__n); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + push_back(*__first); + } + } +#endif + /** * @brief Construct string from an initializer %list. * @param __l std::initializer_list of characters. @@ -1526,6 +1598,58 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 append(size_type __n, _CharT __c) { return _M_replace_aux(this->size(), size_type(0), __n, __c); } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Append a range to the string. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr basic_string& + append_range(_Rg&& __rg) + { + // N.B. __rg may overlap with *this, so we must copy from __rg before + // existing elements or iterators referring to *this are invalidated. + // e.g. in s.append_range(views::concat(s, str)), rg overlaps s. + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __len = size_type(ranges::distance(__rg)); + + // Don't care if this addition wraps around, we check it below: + const size_type __newlen = size() + __len; + + if ((capacity() - size()) >= __len) + _S_copy_range(_M_data() + size(), std::forward<_Rg>(__rg), + __len); + else + { + _M_check_length(0, __len, "basic_string::append_range"); + basic_string __s(_M_get_allocator()); + __s.reserve(__newlen); + _S_copy_range(__s._M_data() + size(), std::forward<_Rg>(__rg), + __len); + _S_copy(__s._M_data(), _M_data(), size()); + if (!_M_is_local()) + _M_destroy(_M_allocated_capacity); + _M_data(__s._M_data()); + _M_capacity(__s._M_allocated_capacity); + __s._M_data(__s._M_local_data()); + __s._M_length(0); + } + _M_set_length(__newlen); // adds null-terminator + } + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + append(__s); + } + return *this; + } +#endif + #if __cplusplus >= 201103L /** * @brief Append an initializer_list of characters. @@ -1785,6 +1909,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 { return this->replace(begin(), end(), __first, __last); } #endif +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Assign a range to the string. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr basic_string& + assign_range(_Rg&& __rg) + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + assign(std::move(__s)); + return *this; + } +#endif + #if __cplusplus >= 201103L /** * @brief Set value to an initializer_list of characters. @@ -1934,6 +2077,37 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 { this->replace(__p, __p, __beg, __end); } #endif +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Insert a range into the string. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr iterator + insert_range(const_iterator __p, _Rg&& __rg) + { + auto __pos = __p - cbegin(); + + if constexpr (ranges::forward_range<_Rg>) + if (ranges::empty(__rg)) + return begin() + __pos; + + + if (__p == cend()) + append_range(std::forward<_Rg>(__rg)); + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + insert(__pos, __s); + } + return begin() + __pos; + } +#endif + #if __cplusplus >= 201103L /** * @brief Insert an initializer_list of characters. @@ -2522,6 +2696,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 __k1.base(), __k2 - __k1); } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Replace part of the string with a range. + * @param __rg A range of values that are convertible to `value_type`. + * @since C++23 + * + * The range `__rg` is allowed to overlap with `*this`. + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + constexpr basic_string& + replace_with_range(const_iterator __i1, const_iterator __i2, _Rg&& __rg) + { + if (__i1 == cend()) + append_range(std::forward<_Rg>(__rg)); + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + _M_get_allocator()); + replace(__i1, __i2, __s); + } + return *this; + } +#endif + #if __cplusplus >= 201103L /** * @brief Replace range of characters with initializer_list. @@ -3599,6 +3797,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 typename basic_string<_CharT, _Traits, _Allocator>::size_type, const _Allocator& = _Allocator()) -> basic_string<_CharT, _Traits, _Allocator>; + +#if __glibcxx_containers_ranges // C++ >= 23 + template<ranges::input_range _Rg, + typename _Allocator = allocator<ranges::range_value_t<_Rg>>> + basic_string(from_range_t, _Rg&&, _Allocator = _Allocator()) + -> basic_string<ranges::range_value_t<_Rg>, + char_traits<ranges::range_value_t<_Rg>>, + _Allocator>; +#endif _GLIBCXX_END_NAMESPACE_CXX11 #endif diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index 02230ac..bca55bc 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -210,7 +210,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_data(__another); _M_capacity(__capacity); } - traits_type::assign(_M_data()[__len++], *__beg); + traits_type::assign(_M_data()[__len++], + static_cast<_CharT>(*__beg)); ++__beg; } diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index d872109..b7f6f5f 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -57,21 +57,7 @@ namespace chrono /// @cond undocumented namespace __detail { - // STATICALLY-WIDEN, see C++20 [time.general] - // It doesn't matter for format strings (which can only be char or wchar_t) - // but this returns the narrow string for anything that isn't wchar_t. This - // is done because const char* can be inserted into any ostream type, and - // will be widened at runtime if necessary. - template<typename _CharT> - consteval auto - _Widen(const char* __narrow, const wchar_t* __wide) - { - if constexpr (is_same_v<_CharT, wchar_t>) - return __wide; - else - return __narrow; - } -#define _GLIBCXX_WIDEN_(C, S) ::std::chrono::__detail::_Widen<C>(S, L##S) +#define _GLIBCXX_WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) #define _GLIBCXX_WIDEN(S) _GLIBCXX_WIDEN_(_CharT, S) template<typename _Period, typename _CharT> diff --git a/libstdc++-v3/include/bits/cow_string.h b/libstdc++-v3/include/bits/cow_string.h index d5b3979..f9df2be 100644 --- a/libstdc++-v3/include/bits/cow_string.h +++ b/libstdc++-v3/include/bits/cow_string.h @@ -423,7 +423,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) { for (; __k1 != __k2; ++__k1, (void)++__p) - traits_type::assign(*__p, *__k1); // These types are off. + traits_type::assign(*__p, static_cast<_CharT>(*__k1)); } static void @@ -639,6 +639,48 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Construct a string from a range. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + basic_string(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) + : basic_string(__a) + { + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) + { + const auto __n = static_cast<size_type>(ranges::distance(__rg)); + if (__n == 0) + return; + + reserve(__n); + pointer __p = _M_data(); + if constexpr (requires { + requires ranges::contiguous_range<_Rg>; + { ranges::data(std::forward<_Rg>(__rg)) } + -> convertible_to<const _CharT*>; + }) + _M_copy(__p, ranges::data(std::forward<_Rg>(__rg)), __n); + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + traits_type::assign(*__p++, static_cast<_CharT>(*__first)); + } + _M_rep()->_M_set_length_and_sharable(__n); + } + else + { + auto __first = ranges::begin(__rg); + const auto __last = ranges::end(__rg); + for (; __first != __last; ++__first) + push_back(*__first); + } + } +#endif + /** * @brief Construct string from an initializer %list. * @param __l std::initializer_list of characters. @@ -1314,6 +1356,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_string& append(size_type __n, _CharT __c); +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Append a range to the string. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + basic_string& + append_range(_Rg&& __rg) + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + get_allocator()); + append(__s); + return *this; + } +#endif + #if __cplusplus >= 201103L /** * @brief Append an initializer_list of characters. @@ -1485,6 +1543,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION assign(_InputIterator __first, _InputIterator __last) { return this->replace(_M_ibegin(), _M_iend(), __first, __last); } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Set value to a range of characters. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + basic_string& + assign_range(_Rg&& __rg) + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + get_allocator()); + assign(std::move(__s)); + return *this; + } +#endif + #if __cplusplus >= 201103L /** * @brief Set value to an initializer_list of characters. @@ -1562,6 +1636,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION insert(iterator __p, _InputIterator __beg, _InputIterator __end) { this->replace(__p, __p, __beg, __end); } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Insert a range into the string. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + iterator + insert_range(const_iterator __p, _Rg&& __rg) + { + auto __pos = __p - cbegin(); + + if constexpr (ranges::forward_range<_Rg>) + if (ranges::empty(__rg)) + return begin() + __pos; + + if (__p == cend()) + append_range(std::forward<_Rg>(__rg)); + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + get_allocator()); + insert(__pos, __s); + } + return begin() + __pos; + } +#endif + #if __cplusplus >= 201103L /** * @brief Insert an initializer_list of characters. @@ -2072,6 +2173,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __k1.base(), __k2 - __k1); } +#if __glibcxx_containers_ranges // C++ >= 23 + /** + * @brief Replace part of the string with a range. + * @since C++23 + */ + template<__detail::__container_compatible_range<_CharT> _Rg> + basic_string& + replace_with_range(const_iterator __i1, const_iterator __i2, _Rg&& __rg) + { + if (__i1 == cend()) + append_range(std::forward<_Rg>(__rg)); + else + { + basic_string __s(from_range, std::forward<_Rg>(__rg), + get_allocator()); + replace(__i1 - cbegin(), __i2 - __i1, __s); + } + return *this; + } +#endif + #if __cplusplus >= 201103L /** * @brief Replace range of characters with initializer_list. diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc index 87ea1ce..dabb6ec 100644 --- a/libstdc++-v3/include/bits/deque.tcc +++ b/libstdc++-v3/include/bits/deque.tcc @@ -873,7 +873,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::forward_range _Rg> auto __advance_dist(_Rg& __rg) { @@ -1022,7 +1022,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER __guard.__n = size(); } } -#endif // ranges_to_container +#endif // containers_ranges template<typename _Tp, typename _Alloc> void diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h index 84882a5..8bcfb80 100644 --- a/libstdc++-v3/include/bits/forward_list.h +++ b/libstdc++-v3/include/bits/forward_list.h @@ -46,7 +46,7 @@ #include <ext/alloc_traits.h> #include <ext/aligned_buffer.h> #include <debug/assertions.h> -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. # include <bits/ranges_util.h> // ranges::subrange #endif @@ -896,7 +896,7 @@ namespace __fwdlist : _Base(_Node_alloc_type(__al)) { _M_range_initialize(__first, __last); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a forward_list from a range. * @param __rg An input range with elements that are convertible to @@ -918,7 +918,7 @@ namespace __fwdlist __to = __to->_M_next; } } -#endif // ranges_to_container +#endif // containers_ranges /** * @brief The %forward_list copy constructor. @@ -1071,7 +1071,7 @@ namespace __fwdlist } #pragma GCC diagnostic pop -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Assign a range to a forward_list. * @since C++23 @@ -1102,7 +1102,7 @@ namespace __fwdlist insert_range_after(__prev, ranges::subrange(std::move(__first), __last)); } -#endif // ranges_to_container +#endif // containers_ranges #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr @@ -1345,7 +1345,7 @@ namespace __fwdlist push_front(_Tp&& __val) { this->_M_insert_after(cbefore_begin(), std::move(__val)); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a range at the beginning of a forward_list. * @param __rg An input range with elements that are convertible to @@ -1370,7 +1370,7 @@ namespace __fwdlist if (!__tmp.empty()) splice_after(before_begin(), __tmp); } -#endif // ranges_to_container +#endif // containers_ranges /** * @brief Removes first element. @@ -1491,7 +1491,7 @@ namespace __fwdlist insert_after(const_iterator __pos, std::initializer_list<_Tp> __il) { return insert_after(__pos, __il.begin(), __il.end()); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a rangeinto a forward_list. * @param __position An iterator. @@ -1515,7 +1515,7 @@ namespace __fwdlist get_allocator()); return _M_splice_after(__position, __tmp.before_begin(), __tmp.end()); } -#endif // ranges_to_container +#endif // containers_ranges /** * @brief Removes the element pointed to by the iterator following @@ -1953,7 +1953,7 @@ namespace __fwdlist forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator()) -> forward_list<_ValT, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Allocator = allocator<ranges::range_value_t<_Rg>>> forward_list(from_range_t, _Rg&&, _Allocator = _Allocator()) diff --git a/libstdc++-v3/include/bits/iterator_concepts.h b/libstdc++-v3/include/bits/iterator_concepts.h index e36556d..3b73ff9 100644 --- a/libstdc++-v3/include/bits/iterator_concepts.h +++ b/libstdc++-v3/include/bits/iterator_concepts.h @@ -829,11 +829,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using __projected_Proj = _Proj; }; }; - - // Optimize the common case of the projection being std::identity. - template<typename _Iter> - struct __projected<_Iter, identity> - { using __type = _Iter; }; } // namespace __detail /// [projected], projected diff --git a/libstdc++-v3/include/bits/ranges_base.h b/libstdc++-v3/include/bits/ranges_base.h index 13bfbb3..488907d 100644 --- a/libstdc++-v3/include/bits/ranges_base.h +++ b/libstdc++-v3/include/bits/ranges_base.h @@ -41,7 +41,7 @@ #include <bits/max_size_type.h> #include <bits/version.h> -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/utility.h> // for tuple_element_t #endif @@ -1085,7 +1085,9 @@ namespace ranges #if __glibcxx_ranges_to_container // C++ >= 23 struct from_range_t { explicit from_range_t() = default; }; inline constexpr from_range_t from_range{}; +#endif +#if __glibcxx_containers_ranges // C++ >= 23 /// @cond undocumented template<typename _T1, typename _T2> struct pair; diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 03f6434..8cc2920 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -896,7 +896,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a vector from a range. * @param __rg A range of values that are convertible to `value_type`. @@ -1026,7 +1026,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Assign a range to the vector. * @param __rg A range of values that are convertible to `value_type`. @@ -1347,7 +1347,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { return this->insert(__p, __l.begin(), __l.end()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a range into the vector. * @param __rg A range of values that are convertible to `bool`. @@ -1458,7 +1458,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER insert(end(), __tmp.begin(), __tmp.end()); } } -#endif // ranges_to_container +#endif // containers_ranges _GLIBCXX20_CONSTEXPR void diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h index 94e0886..8d8ee57 100644 --- a/libstdc++-v3/include/bits/stl_deque.h +++ b/libstdc++-v3/include/bits/stl_deque.h @@ -1022,7 +1022,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a deque from a range. * @param __rg A range of values that are convertible to `value_type`. @@ -1150,7 +1150,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Assign a range to the deque. * @param __rg A range of values that are convertible to `value_type`. @@ -1194,7 +1194,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER emplace_back(*__first); } } -#endif // ranges_to_container +#endif // containers_ranges /// Get a copy of the memory allocation object. @@ -1824,7 +1824,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a range into the deque. * @param __rg A range of values that are convertible to `value_type`. @@ -1854,7 +1854,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER template<__detail::__container_compatible_range<_Tp> _Rg> void append_range(_Rg&& __rg); -#endif // ranges_to_container +#endif // containers_ranges /** * @brief Remove element at given position. @@ -2386,7 +2386,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER deque(_InputIterator, _InputIterator, _Allocator = _Allocator()) -> deque<_ValT, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Alloc = allocator<ranges::range_value_t<_Rg>>> deque(from_range_t, _Rg&&, _Alloc = _Alloc()) diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index 82ccb50..d27824c 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -66,7 +66,7 @@ #include <bits/ptr_traits.h> #include <ext/aligned_buffer.h> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. # include <bits/ranges_util.h> // ranges::subrange #endif @@ -1263,7 +1263,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a list from a range. * @since C++23 @@ -1360,7 +1360,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Assign a range to a list. * @since C++23 @@ -1726,7 +1726,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a range at the beginning of a list. * @param __rg An input range of elements that can be converted to @@ -1964,7 +1964,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a range into a list. * @param __position An iterator. @@ -2594,7 +2594,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 list(_InputIterator, _InputIterator, _Allocator = _Allocator()) -> list<_ValT, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Allocator = allocator<ranges::range_value_t<_Rg>>> list(from_range_t, _Rg&&, _Allocator = _Allocator()) diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h index 9381a79..006ff46 100644 --- a/libstdc++-v3/include/bits/stl_map.h +++ b/libstdc++-v3/include/bits/stl_map.h @@ -62,7 +62,7 @@ #include <initializer_list> #include <tuple> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. #endif @@ -308,7 +308,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : _M_t(__comp, _Pair_alloc_type(__a)) { _M_t._M_insert_range_unique(__first, __last); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds a %map from a range. * @since C++23 @@ -903,7 +903,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { insert(__list.begin(), __list.end()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -1536,7 +1536,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER map(initializer_list<pair<_Key, _Tp>>, _Allocator) -> map<_Key, _Tp, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<__detail::__range_key_type<_Rg>>, __allocator_like _Alloc = diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h index 8fca3a4..4ee4a84 100644 --- a/libstdc++-v3/include/bits/stl_multimap.h +++ b/libstdc++-v3/include/bits/stl_multimap.h @@ -60,7 +60,7 @@ #if __cplusplus >= 201103L #include <initializer_list> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. #endif @@ -297,7 +297,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : _M_t(__comp, _Pair_alloc_type(__a)) { _M_t._M_insert_range_equal(__first, __last); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds a %multimap from a range. * @since C++23 @@ -655,7 +655,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { this->insert(__l.begin(), __l.end()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -1159,7 +1159,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER multimap(initializer_list<pair<_Key, _Tp>>, _Allocator) -> multimap<_Key, _Tp, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<__detail::__range_key_type<_Rg>>, __allocator_like _Alloc = diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h index 7030f28..31451ab 100644 --- a/libstdc++-v3/include/bits/stl_multiset.h +++ b/libstdc++-v3/include/bits/stl_multiset.h @@ -60,7 +60,7 @@ #if __cplusplus >= 201103L #include <initializer_list> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. #endif @@ -274,7 +274,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : _M_t(_Key_alloc_type(__a)) { _M_t._M_insert_range_equal(__first, __last); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds a %multiset from a range. * @since C++23 @@ -588,7 +588,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { this->insert(__l.begin(), __l.end()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -996,7 +996,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER multiset(initializer_list<_Key>, _Allocator) -> multiset<_Key, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<ranges::range_value_t<_Rg>>, __allocator_like _Alloc = std::allocator<ranges::range_value_t<_Rg>>> diff --git a/libstdc++-v3/include/bits/stl_queue.h b/libstdc++-v3/include/bits/stl_queue.h index 2a4b629..554e076 100644 --- a/libstdc++-v3/include/bits/stl_queue.h +++ b/libstdc++-v3/include/bits/stl_queue.h @@ -61,7 +61,7 @@ #if __cplusplus >= 201103L # include <bits/uses_allocator.h> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <ranges> // ranges::to # include <bits/ranges_algobase.h> // ranges::copy #endif @@ -213,7 +213,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : c(__first, __last, __a) { } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a queue from a range. * @since C++23 @@ -326,7 +326,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> void push_range(_Rg&& __rg) @@ -397,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION -> queue<_ValT, deque<_ValT, _Allocator>>; #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg> queue(from_range_t, _Rg&&) -> queue<ranges::range_value_t<_Rg>>; @@ -766,7 +766,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a priority_queue from a range. * @since C++23 @@ -849,7 +849,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> void push_range(_Rg&& __rg) @@ -924,7 +924,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION priority_queue(_Compare, _Container, _Allocator) -> priority_queue<typename _Container::value_type, _Container, _Compare>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<ranges::range_value_t<_Rg>>, __allocator_like _Alloc = std::allocator<ranges::range_value_t<_Rg>>> diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h index 124237e..0799fd0 100644 --- a/libstdc++-v3/include/bits/stl_set.h +++ b/libstdc++-v3/include/bits/stl_set.h @@ -60,7 +60,7 @@ #if __cplusplus >= 201103L #include <initializer_list> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. #endif @@ -278,7 +278,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : _M_t(_Key_alloc_type(__a)) { _M_t._M_insert_range_unique(__first, __last); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds a %set from a range. * @since C++23 @@ -603,7 +603,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { this->insert(__l.begin(), __l.end()); } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -1014,7 +1014,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER set(initializer_list<_Key>, _Allocator) -> set<_Key, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<ranges::range_value_t<_Rg>>, __allocator_like _Alloc = std::allocator<ranges::range_value_t<_Rg>>> diff --git a/libstdc++-v3/include/bits/stl_stack.h b/libstdc++-v3/include/bits/stl_stack.h index 2a274bf..7b32464 100644 --- a/libstdc++-v3/include/bits/stl_stack.h +++ b/libstdc++-v3/include/bits/stl_stack.h @@ -61,7 +61,7 @@ #if __cplusplus >= 201103L # include <bits/uses_allocator.h> #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <ranges> // ranges::to # include <bits/ranges_algobase.h> // ranges::copy #endif @@ -181,7 +181,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : c(__first, __last) { } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a stack from a range. * @since C++23 @@ -300,7 +300,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> void push_range(_Rg&& __rg) @@ -371,7 +371,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION -> stack<_ValT, deque<_ValT, _Allocator>>; #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg> stack(from_range_t, _Rg&&) -> stack<ranges::range_value_t<_Rg>>; diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 458adc9..aff9d5d 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -68,7 +68,7 @@ #if __glibcxx_concepts // C++ >= C++20 # include <bits/ranges_base.h> // ranges::distance #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_algobase.h> // ranges::copy # include <bits/ranges_util.h> // ranges::subrange #endif @@ -407,7 +407,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 // Called by insert_range, and indirectly by assign_range, append_range. // Initializes new elements in storage at __ptr and updates __ptr to // point after the last new element. @@ -763,7 +763,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a vector from a range. * @param __rg A range of values that are convertible to `bool`. @@ -926,7 +926,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Assign a range to the vector. * @param __rg A range of values that are convertible to `value_type`. @@ -982,7 +982,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } } } -#endif // ranges_to_container +#endif // containers_ranges /// Get a copy of the memory allocation object. using _Base::get_allocator; @@ -1648,7 +1648,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Insert a range into the vector. * @param __rg A range of values that are convertible to `value_type`. @@ -1769,7 +1769,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER append_range(__r); // This will take the fast path above. } } -#endif // ranges_to_container +#endif // containers_ranges /** * @brief Remove element at given position. @@ -2313,7 +2313,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER vector(_InputIterator, _InputIterator, _Allocator = _Allocator()) -> vector<_ValT, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Alloc = allocator<ranges::range_value_t<_Rg>>> vector(from_range_t, _Rg&&, _Alloc = _Alloc()) diff --git a/libstdc++-v3/include/bits/unicode-data.h b/libstdc++-v3/include/bits/unicode-data.h index fc0a4b3..0ab5ecb 100644 --- a/libstdc++-v3/include/bits/unicode-data.h +++ b/libstdc++-v3/include/bits/unicode-data.h @@ -33,7 +33,7 @@ # error "Version mismatch for Unicode static data" #endif - // Table generated by contrib/unicode/gen_std_format_width.py, + // Table generated by contrib/unicode/gen_libstdcxx_unicode_data.py, // from EastAsianWidth.txt from the Unicode standard. inline constexpr char32_t __width_edges[] = { 0x1100, 0x1160, 0x231a, 0x231c, 0x2329, 0x232b, 0x23e9, 0x23ed, @@ -64,6 +64,258 @@ 0x1faf0, 0x1faf9, 0x20000, 0x2fffe, 0x30000, 0x3fffe, }; + // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py, + // from DerivedGeneralCategory.txt from the Unicode standard. + // Entries are (code_point << 1) + escape. + inline constexpr uint32_t __escape_edges[] = { + 0x1, 0x42, 0xff, 0x142, 0x15b, 0x15c, + 0x6f1, 0x6f4, 0x701, 0x708, 0x717, 0x718, + 0x71b, 0x71c, 0x745, 0x746, 0xa61, 0xa62, + 0xaaf, 0xab2, 0xb17, 0xb1a, 0xb21, 0xb22, + 0xb91, 0xba0, 0xbd7, 0xbde, 0xbeb, 0xc0c, + 0xc39, 0xc3a, 0xdbb, 0xdbc, 0xe1d, 0xe20, + 0xe97, 0xe9a, 0xf65, 0xf80, 0xff7, 0xffa, + 0x105d, 0x1060, 0x107f, 0x1080, 0x10b9, 0x10bc, + 0x10bf, 0x10c0, 0x10d7, 0x10e0, 0x111f, 0x112e, + 0x11c5, 0x11c6, 0x1309, 0x130a, 0x131b, 0x131e, + 0x1323, 0x1326, 0x1353, 0x1354, 0x1363, 0x1364, + 0x1367, 0x136c, 0x1375, 0x1378, 0x138b, 0x138e, + 0x1393, 0x1396, 0x139f, 0x13ae, 0x13b1, 0x13b8, + 0x13bd, 0x13be, 0x13c9, 0x13cc, 0x13ff, 0x1402, + 0x1409, 0x140a, 0x1417, 0x141e, 0x1423, 0x1426, + 0x1453, 0x1454, 0x1463, 0x1464, 0x1469, 0x146a, + 0x146f, 0x1470, 0x1475, 0x1478, 0x147b, 0x147c, + 0x1487, 0x148e, 0x1493, 0x1496, 0x149d, 0x14a2, + 0x14a5, 0x14b2, 0x14bb, 0x14bc, 0x14bf, 0x14cc, + 0x14ef, 0x1502, 0x1509, 0x150a, 0x151d, 0x151e, + 0x1525, 0x1526, 0x1553, 0x1554, 0x1563, 0x1564, + 0x1569, 0x156a, 0x1575, 0x1578, 0x158d, 0x158e, + 0x1595, 0x1596, 0x159d, 0x15a0, 0x15a3, 0x15c0, + 0x15c9, 0x15cc, 0x15e5, 0x15f2, 0x1601, 0x1602, + 0x1609, 0x160a, 0x161b, 0x161e, 0x1623, 0x1626, + 0x1653, 0x1654, 0x1663, 0x1664, 0x1669, 0x166a, + 0x1675, 0x1678, 0x168b, 0x168e, 0x1693, 0x1696, + 0x169d, 0x16aa, 0x16b1, 0x16b8, 0x16bd, 0x16be, + 0x16c9, 0x16cc, 0x16f1, 0x1704, 0x1709, 0x170a, + 0x1717, 0x171c, 0x1723, 0x1724, 0x172d, 0x1732, + 0x1737, 0x1738, 0x173b, 0x173c, 0x1741, 0x1746, + 0x174b, 0x1750, 0x1757, 0x175c, 0x1775, 0x177c, + 0x1787, 0x178c, 0x1793, 0x1794, 0x179d, 0x17a0, + 0x17a3, 0x17ae, 0x17b1, 0x17cc, 0x17f7, 0x1800, + 0x181b, 0x181c, 0x1823, 0x1824, 0x1853, 0x1854, + 0x1875, 0x1878, 0x188b, 0x188c, 0x1893, 0x1894, + 0x189d, 0x18aa, 0x18af, 0x18b0, 0x18b7, 0x18ba, + 0x18bd, 0x18c0, 0x18c9, 0x18cc, 0x18e1, 0x18ee, + 0x191b, 0x191c, 0x1923, 0x1924, 0x1953, 0x1954, + 0x1969, 0x196a, 0x1975, 0x1978, 0x198b, 0x198c, + 0x1993, 0x1994, 0x199d, 0x19aa, 0x19af, 0x19ba, + 0x19bf, 0x19c0, 0x19c9, 0x19cc, 0x19e1, 0x19e2, + 0x19e9, 0x1a00, 0x1a1b, 0x1a1c, 0x1a23, 0x1a24, + 0x1a8b, 0x1a8c, 0x1a93, 0x1a94, 0x1aa1, 0x1aa8, + 0x1ac9, 0x1acc, 0x1b01, 0x1b02, 0x1b09, 0x1b0a, + 0x1b2f, 0x1b34, 0x1b65, 0x1b66, 0x1b79, 0x1b7a, + 0x1b7d, 0x1b80, 0x1b8f, 0x1b94, 0x1b97, 0x1b9e, + 0x1bab, 0x1bac, 0x1baf, 0x1bb0, 0x1bc1, 0x1bcc, + 0x1be1, 0x1be4, 0x1beb, 0x1c02, 0x1c77, 0x1c7e, + 0x1cb9, 0x1d02, 0x1d07, 0x1d08, 0x1d0b, 0x1d0c, + 0x1d17, 0x1d18, 0x1d49, 0x1d4a, 0x1d4d, 0x1d4e, + 0x1d7d, 0x1d80, 0x1d8b, 0x1d8c, 0x1d8f, 0x1d90, + 0x1d9f, 0x1da0, 0x1db5, 0x1db8, 0x1dc1, 0x1e00, + 0x1e91, 0x1e92, 0x1edb, 0x1ee2, 0x1f31, 0x1f32, + 0x1f7b, 0x1f7c, 0x1f9b, 0x1f9c, 0x1fb7, 0x2000, + 0x218d, 0x218e, 0x2191, 0x219a, 0x219d, 0x21a0, + 0x2493, 0x2494, 0x249d, 0x24a0, 0x24af, 0x24b0, + 0x24b3, 0x24b4, 0x24bd, 0x24c0, 0x2513, 0x2514, + 0x251d, 0x2520, 0x2563, 0x2564, 0x256d, 0x2570, + 0x257f, 0x2580, 0x2583, 0x2584, 0x258d, 0x2590, + 0x25af, 0x25b0, 0x2623, 0x2624, 0x262d, 0x2630, + 0x26b7, 0x26ba, 0x26fb, 0x2700, 0x2735, 0x2740, + 0x27ed, 0x27f0, 0x27fd, 0x2800, 0x2d01, 0x2d02, + 0x2d3b, 0x2d40, 0x2df3, 0x2e00, 0x2e2d, 0x2e3e, + 0x2e6f, 0x2e80, 0x2ea9, 0x2ec0, 0x2edb, 0x2edc, + 0x2ee3, 0x2ee4, 0x2ee9, 0x2f00, 0x2fbd, 0x2fc0, + 0x2fd5, 0x2fe0, 0x2ff5, 0x3000, 0x301d, 0x301e, + 0x3035, 0x3040, 0x30f3, 0x3100, 0x3157, 0x3160, + 0x31ed, 0x3200, 0x323f, 0x3240, 0x3259, 0x3260, + 0x3279, 0x3280, 0x3283, 0x3288, 0x32dd, 0x32e0, + 0x32eb, 0x3300, 0x3359, 0x3360, 0x3395, 0x33a0, + 0x33b7, 0x33bc, 0x3439, 0x343c, 0x34bf, 0x34c0, + 0x34fb, 0x34fe, 0x3515, 0x3520, 0x3535, 0x3540, + 0x355d, 0x3560, 0x359f, 0x3600, 0x369b, 0x369c, + 0x37e9, 0x37f8, 0x3871, 0x3876, 0x3895, 0x389a, + 0x3917, 0x3920, 0x3977, 0x397a, 0x3991, 0x39a0, + 0x39f7, 0x3a00, 0x3e2d, 0x3e30, 0x3e3d, 0x3e40, + 0x3e8d, 0x3e90, 0x3e9d, 0x3ea0, 0x3eb1, 0x3eb2, + 0x3eb5, 0x3eb6, 0x3eb9, 0x3eba, 0x3ebd, 0x3ebe, + 0x3efd, 0x3f00, 0x3f6b, 0x3f6c, 0x3f8b, 0x3f8c, + 0x3fa9, 0x3fac, 0x3fb9, 0x3fba, 0x3fe1, 0x3fe4, + 0x3feb, 0x3fec, 0x3fff, 0x4020, 0x4051, 0x4060, + 0x40bf, 0x40e0, 0x40e5, 0x40e8, 0x411f, 0x4120, + 0x413b, 0x4140, 0x4183, 0x41a0, 0x41e3, 0x4200, + 0x4319, 0x4320, 0x4855, 0x4880, 0x4897, 0x48c0, + 0x56e9, 0x56ec, 0x572d, 0x572e, 0x59e9, 0x59f2, + 0x5a4d, 0x5a4e, 0x5a51, 0x5a5a, 0x5a5d, 0x5a60, + 0x5ad1, 0x5ade, 0x5ae3, 0x5afe, 0x5b2f, 0x5b40, + 0x5b4f, 0x5b50, 0x5b5f, 0x5b60, 0x5b6f, 0x5b70, + 0x5b7f, 0x5b80, 0x5b8f, 0x5b90, 0x5b9f, 0x5ba0, + 0x5baf, 0x5bb0, 0x5bbf, 0x5bc0, 0x5cbd, 0x5d00, + 0x5d35, 0x5d36, 0x5de9, 0x5e00, 0x5fad, 0x5fe0, + 0x6001, 0x6002, 0x6081, 0x6082, 0x612f, 0x6132, + 0x6201, 0x620a, 0x6261, 0x6262, 0x631f, 0x6320, + 0x63cd, 0x63de, 0x643f, 0x6440, 0x1491b, 0x14920, + 0x1498f, 0x149a0, 0x14c59, 0x14c80, 0x14df1, 0x14e00, + 0x14f9d, 0x14fa0, 0x14fa5, 0x14fa6, 0x14fa9, 0x14faa, + 0x14fbb, 0x14fe4, 0x1505b, 0x15060, 0x15075, 0x15080, + 0x150f1, 0x15100, 0x1518d, 0x1519c, 0x151b5, 0x151c0, + 0x152a9, 0x152be, 0x152fb, 0x15300, 0x1539d, 0x1539e, + 0x153b5, 0x153bc, 0x153ff, 0x15400, 0x1546f, 0x15480, + 0x1549d, 0x154a0, 0x154b5, 0x154b8, 0x15587, 0x155b6, + 0x155ef, 0x15602, 0x1560f, 0x15612, 0x1561f, 0x15622, + 0x1562f, 0x15640, 0x1564f, 0x15650, 0x1565f, 0x15660, + 0x156d9, 0x156e0, 0x157dd, 0x157e0, 0x157f5, 0x15800, + 0x1af49, 0x1af60, 0x1af8f, 0x1af96, 0x1aff9, 0x1f200, + 0x1f4dd, 0x1f4e0, 0x1f5b5, 0x1f600, 0x1f60f, 0x1f626, + 0x1f631, 0x1f63a, 0x1f66f, 0x1f670, 0x1f67b, 0x1f67c, + 0x1f67f, 0x1f680, 0x1f685, 0x1f686, 0x1f68b, 0x1f68c, + 0x1f787, 0x1f7a6, 0x1fb21, 0x1fb24, 0x1fb91, 0x1fb9e, + 0x1fba1, 0x1fbe0, 0x1fc35, 0x1fc40, 0x1fca7, 0x1fca8, + 0x1fccf, 0x1fcd0, 0x1fcd9, 0x1fce0, 0x1fceb, 0x1fcec, + 0x1fdfb, 0x1fe02, 0x1ff7f, 0x1ff84, 0x1ff91, 0x1ff94, + 0x1ffa1, 0x1ffa4, 0x1ffb1, 0x1ffb4, 0x1ffbb, 0x1ffc0, + 0x1ffcf, 0x1ffd0, 0x1ffdf, 0x1fff8, 0x1fffd, 0x20000, + 0x20019, 0x2001a, 0x2004f, 0x20050, 0x20077, 0x20078, + 0x2007d, 0x2007e, 0x2009d, 0x200a0, 0x200bd, 0x20100, + 0x201f7, 0x20200, 0x20207, 0x2020e, 0x20269, 0x2026e, + 0x2031f, 0x20320, 0x2033b, 0x20340, 0x20343, 0x203a0, + 0x203fd, 0x20500, 0x2053b, 0x20540, 0x205a3, 0x205c0, + 0x205f9, 0x20600, 0x20649, 0x2065a, 0x20697, 0x206a0, + 0x206f7, 0x20700, 0x2073d, 0x2073e, 0x20789, 0x20790, + 0x207ad, 0x20800, 0x2093d, 0x20940, 0x20955, 0x20960, + 0x209a9, 0x209b0, 0x209f9, 0x20a00, 0x20a51, 0x20a60, + 0x20ac9, 0x20ade, 0x20af7, 0x20af8, 0x20b17, 0x20b18, + 0x20b27, 0x20b28, 0x20b2d, 0x20b2e, 0x20b45, 0x20b46, + 0x20b65, 0x20b66, 0x20b75, 0x20b76, 0x20b7b, 0x20b80, + 0x20be9, 0x20c00, 0x20e6f, 0x20e80, 0x20ead, 0x20ec0, + 0x20ed1, 0x20f00, 0x20f0d, 0x20f0e, 0x20f63, 0x20f64, + 0x20f77, 0x21000, 0x2100d, 0x21010, 0x21013, 0x21014, + 0x2106d, 0x2106e, 0x21073, 0x21078, 0x2107b, 0x2107e, + 0x210ad, 0x210ae, 0x2113f, 0x2114e, 0x21161, 0x211c0, + 0x211e7, 0x211e8, 0x211ed, 0x211f6, 0x21239, 0x2123e, + 0x21275, 0x2127e, 0x21281, 0x21300, 0x21371, 0x21378, + 0x213a1, 0x213a4, 0x21409, 0x2140a, 0x2140f, 0x21418, + 0x21429, 0x2142a, 0x21431, 0x21432, 0x2146d, 0x21470, + 0x21477, 0x2147e, 0x21493, 0x214a0, 0x214b3, 0x214c0, + 0x21541, 0x21580, 0x215cf, 0x215d6, 0x215ef, 0x21600, + 0x2166d, 0x21672, 0x216ad, 0x216b0, 0x216e7, 0x216f0, + 0x21725, 0x21732, 0x2173b, 0x21752, 0x21761, 0x21800, + 0x21893, 0x21900, 0x21967, 0x21980, 0x219e7, 0x219f4, + 0x21a51, 0x21a60, 0x21a75, 0x21a80, 0x21acd, 0x21ad2, + 0x21b0d, 0x21b1c, 0x21b21, 0x21cc0, 0x21cff, 0x21d00, + 0x21d55, 0x21d56, 0x21d5d, 0x21d60, 0x21d65, 0x21d84, + 0x21d8b, 0x21df8, 0x21e51, 0x21e60, 0x21eb5, 0x21ee0, + 0x21f15, 0x21f60, 0x21f99, 0x21fc0, 0x21fef, 0x22000, + 0x2209d, 0x220a4, 0x220ed, 0x220fe, 0x2217b, 0x2217c, + 0x22187, 0x221a0, 0x221d3, 0x221e0, 0x221f5, 0x22200, + 0x2226b, 0x2226c, 0x22291, 0x222a0, 0x222ef, 0x22300, + 0x223c1, 0x223c2, 0x223eb, 0x22400, 0x22425, 0x22426, + 0x22485, 0x22500, 0x2250f, 0x22510, 0x22513, 0x22514, + 0x2251d, 0x2251e, 0x2253d, 0x2253e, 0x22555, 0x22560, + 0x225d7, 0x225e0, 0x225f5, 0x22600, 0x22609, 0x2260a, + 0x2261b, 0x2261e, 0x22623, 0x22626, 0x22653, 0x22654, + 0x22663, 0x22664, 0x22669, 0x2266a, 0x22675, 0x22676, + 0x2268b, 0x2268e, 0x22693, 0x22696, 0x2269d, 0x226a0, + 0x226a3, 0x226ae, 0x226b1, 0x226ba, 0x226c9, 0x226cc, + 0x226db, 0x226e0, 0x226eb, 0x22700, 0x22715, 0x22716, + 0x22719, 0x2271c, 0x2271f, 0x22720, 0x2276d, 0x2276e, + 0x22783, 0x22784, 0x22787, 0x2278a, 0x2278d, 0x2278e, + 0x22797, 0x22798, 0x227ad, 0x227ae, 0x227b3, 0x227c2, + 0x227c7, 0x22800, 0x228b9, 0x228ba, 0x228c5, 0x22900, + 0x22991, 0x229a0, 0x229b5, 0x22b00, 0x22b6d, 0x22b70, + 0x22bbd, 0x22c00, 0x22c8b, 0x22ca0, 0x22cb5, 0x22cc0, + 0x22cdb, 0x22d00, 0x22d75, 0x22d80, 0x22d95, 0x22da0, + 0x22dc9, 0x22e00, 0x22e37, 0x22e3a, 0x22e59, 0x22e60, + 0x22e8f, 0x23000, 0x23079, 0x23140, 0x231e7, 0x231fe, + 0x2320f, 0x23212, 0x23215, 0x23218, 0x23229, 0x2322a, + 0x2322f, 0x23230, 0x2326d, 0x2326e, 0x23273, 0x23276, + 0x2328f, 0x232a0, 0x232b5, 0x23340, 0x23351, 0x23354, + 0x233b1, 0x233b4, 0x233cb, 0x23400, 0x23491, 0x234a0, + 0x23547, 0x23560, 0x235f3, 0x23600, 0x23615, 0x23780, + 0x237c5, 0x237e0, 0x237f5, 0x23800, 0x23813, 0x23814, + 0x2386f, 0x23870, 0x2388d, 0x238a0, 0x238db, 0x238e0, + 0x23921, 0x23924, 0x23951, 0x23952, 0x2396f, 0x23a00, + 0x23a0f, 0x23a10, 0x23a15, 0x23a16, 0x23a6f, 0x23a74, + 0x23a77, 0x23a78, 0x23a7d, 0x23a7e, 0x23a91, 0x23aa0, + 0x23ab5, 0x23ac0, 0x23acd, 0x23ace, 0x23ad3, 0x23ad4, + 0x23b1f, 0x23b20, 0x23b25, 0x23b26, 0x23b33, 0x23b40, + 0x23b55, 0x23dc0, 0x23df3, 0x23e00, 0x23e23, 0x23e24, + 0x23e77, 0x23e7c, 0x23eb7, 0x23f60, 0x23f63, 0x23f80, + 0x23fe5, 0x23ffe, 0x24735, 0x24800, 0x248df, 0x248e0, + 0x248eb, 0x24900, 0x24a89, 0x25f20, 0x25fe7, 0x26000, + 0x26861, 0x26880, 0x268ad, 0x268c0, 0x287f7, 0x28800, + 0x28c8f, 0x2c200, 0x2c275, 0x2d000, 0x2d473, 0x2d480, + 0x2d4bf, 0x2d4c0, 0x2d4d5, 0x2d4dc, 0x2d57f, 0x2d580, + 0x2d595, 0x2d5a0, 0x2d5dd, 0x2d5e0, 0x2d5ed, 0x2d600, + 0x2d68d, 0x2d6a0, 0x2d6b5, 0x2d6b6, 0x2d6c5, 0x2d6c6, + 0x2d6f1, 0x2d6fa, 0x2d721, 0x2da80, 0x2daf5, 0x2dc80, + 0x2dd37, 0x2de00, 0x2de97, 0x2de9e, 0x2df11, 0x2df1e, + 0x2df41, 0x2dfc0, 0x2dfcb, 0x2dfe0, 0x2dfe5, 0x2e000, + 0x30ff1, 0x31000, 0x319ad, 0x319fe, 0x31a13, 0x35fe0, + 0x35fe9, 0x35fea, 0x35ff9, 0x35ffa, 0x35fff, 0x36000, + 0x36247, 0x36264, 0x36267, 0x362a0, 0x362a7, 0x362aa, + 0x362ad, 0x362c8, 0x362d1, 0x362e0, 0x365f9, 0x37800, + 0x378d7, 0x378e0, 0x378fb, 0x37900, 0x37913, 0x37920, + 0x37935, 0x37938, 0x37941, 0x39800, 0x399f5, 0x39a00, + 0x39d69, 0x39e00, 0x39e5d, 0x39e60, 0x39e8f, 0x39ea0, + 0x39f89, 0x3a000, 0x3a1ed, 0x3a200, 0x3a24f, 0x3a252, + 0x3a2e7, 0x3a2f6, 0x3a3d7, 0x3a400, 0x3a48d, 0x3a580, + 0x3a5a9, 0x3a5c0, 0x3a5e9, 0x3a600, 0x3a6af, 0x3a6c0, + 0x3a6f3, 0x3a800, 0x3a8ab, 0x3a8ac, 0x3a93b, 0x3a93c, + 0x3a941, 0x3a944, 0x3a947, 0x3a94a, 0x3a94f, 0x3a952, + 0x3a95b, 0x3a95c, 0x3a975, 0x3a976, 0x3a979, 0x3a97a, + 0x3a989, 0x3a98a, 0x3aa0d, 0x3aa0e, 0x3aa17, 0x3aa1a, + 0x3aa2b, 0x3aa2c, 0x3aa3b, 0x3aa3c, 0x3aa75, 0x3aa76, + 0x3aa7f, 0x3aa80, 0x3aa8b, 0x3aa8c, 0x3aa8f, 0x3aa94, + 0x3aaa3, 0x3aaa4, 0x3ad4d, 0x3ad50, 0x3af99, 0x3af9c, + 0x3b519, 0x3b536, 0x3b541, 0x3b542, 0x3b561, 0x3be00, + 0x3be3f, 0x3be4a, 0x3be57, 0x3c000, 0x3c00f, 0x3c010, + 0x3c033, 0x3c036, 0x3c045, 0x3c046, 0x3c04b, 0x3c04c, + 0x3c057, 0x3c060, 0x3c0dd, 0x3c11e, 0x3c121, 0x3c200, + 0x3c25b, 0x3c260, 0x3c27d, 0x3c280, 0x3c295, 0x3c29c, + 0x3c2a1, 0x3c520, 0x3c55f, 0x3c580, 0x3c5f5, 0x3c5fe, + 0x3c601, 0x3c9a0, 0x3c9f5, 0x3cba0, 0x3cbf7, 0x3cbfe, + 0x3cc01, 0x3cfc0, 0x3cfcf, 0x3cfd0, 0x3cfd9, 0x3cfda, + 0x3cfdf, 0x3cfe0, 0x3cfff, 0x3d000, 0x3d18b, 0x3d18e, + 0x3d1af, 0x3d200, 0x3d299, 0x3d2a0, 0x3d2b5, 0x3d2bc, + 0x3d2c1, 0x3d8e2, 0x3d96b, 0x3da02, 0x3da7d, 0x3dc00, + 0x3dc09, 0x3dc0a, 0x3dc41, 0x3dc42, 0x3dc47, 0x3dc48, + 0x3dc4b, 0x3dc4e, 0x3dc51, 0x3dc52, 0x3dc67, 0x3dc68, + 0x3dc71, 0x3dc72, 0x3dc75, 0x3dc76, 0x3dc79, 0x3dc84, + 0x3dc87, 0x3dc8e, 0x3dc91, 0x3dc92, 0x3dc95, 0x3dc96, + 0x3dc99, 0x3dc9a, 0x3dca1, 0x3dca2, 0x3dca7, 0x3dca8, + 0x3dcab, 0x3dcae, 0x3dcb1, 0x3dcb2, 0x3dcb5, 0x3dcb6, + 0x3dcb9, 0x3dcba, 0x3dcbd, 0x3dcbe, 0x3dcc1, 0x3dcc2, + 0x3dcc7, 0x3dcc8, 0x3dccb, 0x3dcce, 0x3dcd7, 0x3dcd8, + 0x3dce7, 0x3dce8, 0x3dcf1, 0x3dcf2, 0x3dcfb, 0x3dcfc, + 0x3dcff, 0x3dd00, 0x3dd15, 0x3dd16, 0x3dd39, 0x3dd42, + 0x3dd49, 0x3dd4a, 0x3dd55, 0x3dd56, 0x3dd79, 0x3dde0, + 0x3dde5, 0x3e000, 0x3e059, 0x3e060, 0x3e129, 0x3e140, + 0x3e15f, 0x3e162, 0x3e181, 0x3e182, 0x3e1a1, 0x3e1a2, + 0x3e1ed, 0x3e200, 0x3e35d, 0x3e3cc, 0x3e407, 0x3e420, + 0x3e479, 0x3e480, 0x3e493, 0x3e4a0, 0x3e4a5, 0x3e4c0, + 0x3e4cd, 0x3e600, 0x3edb1, 0x3edb8, 0x3eddb, 0x3ede0, + 0x3edfb, 0x3ee00, 0x3eeef, 0x3eef6, 0x3efb5, 0x3efc0, + 0x3efd9, 0x3efe0, 0x3efe3, 0x3f000, 0x3f019, 0x3f020, + 0x3f091, 0x3f0a0, 0x3f0b5, 0x3f0c0, 0x3f111, 0x3f120, + 0x3f15d, 0x3f160, 0x3f179, 0x3f180, 0x3f185, 0x3f200, + 0x3f4a9, 0x3f4c0, 0x3f4dd, 0x3f4e0, 0x3f4fb, 0x3f500, + 0x3f515, 0x3f51e, 0x3f58f, 0x3f59c, 0x3f5bb, 0x3f5be, + 0x3f5d5, 0x3f5e0, 0x3f5f3, 0x3f600, 0x3f727, 0x3f728, + 0x3f7f5, 0x40000, 0x54dc1, 0x54e00, 0x56e75, 0x56e80, + 0x5703d, 0x57040, 0x59d45, 0x59d60, 0x5d7c3, 0x5d7e0, + 0x5dcbd, 0x5f000, 0x5f43d, 0x60000, 0x62697, 0x626a0, + 0x64761, 0x1c0200, 0x1c03e1, + }; + enum class _Gcb_property { _Gcb_Other = 0, _Gcb_Control = 1, @@ -81,7 +333,7 @@ _Gcb_Regional_Indicator = 13, }; - // Values generated by contrib/unicode/gen_std_format_width.py, + // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py, // from GraphemeBreakProperty.txt from the Unicode standard. // Entries are (code_point << shift_bits) + property. inline constexpr int __gcb_shift_bits = 0x4; @@ -381,7 +633,7 @@ enum class _InCB { _Consonant = 1, _Extend = 2 }; - // Values generated by contrib/unicode/gen_std_format_width.py, + // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py, // from DerivedCoreProperties.txt from the Unicode standard. // Entries are (code_point << 2) + property. inline constexpr uint32_t __incb_edges[] = { @@ -519,7 +771,7 @@ 0x380082, 0x380200, 0x380402, 0x3807c0, }; - // Table generated by contrib/unicode/gen_std_format_width.py, + // Table generated by contrib/unicode/gen_libstdcxx_unicode_data.py, // from emoji-data.txt from the Unicode standard. inline constexpr char32_t __xpicto_edges[] = { 0xa9, 0xaa, 0xae, 0xaf, 0x203c, 0x203d, 0x2049, 0x204a, diff --git a/libstdc++-v3/include/bits/unicode.h b/libstdc++-v3/include/bits/unicode.h index 99d972e..f1b6bf4 100644 --- a/libstdc++-v3/include/bits/unicode.h +++ b/libstdc++-v3/include/bits/unicode.h @@ -151,6 +151,11 @@ namespace __unicode { return _M_curr(); } [[nodiscard]] + constexpr iter_difference_t<_Iter> + _M_units() const requires forward_iterator<_Iter> + { return _M_to_increment; } + + [[nodiscard]] constexpr value_type operator*() const { return _M_buf[_M_buf_index]; } @@ -610,6 +615,18 @@ inline namespace __v16_0_0 } // @pre c <= 0x10FFFF + constexpr bool + __should_escape_category(char32_t __c) noexcept + { + constexpr uint32_t __mask = 0x01; + auto* __end = std::end(__escape_edges); + auto* __p = std::lower_bound(__escape_edges, __end, + (__c << 1u) + 2); + return __p[-1] & __mask; + } + + + // @pre c <= 0x10FFFF constexpr _Gcb_property __grapheme_cluster_break_property(char32_t __c) noexcept { diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h index 49e97e2..5bc58e8 100644 --- a/libstdc++-v3/include/bits/unordered_map.h +++ b/libstdc++-v3/include/bits/unordered_map.h @@ -34,7 +34,7 @@ #include <bits/allocator.h> #include <bits/functional_hash.h> // hash #include <bits/stl_function.h> // equal_to -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. #endif @@ -277,7 +277,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : unordered_map(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds an %unordered_map from a range. * @since C++23 @@ -681,7 +681,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER insert(initializer_list<value_type> __l) { _M_h.insert(__l); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -1291,7 +1291,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _Hash, _Allocator) -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>, __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, @@ -1530,7 +1530,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : unordered_multimap(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds an %unordered_multimap from a range. * @since C++23 @@ -1802,7 +1802,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER insert(initializer_list<value_type> __l) { _M_h.insert(__l); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -2311,7 +2311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _Hash, _Allocator) -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>, __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, diff --git a/libstdc++-v3/include/bits/unordered_set.h b/libstdc++-v3/include/bits/unordered_set.h index 4bc256c..091bae6 100644 --- a/libstdc++-v3/include/bits/unordered_set.h +++ b/libstdc++-v3/include/bits/unordered_set.h @@ -34,7 +34,7 @@ #include <bits/allocator.h> #include <bits/functional_hash.h> // hash #include <bits/stl_function.h> // equal_to -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc. #endif @@ -271,7 +271,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : unordered_set(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds an %unordered_set from a range. * @since C++23 @@ -533,7 +533,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER insert(initializer_list<value_type> __l) { _M_h.insert(__l); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -1013,7 +1013,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER unordered_set<int>::size_type, _Hash, _Allocator) -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>, __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>, @@ -1249,7 +1249,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER : unordered_multiset(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Builds an %unordered_multiset from a range. * @since C++23 @@ -1483,7 +1483,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER insert(initializer_list<value_type> __l) { _M_h.insert(__l); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Inserts a range of elements. * @since C++23 @@ -1977,7 +1977,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER unordered_multiset<int>::size_type, _Hash, _Allocator) -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>, __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>, diff --git a/libstdc++-v3/include/bits/vector.tcc b/libstdc++-v3/include/bits/vector.tcc index 66d73b4..b21e1d3 100644 --- a/libstdc++-v3/include/bits/vector.tcc +++ b/libstdc++-v3/include/bits/vector.tcc @@ -977,7 +977,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<typename _Tp, typename _Alloc> template<__detail::__container_compatible_range<_Tp> _Rg> constexpr auto @@ -1100,7 +1100,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER return insert_range(__pos, vector(from_range, std::forward<_Rg>(__rg), _M_get_Tp_allocator())); } -#endif // ranges_to_container +#endif // containers_ranges // vector<bool> template<typename _Alloc> diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 8f609b4..0afaf0d 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1273,7 +1273,12 @@ ftms = { ftms = { name = constrained_equality; values = { - v = 202411; // FIXME: 202403 for P2944R3, ??? for P3379R0 + v = 202411; + cxxmin = 23; + extra_cond = "__glibcxx_three_way_comparison"; + }; + values = { + v = 202403; cxxmin = 20; extra_cond = "__glibcxx_three_way_comparison"; }; @@ -1510,14 +1515,14 @@ ftms = { }; }; -//ftms = { -// name = containers_ranges; -// values = { -// v = 202202; -// cxxmin = 23; -// hosted = yes; -// }; -//}; +ftms = { + name = containers_ranges; + values = { + v = 202202; + cxxmin = 23; + hosted = yes; + }; +}; ftms = { name = ranges_to_container; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index f05c3fd..980fee6 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1406,11 +1406,16 @@ #undef __glibcxx_want_constexpr_vector #if !defined(__cpp_lib_constrained_equality) -# if (__cplusplus >= 202002L) && (__glibcxx_three_way_comparison) +# if (__cplusplus >= 202100L) && (__glibcxx_three_way_comparison) # define __glibcxx_constrained_equality 202411L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality) # define __cpp_lib_constrained_equality 202411L # endif +# elif (__cplusplus >= 202002L) && (__glibcxx_three_way_comparison) +# define __glibcxx_constrained_equality 202403L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality) +# define __cpp_lib_constrained_equality 202403L +# endif # endif #endif /* !defined(__cpp_lib_constrained_equality) && defined(__glibcxx_want_constrained_equality) */ #undef __glibcxx_want_constrained_equality @@ -1664,6 +1669,16 @@ #endif /* !defined(__cpp_lib_reference_from_temporary) && defined(__glibcxx_want_reference_from_temporary) */ #undef __glibcxx_want_reference_from_temporary +#if !defined(__cpp_lib_containers_ranges) +# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED +# define __glibcxx_containers_ranges 202202L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_containers_ranges) +# define __cpp_lib_containers_ranges 202202L +# endif +# endif +#endif /* !defined(__cpp_lib_containers_ranges) && defined(__glibcxx_want_containers_ranges) */ +#undef __glibcxx_want_containers_ranges + #if !defined(__cpp_lib_ranges_to_container) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_ranges_to_container 202202L diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque index 9715721..59d60b2 100644 --- a/libstdc++-v3/include/debug/deque +++ b/libstdc++-v3/include/debug/deque @@ -155,7 +155,7 @@ namespace __debug __gnu_debug::__base(__last), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> deque(from_range_t, _Rg&& __rg, const _Allocator& __a = _Allocator()) : _Base(from_range, std::forward<_Rg>(__rg), __a) @@ -217,7 +217,7 @@ namespace __debug } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<std::__detail::__container_compatible_range<_Tp> _Rg> void assign_range(_Rg&& __rg) @@ -561,7 +561,7 @@ namespace __debug } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> iterator insert_range(const_iterator __pos, _Rg&& __rg) @@ -712,7 +712,7 @@ namespace __debug deque(size_t, _Tp, _Allocator = _Allocator()) -> deque<_Tp, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Alloc = allocator<ranges::range_value_t<_Rg>>> deque(from_range_t, _Rg&&, _Alloc = _Alloc()) diff --git a/libstdc++-v3/include/debug/forward_list b/libstdc++-v3/include/debug/forward_list index 00b96d6..60a2542 100644 --- a/libstdc++-v3/include/debug/forward_list +++ b/libstdc++-v3/include/debug/forward_list @@ -267,7 +267,7 @@ namespace __debug __gnu_debug::__base(__last), __al) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> forward_list(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) : _Base(std::from_range, std::forward<_Rg>(__rg), __a) @@ -318,7 +318,7 @@ namespace __debug this->_M_invalidate_all(); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> void assign_range(_Rg&& __rg) @@ -440,7 +440,7 @@ namespace __debug using _Base::emplace_front; using _Base::push_front; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 using _Base::prepend_range; #endif @@ -512,7 +512,7 @@ namespace __debug return { _Base::insert_after(__pos.base(), __il), this }; } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> iterator insert_range_after(const_iterator __position, _Rg&& __rg) @@ -917,7 +917,7 @@ namespace __debug forward_list(size_t, _Tp, _Allocator = _Allocator()) -> forward_list<_Tp, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Allocator = allocator<ranges::range_value_t<_Rg>>> forward_list(from_range_t, _Rg&&, _Allocator = _Allocator()) diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list index 344fc98..a9d974c 100644 --- a/libstdc++-v3/include/debug/list +++ b/libstdc++-v3/include/debug/list @@ -160,7 +160,7 @@ namespace __debug __gnu_debug::__base(__last), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> list(from_range_t, _Rg&& __rg, const _Allocator& __a = _Allocator()) : _Base(std::from_range, std::forward<_Rg>(__rg), __a) @@ -214,7 +214,7 @@ namespace __debug this->_M_invalidate_all(); } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> void assign_range(_Rg&& __rg) @@ -434,7 +434,7 @@ namespace __debug using _Base::emplace_front; #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 using _Base::prepend_range; using _Base::append_range; #endif @@ -549,7 +549,7 @@ namespace __debug } #endif -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<_Tp> _Rg> iterator insert_range(const_iterator __position, _Rg&& __rg) @@ -970,7 +970,7 @@ namespace __debug list(size_t, _Tp, _Allocator = _Allocator()) -> list<_Tp, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Allocator = allocator<ranges::range_value_t<_Rg>>> list(from_range_t, _Rg&&, _Allocator = _Allocator()) diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h index aa1c1db..985a7ac 100644 --- a/libstdc++-v3/include/debug/map.h +++ b/libstdc++-v3/include/debug/map.h @@ -133,7 +133,7 @@ namespace __debug __gnu_debug::__base(__last), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a map from a range. * @since C++23 @@ -759,7 +759,7 @@ namespace __debug map(initializer_list<pair<_Key, _Tp>>, _Allocator) -> map<_Key, _Tp, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<__detail::__range_key_type<_Rg>>, __allocator_like _Alloc = diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h index bef1f17..c187e51 100644 --- a/libstdc++-v3/include/debug/multimap.h +++ b/libstdc++-v3/include/debug/multimap.h @@ -133,7 +133,7 @@ namespace __debug __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a multimap from a range. * @since C++23 @@ -641,7 +641,7 @@ namespace __debug multimap(initializer_list<pair<_Key, _Tp>>, _Allocator) -> multimap<_Key, _Tp, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<__detail::__range_key_type<_Rg>>, __allocator_like _Alloc = diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h index bddcd28..41bf78d 100644 --- a/libstdc++-v3/include/debug/multiset.h +++ b/libstdc++-v3/include/debug/multiset.h @@ -133,7 +133,7 @@ namespace __debug __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a multiset from a range. * @since C++23 @@ -613,7 +613,7 @@ namespace __debug multiset(initializer_list<_Key>, _Allocator) -> multiset<_Key, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<ranges::range_value_t<_Rg>>, __allocator_like _Alloc = std::allocator<ranges::range_value_t<_Rg>>> diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h index 9555555..6ec8338 100644 --- a/libstdc++-v3/include/debug/set.h +++ b/libstdc++-v3/include/debug/set.h @@ -131,7 +131,7 @@ namespace __debug __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a set from a range. * @since C++23 @@ -623,7 +623,7 @@ namespace __debug set(initializer_list<_Key>, _Allocator) -> set<_Key, less<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Compare = less<ranges::range_value_t<_Rg>>, __allocator_like _Alloc = std::allocator<ranges::range_value_t<_Rg>>> diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map index 16d4a4a..448f681 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -201,7 +201,7 @@ namespace __debug : unordered_map(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<value_type> _Rg> unordered_map(from_range_t, _Rg&& __rg, size_type __n = 0, @@ -869,7 +869,7 @@ namespace __debug _Hash, _Allocator) -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>, __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, @@ -1077,7 +1077,7 @@ namespace __debug : unordered_multimap(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<value_type> _Rg> unordered_multimap(from_range_t, _Rg&& __rg, size_type __n = 0, @@ -1655,7 +1655,7 @@ namespace __debug _Hash, _Allocator) -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>, __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set index 2e342cc..4255f6e 100644 --- a/libstdc++-v3/include/debug/unordered_set +++ b/libstdc++-v3/include/debug/unordered_set @@ -194,7 +194,7 @@ namespace __debug : unordered_set(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<value_type> _Rg> unordered_set(from_range_t, _Rg&& __rg, size_type __n = 0, @@ -902,7 +902,7 @@ namespace __debug : unordered_multiset(__l, __n, __hf, key_equal(), __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<__detail::__container_compatible_range<value_type> _Rg> unordered_multiset(from_range_t, _Rg&& __rg, size_type __n = 0, @@ -1444,7 +1444,7 @@ namespace __debug unordered_multiset<int>::size_type, _Hash, _Allocator) -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>, __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>, @@ -1479,7 +1479,7 @@ namespace __debug equal_to<ranges::range_value_t<_Rg>>, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>, __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>, diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index b49766c..1b3486b 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -244,7 +244,7 @@ namespace __debug const allocator_type& __a = allocator_type()) : _Base(__l, __a) { } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 /** * @brief Construct a vector from a range. * @since C++23 @@ -871,7 +871,7 @@ namespace __debug const _Base& _M_base() const _GLIBCXX_NOEXCEPT { return *this; } -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<std::__detail::__container_compatible_range<_Tp> _Rg> constexpr void assign_range(_Rg&& __rg) @@ -999,7 +999,7 @@ namespace __debug vector(size_t, _Tp, _Allocator = _Allocator()) -> vector<_Tp, _Allocator>; -#if __glibcxx_ranges_to_container // C++ >= 23 +#if __glibcxx_containers_ranges // C++ >= 23 template<ranges::input_range _Rg, typename _Alloc = allocator<ranges::range_value_t<_Rg>>> vector(from_range_t, _Rg&&, _Alloc = _Alloc()) diff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque index 8fd7300..2badab8 100644 --- a/libstdc++-v3/include/std/deque +++ b/libstdc++-v3/include/std/deque @@ -72,6 +72,7 @@ #define __glibcxx_want_algorithm_default_value_type #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_nonmember_container_access #include <bits/version.h> diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 2e9319c..e557e10 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -80,8 +80,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// @cond undocumented namespace __format { - // Type-erased character sink. + // STATICALLY-WIDEN, see C++20 [time.general] + // It doesn't matter for format strings (which can only be char or wchar_t) + // but this returns the narrow string for anything that isn't wchar_t. This + // is done because const char* can be inserted into any ostream type, and + // will be widened at runtime if necessary. + template<typename _CharT> + consteval auto + _Widen(const char* __narrow, const wchar_t* __wide) + { + if constexpr (is_same_v<_CharT, wchar_t>) + return __wide; + else + return __narrow; + } +#define _GLIBCXX_WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define _GLIBCXX_WIDEN(S) _GLIBCXX_WIDEN_(_CharT, S) + + // Size for stack located buffer + template<typename _CharT> + constexpr size_t __stackbuf_size = 32 * sizeof(void*) / sizeof(_CharT); + + // Type-erased character sinks. template<typename _CharT> class _Sink; + template<typename _CharT> class _Fixedbuf_sink; + template<typename _Seq> class _Seq_sink; + + template<typename _CharT, typename _Alloc = allocator<_CharT>> + using _Str_sink + = _Seq_sink<basic_string<_CharT, char_traits<_CharT>, _Alloc>>; + + // template<typename _CharT, typename _Alloc = allocator<_CharT>> + // using _Vec_sink = _Seq_sink<vector<_CharT, _Alloc>>; + // Output iterator that writes to a type-erase character sink. template<typename _CharT> class _Sink_iter; @@ -448,9 +479,10 @@ namespace __format _Pres_d = 1, _Pres_b, _Pres_B, _Pres_o, _Pres_x, _Pres_X, _Pres_c, // Presentation types for floating-point types. _Pres_a = 1, _Pres_A, _Pres_e, _Pres_E, _Pres_f, _Pres_F, _Pres_g, _Pres_G, - _Pres_p = 0, _Pres_P, // For pointers. - _Pres_s = 0, // For strings and bool. - _Pres_esc = 0xf, // For strings and charT. + _Pres_p = 0, _Pres_P, // For pointers. + _Pres_s = 0, // For strings, bool + _Pres_seq = 0, _Pres_str, // For ranges + _Pres_esc = 0xf, // For strings, charT and ranges }; enum _Align { @@ -517,42 +549,48 @@ namespace __format // pre: __first != __last constexpr iterator _M_parse_fill_and_align(iterator __first, iterator __last) noexcept + { return _M_parse_fill_and_align(__first, __last, "{"); } + + // pre: __first != __last + constexpr iterator + _M_parse_fill_and_align(iterator __first, iterator __last, string_view __not_fill) noexcept { - if (*__first != '{') + for (char __c : __not_fill) + if (*__first == static_cast<_CharT>(__c)) + return __first; + + using namespace __unicode; + if constexpr (__literal_encoding_is_unicode<_CharT>()) { - using namespace __unicode; - if constexpr (__literal_encoding_is_unicode<_CharT>()) - { - // Accept any UCS scalar value as fill character. - _Utf32_view<ranges::subrange<iterator>> __uv({__first, __last}); - if (!__uv.empty()) - { - auto __beg = __uv.begin(); - char32_t __c = *__beg++; - if (__is_scalar_value(__c)) - if (auto __next = __beg.base(); __next != __last) - if (_Align __align = _S_align(*__next)) - { - _M_fill = __c; - _M_align = __align; - return ++__next; - } - } - } - else if (__last - __first >= 2) - if (_Align __align = _S_align(__first[1])) - { - _M_fill = *__first; - _M_align = __align; - return __first + 2; - } + // Accept any UCS scalar value as fill character. + _Utf32_view<ranges::subrange<iterator>> __uv({__first, __last}); + if (!__uv.empty()) + { + auto __beg = __uv.begin(); + char32_t __c = *__beg++; + if (__is_scalar_value(__c)) + if (auto __next = __beg.base(); __next != __last) + if (_Align __align = _S_align(*__next)) + { + _M_fill = __c; + _M_align = __align; + return ++__next; + } + } + } + else if (__last - __first >= 2) + if (_Align __align = _S_align(__first[1])) + { + _M_fill = *__first; + _M_align = __align; + return __first + 2; + } - if (_Align __align = _S_align(__first[0])) - { - _M_fill = ' '; - _M_align = __align; - return __first + 1; - } + if (_Align __align = _S_align(__first[0])) + { + _M_fill = ' '; + _M_align = __align; + return __first + 1; } return __first; } @@ -848,6 +886,302 @@ namespace __format __spec._M_fill); } + // Values are indices into _Escapes::all. + enum class _Term_char : unsigned char { + _Tc_quote = 12, + _Tc_apos = 15 + }; + + template<typename _CharT> + struct _Escapes + { + using _Str_view = basic_string_view<_CharT>; + + static consteval + _Str_view _S_all() + { return _GLIBCXX_WIDEN("\t\\t\n\\n\r\\r\\\\\\\"\\\"'\\'\\u\\x"); } + + static constexpr + _CharT _S_term(_Term_char __term) + { return _S_all()[static_cast<unsigned char>(__term)]; } + + static consteval + _Str_view _S_tab() + { return _S_all().substr(0, 3); } + + static consteval + _Str_view _S_newline() + { return _S_all().substr(3, 3); } + + static consteval + _Str_view _S_return() + { return _S_all().substr(6, 3); } + + static consteval + _Str_view _S_bslash() + { return _S_all().substr(9, 3); } + + static consteval + _Str_view _S_quote() + { return _S_all().substr(12, 3); } + + static consteval + _Str_view _S_apos() + { return _S_all().substr(15, 3); } + + static consteval + _Str_view _S_u() + { return _S_all().substr(18, 2); } + + static consteval + _Str_view _S_x() + { return _S_all().substr(20, 2); } + }; + + template<typename _CharT> + struct _Separators + { + using _Str_view = basic_string_view<_CharT>; + + static consteval + _Str_view _S_all() + { return _GLIBCXX_WIDEN("[]{}(), : "); } + + static consteval + _Str_view _S_squares() + { return _S_all().substr(0, 2); } + + static consteval + _Str_view _S_braces() + { return _S_all().substr(2, 2); } + + static consteval + _Str_view _S_parens() + { return _S_all().substr(4, 2); } + + static consteval + _Str_view _S_comma() + { return _S_all().substr(6, 2); } + + static consteval + _Str_view _S_colon() + { return _S_all().substr(8, 2); } + }; + + template<typename _CharT> + constexpr bool __should_escape_ascii(_CharT __c, _Term_char __term) + { + using _Esc = _Escapes<_CharT>; + switch (__c) + { + case _Esc::_S_tab()[0]: + case _Esc::_S_newline()[0]: + case _Esc::_S_return()[0]: + case _Esc::_S_bslash()[0]: + return true; + case _Esc::_S_quote()[0]: + return __term == _Term_char::_Tc_quote; + case _Esc::_S_apos()[0]: + return __term == _Term_char::_Tc_apos; + default: + return (__c >= 0 && __c < 0x20) || __c == 0x7f; + }; + } + + // @pre __c <= 0x10FFFF + constexpr bool __should_escape_unicode(char32_t __c, bool __prev_esc) + { + if (__unicode::__should_escape_category(__c)) + return __c != U' '; + if (!__prev_esc) + return false; + return __unicode::__grapheme_cluster_break_property(__c) + == __unicode::_Gcb_property::_Gcb_Extend; + } + + using uint_least32_t = __UINT_LEAST32_TYPE__; + template<typename _Out, typename _CharT> + _Out + __write_escape_seq(_Out __out, uint_least32_t __val, + basic_string_view<_CharT> __prefix) + { + using _Str_view = basic_string_view<_CharT>; + constexpr size_t __max = 8; + char __buf[__max]; + const string_view __narrow( + __buf, + std::__to_chars_i<uint_least32_t>(__buf, __buf + __max, __val, 16).ptr); + + __out = __format::__write(__out, __prefix); + *__out = _Separators<_CharT>::_S_braces()[0]; + ++__out; + if constexpr (is_same_v<char, _CharT>) + __out = __format::__write(__out, __narrow); +#ifdef _GLIBCXX_USE_WCHAR_T + else + { + _CharT __wbuf[__max]; + const size_t __n = __narrow.size(); + std::__to_wstring_numeric(__narrow.data(), __n, __wbuf); + __out = __format::__write(__out, _Str_view(__wbuf, __n)); + } +#endif + *__out = _Separators<_CharT>::_S_braces()[1]; + return ++__out; + } + + template<typename _Out, typename _CharT> + _Out + __write_escaped_char(_Out __out, _CharT __c) + { + using _UChar = make_unsigned_t<_CharT>; + using _Esc = _Escapes<_CharT>; + switch (__c) + { + case _Esc::_S_tab()[0]: + return __format::__write(__out, _Esc::_S_tab().substr(1, 2)); + case _Esc::_S_newline()[0]: + return __format::__write(__out, _Esc::_S_newline().substr(1, 2)); + case _Esc::_S_return()[0]: + return __format::__write(__out, _Esc::_S_return().substr(1, 2)); + case _Esc::_S_bslash()[0]: + return __format::__write(__out, _Esc::_S_bslash().substr(1, 2)); + case _Esc::_S_quote()[0]: + return __format::__write(__out, _Esc::_S_quote().substr(1, 2)); + case _Esc::_S_apos()[0]: + return __format::__write(__out, _Esc::_S_apos().substr(1, 2)); + default: + return __format::__write_escape_seq(__out, + static_cast<_UChar>(__c), + _Esc::_S_u()); + } + } + + template<typename _CharT, typename _Out> + _Out + __write_escaped_ascii(_Out __out, + basic_string_view<_CharT> __str, + _Term_char __term) + { + using _Str_view = basic_string_view<_CharT>; + auto __first = __str.begin(); + auto const __last = __str.end(); + while (__first != __last) + { + auto __print = __first; + // assume anything outside ASCII is printable + while (__print != __last + && !__format::__should_escape_ascii(*__print, __term)) + ++__print; + + if (__print != __first) + __out = __format::__write(__out, _Str_view(__first, __print)); + + if (__print == __last) + return __out; + + __first = __print; + __out = __format::__write_escaped_char(__out, *__first); + ++__first; + } + return __out; + } + + template<typename _CharT, typename _Out> + _Out + __write_escaped_unicode(_Out __out, + basic_string_view<_CharT> __str, + _Term_char __term) + { + using _Str_view = basic_string_view<_CharT>; + using _UChar = make_unsigned_t<_CharT>; + using _Esc = _Escapes<_CharT>; + + static constexpr char32_t __replace = U'\uFFFD'; + static constexpr _Str_view __replace_rep = [] + { + // N.B. "\uFFFD" is ill-formed if encoding is not unicode. + if constexpr (is_same_v<char, _CharT>) + return "\xEF\xBF\xBD"; + else + return L"\xFFFD"; + }(); + + __unicode::_Utf_view<char32_t, _Str_view> __v(std::move(__str)); + auto __first = __v.begin(); + auto const __last = __v.end(); + + bool __prev_esc = true; + while (__first != __last) + { + bool __esc_ascii = false; + bool __esc_unicode = false; + bool __esc_replace = false; + auto __should_escape = [&](auto const& __it) + { + if (*__it <= 0x7f) + return __esc_ascii + = __format::__should_escape_ascii(*__it.base(), __term); + if (__format::__should_escape_unicode(*__it, __prev_esc)) + return __esc_unicode = true; + if (*__it == __replace) + { + _Str_view __units(__it.base(), __it._M_units()); + return __esc_replace = (__units != __replace_rep); + } + return false; + }; + + auto __print = __first; + while (__print != __last && !__should_escape(__print)) + { + __prev_esc = false; + ++__print; + } + + if (__print != __first) + __out = __format::__write(__out, _Str_view(__first.base(), __print.base())); + + if (__print == __last) + return __out; + + __first = __print; + if (__esc_ascii) + __out = __format::__write_escaped_char(__out, *__first.base()); + else if (__esc_unicode) + __out = __format::__write_escape_seq(__out, *__first, _Esc::_S_u()); + else // __esc_replace + for (_CharT __c : _Str_view(__first.base(), __first._M_units())) + __out = __format::__write_escape_seq(__out, + static_cast<_UChar>(__c), + _Esc::_S_x()); + __prev_esc = true; + ++__first; + + } + return __out; + } + + template<typename _CharT, typename _Out> + _Out + __write_escaped(_Out __out, basic_string_view<_CharT> __str, _Term_char __term) + { + *__out = _Escapes<_CharT>::_S_term(__term); + ++__out; + + if constexpr (__unicode::__literal_encoding_is_unicode<_CharT>()) + __out = __format::__write_escaped_unicode(__out, __str, __term); + else if constexpr (is_same_v<char, _CharT> + && __unicode::__literal_encoding_is_extended_ascii()) + __out = __format::__write_escaped_ascii(__out, __str, __term); + else + // TODO Handle non-ascii extended encoding + __out = __format::__write_escaped_ascii(__out, __str, __term); + + *__out = _Escapes<_CharT>::_S_term(__term); + return ++__out; + } + // A lightweight optional<locale>. struct _Optional_locale { @@ -924,6 +1258,13 @@ namespace __format template<__char _CharT> struct __formatter_str { + __formatter_str() = default; + + constexpr + __formatter_str(_Spec<_CharT> __spec) noexcept + : _M_spec(__spec) + { } + constexpr typename basic_format_parse_context<_CharT>::iterator parse(basic_format_parse_context<_CharT>& __pc) { @@ -961,7 +1302,7 @@ namespace __format if (*__first == 's') ++__first; -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED else if (*__first == '?') { __spec._M_type = _Pres_esc; @@ -980,43 +1321,107 @@ namespace __format format(basic_string_view<_CharT> __s, basic_format_context<_Out, _CharT>& __fc) const { - if (_M_spec._M_type == _Pres_esc) + constexpr auto __term = __format::_Term_char::_Tc_quote; + const auto __write_direct = [&] { - // TODO: C++23 escaped string presentation - } + if (_M_spec._M_type == _Pres_esc) + return __format::__write_escaped(__fc.out(), __s, __term); + else + return __format::__write(__fc.out(), __s); + }; if (_M_spec._M_width_kind == _WP_none && _M_spec._M_prec_kind == _WP_none) - return __format::__write(__fc.out(), __s); + return __write_direct(); - size_t __estimated_width; - if constexpr (__unicode::__literal_encoding_is_unicode<_CharT>()) + const size_t __prec = + _M_spec._M_prec_kind != _WP_none + ? _M_spec._M_get_precision(__fc) + : basic_string_view<_CharT>::npos; + + const size_t __estimated_width = _S_trunc(__s, __prec); + // N.B. Escaping only increases width + if (_M_spec._M_get_width(__fc) <= __estimated_width + && _M_spec._M_prec_kind == _WP_none) + return __write_direct(); + + if (_M_spec._M_type != _Pres_esc) + return __format::__write_padded_as_spec(__s, __estimated_width, + __fc, _M_spec); + + __format::_Str_sink<_CharT> __sink; + __format::__write_escaped(__sink.out(), __s, __term); + basic_string_view<_CharT> __escaped(__sink.view().data(), + __sink.view().size()); + const size_t __escaped_width = _S_trunc(__escaped, __prec); + // N.B. [tab:format.type.string] defines '?' as + // Copies the escaped string ([format.string.escaped]) to the output, + // so precision seem to appy to escaped string. + return __format::__write_padded_as_spec(__escaped, __escaped_width, + __fc, _M_spec); + } + +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED + template<ranges::input_range _Rg, typename _Out> + requires same_as<remove_cvref_t<ranges::range_reference_t<_Rg>>, _CharT> + typename basic_format_context<_Out, _CharT>::iterator + _M_format_range(_Rg&& __rg, basic_format_context<_Out, _CharT>& __fc) const + { + using _String = basic_string<_CharT>; + using _String_view = basic_string_view<_CharT>; + if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) { - if (_M_spec._M_prec_kind != _WP_none) + const size_t __n(ranges::distance(__rg)); + if constexpr (ranges::contiguous_range<_Rg>) + return format(_String_view(ranges::data(__rg), __n), __fc); + else if (__n <= __format::__stackbuf_size<_CharT>) { - size_t __prec = _M_spec._M_get_precision(__fc); - __estimated_width = __unicode::__truncate(__s, __prec); + _CharT __buf[__format::__stackbuf_size<_CharT>]; + ranges::copy(__rg, __buf); + return format(_String_view(__buf, __n), __fc); + } + else if constexpr (ranges::sized_range<_Rg>) + return format(_String(from_range, __rg), __fc); + else if constexpr (ranges::random_access_range<_Rg>) + { + ranges::iterator_t<_Rg> __first = ranges::begin(__rg); + ranges::subrange __sub(__first, __first + __n); + return format(_String(from_range, __sub), __fc); } else - __estimated_width = __unicode::__field_width(__s); + { + // N.B. preserve the computed size + ranges::subrange __sub(__rg, __n); + return format(_String(from_range, __sub), __fc); + } } else - { - __s = __s.substr(0, _M_spec._M_get_precision(__fc)); - __estimated_width = __s.size(); - } - - return __format::__write_padded_as_spec(__s, __estimated_width, - __fc, _M_spec); + return format(_String(from_range, __rg), __fc); } -#if __cpp_lib_format_ranges constexpr void set_debug_format() noexcept { _M_spec._M_type = _Pres_esc; } #endif private: + static size_t + _S_trunc(basic_string_view<_CharT>& __s, size_t __prec) + { + if constexpr (__unicode::__literal_encoding_is_unicode<_CharT>()) + { + if (__prec != basic_string_view<_CharT>::npos) + return __unicode::__truncate(__s, __prec); + else + return __unicode::__field_width(__s); + } + else + { + __s = __s.substr(0, __prec); + return __s.size(); + } + } + _Spec<_CharT> _M_spec{}; }; @@ -1120,7 +1525,7 @@ namespace __format ++__first; } break; -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED case '?': if (__type == _AsChar) { @@ -1272,7 +1677,7 @@ namespace __format _S_character_width(_CharT __c) { // N.B. single byte cannot encode charcter of width greater than 1 - if constexpr (sizeof(_CharT) > 1u && + if constexpr (sizeof(_CharT) > 1u && __unicode::__literal_encoding_is_unicode<_CharT>()) return __unicode::__field_width(__c); else @@ -1286,7 +1691,33 @@ namespace __format { return __format::__write_padded_as_spec({&__c, 1u}, _S_character_width(__c), - __fc, _M_spec); + __fc, _M_spec); + } + + template<typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + _M_format_character_escaped(_CharT __c, + basic_format_context<_Out, _CharT>& __fc) const + { + using _Esc = _Escapes<_CharT>; + constexpr auto __term = __format::_Term_char::_Tc_apos; + const basic_string_view<_CharT> __in(&__c, 1u); + if (_M_spec._M_get_width(__fc) <= 3u) + return __format::__write_escaped(__fc.out(), __in, __term); + + _CharT __buf[12]; + __format::_Fixedbuf_sink<_CharT> __sink(__buf); + __format::__write_escaped(__sink.out(), __in, __term); + + const basic_string_view<_CharT> __escaped = __sink.view(); + size_t __estimated_width; + if (__escaped[1] == _Esc::_S_bslash()[0]) // escape sequence + __estimated_width = __escaped.size(); + else + __estimated_width = 2 + _S_character_width(__c); + return __format::__write_padded_as_spec(__escaped, + __estimated_width, + __fc, _M_spec); } template<typename _Int> @@ -1973,15 +2404,12 @@ namespace __format || _M_f._M_spec._M_type == __format::_Pres_c) return _M_f._M_format_character(__u, __fc); else if (_M_f._M_spec._M_type == __format::_Pres_esc) - { - // TODO - return __fc.out(); - } + return _M_f._M_format_character_escaped(__u, __fc); else return _M_f.format(static_cast<make_unsigned_t<_CharT>>(__u), __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f._M_spec._M_type = __format::_Pres_esc; } @@ -2012,15 +2440,12 @@ namespace __format || _M_f._M_spec._M_type == __format::_Pres_c) return _M_f._M_format_character(__u, __fc); else if (_M_f._M_spec._M_type == __format::_Pres_esc) - { - // TODO - return __fc.out(); - } + return _M_f._M_format_character_escaped(__u, __fc); else return _M_f.format(static_cast<unsigned char>(__u), __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f._M_spec._M_type = __format::_Pres_esc; } @@ -2050,7 +2475,7 @@ namespace __format format(_CharT* __u, basic_format_context<_Out, _CharT>& __fc) const { return _M_f.format(__u, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2075,7 +2500,7 @@ namespace __format basic_format_context<_Out, _CharT>& __fc) const { return _M_f.format(__u, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2099,7 +2524,7 @@ namespace __format basic_format_context<_Out, _CharT>& __fc) const { return _M_f.format({__u, _Nm}, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2123,7 +2548,7 @@ namespace __format basic_format_context<_Out, char>& __fc) const { return _M_f.format(__u, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2148,7 +2573,7 @@ namespace __format basic_format_context<_Out, wchar_t>& __fc) const { return _M_f.format(__u, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2173,7 +2598,7 @@ namespace __format basic_format_context<_Out, char>& __fc) const { return _M_f.format(__u, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2198,7 +2623,7 @@ namespace __format basic_format_context<_Out, wchar_t>& __fc) const { return _M_f.format(__u, __fc); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } #endif @@ -2575,7 +3000,7 @@ namespace __format }; /// @} -#if defined _GLIBCXX_USE_WCHAR_T && __cpp_lib_format_ranges +#if defined _GLIBCXX_USE_WCHAR_T && __glibcxx_format_ranges // _GLIBCXX_RESOLVE_LIB_DEFECTS // 3944. Formatters converting sequences of char to sequences of wchar_t @@ -2635,32 +3060,21 @@ namespace __format concept __formattable_impl = __parsable_with<_Tp, _Context> && __formattable_with<_Tp, _Context>; + template<typename _Formatter> + concept __has_debug_format = requires(_Formatter __f) + { + __f.set_debug_format(); + }; + } // namespace __format /// @endcond -// Concept std::formattable was introduced by P2286R8 "Formatting Ranges", -// but we can't guard it with __cpp_lib_format_ranges until we define that! -#if __cplusplus > 202002L +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED // [format.formattable], concept formattable template<typename _Tp, typename _CharT> concept formattable = __format::__formattable_impl<remove_reference_t<_Tp>, _CharT>; -#endif -#if __cpp_lib_format_ranges - /// @cond undocumented -namespace __format -{ - template<typename _Rg, typename _CharT> - concept __const_formattable_range - = ranges::input_range<const _Rg> - && formattable<ranges::range_reference_t<const _Rg>, _CharT>; - - template<typename _Rg, typename _CharT> - using __maybe_const_range - = conditional_t<__const_formattable_range<_Rg, _CharT>, const _Rg, _Rg>; -} // namespace __format - /// @endcond #endif // format_ranges /// An iterator after the last character written, and the number of @@ -2859,12 +3273,38 @@ namespace __format { return _Sink_iter<_CharT>(*this); } }; + + template<typename _CharT> + class _Fixedbuf_sink final : public _Sink<_CharT> + { + void + _M_overflow() override + { + __glibcxx_assert(false); + this->_M_rewind(); + } + + public: + [[__gnu__::__always_inline__]] + constexpr explicit + _Fixedbuf_sink(span<_CharT> __buf) + : _Sink<_CharT>(__buf) + { } + + constexpr basic_string_view<_CharT> + view() const + { + auto __s = this->_M_used(); + return basic_string_view<_CharT>(__s.data(), __s.size()); + } + }; + // A sink with an internal buffer. This is used to implement concrete sinks. template<typename _CharT> class _Buf_sink : public _Sink<_CharT> { protected: - _CharT _M_buf[32 * sizeof(void*) / sizeof(_CharT)]; + _CharT _M_buf[__stackbuf_size<_CharT>]; [[__gnu__::__always_inline__]] constexpr @@ -2993,13 +3433,6 @@ namespace __format } }; - template<typename _CharT, typename _Alloc = allocator<_CharT>> - using _Str_sink - = _Seq_sink<basic_string<_CharT, char_traits<_CharT>, _Alloc>>; - - // template<typename _CharT, typename _Alloc = allocator<_CharT>> - // using _Vec_sink = _Seq_sink<vector<_CharT, _Alloc>>; - // A sink that writes to an output iterator. // Writes to a fixed-size buffer and then flushes to the output iterator // when the buffer fills up. @@ -3675,17 +4108,17 @@ namespace __format return _M_visit([&__vis]<typename _Tp>(_Tp& __val) -> decltype(auto) { constexpr bool __user_facing = __is_one_of<_Tp, - monostate, bool, _CharT, - int, unsigned int, long long int, unsigned long long int, - float, double, long double, - const _CharT*, basic_string_view<_CharT>, - const void*, handle>::value; + monostate, bool, _CharT, + int, unsigned int, long long int, unsigned long long int, + float, double, long double, + const _CharT*, basic_string_view<_CharT>, + const void*, handle>::value; if constexpr (__user_facing) return std::forward<_Visitor>(__vis)(__val); else { - handle __h(__val); - return std::forward<_Visitor>(__vis)(__h); + handle __h(__val); + return std::forward<_Visitor>(__vis)(__h); } }, __type); } @@ -4713,7 +5146,7 @@ namespace __format } #endif -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges // C++ >= 23 && HOSTED // [format.range], formatting of ranges // [format.range.fmtkind], variable template format_kind enum class range_format { @@ -4727,7 +5160,10 @@ namespace __format /// @cond undocumented template<typename _Rg> - constexpr auto format_kind = not defined(format_kind<_Rg>); + constexpr auto format_kind = + __primary_template_not_defined( + format_kind<_Rg> // you can specialize this for non-const input ranges + ); template<typename _Tp> consteval range_format @@ -4758,29 +5194,602 @@ namespace __format template<ranges::input_range _Rg> requires same_as<_Rg, remove_cvref_t<_Rg>> constexpr range_format format_kind<_Rg> = __fmt_kind<_Rg>(); - // [format.range.formatter], class template range_formatter - template<typename _Tp, typename _CharT = char> - requires same_as<remove_cvref_t<_Tp>, _Tp> && formattable<_Tp, _CharT> - class range_formatter; // TODO - /// @cond undocumented namespace __format { - // [format.range.fmtdef], class template range-default-formatter - template<range_format _Kind, ranges::input_range _Rg, typename _CharT> - struct __range_default_formatter; // TODO + template<typename _CharT, typename _Out, typename _Callback> + typename basic_format_context<_Out, _CharT>::iterator + __format_padded(basic_format_context<_Out, _CharT>& __fc, + const _Spec<_CharT>& __spec, + _Callback&& __call) + { + // This is required to implement formatting with padding, + // as we need to format to temporary buffer, using the same iterator. + static_assert(is_same_v<_Out, __format::_Sink_iter<_CharT>>); + + if (__spec._M_get_width(__fc) == 0) + return __call(__fc); + + struct _Restore_out + { + _Restore_out(basic_format_context<_Sink_iter<_CharT>, _CharT>& __fc) + : _M_ctx(std::addressof(__fc)), _M_out(__fc.out()) + { } + + void _M_trigger() + { + if (_M_ctx) + _M_ctx->advance_to(_M_out); + _M_ctx = nullptr; + } + + ~_Restore_out() + { _M_trigger(); } + + private: + basic_format_context<_Sink_iter<_CharT>, _CharT>* _M_ctx; + _Sink_iter<_CharT> _M_out; + }; + + _Restore_out __restore(__fc); + // TODO Consider double sinking, first buffer of width + // size and then original sink, if first buffer is overun + // we do not need to align + _Str_sink<_CharT> __buf; + __fc.advance_to(__buf.out()); + __call(__fc); + __restore._M_trigger(); + + basic_string_view<_CharT> __str(__buf.view()); + size_t __width; + if constexpr (__unicode::__literal_encoding_is_unicode<_CharT>()) + __width = __unicode::__field_width(__str); + else + __width = __str.size(); + + return __format::__write_padded_as_spec(__str, __width, __fc, __spec); + } + + template<typename _Rg, typename _CharT> + concept __const_formattable_range + = ranges::input_range<const _Rg> + && formattable<ranges::range_reference_t<const _Rg>, _CharT>; + + // _Rg& and const _Rg& are both formattable and use same formatter + // specialization for their references. + template<typename _Rg, typename _CharT> + concept __simply_formattable_range + = __const_formattable_range<_Rg, _CharT> + && same_as<remove_cvref_t<ranges::range_reference_t<_Rg>>, + remove_cvref_t<ranges::range_reference_t<const _Rg>>>; + + template<typename _Rg, typename _CharT> + using __maybe_const_range + = __conditional_t<__const_formattable_range<_Rg, _CharT>, const _Rg, _Rg>; + + template<typename _Tp, typename _CharT> + using __maybe_const + = __conditional_t<formattable<const _Tp, _CharT>, const _Tp, _Tp>; + + template<size_t _Pos, typename _Tp, typename _CharT> + struct __indexed_formatter_storage + { + constexpr void + _M_parse() + { + basic_format_parse_context<_CharT> __pc({}); + if (_M_formatter.parse(__pc) != __pc.end()) + __format::__failed_to_parse_format_spec(); + } + + template<typename _Out> + void + _M_format(__maybe_const<_Tp, _CharT>& __elem, + basic_format_context<_Out, _CharT>& __fc, + basic_string_view<_CharT> __sep) const + { + if constexpr (_Pos != 0) + __fc.advance_to(__format::__write(__fc.out(), __sep)); + __fc.advance_to(_M_formatter.format(__elem, __fc)); + } + + [[__gnu__::__always_inline__]] + constexpr void + set_debug_format() + { + if constexpr (__has_debug_format<formatter<_Tp, _CharT>>) + _M_formatter.set_debug_format(); + } + + private: + formatter<_Tp, _CharT> _M_formatter; + }; + + template<typename _CharT, typename... _Tps> + class __tuple_formatter + { + using _String_view = basic_string_view<_CharT>; + using _Seps = __format::_Separators<_CharT>; + + public: + constexpr void + set_separator(basic_string_view<_CharT> __sep) noexcept + { _M_sep = __sep; } + + constexpr void + set_brackets(basic_string_view<_CharT> __open, + basic_string_view<_CharT> __close) noexcept + { + _M_open = __open; + _M_close = __close; + } + + // We deviate from standard, that declares this as template accepting + // unconstrained ParseContext type, which seems unimplementable. + constexpr typename basic_format_parse_context<_CharT>::iterator + parse(basic_format_parse_context<_CharT>& __pc) + { + auto __first = __pc.begin(); + const auto __last = __pc.end(); + __format::_Spec<_CharT> __spec{}; + + auto __finished = [&] + { + if (__first != __last && *__first != '}') + return false; + + _M_spec = __spec; + _M_felems._M_parse(); + _M_felems.set_debug_format(); + return true; + }; + + if (__finished()) + return __first; + + __first = __spec._M_parse_fill_and_align(__first, __last, "{:"); + if (__finished()) + return __first; + + __first = __spec._M_parse_width(__first, __last, __pc); + if (__finished()) + return __first; + + if (*__first == 'n') + { + ++__first; + _M_open = _M_close = _String_view(); + } + else if (*__first == 'm') + { + ++__first; + if constexpr (sizeof...(_Tps) == 2) + { + _M_sep = _Seps::_S_colon(); + _M_open = _M_close = _String_view(); + } + else + __throw_format_error("format error: 'm' specifier requires range" + " of pair or tuple of two elements"); + } + + if (__finished()) + return __first; + + __format::__failed_to_parse_format_spec(); + } + + protected: + template<typename _Tuple, typename _Out, size_t... _Ids> + typename basic_format_context<_Out, _CharT>::iterator + _M_format(_Tuple& __tuple, index_sequence<_Ids...>, + basic_format_context<_Out, _CharT>& __fc) const + { return _M_format_elems(std::get<_Ids>(__tuple)..., __fc); } + + template<typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + _M_format_elems(__maybe_const<_Tps, _CharT>&... __elems, + basic_format_context<_Out, _CharT>& __fc) const + { + return __format::__format_padded( + __fc, _M_spec, + [this, &__elems...](basic_format_context<_Out, _CharT>& __nfc) + { + __nfc.advance_to(__format::__write(__nfc.out(), _M_open)); + _M_felems._M_format(__elems..., __nfc, _M_sep); + return __format::__write(__nfc.out(), _M_close); + }); + } + + private: + template<size_t... _Ids> + struct __formatters_storage + : __indexed_formatter_storage<_Ids, _Tps, _CharT>... + { + template<size_t _Id, typename _Up> + using _Base = __indexed_formatter_storage<_Id, _Up, _CharT>; + + constexpr void + _M_parse() + { + (_Base<_Ids, _Tps>::_M_parse(), ...); + } + + template<typename _Out> + void + _M_format(__maybe_const<_Tps, _CharT>&... __elems, + basic_format_context<_Out, _CharT>& __fc, + _String_view __sep) const + { + (_Base<_Ids, _Tps>::_M_format(__elems, __fc, __sep), ...); + } + + constexpr void + set_debug_format() + { + (_Base<_Ids, _Tps>::set_debug_format(), ...); + } + }; + + template<size_t... _Ids> + static auto + _S_create_storage(index_sequence<_Ids...>) + -> __formatters_storage<_Ids...>; + using _Formatters + = decltype(_S_create_storage(index_sequence_for<_Tps...>())); + + _Spec<_CharT> _M_spec{}; + _String_view _M_open = _Seps::_S_parens().substr(0, 1); + _String_view _M_close = _Seps::_S_parens().substr(1, 1); + _String_view _M_sep = _Seps::_S_comma(); + _Formatters _M_felems; + }; + + template<typename _Tp> + concept __is_map_formattable + = __is_pair<_Tp> || (__is_tuple_v<_Tp> && tuple_size_v<_Tp> == 2); + } // namespace __format /// @endcond + // [format.tuple] Tuple formatter + template<__format::__char _CharT, formattable<_CharT> _Fp, + formattable<_CharT> _Sp> + struct formatter<pair<_Fp, _Sp>, _CharT> + : __format::__tuple_formatter<_CharT, remove_cvref_t<_Fp>, + remove_cvref_t<_Sp>> + { + private: + using __maybe_const_pair + = __conditional_t<formattable<const _Fp, _CharT> + && formattable<const _Sp, _CharT>, + const pair<_Fp, _Sp>, pair<_Fp, _Sp>>; + public: + // We deviate from standard, that declares this as template accepting + // unconstrained FormatContext type, which seems unimplementable. + template<typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + format(__maybe_const_pair& __p, + basic_format_context<_Out, _CharT>& __fc) const + { return this->_M_format_elems(__p.first, __p.second, __fc); } + }; + + template<__format::__char _CharT, formattable<_CharT>... _Tps> + struct formatter<tuple<_Tps...>, _CharT> + : __format::__tuple_formatter<_CharT, remove_cvref_t<_Tps>...> + { + private: + using __maybe_const_tuple + = __conditional_t<(formattable<const _Tps, _CharT> && ...), + const tuple<_Tps...>, tuple<_Tps...>>; + public: + // We deviate from standard, that declares this as template accepting + // unconstrained FormatContext type, which seems unimplementable. + template<typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + format(__maybe_const_tuple& __t, + basic_format_context<_Out, _CharT>& __fc) const + { return this->_M_format(__t, index_sequence_for<_Tps...>(), __fc); } + }; + + // [format.range.formatter], class template range_formatter + template<typename _Tp, __format::__char _CharT = char> + requires same_as<remove_cvref_t<_Tp>, _Tp> && formattable<_Tp, _CharT> + class range_formatter + { + using _String_view = basic_string_view<_CharT>; + using _Seps = __format::_Separators<_CharT>; + + public: + constexpr void + set_separator(basic_string_view<_CharT> __sep) noexcept + { _M_sep = __sep; } + + constexpr void + set_brackets(basic_string_view<_CharT> __open, + basic_string_view<_CharT> __close) noexcept + { + _M_open = __open; + _M_close = __close; + } + + constexpr formatter<_Tp, _CharT>& + underlying() noexcept + { return _M_fval; } + + constexpr const formatter<_Tp, _CharT>& + underlying() const noexcept + { return _M_fval; } + + // We deviate from standard, that declares this as template accepting + // unconstrained ParseContext type, which seems unimplementable. + constexpr typename basic_format_parse_context<_CharT>::iterator + parse(basic_format_parse_context<_CharT>& __pc) + { + auto __first = __pc.begin(); + const auto __last = __pc.end(); + __format::_Spec<_CharT> __spec{}; + bool __no_brace = false; + + auto __finished = [&] + { return __first == __last || *__first == '}'; }; + + auto __finalize = [&] + { + _M_spec = __spec; + return __first; + }; + + auto __parse_val = [&](_String_view __nfs = _String_view()) + { + basic_format_parse_context<_CharT> __npc(__nfs); + if (_M_fval.parse(__npc) != __npc.end()) + __format::__failed_to_parse_format_spec(); + if constexpr (__format::__has_debug_format<formatter<_Tp, _CharT>>) + _M_fval.set_debug_format(); + return __finalize(); + }; + + if (__finished()) + return __parse_val(); + + __first = __spec._M_parse_fill_and_align(__first, __last, "{:"); + if (__finished()) + return __parse_val(); + + __first = __spec._M_parse_width(__first, __last, __pc); + if (__finished()) + return __parse_val(); + + if (*__first == '?') + { + ++__first; + __spec._M_type = __format::_Pres_esc; + if (__finished() || *__first != 's') + __throw_format_error("format error: '?' is allowed only in" + " combination with 's'"); + } + + if (*__first == 's') + { + ++__first; + if constexpr (same_as<_Tp, _CharT>) + { + if (__spec._M_type != __format::_Pres_esc) + __spec._M_type = __format::_Pres_str; + if (__finished()) + return __finalize(); + __throw_format_error("format error: element format specifier" + " cannot be provided when 's' specifier is used"); + } + else + __throw_format_error("format error: 's' specifier requires" + " range of character types"); + } + + if (__finished()) + return __parse_val(); + + if (*__first == 'n') + { + ++__first; + _M_open = _M_close = _String_view(); + __no_brace = true; + } + + if (__finished()) + return __parse_val(); + + if (*__first == 'm') + { + _String_view __m(__first, 1); + ++__first; + if constexpr (__format::__is_map_formattable<_Tp>) + { + _M_sep = _Seps::_S_comma(); + if (!__no_brace) + { + _M_open = _Seps::_S_braces().substr(0, 1); + _M_close = _Seps::_S_braces().substr(1, 1); + } + if (__finished()) + return __parse_val(__m); + __throw_format_error("format error: element format specifier" + " cannot be provided when 'm' specifier is used"); + } + else + __throw_format_error("format error: 'm' specifier requires" + " range of pairs or tuples of two elements"); + } + + if (__finished()) + return __parse_val(); + + if (*__first == ':') + { + __pc.advance_to(++__first); + __first = _M_fval.parse(__pc); + } + + if (__finished()) + return __finalize(); + + __format::__failed_to_parse_format_spec(); + } + + // We deviate from standard, that declares this as template accepting + // unconstrained FormatContext type, which seems unimplementable. + template<ranges::input_range _Rg, typename _Out> + requires formattable<ranges::range_reference_t<_Rg>, _CharT> && + same_as<remove_cvref_t<ranges::range_reference_t<_Rg>>, _Tp> + typename basic_format_context<_Out, _CharT>::iterator + format(_Rg&& __rg, basic_format_context<_Out, _CharT>& __fc) const + { + using _Range = remove_reference_t<_Rg>; + if constexpr (__format::__simply_formattable_range<_Range, _CharT>) + return _M_format<const _Range>(__rg, __fc); + else + return _M_format(__rg, __fc); + } + + private: + template<ranges::input_range _Rg, typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + _M_format(_Rg& __rg, basic_format_context<_Out, _CharT>& __fc) const + { + if constexpr (same_as<_Tp, _CharT>) + if (_M_spec._M_type == __format::_Pres_str + || _M_spec._M_type == __format::_Pres_esc) + { + __format::__formatter_str __fstr(_M_spec); + return __fstr._M_format_range(__rg, __fc); + } + return __format::__format_padded( + __fc, _M_spec, + [this, &__rg](basic_format_context<_Out, _CharT>& __nfc) + { return _M_format_elems(__rg, __nfc); }); + } + + + template<ranges::input_range _Rg, typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + _M_format_elems(_Rg& __rg, + basic_format_context<_Out, _CharT>& __fc) const + { + auto __out = __format::__write(__fc.out(), _M_open); + + auto __first = ranges::begin(__rg); + auto const __last = ranges::end(__rg); + if (__first == __last) + return __format::__write(__out, _M_close); + + __fc.advance_to(__out); + __out = _M_fval.format(*__first, __fc); + for (++__first; __first != __last; ++__first) + { + __out = __format::__write(__out, _M_sep); + __fc.advance_to(__out); + __out = _M_fval.format(*__first, __fc); + } + + return __format::__write(__out, _M_close); + } + + __format::_Spec<_CharT> _M_spec{}; + _String_view _M_open = _Seps::_S_squares().substr(0, 1); + _String_view _M_close = _Seps::_S_squares().substr(1, 1); + _String_view _M_sep = _Seps::_S_comma(); + formatter<_Tp, _CharT> _M_fval; + }; + + // In standard this is shown as inheriting from specialization of + // exposition only specialization for range-default-formatter for + // each range_format. We opt for simpler implementation. // [format.range.fmtmap], [format.range.fmtset], [format.range.fmtstr], // specializations for maps, sets, and strings - template<ranges::input_range _Rg, typename _CharT> + template<ranges::input_range _Rg, __format::__char _CharT> requires (format_kind<_Rg> != range_format::disabled) && formattable<ranges::range_reference_t<_Rg>, _CharT> struct formatter<_Rg, _CharT> - : __format::__range_default_formatter<format_kind<_Rg>, _Rg, _CharT> - { }; + { + private: + static const bool _S_range_format_is_string = + (format_kind<_Rg> == range_format::string) + || (format_kind<_Rg> == range_format::debug_string); + using _Vt = remove_cvref_t< + ranges::range_reference_t< + __format::__maybe_const_range<_Rg, _CharT>>>; + + static consteval bool _S_is_correct() + { + if constexpr (_S_range_format_is_string) + static_assert(same_as<_Vt, _CharT>); + return true; + } + + static_assert(_S_is_correct()); + + public: + constexpr formatter() noexcept + { + using _Seps = __format::_Separators<_CharT>; + if constexpr (format_kind<_Rg> == range_format::map) + { + static_assert(__format::__is_map_formattable<_Vt>); + _M_under.set_brackets(_Seps::_S_braces().substr(0, 1), + _Seps::_S_braces().substr(1, 1)); + _M_under.underlying().set_brackets({}, {}); + _M_under.underlying().set_separator(_Seps::_S_colon()); + } + else if constexpr (format_kind<_Rg> == range_format::set) + _M_under.set_brackets(_Seps::_S_braces().substr(0, 1), + _Seps::_S_braces().substr(1, 1)); + } + + constexpr void + set_separator(basic_string_view<_CharT> __sep) noexcept + requires (!_S_range_format_is_string) + { _M_under.set_separator(__sep); } + + constexpr void + set_brackets(basic_string_view<_CharT> __open, + basic_string_view<_CharT> __close) noexcept + requires (!_S_range_format_is_string) + { _M_under.set_brackets(__open, __close); } + + // We deviate from standard, that declares this as template accepting + // unconstrained ParseContext type, which seems unimplementable. + constexpr typename basic_format_parse_context<_CharT>::iterator + parse(basic_format_parse_context<_CharT>& __pc) + { + auto __res = _M_under.parse(__pc); + if constexpr (format_kind<_Rg> == range_format::debug_string) + _M_under.set_debug_format(); + return __res; + } + + // We deviate from standard, that declares this as template accepting + // unconstrained FormatContext type, which seems unimplementable. + template<typename _Out> + typename basic_format_context<_Out, _CharT>::iterator + format(__format::__maybe_const_range<_Rg, _CharT>& __rg, + basic_format_context<_Out, _CharT>& __fc) const + { + if constexpr (_S_range_format_is_string) + return _M_under._M_format_range(__rg, __fc); + else + return _M_under.format(__rg, __fc); + } + + private: + using _Formatter_under + = __conditional_t<_S_range_format_is_string, + __format::__formatter_str<_CharT>, + range_formatter<_Vt, _CharT>>; + _Formatter_under _M_under; + }; #endif // C++23 formatting ranges +#undef _GLIBCXX_WIDEN _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/include/std/forward_list b/libstdc++-v3/include/std/forward_list index 166fdb0..d478851 100644 --- a/libstdc++-v3/include/std/forward_list +++ b/libstdc++-v3/include/std/forward_list @@ -49,6 +49,7 @@ #define __glibcxx_want_algorithm_default_value_type #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_incomplete_container_elements #define __glibcxx_want_list_remove_return_type diff --git a/libstdc++-v3/include/std/list b/libstdc++-v3/include/std/list index 170499d..2ba0599 100644 --- a/libstdc++-v3/include/std/list +++ b/libstdc++-v3/include/std/list @@ -73,6 +73,7 @@ #define __glibcxx_want_algorithm_default_value_type #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_incomplete_container_elements #define __glibcxx_want_list_remove_return_type diff --git a/libstdc++-v3/include/std/map b/libstdc++-v3/include/std/map index 16a397f..6bfb538 100644 --- a/libstdc++-v3/include/std/map +++ b/libstdc++-v3/include/std/map @@ -72,6 +72,7 @@ #endif #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_generic_associative_lookup #define __glibcxx_want_map_try_emplace diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric index 4d36fcd..490963e 100644 --- a/libstdc++-v3/include/std/numeric +++ b/libstdc++-v3/include/std/numeric @@ -732,12 +732,11 @@ namespace __detail /// @} group numeric_ops #endif // C++17 +#if __glibcxx_ranges_iota >= 202202L // C++ >= 23 namespace ranges { -#if __glibcxx_ranges_iota >= 202202L // C++ >= 23 - template<typename _Out, typename _Tp> - using iota_result = out_value_result<_Out, _Tp>; + using iota_result = out_value_result<_Out, _Tp>; struct __iota_fn { @@ -762,9 +761,8 @@ namespace ranges }; inline constexpr __iota_fn iota{}; - -#endif // __glibcxx_ranges_iota } // namespace ranges +#endif // __glibcxx_ranges_iota _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/include/std/queue b/libstdc++-v3/include/std/queue index c06a4c3..74b6c07 100644 --- a/libstdc++-v3/include/std/queue +++ b/libstdc++-v3/include/std/queue @@ -68,6 +68,7 @@ #include <bits/stl_queue.h> #define __glibcxx_want_adaptor_iterator_pair_constructor +#define __glibcxx_want_containers_ranges #include <bits/version.h> #endif /* _GLIBCXX_QUEUE */ diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 7a339c5..9300c36 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -64,7 +64,6 @@ #define __glibcxx_want_ranges_chunk #define __glibcxx_want_ranges_chunk_by #define __glibcxx_want_ranges_enumerate -#define __glibcxx_want_ranges_iota #define __glibcxx_want_ranges_join_with #define __glibcxx_want_ranges_repeat #define __glibcxx_want_ranges_slide diff --git a/libstdc++-v3/include/std/set b/libstdc++-v3/include/std/set index 2ebf485..cf7057a 100644 --- a/libstdc++-v3/include/std/set +++ b/libstdc++-v3/include/std/set @@ -72,6 +72,7 @@ #endif #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_generic_associative_lookup #define __glibcxx_want_node_extract diff --git a/libstdc++-v3/include/std/stack b/libstdc++-v3/include/std/stack index 2f7951a..5cea476 100644 --- a/libstdc++-v3/include/std/stack +++ b/libstdc++-v3/include/std/stack @@ -65,6 +65,7 @@ #include <bits/stl_stack.h> #define __glibcxx_want_adaptor_iterator_pair_constructor +#define __glibcxx_want_containers_ranges #include <bits/version.h> #endif /* _GLIBCXX_STACK */ diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string index 6211da9..7186471 100644 --- a/libstdc++-v3/include/std/string +++ b/libstdc++-v3/include/std/string @@ -60,6 +60,7 @@ #define __glibcxx_want_allocator_traits_is_always_equal #define __glibcxx_want_constexpr_char_traits #define __glibcxx_want_constexpr_string +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_nonmember_container_access #define __glibcxx_want_string_resize_and_overwrite diff --git a/libstdc++-v3/include/std/unordered_map b/libstdc++-v3/include/std/unordered_map index 37f2273..3ae25d7 100644 --- a/libstdc++-v3/include/std/unordered_map +++ b/libstdc++-v3/include/std/unordered_map @@ -49,6 +49,7 @@ #endif #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_generic_unordered_lookup #define __glibcxx_want_node_extract diff --git a/libstdc++-v3/include/std/unordered_set b/libstdc++-v3/include/std/unordered_set index 4c73e5d..b561163 100644 --- a/libstdc++-v3/include/std/unordered_set +++ b/libstdc++-v3/include/std/unordered_set @@ -49,6 +49,7 @@ #endif #define __glibcxx_want_allocator_traits_is_always_equal +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_generic_unordered_lookup #define __glibcxx_want_node_extract diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector index 8bb2543..a98ffb1 100644 --- a/libstdc++-v3/include/std/vector +++ b/libstdc++-v3/include/std/vector @@ -81,6 +81,7 @@ #define __glibcxx_want_algorithm_default_value_type #define __glibcxx_want_allocator_traits_is_always_equal #define __glibcxx_want_constexpr_vector +#define __glibcxx_want_containers_ranges #define __glibcxx_want_erase_if #define __glibcxx_want_incomplete_container_elements #define __glibcxx_want_nonmember_container_access diff --git a/libstdc++-v3/src/c++11/string-inst.cc b/libstdc++-v3/src/c++11/string-inst.cc index c486479..34df909 100644 --- a/libstdc++-v3/src/c++11/string-inst.cc +++ b/libstdc++-v3/src/c++11/string-inst.cc @@ -40,7 +40,8 @@ // replaced by constrained function templates, so that we instantiate the // pre-C++17 definitions. // This also causes the instantiation of the non-standard C++0x-era -// insert(iterator, initializer_list<C>) overload, see PR libstdc++/83328 +// insert(iterator, initializer_list<C>) overload, see PR libstdc++/83328, +// and overloads of _S_copy_chars for string iterators and pointers. #define _GLIBCXX_DEFINING_STRING_INSTANTIATIONS 1 #include <string> diff --git a/libstdc++-v3/src/c++17/fast_float/LOCAL_PATCHES b/libstdc++-v3/src/c++17/fast_float/LOCAL_PATCHES index 71495d6..28d86fd 100644 --- a/libstdc++-v3/src/c++17/fast_float/LOCAL_PATCHES +++ b/libstdc++-v3/src/c++17/fast_float/LOCAL_PATCHES @@ -1,2 +1,3 @@ r12-6647 r12-6648 +r15-9382 diff --git a/libstdc++-v3/src/c++17/fast_float/fast_float.h b/libstdc++-v3/src/c++17/fast_float/fast_float.h index 7551c4f..3da58f2 100644 --- a/libstdc++-v3/src/c++17/fast_float/fast_float.h +++ b/libstdc++-v3/src/c++17/fast_float/fast_float.h @@ -275,7 +275,8 @@ fastfloat_really_inline value128 full_multiplication(uint64_t a, // But MinGW on ARM64 doesn't have native support for 64-bit multiplications answer.high = __umulh(a, b); answer.low = a * b; -#elif defined(FASTFLOAT_32BIT) || (defined(_WIN64) && !defined(__clang__)) +#elif defined(FASTFLOAT_32BIT) || \ + (defined(_WIN64) && !defined(__clang__) && !defined(_M_ARM64)) answer.low = _umul128(a, b, &answer.high); // _umul128 not available on ARM64 #elif defined(FASTFLOAT_64BIT) __uint128_t r = ((__uint128_t)a) * b; diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index 12253b9..ea50496 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -599,7 +599,9 @@ export namespace std using std::atomic_schar; using std::atomic_short; using std::atomic_signal_fence; +#ifdef __cpp_lib_atomic_lock_free_type_aliases using std::atomic_signed_lock_free; +#endif using std::atomic_size_t; using std::atomic_store; using std::atomic_store_explicit; @@ -622,7 +624,9 @@ export namespace std using std::atomic_uintptr_t; using std::atomic_ullong; using std::atomic_ulong; +#ifdef __cpp_lib_atomic_lock_free_type_aliases using std::atomic_unsigned_lock_free; +#endif using std::atomic_ushort; using std::atomic_wait; using std::atomic_wait_explicit; @@ -1332,6 +1336,12 @@ export namespace std using std::wformat_context; using std::wformat_parse_context; using std::wformat_string; +// FIXME __cpp_lib_format_ranges +#ifdef __glibcxx_format_ranges + using std::format_kind; + using std::range_format; + using std::range_formatter; +#endif } // <forward_list> diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc index 4458325..f67818d 100644 --- a/libstdc++-v3/testsuite/17_intro/names.cc +++ b/libstdc++-v3/testsuite/17_intro/names.cc @@ -142,6 +142,10 @@ #define try_emplace ( #endif +#if __cplusplus < 202002L +#define ranges ( +#endif + // These clash with newlib so don't use them. # define __lockable cannot be used as an identifier # define __null_sentinel cannot be used as an identifier diff --git a/libstdc++-v3/testsuite/20_util/expected/equality_constrained.cc b/libstdc++-v3/testsuite/20_util/expected/equality_constrained.cc index 7f6cefa..a079d98 100644 --- a/libstdc++-v3/testsuite/20_util/expected/equality_constrained.cc +++ b/libstdc++-v3/testsuite/20_util/expected/equality_constrained.cc @@ -4,7 +4,7 @@ #ifndef __cpp_lib_constrained_equality # error "Feature-test macro for constrained_equality missing in <expected>" -#elif __cpp_lib_constrained_equality < 202411L // TODO: use final value +#elif __cpp_lib_constrained_equality < 202411L # error "Feature-test macro for constrained_equality has wrong value" #endif diff --git a/libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc b/libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc index 48628a9..18d47d2 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc @@ -61,4 +61,4 @@ test03() // { dg-error "tuple index must be in range" "" { target *-*-* } 0 } // { dg-prune-output "no type named 'type' in .*_Nth_type" } -// { dg-prune-output "pack index is out of range" } +// { dg-prune-output "pack index '.' is out of range" } diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/119748.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/119748.cc new file mode 100644 index 0000000..301ca5d --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/119748.cc @@ -0,0 +1,35 @@ +// { dg-do compile } + +// Bug 119748 +// string(InputIterator, InputIterator) rejects volatile charT* as iterator + +#ifndef TEST_CHAR_TYPE +#define TEST_CHAR_TYPE char +#endif + +#include <string> +#include <testsuite_iterators.h> + +typedef TEST_CHAR_TYPE C; + +volatile C vs[42] = {}; +std::basic_string<C> s(vs+0, vs+42); +#ifdef __cpp_lib_containers_ranges +std::basic_string<C> s2(std::from_range, vs); +#endif + +using namespace __gnu_test; + +test_container<volatile C, input_iterator_wrapper> input_cont(vs); +std::basic_string<C> s3(input_cont.begin(), input_cont.end()); + +test_container<volatile C, forward_iterator_wrapper> fwd_cont(vs); +std::basic_string<C> s4(fwd_cont.begin(), fwd_cont.end()); + +#ifdef __cpp_lib_containers_ranges +test_input_range<volatile C> input_range(vs); +std::basic_string<C> s5(std::from_range, input_range); + +test_forward_range<volatile C> fwd_range(vs); +std::basic_string<C> s6(std::from_range, fwd_range); +#endif diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/from_range.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/from_range.cc new file mode 100644 index 0000000..6331050 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/from_range.cc @@ -0,0 +1,129 @@ +// { dg-do run { target c++23 } } + +#include <string> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <string>" +#endif + +#include <span> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <testsuite_allocator.h> + +void +test_deduction_guide(char* p) +{ + __gnu_test::test_input_range<char> r(nullptr, nullptr); + std::basic_string v(std::from_range, r); + static_assert(std::is_same_v<decltype(v), std::string>); + + using Alloc = __gnu_test::SimpleAllocator<char>; + Alloc alloc; + std::basic_string v2(std::from_range, r, alloc); + static_assert(std::is_same_v<decltype(v2), std::basic_string<char, std::char_traits<char>, Alloc>>); + + __gnu_test::test_input_range<wchar_t> wr(nullptr, nullptr); + std::basic_string w(std::from_range, wr); + static_assert(std::is_same_v<decltype(w), std::wstring>); + + using WAlloc = __gnu_test::SimpleAllocator<wchar_t>; + WAlloc walloc; + std::basic_string w2(std::from_range, wr, walloc); + static_assert(std::is_same_v<decltype(w2), std::basic_string<wchar_t, std::char_traits<wchar_t>, WAlloc>>); +} + +template<typename Range, typename Alloc> +constexpr void +do_test(Alloc alloc) +{ + // The basic_string's value_type. + using V = typename std::allocator_traits<Alloc>::value_type; + using CT = std::char_traits<V>; + + // The range's value_type. + using T = std::ranges::range_value_t<Range>; + T a[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}; + + auto eq = [](const std::basic_string<V, CT, Alloc>& l, std::span<T> r) { + if (l.size() != r.size()) + return false; + for (auto i = 0u; i < l.size(); ++i) + if (l[i] != r[i]) + return false; + return true; + }; + + std::basic_string<V, CT, Alloc> v0(std::from_range, Range(a, a+0)); + VERIFY( v0.empty() ); + VERIFY( v0.get_allocator() == Alloc() ); + + std::basic_string<V, CT, Alloc> v4(std::from_range, Range(a, a+4)); + VERIFY( eq(v4, {a, 4}) ); + VERIFY( v4.get_allocator() == Alloc() ); + + std::basic_string<V, CT, Alloc> v9(std::from_range, Range(a, a+9), alloc); + VERIFY( eq(v9, {a, 9}) ); + VERIFY( v9.get_allocator() == alloc ); + + std::basic_string<V, CT, Alloc> v20(std::from_range, Range(a, a+20), alloc); + VERIFY( eq(v20, {a, 20}) ); + VERIFY( v20.get_allocator() == alloc ); +} + +template<typename Range> +void +do_test_a() +{ + do_test<Range>(std::allocator<char>()); + do_test<Range>(__gnu_test::uneq_allocator<char>(42)); + do_test<Range>(std::allocator<wchar_t>()); + do_test<Range>(__gnu_test::uneq_allocator<wchar_t>(42)); +} + +bool +test_ranges() +{ + using namespace __gnu_test; + + do_test_a<test_forward_range<char>>(); + do_test_a<test_forward_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, forward_iterator_wrapper>>(); + + do_test_a<test_input_range<char>>(); + do_test_a<test_input_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper>>(); + + do_test_a<test_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper_nocopy>>(); + + // Not lvalue-convertible to char + struct C { + C(char v) : val(v) { } + operator char() && { return val; } + bool operator==(char b) const { return b == val; } + char val; + }; + using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>; + do_test<rvalue_input_range>(std::allocator<char>()); + + return true; +} + +constexpr bool +test_constexpr() +{ +#if _GLIBCXX_USE_CXX11_ABI + // XXX: this doesn't test the non-forward_range code paths are constexpr. + do_test<std::string_view>(std::allocator<char>()); +#endif // _GLIBCXX_USE_CXX11_ABI + return true; +} + +int main() +{ + test_ranges(); + static_assert( test_constexpr() ); +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/119748.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/119748.cc new file mode 100644 index 0000000..7d3ba10 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/119748.cc @@ -0,0 +1,7 @@ +// { dg-do compile } + +// Bug 119748 +// string(InputIterator, InputIterator) rejects volatile charT* as iterator + +#define TEST_CHAR_TYPE wchar_t +#include "../char/119748.cc" diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/append_range.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/append_range.cc new file mode 100644 index 0000000..6c0bc0c --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/append_range.cc @@ -0,0 +1,125 @@ +// { dg-do run { target c++23 } } + +#include <span> +#include <string> +#include <testsuite_allocator.h> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> + +template<typename Range, typename Alloc> +constexpr void +do_test() +{ + // The vector's value_type. + using V = typename std::allocator_traits<Alloc>::value_type; + using CT = std::char_traits<V>; + + // The range's value_type. + using T = std::ranges::range_value_t<Range>; + T a[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}; + + auto eq = [](const std::basic_string<V, CT, Alloc>& l, std::span<T> r) { + if (l.size() != r.size()) + return false; + for (auto i = 0u; i < l.size(); ++i) + if (l[i] != r[i]) + return false; + return true; + }; + + Range r4(a, a+4); + Range r5(a+4, a+9); + Range r11(a+9, a+20); + + std::basic_string<V, CT, Alloc> v; + v.append_range(r4); + VERIFY( eq(v, {a, 4}) ); + v.append_range(r5); + VERIFY( eq(v, {a, 9}) ); + + std::basic_string<V, CT, Alloc> const s = v; + v.append_range(r11); + VERIFY( eq(v, a) ); + v.append_range(Range(a, a)); + VERIFY( eq(v, a) ); + v.clear(); + v.append_range(Range(a, a)); + VERIFY( v.empty() ); +} + +template<typename Range> +void +do_test_a() +{ + do_test<Range, std::allocator<char>>(); + do_test<Range, __gnu_test::SimpleAllocator<char>>(); + do_test<Range, std::allocator<wchar_t>>(); + do_test<Range, __gnu_test::SimpleAllocator<wchar_t>>(); +} + +bool +test_ranges() +{ + using namespace __gnu_test; + + do_test_a<test_forward_range<char>>(); + do_test_a<test_forward_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, forward_iterator_wrapper>>(); + + do_test_a<test_input_range<char>>(); + do_test_a<test_input_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper>>(); + + do_test_a<test_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper_nocopy>>(); + + // Not lvalue-convertible to char + struct C { + C(char v) : val(v) { } + operator char() && { return val; } + bool operator==(char b) const { return b == val; } + char val; + }; + using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>; + do_test<rvalue_input_range, std::allocator<char>>(); + + return true; +} + +void +test_overlapping() +{ + std::string const s = "1234abcd"; + + std::string c = s; + c.append_range(std::string_view(c)); + VERIFY( c == "1234abcd1234abcd" ); + + c = s; + c.append_range(std::string_view(c).substr(4, 4)); + VERIFY( c == "1234abcdabcd" ); + + c = s; + c.reserve(12); + c.append_range(std::string_view(c).substr(0, 4)); + VERIFY( c == "1234abcd1234" ); +} + +constexpr bool +test_constexpr() +{ +#if _GLIBCXX_USE_CXX11_ABI + // XXX: this doesn't test the non-forward_range code paths are constexpr. + do_test<std::string_view, std::allocator<char>>(); +#endif // _GLIBCXX_USE_CXX11_ABI + return true; +} + +int main() +{ + test_ranges(); + test_overlapping(); + static_assert( test_constexpr() ); +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc new file mode 100644 index 0000000..310c8bc --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc @@ -0,0 +1,116 @@ +// { dg-do run { target c++23 } } + +#include <vector> +#include <span> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <testsuite_allocator.h> + +template<typename Range, typename Alloc> +constexpr void +do_test() +{ + // The vector's value_type. + using V = typename std::allocator_traits<Alloc>::value_type; + using CT = std::char_traits<V>; + + // The range's value_type. + using T = std::ranges::range_value_t<Range>; + T a[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}; + + auto eq = [](const std::basic_string<V, CT, Alloc>& l, std::span<T> r) { + if (l.size() != r.size()) + return false; + for (auto i = 0u; i < l.size(); ++i) + if (l[i] != r[i]) + return false; + return true; + }; + + std::basic_string<V, CT, Alloc> v; + v.assign_range(Range(a, a)); + VERIFY( v.empty() ); + v.assign_range(Range(a, a+4)); + VERIFY( eq(v, {a, 4}) ); + v.assign_range(Range(a, a+9)); + VERIFY( eq(v, {a, 9}) ); + std::basic_string<V, CT, Alloc> const s = v; + v.assign_range(Range(a, a+20)); + VERIFY( eq(v, {a, 20}) ); +} + +template<typename Range> +void +do_test_a() +{ + do_test<Range, std::allocator<char>>(); + do_test<Range, __gnu_test::SimpleAllocator<char>>(); + do_test<Range, std::allocator<wchar_t>>(); + do_test<Range, __gnu_test::SimpleAllocator<wchar_t>>(); +} + +bool +test_ranges() +{ + using namespace __gnu_test; + + do_test_a<test_forward_range<char>>(); + do_test_a<test_forward_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, forward_iterator_wrapper>>(); + + do_test_a<test_input_range<char>>(); + do_test_a<test_input_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper>>(); + + do_test_a<test_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper_nocopy>>(); + + // Not lvalue-convertible to char + struct C { + C(char v) : val(v) { } + operator char() && { return val; } + bool operator==(char b) const { return b == val; } + char val; + }; + using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>; + do_test<rvalue_input_range, std::allocator<char>>(); + + return true; +} + +void +test_overlapping() +{ + std::string const s = "1234abcd"; + + std::string c = s; + c.assign_range(std::string_view(c)); + VERIFY( c == "1234abcd" ); + + c = s; + c.assign_range(std::string_view(c).substr(4, 4)); + VERIFY( c == "abcd" ); + + c = s; + c.assign_range(std::string_view(c).substr(0, 4)); + VERIFY( c == "1234" ); +} + +constexpr bool +test_constexpr() +{ +#if _GLIBCXX_USE_CXX11_ABI + // XXX: this doesn't test the non-forward_range code paths are constexpr. + do_test<std::string_view, std::allocator<char>>(); +#endif // _GLIBCXX_USE_CXX11_ABI + return true; +} + +int main() +{ + test_ranges(); + test_overlapping(); + static_assert( test_constexpr() ); +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/insert_range.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/insert_range.cc new file mode 100644 index 0000000..4fead32 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/insert_range.cc @@ -0,0 +1,130 @@ +// { dg-do run { target c++23 } } + +#include <span> +#include <string> +#include <testsuite_allocator.h> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> + +template<typename Range, typename Alloc> +constexpr void +do_test() +{ + // The vector's value_type. + using V = typename std::allocator_traits<Alloc>::value_type; + using CT = std::char_traits<V>; + + // The range's value_type. + using T = std::ranges::range_value_t<Range>; + T a[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}; + + auto eq = [](const std::basic_string<V, CT, Alloc>& l, std::span<T> r) { + if (l.size() != r.size()) + return false; + for (auto i = 0u; i < l.size(); ++i) + if (l[i] != r[i]) + return false; + return true; + }; + + std::basic_string<V, CT, Alloc> v; + auto it = v.insert_range(v.end(), Range(a, a)); + VERIFY( v.empty() ); + VERIFY( it == v.begin() ); + it = v.insert_range(v.end(), Range(a, a+4)); + VERIFY( eq(v, {a, 4}) ); + VERIFY( it == v.begin() ); + it = v.insert_range(v.end(), Range(a+4, a+9)); + VERIFY( eq(v, {a, 9}) ); + VERIFY( it == v.begin()+4 ); + + std::basic_string<V, CT, Alloc> s = v; + it = v.insert_range(v.end(), Range(a+9, a+20)); + VERIFY( eq(v, {a, 20}) ); + VERIFY( it == v.begin()+9 ); + + v = std::basic_string<V, CT, Alloc>(); + it = v.insert_range(v.begin(), Range(a, a+5)); + VERIFY( it == v.begin() ); + s = v; + it = v.insert_range(v.begin() + 5, Range(a+5, a+20)); + VERIFY( eq(v, {a, 20}) ); + VERIFY( it == v.begin()+5 ); +} + +template<typename Range> +void +do_test_a() +{ + do_test<Range, std::allocator<char>>(); + do_test<Range, __gnu_test::SimpleAllocator<char>>(); + do_test<Range, std::allocator<wchar_t>>(); + do_test<Range, __gnu_test::SimpleAllocator<wchar_t>>(); +} + +bool +test_ranges() +{ + using namespace __gnu_test; + + do_test_a<test_forward_range<char>>(); + do_test_a<test_forward_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, forward_iterator_wrapper>>(); + + do_test_a<test_input_range<char>>(); + do_test_a<test_input_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper>>(); + + do_test_a<test_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper_nocopy>>(); + + // Not lvalue-convertible to char + struct C { + C(char v) : val(v) { } + operator char() && { return val; } + bool operator==(char b) const { return b == val; } + char val; + }; + using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>; + do_test<rvalue_input_range, std::allocator<char>>(); + + return true; +} + +void +test_overlapping() +{ + std::string const s = "1234abcd"; + + std::string c = s; + c.insert_range(c.end(), std::string_view(c)); + VERIFY( c == "1234abcd1234abcd" ); + + c = s; + c.insert_range(c.begin()+4, std::string_view(c).substr(4, 4)); + VERIFY( c == "1234abcdabcd" ); + + c = s; + c.reserve(12); + c.insert_range(c.begin()+2, std::string_view(c).substr(0, 4)); + VERIFY( c == "12123434abcd" ); +} + +constexpr bool +test_constexpr() +{ +#if _GLIBCXX_USE_CXX11_ABI + // XXX: this doesn't test the non-forward_range code paths are constexpr. + do_test<std::string_view, std::allocator<char>>(); +#endif // _GLIBCXX_USE_CXX11_ABI + return true; +} + +int main() +{ + test_ranges(); + test_overlapping(); + static_assert( test_constexpr() ); +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/replace_with_range.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/replace_with_range.cc new file mode 100644 index 0000000..9acf11a --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/replace_with_range.cc @@ -0,0 +1,133 @@ +// { dg-do run { target c++23 } } + +#include <span> +#include <string> +#include <testsuite_allocator.h> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> + +template<typename Range, typename Alloc> +constexpr void +do_test() +{ + // The vector's value_type. + using V = typename std::allocator_traits<Alloc>::value_type; + using CT = std::char_traits<V>; + + // The range's value_type. + using T = std::ranges::range_value_t<Range>; + T a[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}; + + auto eq = [](const std::basic_string<V, CT, Alloc>& l, std::span<T> r) { + if (l.size() != r.size()) + return false; + for (auto i = 0u; i < l.size(); ++i) + if (l[i] != r[i]) + return false; + return true; + }; + + std::basic_string<V, CT, Alloc> v; + v.replace_with_range(v.end(), v.end(), Range(a, a)); + VERIFY( v.empty() ); + v.replace_with_range(v.end(), v.end(), Range(a, a+4)); + VERIFY( eq(v, {a, 4}) ); + v.replace_with_range(v.end(), v.end(), Range(a+4, a+9)); + VERIFY( eq(v, {a, 9}) ); + std::basic_string<V, CT, Alloc> s = v; + v.replace_with_range(v.end(), v.end(), Range(a+9, a+20)); + VERIFY( eq(v, {a, 20}) ); + + v.replace_with_range(v.begin()+10, v.begin()+20, Range(a+5, a+10)); + VERIFY( v.size() == 15 ); + v.replace_with_range(v.begin(), v.begin()+10, Range(a, a+5)); + VERIFY( eq(v, {a, 10}) ); + + s = v; + v.replace_with_range(v.begin(), v.begin()+4, Range(a, a+8)); + VERIFY( v.size() == 14 ); + v.replace_with_range(v.begin()+8, v.begin()+12, Range(a+8, a+16)); + VERIFY( v.size() == 18 ); + v.replace_with_range(v.begin()+16, v.begin()+18, Range(a+16, a+20)); + VERIFY( eq(v, {a, 20}) ); +} + +template<typename Range> +void +do_test_a() +{ + do_test<Range, std::allocator<char>>(); + do_test<Range, __gnu_test::SimpleAllocator<char>>(); + do_test<Range, std::allocator<wchar_t>>(); + do_test<Range, __gnu_test::SimpleAllocator<wchar_t>>(); +} + +bool +test_ranges() +{ + using namespace __gnu_test; + + do_test_a<test_forward_range<char>>(); + do_test_a<test_forward_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, forward_iterator_wrapper>>(); + + do_test_a<test_input_range<char>>(); + do_test_a<test_input_sized_range<char>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper>>(); + + do_test_a<test_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range<char, input_iterator_wrapper_nocopy>>(); + do_test_a<test_sized_range_sized_sent<char, input_iterator_wrapper_nocopy>>(); + + // Not lvalue-convertible to char + struct C { + C(char v) : val(v) { } + operator char() && { return val; } + bool operator==(char b) const { return b == val; } + char val; + }; + using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>; + do_test<rvalue_input_range, std::allocator<char>>(); + + return true; +} + +void +test_overlapping() +{ + std::string const s = "1234abcd"; + + std::string c = s; + c.replace_with_range(c.end(), c.end(), std::string_view(c)); + VERIFY( c == "1234abcd1234abcd" ); + + c = s; + c.replace_with_range(c.begin(), c.begin()+4, std::string_view(c).substr(4, 4)); + VERIFY( c == "abcdabcd" ); + + c = s; + c.replace_with_range(c.begin()+2, c.begin()+4, std::string_view(c).substr(0, 4)); + VERIFY( c == "121234abcd" ); + + c = s; + c.replace_with_range(c.begin()+2, c.begin()+2, std::string_view(c).substr(0, 4)); + VERIFY( c == "12123434abcd" ); +} + +constexpr bool +test_constexpr() +{ +#if _GLIBCXX_USE_CXX11_ABI + // XXX: this doesn't test the non-forward_range code paths are constexpr. + do_test<std::string_view, std::allocator<char>>(); +#endif // _GLIBCXX_USE_CXX11_ABI + return true; +} + +int main() +{ + test_ranges(); + test_overlapping(); + static_assert( test_constexpr() ); +} diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc index 7cb6707..4dbf405 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc @@ -1,4 +1,6 @@ // { dg-do run { target c++11 } } +// { dg-require-effective-target std_allocator_new } +// { dg-xfail-run-if "AIX operator new" { powerpc-ibm-aix* } } // 2010-01-08 Paolo Carlini <paolo.carlini@oracle.com> @@ -19,18 +21,42 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -#include <vector> +#include <deque> #include <testsuite_hooks.h> +#include <replacement_memory_operators.h> // libstdc++/42573 void test01() { - std::vector<int> d(100); - d.push_back(1); - d.push_back(1); - // VERIFY( d.size() < d.capacity() ); + using namespace std; + __gnu_test::counter::reset(); + + const size_t buf_size = _GLIBCXX_STD_C::__deque_buf_size(sizeof(size_t)); + deque<size_t> d; + for (size_t i = 0; i != buf_size; ++i) + d.push_back(i); + + // No shrink if 1st buffer is full, create some front capacity. + d.pop_front(); + + // 1 node array allocation + 2 node allocation = 3. + VERIFY( __gnu_test::counter::count() == 3 ); + VERIFY( __gnu_test::counter::get()._M_increments == 3 ); + d.shrink_to_fit(); - // VERIFY( d.size() == d.capacity() ); + + // No reallocation if no exception support, shrink_to_fit is then a + // no-op. +#if __cpp_exceptions + // 1 node array allocation + 1 node allocation = 2. + const int expected_count = 2; + const int expected_increments = 2; +#else + const int expected_count = 3; + const int expected_increments = 0; +#endif + VERIFY( __gnu_test::counter::count() == expected_count ); + VERIFY( __gnu_test::counter::get()._M_increments == 3 + expected_increments ); } int main() diff --git a/libstdc++-v3/testsuite/23_containers/deque/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/deque/cons/from_range.cc index 96e994d..48fd196 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/cons/from_range.cc @@ -1,6 +1,11 @@ // { dg-do run { target c++23 } } #include <deque> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <deque>" +#endif + #include <span> #include <testsuite_hooks.h> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/flat_map/1.cc b/libstdc++-v3/testsuite/23_containers/flat_map/1.cc index d9d88c4..4fd33f6 100644 --- a/libstdc++-v3/testsuite/23_containers/flat_map/1.cc +++ b/libstdc++-v3/testsuite/23_containers/flat_map/1.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++23 } } +// { dg-timeout-factor 2 } #include <flat_map> diff --git a/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc b/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc index ff180bf..ea0d4b4 100644 --- a/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc +++ b/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++23 } } +// { dg-timeout-factor 2 } #include <flat_map> #include <deque> diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/from_range.cc index 65b378e..aa70105 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/from_range.cc @@ -1,11 +1,15 @@ // { dg-do run { target c++23 } } #include <forward_list> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <forward_list>" +#endif + #include <span> #include <testsuite_hooks.h> #include <testsuite_iterators.h> #include <testsuite_allocator.h> - void test_deduction_guide(long* p) { diff --git a/libstdc++-v3/testsuite/23_containers/list/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/list/cons/from_range.cc index 31448b9..107ad74 100644 --- a/libstdc++-v3/testsuite/23_containers/list/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/list/cons/from_range.cc @@ -1,6 +1,11 @@ // { dg-do run { target c++23 } } #include <list> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <list>" +#endif + #include <span> #include <testsuite_hooks.h> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc index c740471..9935f44 100644 --- a/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <map> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <map>" +#endif + +#include <algorithm> #include <ranges> #include <span> #include <testsuite_allocator.h> diff --git a/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc index 3e456f5..4a8ea9f 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <map> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <map>" +#endif + +#include <algorithm> #include <ranges> #include <span> #include <testsuite_allocator.h> diff --git a/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc index 43821ca..cdba7eb 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc @@ -1,8 +1,13 @@ // { dg-do run { target c++23 } } +#include <set> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <set>" +#endif + #include <algorithm> #include <ranges> -#include <set> #include <span> #include <testsuite_allocator.h> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/priority_queue/cons_from_range.cc b/libstdc++-v3/testsuite/23_containers/priority_queue/cons_from_range.cc index 977ef98..87e404b 100644 --- a/libstdc++-v3/testsuite/23_containers/priority_queue/cons_from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/priority_queue/cons_from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <queue> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <queue>" +#endif + +#include <algorithm> #include <ranges> #include <span> #include <testsuite_allocator.h> diff --git a/libstdc++-v3/testsuite/23_containers/queue/cons_from_range.cc b/libstdc++-v3/testsuite/23_containers/queue/cons_from_range.cc index c21f52c..039d084 100644 --- a/libstdc++-v3/testsuite/23_containers/queue/cons_from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/queue/cons_from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <list> #include <queue> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <queue>" +#endif + +#include <list> #include <span> #include <testsuite_allocator.h> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc index 869326f..efde05d 100644 --- a/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc @@ -1,8 +1,13 @@ // { dg-do run { target c++23 } } +#include <set> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <set>" +#endif + #include <algorithm> #include <ranges> -#include <set> #include <span> #include <testsuite_allocator.h> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/stack/cons_from_range.cc b/libstdc++-v3/testsuite/23_containers/stack/cons_from_range.cc index e957d0c..2ee52e1 100644 --- a/libstdc++-v3/testsuite/23_containers/stack/cons_from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/stack/cons_from_range.cc @@ -1,8 +1,13 @@ // { dg-do run { target c++23 } } +#include <stack> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <span>" +#endif + #include <ranges> #include <span> -#include <stack> #include <testsuite_allocator.h> #include <testsuite_hooks.h> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc index 6d1da5b..36efc2d 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <unordered_map> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <unordered_map>" +#endif + +#include <algorithm> #include <span> #include <testsuite_allocator.h> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_arrow_operator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_arrow_operator_neg.cc new file mode 100644 index 0000000..09870a7 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_arrow_operator_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_arrow_operator + <std::unordered_map<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_const_conversion_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_const_conversion_neg.cc new file mode 100644 index 0000000..7bfe3a8 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_const_conversion_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_const_conversion + <std::unordered_map<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_assignment_neg.cc new file mode 100644 index 0000000..d3b671b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_assignment + <std::unordered_map<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_construction_neg.cc new file mode 100644 index 0000000..d609671 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_construction + <std::unordered_map<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_assignment_neg.cc new file mode 100644 index 0000000..8d2ed6b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_assignment + <std::unordered_map<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_construction_neg.cc new file mode 100644 index 0000000..dd9b7dc --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_construction + <std::unordered_map<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc index 7fbc453..2596798 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc @@ -22,7 +22,7 @@ void test01() { - std::unordered_multimap<int, int> um; + std::unordered_map<int, int> um; um.max_load_factor(-1.0f); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc index 2ca93d3..b551df4 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <unordered_map> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <unordered_map>" +#endif + +#include <algorithm> #include <ranges> #include <span> #include <testsuite_allocator.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc index ff787cf..b2d67fb 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc @@ -22,8 +22,8 @@ void test01() { - std::unordered_map<int, int> um; - const std::unordered_map<int, int>& cum = um; + std::unordered_multimap<int, int> um; + const std::unordered_multimap<int, int>& cum = um; cum.begin(um.bucket_count()); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc index b5ddb18..4d5cb84 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc @@ -22,7 +22,7 @@ void test01() { - std::unordered_map<int, int> um; + std::unordered_multimap<int, int> um; um.bucket_size(um.bucket_count()); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc index 5ba1da5..654d409 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc @@ -22,7 +22,7 @@ void test01() { - std::unordered_map<int, int> um; + std::unordered_multimap<int, int> um; um.cbegin(um.bucket_count()); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc index 031be37..f7149d4 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc @@ -22,7 +22,7 @@ void test01() { - std::unordered_map<int, int> um; + std::unordered_multimap<int, int> um; um.cend(um.bucket_count()); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc index d412fcf..fd0f981 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc @@ -22,7 +22,7 @@ void test01() { - std::unordered_map<int, int> um; + std::unordered_multimap<int, int> um; um.end(um.bucket_count()); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc index 0115351..0c3f86c 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc @@ -22,8 +22,8 @@ void test01() { - std::unordered_map<int, int> um; - const std::unordered_map<int, int>& cum = um; + std::unordered_multimap<int, int> um; + const std::unordered_multimap<int, int>& cum = um; cum.end(um.bucket_count()); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_arrow_operator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_arrow_operator_neg.cc new file mode 100644 index 0000000..8b23020 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_arrow_operator_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_arrow_operator + <std::unordered_multimap<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_const_conversion_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_const_conversion_neg.cc new file mode 100644 index 0000000..62c0280 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_const_conversion_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_const_conversion + <std::unordered_multimap<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_assignment_neg.cc new file mode 100644 index 0000000..9ac5b35 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_assignment + <std::unordered_multimap<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_construction_neg.cc new file mode 100644 index 0000000..4140272 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_construction + <std::unordered_multimap<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_assignment_neg.cc new file mode 100644 index 0000000..32c847c --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_assignment + <std::unordered_multimap<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_construction_neg.cc new file mode 100644 index 0000000..124b9ec --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_map> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_construction + <std::unordered_multimap<int, int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc index 2596798..7fbc453 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc @@ -22,7 +22,7 @@ void test01() { - std::unordered_map<int, int> um; + std::unordered_multimap<int, int> um; um.max_load_factor(-1.0f); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc index 45c3848..d44598d 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <unordered_set> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <unordered_set>" +#endif + +#include <algorithm> #include <ranges> #include <span> #include <testsuite_allocator.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_arrow_operator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_arrow_operator_neg.cc new file mode 100644 index 0000000..1677b20 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_arrow_operator_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_arrow_operator + <std::unordered_multiset<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_const_conversion_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_const_conversion_neg.cc new file mode 100644 index 0000000..0d64a41 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_const_conversion_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_const_conversion + <std::unordered_multiset<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_assignment_neg.cc new file mode 100644 index 0000000..b0d7b9f --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_assignment + <std::unordered_multiset<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_construction_neg.cc new file mode 100644 index 0000000..fa9c5ee --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_construction + <std::unordered_multiset<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_assignment_neg.cc new file mode 100644 index 0000000..b25fedc --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_assignment + <std::unordered_multiset<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_construction_neg.cc new file mode 100644 index 0000000..8b855b2 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_construction + <std::unordered_multiset<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc index 0806045..8259be8 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc @@ -1,7 +1,12 @@ // { dg-do run { target c++23 } } -#include <algorithm> #include <unordered_set> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <unordered_set>" +#endif + +#include <algorithm> #include <span> #include <testsuite_allocator.h> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_arrow_operator_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_arrow_operator_neg.cc new file mode 100644 index 0000000..f62ed6b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_arrow_operator_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_arrow_operator + <std::unordered_set<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_const_conversion_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_const_conversion_neg.cc new file mode 100644 index 0000000..839f9ae --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_const_conversion_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_const_conversion + <std::unordered_set<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_assignment_neg.cc new file mode 100644 index 0000000..377019f --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_assignment + <std::unordered_set<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_construction_neg.cc new file mode 100644 index 0000000..1f7e6dd --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_copy_construction + <std::unordered_set<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_assignment_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_assignment_neg.cc new file mode 100644 index 0000000..d16a154 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_assignment_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_assignment + <std::unordered_set<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_construction_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_construction_neg.cc new file mode 100644 index 0000000..d878abf --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_construction_neg.cc @@ -0,0 +1,17 @@ +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +#include <unordered_set> +#include <debug/unordered_checks.h> + +void test01() +{ + __gnu_test::invalid_local_iterator_move_construction + <std::unordered_set<int>>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc index 37f0ecf..339c06bd 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc @@ -1,5 +1,11 @@ // { dg-do run { target c++23 } } +#include <unordered_set> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <unordered_set>" +#endif + #include <vector> #include <span> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc index 16f6e86..eb24b66 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/format.cc @@ -3,7 +3,6 @@ #include <format> #include <vector> -#include <chrono> // For _Widen #include <testsuite_hooks.h> static_assert(!std::formattable<std::vector<bool>::reference, int>); @@ -21,7 +20,7 @@ is_format_string_for(const char* str, Args&&... args) } } -#define WIDEN_(C, S) ::std::chrono::__detail::_Widen<C>(S, L##S) +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) #define WIDEN(S) WIDEN_(_CharT, S) void @@ -57,6 +56,12 @@ test_output() res = std::format(WIDEN("{:=^#7X}"), v[1]); VERIFY( res == WIDEN("==0X0==") ); + + res = std::format(WIDEN("{}"), v); + VERIFY( res == WIDEN("[true, false]") ); + + res = std::format(WIDEN("{::d}"), v); + VERIFY( res == WIDEN("[1, 0]") ); } int main() diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/from_range.cc index ed2e3ca..7a62645 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/cons/from_range.cc @@ -1,6 +1,11 @@ // { dg-do run { target c++23 } } #include <vector> + +#if __cpp_lib_containers_ranges != 202202L +# error "Feature-test macro __cpp_lib_containers_ranges has wrong value in <vector>" +#endif + #include <span> #include <testsuite_hooks.h> #include <testsuite_iterators.h> diff --git a/libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc b/libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc index 0b18616..e2fbf7d 100644 --- a/libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc +++ b/libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc @@ -22,12 +22,7 @@ template<typename T> using PI = std::projected<T, std::identity>; -#if __GLIBCXX__ -// Verify our projected<I, identity> optimization. -static_assert(std::same_as<PI<int*>, int*>); -#else static_assert(std::same_as<PI<int*>::value_type, int>); -#endif static_assert(std::same_as<decltype(*std::declval<const PI<int*>&>()), int&>); struct X diff --git a/libstdc++-v3/testsuite/std/format/debug.cc b/libstdc++-v3/testsuite/std/format/debug.cc new file mode 100644 index 0000000..71bb7f4 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/debug.cc @@ -0,0 +1,455 @@ +// { dg-options "-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32LE -DUNICODE_ENC" { target le } } +// { dg-options "-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32BE -DUNICODE_ENC" { target be } } +// { dg-do run { target c++23 } } +// { dg-add-options no_pch } + +#include <format> +#include <testsuite_hooks.h> + +std::string +fdebug(char t) +{ return std::format("{:?}", t); } + +std::wstring +fdebug(wchar_t t) +{ return std::format(L"{:?}", t); } + +std::string +fdebug(std::string_view t) +{ return std::format("{:?}", t); } + +std::wstring +fdebug(std::wstring_view t) +{ return std::format(L"{:?}", t); } + + +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define WIDEN(S) WIDEN_(_CharT, S) + +template<typename _CharT> +void +test_basic_escapes() +{ + std::basic_string<_CharT> res; + + const auto tab = WIDEN("\t"); + res = fdebug(tab); + VERIFY( res == WIDEN(R"("\t")") ); + res = fdebug(tab[0]); + VERIFY( res == WIDEN(R"('\t')") ); + + const auto nline = WIDEN("\n"); + res = fdebug(nline); + VERIFY( res == WIDEN(R"("\n")") ); + res = fdebug(nline[0]); + VERIFY( res == WIDEN(R"('\n')") ); + + const auto carret = WIDEN("\r"); + res = fdebug(carret); + VERIFY( res == WIDEN(R"("\r")") ); + res = fdebug(carret[0]); + VERIFY( res == WIDEN(R"('\r')") ); + + const auto bslash = WIDEN("\\"); + res = fdebug(bslash); + VERIFY( res == WIDEN(R"("\\")") ); + res = fdebug(bslash[0]); + VERIFY( res == WIDEN(R"('\\')") ); + + const auto quote = WIDEN("\""); + res = fdebug(quote); + VERIFY( res == WIDEN(R"("\"")") ); + res = fdebug(quote[0]); + VERIFY( res == WIDEN(R"('"')") ); + + const auto apos = WIDEN("\'"); + res = fdebug(apos); + VERIFY( res == WIDEN(R"("'")") ); + res = fdebug(apos[0]); + VERIFY( res == WIDEN(R"('\'')") ); +} + +template<typename _CharT> +void +test_ascii_escapes() +{ + std::basic_string<_CharT> res; + + const auto in = WIDEN("\x10 abcde\x7f\t0123"); + res = fdebug(in); + VERIFY( res == WIDEN(R"("\u{10} abcde\u{7f}\t0123")") ); + res = fdebug(in[0]); + VERIFY( res == WIDEN(R"('\u{10}')") ); + res = fdebug(in[1]); + VERIFY( res == WIDEN(R"(' ')") ); + res = fdebug(in[2]); + VERIFY( res == WIDEN(R"('a')") ); +} + +template<typename _CharT> +void +test_extended_ascii() +{ + std::basic_string<_CharT> res; + + const auto in = WIDEN("Åëÿ"); + res = fdebug(in); + VERIFY( res == WIDEN(R"("Åëÿ")") ); + + static constexpr bool __test_characters +#if UNICODE_ENC + = sizeof(_CharT) >= 2; +#else // ISO8859-1 + = true; +#endif // UNICODE_ENC + + if constexpr (__test_characters) + { + res = fdebug(in[0]); + VERIFY( res == WIDEN(R"('Å')") ); + res = fdebug(in[1]); + VERIFY( res == WIDEN(R"('ë')") ); + res = fdebug(in[2]); + VERIFY( res == WIDEN(R"('ÿ')") ); + } +} + +#if UNICODE_ENC +template<typename _CharT> +void +test_unicode_escapes() +{ + std::basic_string<_CharT> res; + + const auto in = WIDEN( + "\u008a" // Cc, Control, Line Tabulation Set, + "\u00ad" // Cf, Format, Soft Hyphen + "\u1d3d" // Lm, Modifier letter, Modifier Letter Capital Ou + "\u00a0" // Zs, Space Separator, No-Break Space (NBSP) + "\u2029" // Zp, Paragraph Separator, Paragraph Separator + "\U0001f984" // So, Other Symbol, Unicorn Face + ); + const auto out = WIDEN("\"" + R"(\u{8a})" + R"(\u{ad})" + "\u1d3d" + R"(\u{a0})" + R"(\u{2029})" + "\U0001f984" + "\""); + + res = fdebug(in); + VERIFY( res == out ); + + if constexpr (sizeof(_CharT) >= 2) + { + res = fdebug(in[0]); + VERIFY( res == WIDEN(R"('\u{8a}')") ); + res = fdebug(in[1]); + VERIFY( res == WIDEN(R"('\u{ad}')") ); + res = fdebug(in[2]); + VERIFY( res == WIDEN("'\u1d3d'") ); + res = fdebug(in[3]); + VERIFY( res == WIDEN(R"('\u{a0}')") ); + res = fdebug(in[4]); + VERIFY( res == WIDEN(R"('\u{2029}')") ); + } + + if constexpr (sizeof(_CharT) >= 4) + { + res = fdebug(in[5]); + VERIFY( res == WIDEN("'\U0001f984'") ); + } +} + +template<typename _CharT> +void +test_grapheme_extend() +{ + std::basic_string<_CharT> res; + + const auto vin = WIDEN("o\u0302\u0323"); + res = fdebug(vin); + VERIFY( res == WIDEN("\"o\u0302\u0323\"") ); + + std::basic_string_view<_CharT> in = WIDEN("\t\u0302\u0323"); + res = fdebug(in); + VERIFY( res == WIDEN(R"("\t\u{302}\u{323}")") ); + + res = fdebug(in.substr(1)); + VERIFY( res == WIDEN(R"("\u{302}\u{323}")") ); + + if constexpr (sizeof(_CharT) >= 2) + { + res = fdebug(in[1]); + VERIFY( res == WIDEN(R"('\u{302}')") ); + } +} + +template<typename _CharT> +void +test_replacement_char() +{ + std::basic_string<_CharT> repl = WIDEN("\uFFFD"); + std::basic_string<_CharT> res = fdebug(repl); + VERIFY( res == WIDEN("\"\uFFFD\"") ); + + repl = WIDEN("\uFFFD\uFFFD"); + res = fdebug(repl); + VERIFY( res == WIDEN("\"\uFFFD\uFFFD\"") ); +} + +void +test_ill_formed_utf8_seq() +{ + std::string_view seq = "\xf0\x9f\xa6\x84"; // \U0001F984 + std::string res; + + res = fdebug(seq); + VERIFY( res == "\"\U0001F984\"" ); + + res = fdebug(seq.substr(1)); + VERIFY( res == R"("\x{9f}\x{a6}\x{84}")" ); + + res = fdebug(seq.substr(2)); + VERIFY( res == R"("\x{a6}\x{84}")" ); + + res = fdebug(seq[0]); + VERIFY( res == R"('\x{f0}')" ); + res = fdebug(seq.substr(0, 1)); + VERIFY( res == R"("\x{f0}")" ); + + res = fdebug(seq[1]); + VERIFY( res == R"('\x{9f}')" ); + res = fdebug(seq.substr(1, 1)); + VERIFY( res == R"("\x{9f}")" ); + + res = fdebug(seq[2]); + VERIFY( res == R"('\x{a6}')" ); + res = fdebug(seq.substr(2, 1)); + VERIFY( res == R"("\x{a6}")" ); + + res = fdebug(seq[3]); + VERIFY( res == R"('\x{84}')" ); + res = fdebug(seq.substr(3, 1)); + VERIFY( res == R"("\x{84}")" ); +} + +void +test_ill_formed_utf32() +{ + std::wstring res; + + wchar_t ic1 = static_cast<wchar_t>(0xff'ffff); + res = fdebug(ic1); + VERIFY( res == LR"('\x{ffffff}')" ); + + std::wstring is1(1, ic1); + res = fdebug(is1); + VERIFY( res == LR"("\x{ffffff}")" ); + + wchar_t ic2 = static_cast<wchar_t>(0xffff'ffff); + res = fdebug(ic2); + VERIFY( res == LR"('\x{ffffffff}')" ); + + std::wstring is2(1, ic2); + res = fdebug(is2); + VERIFY( res == LR"("\x{ffffffff}")" ); +} +#endif // UNICODE_ENC + +template<typename _CharT> +void +test_fill() +{ + std::basic_string<_CharT> res; + + std::basic_string_view<_CharT> in = WIDEN("a\t\x10\u00ad"); + res = std::format(WIDEN("{:10?}"), in.substr(0, 1)); + VERIFY( res == WIDEN(R"("a" )") ); + + res = std::format(WIDEN("{:->10?}"), in.substr(1, 1)); + VERIFY( res == WIDEN(R"(------"\t")") ); + + res = std::format(WIDEN("{:+<10?}"), in.substr(2, 1)); + VERIFY( res == WIDEN(R"("\u{10}"++)") ); + + + res = std::format(WIDEN("{:10?}"), in[0]); + VERIFY( res == WIDEN(R"('a' )") ); + + res = std::format(WIDEN("{:->10?}"), in[1]); + VERIFY( res == WIDEN(R"(------'\t')") ); + + res = std::format(WIDEN("{:+<10?}"), in[2]); + VERIFY( res == WIDEN(R"('\u{10}'++)") ); + +#if UNICODE_ENC + res = std::format(WIDEN("{:=^10?}"), in.substr(3)); + VERIFY( res == WIDEN(R"(="\u{ad}"=)") ); + + // width is 2 + std::basic_string_view<_CharT> in2 = WIDEN("\u1100"); + res = std::format(WIDEN("{:*^10?}"), in2); + VERIFY( res == WIDEN("***\"\u1100\"***") ); + + if constexpr (sizeof(_CharT) >= 2) + { + res = std::format(WIDEN("{:=^10?}"), in[3]); + VERIFY( res == WIDEN(R"(='\u{ad}'=)") ); + + res = std::format(WIDEN("{:*^10?}"), in2[0]); + VERIFY( res == WIDEN("***'\u1100'***") ); + } +#endif // UNICODE_ENC +} + +template<typename _CharT> +void +test_prec() +{ + std::basic_string<_CharT> res; + // with ? escpaed presentation is copied to ouput, same as source + + std::basic_string_view<_CharT> in = WIDEN("a\t\x10\u00ad"); + res = std::format(WIDEN("{:.2?}"), in.substr(0, 1)); + VERIFY( res == WIDEN(R"("a)") ); + + res = std::format(WIDEN("{:.4?}"), in.substr(1, 1)); + VERIFY( res == WIDEN(R"("\t")") ); + + res = std::format(WIDEN("{:.5?}"), in.substr(2, 1)); + VERIFY( res == WIDEN(R"("\u{1)") ); + +#if UNICODE_ENC + res = std::format(WIDEN("{:.10?}"), in.substr(3)); + VERIFY( res == WIDEN(R"("\u{ad}")") ); + + std::basic_string_view<_CharT> in2 = WIDEN("\u1100"); + res = std::format(WIDEN("{:.3?}"), in2); + VERIFY( res == WIDEN("\"\u1100") ); +#endif // UNICODE_ENC +} + +void test_char_as_wchar() +{ + std::wstring res; + + res = std::format(L"{:?}", 'a'); + VERIFY( res == LR"('a')" ); + + res = std::format(L"{:?}", '\t'); + VERIFY( res == LR"('\t')" ); + + res = std::format(L"{:+<10?}", '\x10'); + VERIFY( res == LR"('\u{10}'++)" ); +} + +template<typename T> +struct DebugWrapper +{ + T val; +}; + +template<typename T, typename CharT> +struct std::formatter<DebugWrapper<T>, CharT> +{ + constexpr std::basic_format_parse_context<CharT>::iterator + parse(std::basic_format_parse_context<CharT>& pc) + { + auto out = under.parse(pc); + under.set_debug_format(); + return out; + } + + template<typename Out> + Out format(DebugWrapper<T> const& t, + std::basic_format_context<Out, CharT>& fc) const + { return under.format(t.val, fc); } + +private: + std::formatter<T, CharT> under; +}; + +template<typename _CharT, typename StrT> +void +test_formatter_str() +{ + _CharT buf[]{ 'a', 'b', 'c', 0 }; + DebugWrapper<StrT> in{ buf }; + std::basic_string<_CharT> res = std::format(WIDEN("{:?}"), in ); + VERIFY( res == WIDEN(R"("abc")") ); +} + +template<typename _CharT> +void +test_formatter_arr() +{ + std::basic_string<_CharT> res; + + DebugWrapper<_CharT[3]> in3{ 'a', 'b', 'c' }; + res = std::format(WIDEN("{:?}"), in3 ); + VERIFY( res == WIDEN(R"("abc")") ); + + // We print all characters, including null-terminator + DebugWrapper<_CharT[4]> in4{ 'a', 'b', 'c', 0 }; + res = std::format(WIDEN("{:?}"), in4 ); + VERIFY( res == WIDEN(R"("abc\u{0}")") ); +} + +template<typename _CharT, typename SrcT> +void +test_formatter_char() +{ + DebugWrapper<SrcT> in{ 'a' }; + std::basic_string<_CharT> res = std::format(WIDEN("{:?}"), in); + VERIFY( res == WIDEN(R"('a')") ); +} + +template<typename CharT> +void +test_formatters() +{ + test_formatter_char<CharT, CharT>(); + test_formatter_str<CharT, CharT*>(); + test_formatter_str<CharT, const CharT*>(); + test_formatter_str<CharT, std::basic_string<CharT>>(); + test_formatter_str<CharT, std::basic_string_view<CharT>>(); + test_formatter_arr<CharT>(); +} + +void +test_formatters_c() +{ + test_formatters<char>(); + test_formatters<wchar_t>(); + test_formatter_char<wchar_t, char>(); +} + +int main() +{ + test_basic_escapes<char>(); + test_basic_escapes<wchar_t>(); + test_ascii_escapes<char>(); + test_ascii_escapes<wchar_t>(); + test_extended_ascii<char>(); + test_extended_ascii<wchar_t>(); + +#if UNICODE_ENC + test_unicode_escapes<char>(); + test_unicode_escapes<wchar_t>(); + test_grapheme_extend<char>(); + test_grapheme_extend<wchar_t>(); + test_replacement_char<char>(); + test_replacement_char<wchar_t>(); + test_ill_formed_utf8_seq(); + test_ill_formed_utf32(); +#endif // UNICODE_ENC + + test_fill<char>(); + test_fill<wchar_t>(); + test_prec<char>(); + test_prec<wchar_t>(); + + test_formatters_c(); +} diff --git a/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc b/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc new file mode 100644 index 0000000..2ac7e75 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc @@ -0,0 +1,5 @@ +// { dg-options "-fexec-charset=ISO8859-1" } +// { dg-do run { target c++23 } } +// { dg-add-options no_pch } + +#include "debug.cc" diff --git a/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc b/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc index ff5f075..1f3edc9 100644 --- a/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc +++ b/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc @@ -4,6 +4,7 @@ // LWG 3944. Formatters converting sequences of char to sequences of wchar_t #include <format> +#include <vector> void test_lwg3944() { @@ -14,11 +15,10 @@ void test_lwg3944() std::format(L"{}",cstr); // { dg-error "here" } // Ill-formed in C++20 - // In C++23 they give L"['h', 'e', 'l', 'l', 'o']" std::format(L"{}", "hello"); // { dg-error "here" } std::format(L"{}", std::string_view("hello")); // { dg-error "here" } std::format(L"{}", std::string("hello")); // { dg-error "here" } -#ifdef __cpp_lib_format_ranges +#ifdef __glibcxx_format_ranges // LWG 3944 does not change this, it's still valid. std::format(L"{}", std::vector{'h', 'e', 'l', 'l', 'o'}); #endif diff --git a/libstdc++-v3/testsuite/std/format/formatter/requirements.cc b/libstdc++-v3/testsuite/std/format/formatter/requirements.cc index 416b9a8..1c9a0a5 100644 --- a/libstdc++-v3/testsuite/std/format/formatter/requirements.cc +++ b/libstdc++-v3/testsuite/std/format/formatter/requirements.cc @@ -70,12 +70,14 @@ test_specializations() // [format.formatter.spec] // LWG 3833. Remove specialization // template<size_t N> struct formatter<const charT[N], charT> - using Farr = std::format_context::formatter_type<const char[1]>; - static_assert( ! std::is_default_constructible_v<Farr> ); - static_assert( ! std::is_copy_constructible_v<Farr> ); - static_assert( ! std::is_move_constructible_v<Farr> ); - static_assert( ! std::is_copy_assignable_v<Farr> ); - static_assert( ! std::is_move_assignable_v<Farr> ); + // Formatter is only expected to be instantiated with only cv-unqual types + // and attempting to instantiate this specialization is ill-formed + // using Farr = std::format_context::formatter_type<const char[1]>; + // static_assert( ! std::is_default_constructible_v<Farr> ); + // static_assert( ! std::is_copy_constructible_v<Farr> ); + // static_assert( ! std::is_move_constructible_v<Farr> ); + // static_assert( ! std::is_copy_assignable_v<Farr> ); + // static_assert( ! std::is_move_assignable_v<Farr> ); } int main() diff --git a/libstdc++-v3/testsuite/std/format/parse_ctx.cc b/libstdc++-v3/testsuite/std/format/parse_ctx.cc index b5dd7cd..b338ac7 100644 --- a/libstdc++-v3/testsuite/std/format/parse_ctx.cc +++ b/libstdc++-v3/testsuite/std/format/parse_ctx.cc @@ -108,7 +108,7 @@ is_std_format_spec_for(std::string_view spec) } } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges constexpr bool escaped_strings_supported = true; #else constexpr bool escaped_strings_supported = false; diff --git a/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc b/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc new file mode 100644 index 0000000..14b9ff2 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc @@ -0,0 +1,94 @@ +// { dg-do run { target c++23 } } + +#include <deque> +#include <flat_map> +#include <flat_set> +#include <format> +#include <list> +#include <map> +#include <set> +#include <testsuite_hooks.h> +#include <unordered_map> +#include <unordered_set> +#include <vector> + +static_assert( std::format_kind<std::vector<int>> == std::range_format::sequence ); +static_assert( std::format_kind<std::deque<int>> == std::range_format::sequence ); +static_assert( std::format_kind<std::list<int>> == std::range_format::sequence ); + +static_assert( std::format_kind<std::set<int>> == std::range_format::set ); +static_assert( std::format_kind<std::multiset<int>> == std::range_format::set ); +static_assert( std::format_kind<std::unordered_set<int>> == std::range_format::set ); +static_assert( std::format_kind<std::unordered_multiset<int>> == std::range_format::set ); +static_assert( std::format_kind<std::flat_set<int>> == std::range_format::set ); +static_assert( std::format_kind<std::flat_multiset<int>> == std::range_format::set ); + +static_assert( std::format_kind<std::map<int, int>> == std::range_format::map ); +static_assert( std::format_kind<std::multimap<int, int>> == std::range_format::map ); +static_assert( std::format_kind<std::unordered_map<int, int>> == std::range_format::map ); +static_assert( std::format_kind<std::unordered_multimap<int, int>> == std::range_format::map ); +static_assert( std::format_kind<std::flat_map<int, int>> == std::range_format::map ); +static_assert( std::format_kind<std::flat_multimap<int, int>> == std::range_format::map ); + +template<typename T> +struct MyVec : std::vector<T> +{}; + +static_assert( std::format_kind<MyVec<int>> == std::range_format::sequence ); + +template<typename T> +struct MySet : std::vector<T> +{ + using key_type = T; +}; + +static_assert( std::format_kind<MySet<int>> == std::range_format::set ); + +template<typename T> +struct MyMap : std::vector<T> +{ + using key_type = T; + using mapped_type = int; +}; + +static_assert( std::format_kind<MyMap<std::pair<int, int>>> == std::range_format::map ); +static_assert( std::format_kind<MyMap<std::tuple<int, int>>> == std::range_format::map ); +static_assert( std::format_kind<MyMap<int>> == std::range_format::set ); + +template<typename T, std::range_format rf> +struct CustFormat : std::vector<T> +{ + using std::vector<T>::vector; +}; + +template<typename T, std::range_format rf> +constexpr auto std::format_kind<CustFormat<T, rf>> = rf; + +void test_override() +{ + CustFormat<int, std::range_format::disabled> disabledf; + static_assert( !std::formattable<decltype(disabledf), char> ); + + CustFormat<int, std::range_format::sequence> seqf{1, 2, 3}; + VERIFY( std::format("{}", seqf) == "[1, 2, 3]" ); + + CustFormat<int, std::range_format::set> setf{1, 2, 3}; + VERIFY( std::format("{}", setf) == "{1, 2, 3}" ); + + // TODO test map once formatter for pair is implenented + + CustFormat<char, std::range_format::string> stringf{'a', 'b', 'c', 'd'}; + VERIFY( std::format("{}", stringf) == "abcd" ); + // Support precision as string do + VERIFY( std::format("{:.2}", stringf) == "ab" ); + + CustFormat<char, std::range_format::debug_string> debugf{'a', 'b', 'c', 'd'}; + VERIFY( std::format("{}", debugf) == R"("abcd")" ); + // Support precision as string do + VERIFY( std::format("{:.3}", debugf) == R"("ab)" ); +} + +int main() +{ + test_override(); +} diff --git a/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc b/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc new file mode 100644 index 0000000..bf8619d --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc @@ -0,0 +1,13 @@ +// { dg-do compile { target c++23 } } + +// C++23 22.14.7.1 [format.range.fmtkind] p1: A program that instantiates +// the primary template of format_kind is ill-formed. + +#include <format> + +template<auto> struct Tester { }; + +Tester<std::format_kind<const int(&)[1]>> t; // { dg-error "here" } + +// { dg-error "use of 'std::format_kind" "" { target *-*-* } 0 } +// { dg-error "primary_template_not_defined" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/std/format/ranges/formatter.cc b/libstdc++-v3/testsuite/std/format/ranges/formatter.cc new file mode 100644 index 0000000..00ce9f6 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/ranges/formatter.cc @@ -0,0 +1,171 @@ +// { dg-do run { target c++23 } } + +#include <flat_map> +#include <format> +#include <testsuite_hooks.h> +#include <vector> + +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define WIDEN(S) WIDEN_(_CharT, S) + +template<typename T, + template<typename, typename> class Formatter = std::range_formatter> +struct MyVector : std::vector<T> +{ + using std::vector<T>::vector; +}; + +template<typename T, + template<typename, typename> class Formatter, + typename CharT> +struct std::formatter<MyVector<T, Formatter>, CharT> +{ + constexpr formatter() noexcept + { + using _CharT = CharT; + _formatter.set_brackets(WIDEN("<"), WIDEN(">")); + _formatter.set_separator(WIDEN("; ")); + } + + constexpr std::basic_format_parse_context<CharT>::iterator + parse(std::basic_format_parse_context<CharT>& pc) + { return _formatter.parse(pc); } + + template<typename Out> + typename std::basic_format_context<Out, CharT>::iterator + format(const MyVector<T, Formatter>& mv, + std::basic_format_context<Out, CharT>& fc) const + { return _formatter.format(mv, fc); } + +private: + Formatter<T, CharT> _formatter; +}; + +template<typename _CharT, template<typename, typename> class Formatter> +void +test_default() +{ + MyVector<int, Formatter> vec{1, 2, 3}; + std::basic_string<_CharT> res; + + res = std::format(WIDEN("{}"), vec); + VERIFY( res == WIDEN("<1; 2; 3>") ); + res = std::format(WIDEN("{:}"), vec); + VERIFY( res == WIDEN("<1; 2; 3>") ); + res = std::format(WIDEN("{:n}"), vec); + VERIFY( res == WIDEN("1; 2; 3") ); + + res = std::format(WIDEN("{:3}"), vec); + VERIFY( res == WIDEN("<1; 2; 3>") ); + + res = std::format(WIDEN("{:10}"), vec); + VERIFY( res == WIDEN("<1; 2; 3> ") ); + + res = std::format(WIDEN("{:{}}"), vec, 10); + VERIFY( res == WIDEN("<1; 2; 3> ") ); + + res = std::format(WIDEN("{1:{0}}"), 10, vec); + VERIFY( res == WIDEN("<1; 2; 3> ") ); + + res = std::format(WIDEN("{:10n}"), vec); + VERIFY( res == WIDEN("1; 2; 3 ") ); + + res = std::format(WIDEN("{:*<11}"), vec); + VERIFY( res == WIDEN("<1; 2; 3>**") ); + + res = std::format(WIDEN("{:->12}"), vec); + VERIFY( res == WIDEN("---<1; 2; 3>") ); + + res = std::format(WIDEN("{:=^13}"), vec); + VERIFY( res == WIDEN("==<1; 2; 3>==") ); + + res = std::format(WIDEN("{:=^13n}"), vec); + VERIFY( res == WIDEN("===1; 2; 3===") ); + + res = std::format(WIDEN("{::#x}"), vec); + VERIFY( res == WIDEN("<0x1; 0x2; 0x3>") ); + + res = std::format(WIDEN("{:|^25n:#05x}"), vec); + VERIFY( res == WIDEN("|||0x001; 0x002; 0x003|||") ); + + // ':' is start of the format string for element + res = std::format(WIDEN("{::^+4}"), vec); + VERIFY( res == WIDEN("< +1 ; +2 ; +3 >") ); +} + +template<typename _CharT, template<typename, typename> class Formatter> +void +test_override() +{ + MyVector<_CharT, Formatter> vc{'a', 'b', 'c', 'd'}; + MyVector<std::pair<int, int>, Formatter> vp{{1, 11}, {2, 21}}; + std::basic_string<_CharT> res; + + res = std::format(WIDEN("{:s}"), vc); + VERIFY( res == WIDEN("abcd") ); + res = std::format(WIDEN("{:?s}"), vc); + VERIFY( res == WIDEN("\"abcd\"") ); + res = std::format(WIDEN("{:+^6s}"), vc); + VERIFY( res == WIDEN("+abcd+") ); + + res = std::format(WIDEN("{:m}"), vp); + VERIFY( res == WIDEN("{1: 11, 2: 21}") ); + res = std::format(WIDEN("{:=^20m}"), vp); + VERIFY( res == WIDEN("==={1: 11, 2: 21}===") ); +} + +template<template<typename, typename> class Formatter> +void test_outputs() +{ + test_default<char, Formatter>(); + test_default<wchar_t, Formatter>(); + test_override<char, Formatter>(); + test_override<wchar_t, Formatter>(); +} + +void +test_nested() +{ + MyVector<MyVector<int>> v + { + {1, 2}, + {11, 12} + }; + + std::string res = std::format("{}", v); + VERIFY( res == "<<1; 2>; <11; 12>>" ); + + res = std::format("{:+^18:n:02}", v); + VERIFY( res == "+<01; 02; 11; 12>+" ); +} + +struct MyFlatMap : std::flat_map<int, int> +{ + using std::flat_map<int, int>::flat_map; +}; + +template<typename CharT> +struct std::formatter<MyFlatMap, CharT> + // This cannot apply format BitVector const&, because formatted type would + // be std::pair<int const&, int const&>, and formatter for + // pair<int const&, int> cannot format it. + : std::range_formatter<MyFlatMap::reference> +{}; + +void test_const_ref_type_mismatch() +{ + MyFlatMap m{{1, 11}, {2, 22}}; + std::string res = std::format("{:m}", m); + VERIFY( res == "{1: 11, 2: 22}" ); +} + +template<typename T, typename CharT> +using VectorFormatter = std::formatter<std::vector<T>, CharT>; + +int main() +{ + test_outputs<std::range_formatter>(); + test_outputs<VectorFormatter>(); + test_nested(); + test_const_ref_type_mismatch(); +} diff --git a/libstdc++-v3/testsuite/std/format/ranges/map.cc b/libstdc++-v3/testsuite/std/format/ranges/map.cc new file mode 100644 index 0000000..1838480 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/ranges/map.cc @@ -0,0 +1,210 @@ +// { dg-do run { target c++23 } } +// { dg-timeout-factor 2 } + +#include <flat_map> +#include <format> +#include <list> +#include <map> +#include <span> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <vector> + +struct NotFormattable +{ + friend auto operator<=>(NotFormattable, NotFormattable) = default; +}; + +static_assert( !std::formattable<std::map<int, NotFormattable>, char> ); +static_assert( !std::formattable<std::map<NotFormattable, int>, wchar_t> ); + +template<typename... Args> +bool +is_format_string_for(const char* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_format_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename... Args> +bool +is_format_string_for(const wchar_t* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_wformat_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename Rg, typename CharT> +bool is_range_formatter_spec_for(CharT const* spec, Rg&& rg) +{ + using V = std::remove_cvref_t<std::ranges::range_reference_t<Rg>>; + std::range_formatter<V, CharT> fmt; + std::basic_format_parse_context<CharT> pc(spec); + try { + (void)fmt.parse(pc); + return true; + } catch (const std::format_error&) { + return false; + } +} + +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define WIDEN(S) WIDEN_(_CharT, S) + +void +test_format_string() +{ + // only pair<T, U> amd tuple<T, U> value types are supported + VERIFY( !is_range_formatter_spec_for("m", std::vector<int>()) ); + VERIFY( !is_format_string_for("{:m}", std::vector<int>()) ); + VERIFY( !is_range_formatter_spec_for("m", std::vector<std::tuple<int, int, int>>()) ); + VERIFY( !is_format_string_for("{:m}", std::vector<std::tuple<int, int, int>>()) ); + + // invalid format stringss + VERIFY( !is_range_formatter_spec_for("?m", std::vector<std::pair<int, int>>()) ); + VERIFY( !is_format_string_for("{:?m}", std::vector<std::pair<int, int>>()) ); + VERIFY( !is_range_formatter_spec_for("m:", std::vector<std::pair<int, int>>()) ); + VERIFY( !is_format_string_for("{:m:}", std::vector<std::pair<int, int>>()) ); + + // precision is not supported + VERIFY( !is_range_formatter_spec_for(".10m", std::vector<std::pair<int, int>>()) ); + VERIFY( !is_format_string_for("{:.10m}", std::vector<std::pair<int, int>>()) ); + VERIFY( !is_format_string_for("{:.{}m}", std::vector<std::pair<int, int>>(), 10) ); + + // width needs to be integer type + VERIFY( !is_format_string_for("{:{}m}", std::vector<std::pair<int, int>>(), 1.0f) ); +} + +template<typename _CharT, typename Range> +void test_output(bool mapIsDefault) +{ + using Sv = std::basic_string_view<_CharT>; + using Pt = std::ranges::range_value_t<Range>; + using Ft = std::remove_cvref_t<std::tuple_element_t<0, Pt>>; + using St = std::remove_cvref_t<std::tuple_element_t<1, Pt>>; + auto makeRange = [](std::span<Pt> s) { + return Range(s.data(), s.data() + s.size()); + }; + + std::basic_string<_CharT> res; + size_t size = 0; + + Ft f1[]{1, 2, 3}; + St s1[]{11, 22, 33}; + Pt v1[]{{f1[0], s1[0]}, {f1[1], s1[1]}, {f1[2], s1[2]}}; + + res = std::format(WIDEN("{}"), makeRange(v1)); + if (mapIsDefault) + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33}") ); + else + VERIFY( res == WIDEN("[(1, 11), (2, 22), (3, 33)]") ); + + res = std::format(WIDEN("{:m}"), makeRange(v1)); + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33}") ); + res = std::format(WIDEN("{:nm}"), makeRange(v1)); + VERIFY( res == WIDEN("1: 11, 2: 22, 3: 33") ); + + res = std::format(WIDEN("{:3m}"), makeRange(v1)); + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33}") ); + + res = std::format(WIDEN("{:25m}"), makeRange(v1)); + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33} ") ); + + res = std::format(WIDEN("{:{}m}"), makeRange(v1), 25); + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33} ") ); + + res = std::format(WIDEN("{1:{0}m}"), 25, makeRange(v1)); + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33} ") ); + + res = std::format(WIDEN("{:25nm}"), makeRange(v1)); + VERIFY( res == WIDEN("1: 11, 2: 22, 3: 33 ") ); + + res = std::format(WIDEN("{:*<23m}"), makeRange(v1)); + VERIFY( res == WIDEN("{1: 11, 2: 22, 3: 33}**") ); + + res = std::format(WIDEN("{:->24m}"), makeRange(v1)); + VERIFY( res == WIDEN("---{1: 11, 2: 22, 3: 33}") ); + + res = std::format(WIDEN("{:=^25m}"), makeRange(v1)); + VERIFY( res == WIDEN("=={1: 11, 2: 22, 3: 33}==") ); + + res = std::format(WIDEN("{:=^25nm}"), makeRange(v1)); + VERIFY( res == WIDEN("===1: 11, 2: 22, 3: 33===") ); + + size = std::formatted_size(WIDEN("{:m}"), makeRange(v1)); + VERIFY( size == Sv(WIDEN("{1: 11, 2: 22, 3: 33}")).size() ); + + size = std::formatted_size(WIDEN("{:3m}"), makeRange(v1)); + VERIFY( size == Sv(WIDEN("{1: 11, 2: 22, 3: 33}")).size() ); + + size = std::formatted_size(WIDEN("{:25m}"), makeRange(v1)); + VERIFY( size == 25 ); +} + +template<class Range> +void test_output_c(bool mapIsDefault = false) +{ + test_output<char, Range>(mapIsDefault); + test_output<wchar_t, Range>(mapIsDefault); +} + +template<template<typename> class RangeT> +void test_output_pc() +{ + test_output_c<RangeT<std::pair<int, int>>>(); + test_output_c<RangeT<std::pair<const int, int>>>(); + test_output_c<RangeT<std::tuple<const int&, int&>>>(); +} + +void +test_outputs() +{ + using namespace __gnu_test; + test_output_c<std::map<int, int>>(true); + test_output_c<std::flat_map<int, int>>(true); + + test_output_pc<std::vector>(); + test_output_pc<std::list>(); + test_output_pc<std::span>(); + + test_output_pc<test_forward_range>(); + test_output_pc<test_input_range>(); + test_output_pc<test_input_range_nocopy>(); +} + +void +test_nested() +{ + std::vector<std::map<int, std::string>> vm{ + {{1, "one"}, {2, "two"}}, + {{1, "jeden"}, {2, "dwa"}}, + }; + std::string res; + + res = std::format("{}", vm); + VERIFY( res == R"([{1: "one", 2: "two"}, {1: "jeden", 2: "dwa"}])" ); + res = std::format("{:n:n}", vm); + VERIFY( res == R"(1: "one", 2: "two", 1: "jeden", 2: "dwa")" ); + + std::map<std::string, std::vector<std::string>> mv{ + {"english", {"zero", "one", "two"}}, + {"polish", {"zero", "jeden", "dwa"}}, + }; + res = std::format("{}", mv); + VERIFY( res == R"({"english": ["zero", "one", "two"], "polish": ["zero", "jeden", "dwa"]})" ); +} + +int main() +{ + test_format_string(); + test_outputs(); + test_nested(); +} diff --git a/libstdc++-v3/testsuite/std/format/ranges/sequence.cc b/libstdc++-v3/testsuite/std/format/ranges/sequence.cc new file mode 100644 index 0000000..f05f6ec --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/ranges/sequence.cc @@ -0,0 +1,207 @@ +// { dg-do run { target c++23 } } +// { dg-timeout-factor 2 } + +#include <array> +#include <format> +#include <list> +#include <ranges> +#include <span> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <vector> + +struct NotFormattable +{}; + +static_assert(!std::formattable<std::vector<NotFormattable>, char>); +static_assert(!std::formattable<std::span<NotFormattable>, wchar_t>); + +template<typename... Args> +bool +is_format_string_for(const char* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_format_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename... Args> +bool +is_format_string_for(const wchar_t* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_wformat_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename Rg, typename CharT> +bool is_range_formatter_spec_for(CharT const* spec, Rg&& rg) +{ + using V = std::remove_cvref_t<std::ranges::range_reference_t<Rg>>; + std::range_formatter<V, CharT> fmt; + std::basic_format_parse_context<CharT> pc(spec); + try { + (void)fmt.parse(pc); + return true; + } catch (const std::format_error&) { + return false; + } +} + +void +test_format_string() +{ + // invalid format spec 'p' + VERIFY( !is_range_formatter_spec_for("p", std::vector<int>()) ); + VERIFY( !is_format_string_for("{:p}", std::vector<int>()) ); + VERIFY( !is_range_formatter_spec_for("np", std::vector<int>()) ); + VERIFY( !is_format_string_for("{:np}", std::vector<int>()) ); + + // width needs to be integer type + VERIFY( !is_format_string_for("{:{}}", std::vector<int>(), 1.0f) ); + + // element format needs to be valid + VERIFY( !is_range_formatter_spec_for(":p", std::vector<int>()) ); + VERIFY( !is_format_string_for("{::p}", std::vector<int>()) ); + VERIFY( !is_range_formatter_spec_for("n:p", std::vector<int>()) ); + VERIFY( !is_format_string_for("{:n:p}", std::vector<int>()) ); +} + +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define WIDEN(S) WIDEN_(_CharT, S) + +template<typename _CharT, typename Range, typename Storage> +void test_output() +{ + using Sv = std::basic_string_view<_CharT>; + using T = std::ranges::range_value_t<Range>; + auto makeRange = [](Storage& s) -> Range { + if constexpr (std::is_same_v<std::remove_cvref_t<Range>, Storage>) + return s; + else + return Range(std::ranges::data(s), + std::ranges::data(s) + std::ranges::size(s)); + }; + + std::basic_string<_CharT> res; + size_t size = 0; + + Storage v1{1, 2, 3}; + res = std::format(WIDEN("{}"), makeRange(v1)); + VERIFY( res == WIDEN("[1, 2, 3]") ); + res = std::format(WIDEN("{:}"), makeRange(v1)); + VERIFY( res == WIDEN("[1, 2, 3]") ); + res = std::format(WIDEN("{:n}"), makeRange(v1)); + VERIFY( res == WIDEN("1, 2, 3") ); + + res = std::format(WIDEN("{:3}"), makeRange(v1)); + VERIFY( res == WIDEN("[1, 2, 3]") ); + + res = std::format(WIDEN("{:10}"), makeRange(v1)); + VERIFY( res == WIDEN("[1, 2, 3] ") ); + + res = std::format(WIDEN("{:{}}"), makeRange(v1), 10); + VERIFY( res == WIDEN("[1, 2, 3] ") ); + + res = std::format(WIDEN("{1:{0}}"), 10, makeRange(v1)); + VERIFY( res == WIDEN("[1, 2, 3] ") ); + + res = std::format(WIDEN("{:10n}"), makeRange(v1)); + VERIFY( res == WIDEN("1, 2, 3 ") ); + + res = std::format(WIDEN("{:*<11}"), makeRange(v1)); + VERIFY( res == WIDEN("[1, 2, 3]**") ); + + res = std::format(WIDEN("{:->12}"), makeRange(v1)); + VERIFY( res == WIDEN("---[1, 2, 3]") ); + + res = std::format(WIDEN("{:=^13}"), makeRange(v1)); + VERIFY( res == WIDEN("==[1, 2, 3]==") ); + + res = std::format(WIDEN("{:=^13n}"), makeRange(v1)); + VERIFY( res == WIDEN("===1, 2, 3===") ); + + res = std::format(WIDEN("{::#x}"), makeRange(v1)); + VERIFY( res == WIDEN("[0x1, 0x2, 0x3]") ); + + res = std::format(WIDEN("{:|^25n:#05x}"), makeRange(v1)); + VERIFY( res == WIDEN("|||0x001, 0x002, 0x003|||") ); + + // ':' is start of the format string for element + res = std::format(WIDEN("{::^+04}"), makeRange(v1)); + VERIFY( res == WIDEN("[ +1 , +2 , +3 ]") ); + + size = std::formatted_size(WIDEN("{:}"), makeRange(v1)); + VERIFY( size == Sv(WIDEN("[1, 2, 3]")).size() ); + + size = std::formatted_size(WIDEN("{:3}"), makeRange(v1)); + VERIFY( size == Sv(WIDEN("[1, 2, 3]")).size() ); + + size = std::formatted_size(WIDEN("{:10}"), makeRange(v1)); + VERIFY( size == 10 ); + + size = std::formatted_size(WIDEN("{:|^25n:#05x}"), makeRange(v1)); + VERIFY( size == 25 ); +} + +template<typename Cont> +void test_output_cont() +{ + test_output<char, Cont&, Cont>(); + test_output<wchar_t, Cont const&, Cont>(); +} + +template<typename View> +void test_output_view() +{ + test_output<char, View, int[3]>(); + test_output<wchar_t, View, int[3]>(); +} + +void +test_outputs() +{ + using namespace __gnu_test; + test_output_cont<std::vector<int>>(); + test_output_cont<std::list<int>>(); + test_output_cont<std::array<int, 3>>(); + + test_output_view<std::span<int>>(); + test_output_view<std::ranges::subrange<int*>>(); + test_output_view<test_forward_range<int>>(); + test_output_view<test_input_range<int>>(); + test_output_view<test_input_range_nocopy<int>>(); + + test_output_view<std::span<const int>>(); + test_output_view<std::ranges::subrange<const int*>>(); + test_output_view<test_forward_range<const int>>(); +} + +void +test_nested() +{ + std::vector<std::vector<int>> v + { + {1, 2}, + {11, 12} + }; + + std::string res = std::format("{}", v); + VERIFY( res == "[[1, 2], [11, 12]]" ); + + res = std::format("{:+^18:n:02}", v); + VERIFY( res == "+[01, 02, 11, 12]+" ); +} + +int main() +{ + test_format_string(); + test_outputs(); + test_nested(); +} diff --git a/libstdc++-v3/testsuite/std/format/ranges/string.cc b/libstdc++-v3/testsuite/std/format/ranges/string.cc new file mode 100644 index 0000000..cf39aa6 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/ranges/string.cc @@ -0,0 +1,227 @@ +// { dg-do run { target c++23 } } +// { dg-timeout-factor 2 } + +#include <format> +#include <span> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <vector> + +template<typename... Args> +bool +is_format_string_for(const char* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_format_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename... Args> +bool +is_format_string_for(const wchar_t* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_wformat_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename Rg, typename CharT> +bool is_range_formatter_spec_for(CharT const* spec, Rg&& rg) +{ + using V = std::remove_cvref_t<std::ranges::range_reference_t<Rg>>; + std::range_formatter<V, CharT> fmt; + std::basic_format_parse_context<CharT> pc(spec); + try { + (void)fmt.parse(pc); + return true; + } catch (const std::format_error&) { + return false; + } +} + +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define WIDEN(S) WIDEN_(_CharT, S) + +void +test_format_string() +{ + // only CharT value types are supported + VERIFY( !is_range_formatter_spec_for(L"s", std::vector<char>()) ); + VERIFY( !is_format_string_for(L"{:s}", std::vector<char>()) ); + VERIFY( !is_range_formatter_spec_for(L"s", std::vector<char>()) ); + VERIFY( !is_format_string_for(L"{:s}", std::vector<char>()) ); + VERIFY( !is_range_formatter_spec_for("s", std::vector<int>()) ); + VERIFY( !is_format_string_for("{:s}", std::vector<int>()) ); + + // invalid format stringss + VERIFY( !is_range_formatter_spec_for("?", std::vector<char>()) ); + VERIFY( !is_format_string_for("{:?}", std::vector<char>()) ); + VERIFY( !is_range_formatter_spec_for("ns", std::vector<char>()) ); + VERIFY( !is_format_string_for("{:ns}", std::vector<char>()) ); + VERIFY( !is_range_formatter_spec_for("s:", std::vector<char>()) ); + VERIFY( !is_format_string_for("{:s:}", std::vector<char>()) ); + + // precision is not supported, even for s + VERIFY( !is_range_formatter_spec_for(".10s", std::vector<char>()) ); + VERIFY( !is_format_string_for("{:.10s}", std::vector<char>()) ); + VERIFY( !is_format_string_for("{:.{}s}", std::vector<char>(), 10) ); + + // width needs to be integer type + VERIFY( !is_format_string_for("{:{}s}", std::vector<char>(), 1.0f) ); +} + +template<typename Range> +void test_output() +{ + using _CharT = std::ranges::range_value_t<Range>; + auto makeRange = [](std::basic_string<_CharT>& s) { + return Range(s.data(), s.data() + s.size()); + }; + std::basic_string<_CharT> res; + size_t size = 0; + + std::basic_string<_CharT> s1 = WIDEN("abcd"); + res = std::format(WIDEN("{}"), makeRange(s1)); + VERIFY( res == WIDEN("['a', 'b', 'c', 'd']") ); + + res = std::format(WIDEN("{::}"), makeRange(s1)); + VERIFY( res == WIDEN("[a, b, c, d]") ); + + res = std::format(WIDEN("{:s}"), makeRange(s1)); + VERIFY( res == WIDEN("abcd") ); + + res = std::format(WIDEN("{:?s}"), makeRange(s1)); + VERIFY( res == WIDEN(R"("abcd")") ); + + res = std::format(WIDEN("{:3s}"), makeRange(s1)); + VERIFY( res == WIDEN("abcd") ); + + res = std::format(WIDEN("{:7s}"), makeRange(s1)); + VERIFY( res == WIDEN("abcd ") ); + + res = std::format(WIDEN("{:{}s}"), makeRange(s1), 7); + VERIFY( res == WIDEN("abcd ") ); + + res = std::format(WIDEN("{1:{0}s}"), 7, makeRange(s1)); + VERIFY( res == WIDEN("abcd ") ); + + res = std::format(WIDEN("{:*>6s}"), makeRange(s1)); + VERIFY( res == WIDEN("**abcd") ); + + res = std::format(WIDEN("{:-<5s}"), makeRange(s1)); + VERIFY( res == WIDEN("abcd-") ); + + res = std::format(WIDEN("{:=^8s}"), makeRange(s1)); + VERIFY( res == WIDEN("==abcd==") ); + + std::basic_string<_CharT> s2(512, static_cast<_CharT>('a')); + res = std::format(WIDEN("{:=^8s}"), makeRange(s2)); + VERIFY( res == s2 ); + + size = std::formatted_size(WIDEN("{:s}"), makeRange(s1)); + VERIFY( size == 4 ); + + size = std::formatted_size(WIDEN("{:3s}"), makeRange(s1)); + VERIFY( size == 4 ); + + size = std::formatted_size(WIDEN("{:7s}"), makeRange(s1)); + VERIFY( size == 7 ); + + size = std::formatted_size(WIDEN("{:s}"), makeRange(s2)); + VERIFY( size == 512 ); +} + +template<typename CharT> +struct cstr_view +{ + cstr_view() = default; + explicit cstr_view(CharT* f, CharT* l) + : ptr(f) + { VERIFY(!*l); } + + struct sentinel + { + friend constexpr + bool operator==(CharT const* ptr, sentinel) noexcept + { return !*ptr; } + }; + + constexpr + CharT* begin() const noexcept + { return ptr; }; + static constexpr + sentinel end() noexcept + { return {}; } + +private: + CharT* ptr = ""; +}; + +template<typename CharT> +void +test_outputs() +{ + using namespace __gnu_test; + test_output<std::vector<CharT>>(); + test_output<std::span<CharT>>(); + test_output<cstr_view<CharT>>(); + + test_output<test_forward_range<CharT>>(); + test_output<test_forward_sized_range<CharT>>(); + + test_output<test_input_range<CharT>>(); + test_output<test_input_sized_range<CharT>>(); + + test_output<test_range_nocopy<CharT, input_iterator_wrapper_nocopy>>(); + test_output<test_sized_range<CharT, input_iterator_wrapper_nocopy>>(); + + test_output<std::span<const CharT>>(); + test_output<cstr_view<const CharT>>(); + test_output<test_forward_range<const CharT>>(); + + static_assert(!std::formattable<std::span<volatile CharT>, CharT>); + static_assert(!std::formattable<std::span<const volatile CharT>, CharT>); +} + +void +test_nested() +{ + std::string_view s1 = "str1"; + std::string_view s2 = "str2"; + + std::vector<std::string> vs; + vs.emplace_back(s1); + vs.emplace_back(s2); + + VERIFY( std::format("{}", vs) == R"(["str1", "str2"])" ); + VERIFY( std::format("{:}", vs) == R"(["str1", "str2"])" ); + VERIFY( std::format("{::?}", vs) == R"(["str1", "str2"])" ); + VERIFY( std::format("{::}", vs) == R"([str1, str2])" ); + + std::vector<std::vector<char>> vv; + vv.emplace_back(s1.begin(), s1.end()); + vv.emplace_back(s2.begin(), s2.end()); + std::string_view escaped = R"([['s', 't', 'r', '1'], ['s', 't', 'r', '2']])"; + + VERIFY( std::format("{}", vv) == escaped ); + VERIFY( std::format("{:}", vv) == escaped ); + VERIFY( std::format("{::}", vv) == escaped ); + VERIFY( std::format("{:::?}", vv) == escaped ); + VERIFY( std::format("{:::}", vv) == R"([[s, t, r, 1], [s, t, r, 2]])" ); + VERIFY( std::format("{::s}", vv) == R"([str1, str2])" ); + VERIFY( std::format("{::?s}", vv) == R"(["str1", "str2"])" ); +} + +int main() +{ + test_format_string(); + test_outputs<char>(); + test_outputs<wchar_t>(); + test_nested(); +} diff --git a/libstdc++-v3/testsuite/std/format/string.cc b/libstdc++-v3/testsuite/std/format/string.cc index ee987a1..76614d4 100644 --- a/libstdc++-v3/testsuite/std/format/string.cc +++ b/libstdc++-v3/testsuite/std/format/string.cc @@ -62,7 +62,7 @@ test_indexing() VERIFY( ! is_format_string_for("{} {0}", 1) ); } -#if __cpp_lib_format_ranges +#if __glibcxx_format_ranges constexpr bool escaped_strings_supported = true; #else constexpr bool escaped_strings_supported = false; diff --git a/libstdc++-v3/testsuite/std/format/tuple.cc b/libstdc++-v3/testsuite/std/format/tuple.cc new file mode 100644 index 0000000..62f9d29 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/tuple.cc @@ -0,0 +1,259 @@ +// { dg-do run { target c++23 } } + +#include <format> +#include <string> +#include <testsuite_hooks.h> +#include <tuple> +#include <utility> + +struct NotFormattable +{}; + +static_assert( !std::formattable<std::pair<int, NotFormattable>, char> ); +static_assert( !std::formattable<std::tuple<int, NotFormattable, int>, wchar_t> ); + +template<typename... Args> +bool +is_format_string_for(const char* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_format_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +template<typename... Args> +bool +is_format_string_for(const wchar_t* str, Args&&... args) +{ + try { + (void) std::vformat(str, std::make_wformat_args(args...)); + return true; + } catch (const std::format_error&) { + return false; + } +} + +#define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S) +#define WIDEN(S) WIDEN_(_CharT, S) + +void +test_format_string() +{ + // invalid format stringss + VERIFY( !is_format_string_for("{:p}", std::tuple<>()) ); + VERIFY( !is_format_string_for("{:nm}", std::tuple<>()) ); + + // 'm' is only valid for 2 elemenst + VERIFY( !is_format_string_for("{:m}", std::tuple<>()) ); + VERIFY( !is_format_string_for("{:m}", std::tuple<int, int, int>()) ); + + // element specifier is not supported + VERIFY( !is_format_string_for("{::}", std::tuple<>()) ); + + // precision is not supported + VERIFY( !is_format_string_for("{:.10}", std::tuple<>()) ); + + // width needs to be integer type + VERIFY( !is_format_string_for("{:{}}", std::tuple<>(), 1.0f) ); +} + +template<typename _CharT> +void test_multi() +{ + using Sv = std::basic_string_view<_CharT>; + using Str = std::basic_string<_CharT>; + + std::basic_string<_CharT> res; + std::size_t size = 0; + std::tuple<int, Str, float> t1(1, WIDEN("test"), 2.1); + + res = std::format(WIDEN("{}"), t1); + VERIFY( res == WIDEN(R"((1, "test", 2.1))") ); + res = std::format(WIDEN("{:}"), t1); + VERIFY( res == WIDEN(R"((1, "test", 2.1))") ); + res = std::format(WIDEN("{:n}"), t1); + VERIFY( res == WIDEN(R"(1, "test", 2.1)") ); + + res = std::format(WIDEN("{:3}"), t1); + VERIFY( res == WIDEN(R"((1, "test", 2.1))") ); + + res = std::format(WIDEN("{:20}"), t1); + VERIFY( res == WIDEN(R"((1, "test", 2.1) )") ); + + res = std::format(WIDEN("{:{}}"), t1, 20); + VERIFY( res == WIDEN(R"((1, "test", 2.1) )") ); + + res = std::format(WIDEN("{1:{0}}"), 20, t1); + VERIFY( res == WIDEN(R"((1, "test", 2.1) )") ); + + res = std::format(WIDEN("{:^>17}"), t1); + VERIFY( res == WIDEN(R"(^(1, "test", 2.1))") ); + + res = std::format(WIDEN("{:$<18}"), t1); + VERIFY( res == WIDEN(R"((1, "test", 2.1)$$)") ); + + res = std::format(WIDEN("{:+^19}"), t1); + VERIFY( res == WIDEN(R"(+(1, "test", 2.1)++)") ); + + res = std::format(WIDEN("{:|^19n}"), t1); + VERIFY( res == WIDEN(R"(||1, "test", 2.1|||)") ); + + size = std::formatted_size(WIDEN("{}"), t1); + VERIFY( size == Sv(WIDEN(R"((1, "test", 2.1))")).size() ); + + size = std::formatted_size(WIDEN("{:3}"), t1); + VERIFY( size == Sv(WIDEN(R"((1, "test", 2.1))")).size() ); + + size = std::formatted_size(WIDEN("{:20}"), t1); + VERIFY( size == 20 ); + + std::tuple<int&, Str&, float&> t2 = t1; + res = std::format(WIDEN("{}"), t2); + VERIFY( res == WIDEN(R"((1, "test", 2.1))") ); + + std::tuple<int, int, int, int> t3(1, 2, 3, 4); + res = std::format(WIDEN("{}"), t3); + VERIFY( res == WIDEN(R"((1, 2, 3, 4))") ); + +} + +template<typename _CharT, typename Tuple> +void test_empty() +{ + std::basic_string<_CharT> res; + + Tuple e1; + res = std::format(WIDEN("{}"), e1); + VERIFY( res == WIDEN(R"(())") ); + + res = std::format(WIDEN("{:}"), e1); + VERIFY( res == WIDEN(R"(())") ); + + res = std::format(WIDEN("{:n}"), e1); + VERIFY( res == WIDEN(R"()") ); + + res = std::format(WIDEN("{:^>6}"), e1); + VERIFY( res == WIDEN(R"(^^^^())") ); +} + +template<typename _CharT, typename Pair> +void test_pair() +{ + using Ft = std::remove_cvref_t<std::tuple_element_t<0, Pair>>; + using St = std::remove_cvref_t<std::tuple_element_t<1, Pair>>; + + std::basic_string<_CharT> res; + + Ft f1 = 1; + St s1 = WIDEN("abc"); + Pair p1(f1, s1); + + res = std::format(WIDEN("{}"), p1); + VERIFY( res == WIDEN(R"((1, "abc"))") ); + + res = std::format(WIDEN("{:}"), p1); + VERIFY( res == WIDEN(R"((1, "abc"))") ); + + res = std::format(WIDEN("{:m}"), p1); + VERIFY( res == WIDEN(R"(1: "abc")") ); + + res = std::format(WIDEN("{:|^12m}"), p1); + VERIFY( res == WIDEN(R"(||1: "abc"||)") ); +} + +template<typename CharT, template<typename, typename> class PairT> +void test_pair_e() +{ + test_pair<CharT, PairT<int, std::basic_string<CharT>>>(); + test_pair<CharT, PairT<int, const CharT*>>(); + test_pair<CharT, PairT<const int, std::basic_string<CharT>>>(); + test_pair<CharT, PairT<int&, std::basic_string<CharT>&>>(); + test_pair<CharT, PairT<const int&, const std::basic_string<CharT>&>>(); +} + +template<typename Pair> +struct MyPair : Pair +{ + using Pair::Pair; +}; + +template<typename Pair, typename CharT> +struct std::formatter<MyPair<Pair>, CharT> +{ + constexpr formatter() noexcept + { + using _CharT = CharT; + _formatter.set_brackets(WIDEN("<"), WIDEN(">")); + _formatter.set_separator(WIDEN("; ")); + } + + constexpr std::basic_format_parse_context<CharT>::iterator + parse(std::basic_format_parse_context<CharT>& pc) + { return _formatter.parse(pc); } + + template<typename Out> + typename std::basic_format_context<Out, CharT>::iterator + format(const MyPair<Pair>& mp, + std::basic_format_context<Out, CharT>& fc) const + { return _formatter.format(mp, fc); } + +private: + std::formatter<Pair, CharT> _formatter; +}; + +template<typename _CharT, template<typename, typename> class PairT> +void test_custom() +{ + std::basic_string<_CharT> res; + MyPair<PairT<int, const _CharT*>> c1(1, WIDEN("abc")); + + res = std::format(WIDEN("{}"), c1); + VERIFY( res == WIDEN(R"(<1; "abc">)") ); + + res = std::format(WIDEN("{:}"), c1); + VERIFY( res == WIDEN(R"(<1; "abc">)") ); + + res = std::format(WIDEN("{:n}"), c1); + VERIFY( res == WIDEN(R"(1; "abc")") ); + + res = std::format(WIDEN("{:m}"), c1); + VERIFY( res == WIDEN(R"(1: "abc")") ); + + res = std::format(WIDEN("{:|^14}"), c1); + VERIFY( res == WIDEN(R"(||<1; "abc">||)") ); +} + +template<typename CharT> +void test_outputs() +{ + test_multi<CharT>(); + test_empty<CharT, std::tuple<>>(); + test_pair_e<CharT, std::pair>(); + test_pair_e<CharT, std::tuple>(); + test_custom<CharT, std::pair>(); + test_custom<CharT, std::tuple>(); +} + +void test_nested() +{ + std::string res; + std::tuple<std::tuple<>, std::pair<int, std::string>> tt{{}, {1, "abc"}}; + + res = std::format("{}", tt); + VERIFY( res == R"(((), (1, "abc")))" ); + res = std::format("{:n}", tt); + VERIFY( res == R"((), (1, "abc"))" ); + res = std::format("{:m}", tt); + VERIFY( res == R"((): (1, "abc"))" ); +} + +int main() +{ + test_format_string(); + test_outputs<char>(); + test_outputs<wchar_t>(); + test_nested(); +} diff --git a/libstdc++-v3/testsuite/util/debug/unordered_checks.h b/libstdc++-v3/testsuite/util/debug/unordered_checks.h index d01ee82..785aeb4 100644 --- a/libstdc++-v3/testsuite/util/debug/unordered_checks.h +++ b/libstdc++-v3/testsuite/util/debug/unordered_checks.h @@ -65,28 +65,36 @@ namespace __gnu_test template<typename _Tp> struct KeyExtractor { - static _Tp get_key(const _Tp& val) + static const _Tp& get_key(const _Tp& val) { return val; } }; template<typename _Tp1, typename _Tp2> - struct KeyExtractor<std::pair<const _Tp1, _Tp2>> + struct KeyExtractor<std::pair<_Tp1, _Tp2>> { - static _Tp1 get_key(const std::pair<const _Tp1, _Tp2>& val) + static const _Tp1& get_key(const std::pair<_Tp1, _Tp2>& val) { return val.first; } }; template<typename _Tp> - void use_erased_local_iterator() + void fill_container(_Tp& c) { typedef _Tp cont_type; typedef typename cont_type::value_type cont_val_type; typedef typename CopyableValueType<cont_val_type>::value_type val_type; generate_unique<val_type> gu; - cont_type c; for (size_t i = 0; i != 5; ++i) c.insert(gu.build()); + } + + template<typename _Tp> + void use_erased_local_iterator() + { + typedef _Tp cont_type; + typedef typename cont_type::value_type cont_val_type; + cont_type c; + fill_container(c); typename cont_type::local_iterator it, end; for (size_t i = 0; i != c.bucket_count(); ++i) @@ -96,22 +104,18 @@ namespace __gnu_test if (it != end) break; } - typename cont_type::key_type key = KeyExtractor<cont_val_type>::get_key(*it); + + const auto& key = KeyExtractor<cont_val_type>::get_key(*it); c.erase(key); VERIFY( it != end ); } template<typename _Tp> - void use_invalid_local_iterator() + typename _Tp::local_iterator + fill_and_get_local_iterator(_Tp& c) { typedef _Tp cont_type; - typedef typename cont_type::value_type cont_val_type; - typedef typename CopyableValueType<cont_val_type>::value_type val_type; - generate_unique<val_type> gu; - - cont_type c; - for (size_t i = 0; i != 5; ++i) - c.insert(gu.build()); + fill_container(c); typename cont_type::local_iterator it; for (size_t i = 0; i != c.bucket_count(); ++i) @@ -120,22 +124,107 @@ namespace __gnu_test if (it != c.end(i)) break; } - cont_val_type val = *it; + + return it; + } + + template<typename _Tp> + void use_invalid_local_iterator() + { + typedef _Tp cont_type; + cont_type c; + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; c.clear(); VERIFY( *it == val ); } template<typename _Tp> - void invalid_local_iterator_pre_increment() + void invalid_local_iterator_arrow_operator() { typedef _Tp cont_type; - typedef typename cont_type::value_type cont_val_type; - typedef typename CopyableValueType<cont_val_type>::value_type val_type; - generate_unique<val_type> gu; + cont_type c; + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; + c.clear(); + VERIFY( *it.operator->() == val ); + } + template<typename _Tp> + void invalid_local_iterator_copy_construction() + { + typedef _Tp cont_type; cont_type c; - for (size_t i = 0; i != 5; ++i) - c.insert(gu.build()); + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; + c.clear(); + typename cont_type::local_iterator lit(it); + VERIFY( *lit == val ); + } + + template<typename _Tp> + void invalid_local_iterator_move_construction() + { + typedef _Tp cont_type; + cont_type c; + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; + c.clear(); + typename cont_type::local_iterator lit(std::move(it)); + VERIFY( *lit == val ); + } + + template<typename _Tp> + void invalid_local_iterator_copy_assignment() + { + typedef _Tp cont_type; + cont_type c; + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; + c.clear(); + typename cont_type::local_iterator lit; + lit = it; + VERIFY( *lit == val ); + } + + template<typename _Tp> + void invalid_local_iterator_move_assignment() + { + typedef _Tp cont_type; + cont_type c; + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; + c.clear(); + typename cont_type::local_iterator lit; + lit = std::move(it); + VERIFY( *lit == val ); + } + + template<typename _Tp> + void invalid_local_iterator_const_conversion() + { + typedef _Tp cont_type; + cont_type c; + auto it = fill_and_get_local_iterator(c); + + const auto& val = *it; + c.clear(); + typename cont_type::const_local_iterator clit(it); + VERIFY( *clit == val ); + } + + template<typename _Tp> + void invalid_local_iterator_pre_increment() + { + typedef _Tp cont_type; + cont_type c; + fill_container(c); auto lit = c.begin(0); for (size_t i = 0; i != 6; ++i) @@ -146,13 +235,8 @@ namespace __gnu_test void invalid_local_iterator_post_increment() { typedef _Tp cont_type; - typedef typename cont_type::value_type cont_val_type; - typedef typename CopyableValueType<cont_val_type>::value_type val_type; - generate_unique<val_type> gu; - cont_type c; - for (size_t i = 0; i != 5; ++i) - c.insert(gu.build()); + fill_container(c); auto lit = c.begin(0); for (size_t i = 0; i != 6; ++i) @@ -163,13 +247,8 @@ namespace __gnu_test void invalid_local_iterator_compare() { typedef _Tp cont_type; - typedef typename cont_type::value_type cont_val_type; - typedef typename CopyableValueType<cont_val_type>::value_type val_type; - generate_unique<val_type> gu; - cont_type c; - for (size_t i = 0; i != 5; ++i) - c.insert(gu.build()); + fill_container(c); typename cont_type::local_iterator it1, it2; size_t i; @@ -194,13 +273,8 @@ namespace __gnu_test void invalid_local_iterator_range() { typedef _Tp cont_type; - typedef typename cont_type::value_type cont_val_type; - typedef typename CopyableValueType<cont_val_type>::value_type val_type; - generate_unique<val_type> gu; - cont_type c; - for (size_t i = 0; i != 5; ++i) - c.insert(gu.build()); + fill_container(c); typename cont_type::local_iterator it, end; for (size_t i = 0; i != c.bucket_count(); ++i) diff --git a/libstdc++-v3/testsuite/util/replacement_memory_operators.h b/libstdc++-v3/testsuite/util/replacement_memory_operators.h index 2516cd2..69afa77 100644 --- a/libstdc++-v3/testsuite/util/replacement_memory_operators.h +++ b/libstdc++-v3/testsuite/util/replacement_memory_operators.h @@ -36,8 +36,12 @@ namespace __gnu_test ~counter() THROW (counter_error) { +#if __cpp_exceptions if (_M_throw && _M_count != 0) throw counter_error(); +#else + VERIFY( !_M_throw || _M_count == 0 ); +#endif } static void @@ -133,8 +137,12 @@ void* operator new(std::size_t size) THROW(std::bad_alloc) { std::printf("operator new is called \n"); void* p = std::malloc(size); +#if __cpp_exceptions if (!p) throw std::bad_alloc(); +#else + VERIFY( p ); +#endif __gnu_test::counter::increment(); return p; } diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index 1b4044c..90cda2f 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -258,8 +258,8 @@ check_version(symbol& test, bool added) test.version_status = symbol::incompatible; // Check that added symbols are added in the latest pre-release version. - bool latestp = (test.version_name == "GLIBCXX_3.4.34" - || test.version_name == "CXXABI_1.3.16" + bool latestp = (test.version_name == "GLIBCXX_3.4.35" + || test.version_name == "CXXABI_1.3.17" || test.version_name == "CXXABI_FLOAT128" || test.version_name == "CXXABI_TM_1"); if (added && !latestp) diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h index 0df6dcc..74a8739 100644 --- a/libstdc++-v3/testsuite/util/testsuite_iterators.h +++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h @@ -610,12 +610,10 @@ namespace __gnu_test test_container(T* _first, T* _last) : bounds(_first, _last) { } -#if __cplusplus >= 201103L template<std::size_t N> explicit - test_container(T (&arr)[N]) : test_container(arr, arr+N) + test_container(T (&arr)[N]) : bounds(arr, arr+N) { } -#endif ItType<T> it(int pos) @@ -894,6 +892,9 @@ namespace __gnu_test using test_input_range = test_range<T, input_iterator_wrapper>; template<typename T> + using test_input_range_nocopy + = test_range_nocopy<T, input_iterator_wrapper_nocopy>; + template<typename T> using test_output_range = test_range<T, output_iterator_wrapper>; diff --git a/maintainer-scripts/ChangeLog b/maintainer-scripts/ChangeLog index d08a03b..3c33199 100644 --- a/maintainer-scripts/ChangeLog +++ b/maintainer-scripts/ChangeLog @@ -1,3 +1,8 @@ +2025-04-17 Jakub Jelinek <jakub@redhat.com> + + * crontab: Snapshots from trunk are now GCC 16 related. + Add GCC 15 snapshots from the respective branch. + 2025-04-07 Jakub Jelinek <jakub@redhat.com> PR web/119227 diff --git a/maintainer-scripts/crontab b/maintainer-scripts/crontab index 7bb7362..c880d7d 100644 --- a/maintainer-scripts/crontab +++ b/maintainer-scripts/crontab @@ -1,7 +1,8 @@ 16 0 * * * sh /home/gccadmin/scripts/update_version_git 50 0 * * * sh /home/gccadmin/scripts/update_web_docs_git 55 0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx_git -32 22 * * 4 sh /home/gccadmin/scripts/gcc_release -s 12:releases/gcc-12 -l -d /sourceware/snapshot-tmp/gcc all -32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 13:releases/gcc-13 -l -d /sourceware/snapshot-tmp/gcc all -32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 14:releases/gcc-14 -l -d /sourceware/snapshot-tmp/gcc all -32 22 * * 7 sh /home/gccadmin/scripts/gcc_release -s 15:master -l -d /sourceware/snapshot-tmp/gcc all +32 22 * * 3 sh /home/gccadmin/scripts/gcc_release -s 12:releases/gcc-12 -l -d /sourceware/snapshot-tmp/gcc all +32 22 * * 4 sh /home/gccadmin/scripts/gcc_release -s 13:releases/gcc-13 -l -d /sourceware/snapshot-tmp/gcc all +32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 14:releases/gcc-14 -l -d /sourceware/snapshot-tmp/gcc all +32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 15:releases/gcc-15 -l -d /sourceware/snapshot-tmp/gcc all +32 22 * * 7 sh /home/gccadmin/scripts/gcc_release -s 16:master -l -d /sourceware/snapshot-tmp/gcc all |