aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--MAINTAINERS1
-rw-r--r--config/ChangeLog4
-rw-r--r--config/bootstrap-lto-locality.mk20
-rwxr-xr-xconfigure19
-rw-r--r--configure.ac19
-rw-r--r--contrib/ChangeLog14
-rwxr-xr-xcontrib/gcc-changelog/git_update_version.py4
-rw-r--r--contrib/unicode/DerivedGeneralCategory.txt4323
-rw-r--r--contrib/unicode/README3
-rwxr-xr-xcontrib/unicode/gen_libstdcxx_unicode_data.py47
-rw-r--r--gcc/BASE-VER2
-rw-r--r--gcc/ChangeLog772
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/ada/ChangeLog10
-rw-r--r--gcc/ada/gnatvsn.ads2
-rw-r--r--gcc/ada/sem_ch8.adb3
-rw-r--r--gcc/avoid-store-forwarding.cc11
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-typeck.cc8
-rw-r--r--gcc/calls.cc62
-rw-r--r--gcc/cgraph.h1
-rw-r--r--gcc/cgraphclones.cc2
-rw-r--r--gcc/cobol/ChangeLog74
-rw-r--r--gcc/cobol/LICENSE29
-rw-r--r--gcc/cobol/Make-lang.in7
-rw-r--r--gcc/cobol/cbldiag.h8
-rw-r--r--gcc/cobol/cdf.y2
-rw-r--r--gcc/cobol/cobol1.cc10
-rw-r--r--gcc/cobol/except.cc4
-rw-r--r--gcc/cobol/gcobol.12
-rw-r--r--gcc/cobol/genapi.cc73
-rw-r--r--gcc/cobol/lang.opt10
-rw-r--r--gcc/cobol/lang.opt.urls6
-rw-r--r--gcc/cobol/lexio.cc6
-rw-r--r--gcc/cobol/parse.y148
-rw-r--r--gcc/cobol/scan.l6
-rw-r--r--gcc/cobol/scan_ante.h3
-rw-r--r--gcc/cobol/show_parse.h3
-rw-r--r--gcc/cobol/symbols.cc177
-rw-r--r--gcc/cobol/symfind.cc27
-rw-r--r--gcc/cobol/token_names.h2
-rw-r--r--gcc/cobol/util.cc47
-rw-r--r--gcc/combine.cc12
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/common.opt.urls11
-rw-r--r--gcc/common/config/s390/s390-common.cc4
-rw-r--r--gcc/config.gcc16
-rw-r--r--gcc/config.in7
-rw-r--r--gcc/config/aarch64/aarch64-c.cc1
-rw-r--r--gcc/config/aarch64/aarch64-cores.def2
-rw-r--r--gcc/config/aarch64/aarch64-protos.h1
-rw-r--r--gcc/config/aarch64/aarch64-sve.md6
-rw-r--r--gcc/config/aarch64/aarch64.cc143
-rw-r--r--gcc/config/aarch64/aarch64.md72
-rw-r--r--gcc/config/alpha/alpha.cc23
-rw-r--r--gcc/config/c6x/c6x.h6
-rw-r--r--gcc/config/gcn/gcn.md4
-rw-r--r--gcc/config/gcn/gcn.opt8
-rw-r--r--gcc/config/gcn/mkoffload.cc3
-rw-r--r--gcc/config/i386/i386-expand.cc50
-rw-r--r--gcc/config/i386/i386-options.cc4
-rw-r--r--gcc/config/i386/i386.cc215
-rw-r--r--gcc/config/i386/i386.h6
-rw-r--r--gcc/config/i386/i386.md4
-rw-r--r--gcc/config/i386/predicates.md14
-rw-r--r--gcc/config/i386/sse.md94
-rw-r--r--gcc/config/i386/x86-tune-costs.h123
-rw-r--r--gcc/config/i386/x86-tune-sched.cc15
-rw-r--r--gcc/config/mips/mips.cc3
-rw-r--r--gcc/config/nvptx/mkoffload.cc3
-rw-r--r--gcc/config/nvptx/nvptx.cc34
-rw-r--r--gcc/config/nvptx/nvptx.md4
-rw-r--r--gcc/config/nvptx/nvptx.opt8
-rw-r--r--gcc/config/riscv/bitmanip.md56
-rw-r--r--gcc/config/riscv/gnu.h59
-rw-r--r--gcc/config/riscv/riscv-cores.def48
-rw-r--r--gcc/config/riscv/riscv-target-attr.cc6
-rw-r--r--gcc/config/riscv/riscv-vsetvl.cc19
-rw-r--r--gcc/config/riscv/riscv.cc5
-rw-r--r--gcc/config/riscv/riscv.h2
-rw-r--r--gcc/config/riscv/riscv.md28
-rw-r--r--gcc/config/riscv/vector.md22
-rw-r--r--gcc/config/rs6000/rs6000.cc11
-rw-r--r--gcc/config/rx/rx.md20
-rw-r--r--gcc/config/s390/9175.md316
-rw-r--r--gcc/config/s390/driver-native.cc4
-rw-r--r--gcc/config/s390/s390-builtins.def8
-rw-r--r--gcc/config/s390/s390-c.cc4
-rw-r--r--gcc/config/s390/s390-opts.h2
-rw-r--r--gcc/config/s390/s390.cc37
-rw-r--r--gcc/config/s390/s390.h18
-rw-r--r--gcc/config/s390/s390.md61
-rw-r--r--gcc/config/s390/s390.opt5
-rw-r--r--gcc/config/sh/sh-modes.def6
-rwxr-xr-xgcc/configure47
-rw-r--r--gcc/configure.ac22
-rw-r--r--gcc/cp/ChangeLog201
-rw-r--r--gcc/cp/constexpr.cc193
-rw-r--r--gcc/cp/constraint.cc4
-rw-r--r--gcc/cp/contracts.cc9
-rw-r--r--gcc/cp/coroutines.cc21
-rw-r--r--gcc/cp/cp-gimplify.cc11
-rw-r--r--gcc/cp/cp-tree.h3
-rw-r--r--gcc/cp/decl.cc2
-rw-r--r--gcc/cp/error.cc59
-rw-r--r--gcc/cp/init.cc4
-rw-r--r--gcc/cp/lambda.cc24
-rw-r--r--gcc/cp/lex.cc3
-rw-r--r--gcc/cp/module.cc60
-rw-r--r--gcc/cp/name-lookup.cc47
-rw-r--r--gcc/cp/parser.cc5
-rw-r--r--gcc/cp/pt.cc16
-rw-r--r--gcc/cp/rtti.cc15
-rw-r--r--gcc/cp/semantics.cc26
-rw-r--r--gcc/d/ChangeLog45
-rw-r--r--gcc/d/d-compiler.cc37
-rw-r--r--gcc/d/d-lang.cc25
-rw-r--r--gcc/d/d-spec.cc50
-rw-r--r--gcc/d/decl.cc15
-rw-r--r--gcc/d/dmd/MERGE2
-rw-r--r--gcc/d/dmd/expressionsem.d6
-rw-r--r--gcc/d/dmd/globals.h1
-rw-r--r--gcc/d/dmd/lexer.d4
-rw-r--r--gcc/d/dmd/location.d23
-rw-r--r--gcc/d/dmd/typesem.d16
-rw-r--r--gcc/d/gdc.texi6
-rw-r--r--gcc/d/imports.cc6
-rw-r--r--gcc/d/lang.opt4
-rw-r--r--gcc/d/lang.opt.urls3
-rw-r--r--gcc/d/types.cc20
-rw-r--r--gcc/doc/cfg.texi10
-rw-r--r--gcc/doc/extend.texi121
-rw-r--r--gcc/doc/gm2.texi8
-rw-r--r--gcc/doc/install.texi6
-rw-r--r--gcc/doc/invoke.texi169
-rw-r--r--gcc/dwarf2out.cc46
-rw-r--r--gcc/dwarf2out.h29
-rw-r--r--gcc/except.cc33
-rw-r--r--gcc/expmed.cc2
-rw-r--r--gcc/flag-types.h7
-rw-r--r--gcc/fold-const.cc6
-rw-r--r--gcc/fortran/ChangeLog263
-rw-r--r--gcc/fortran/check.cc280
-rw-r--r--gcc/fortran/coarray.cc12
-rw-r--r--gcc/fortran/decl.cc20
-rw-r--r--gcc/fortran/dump-parse-tree.cc53
-rw-r--r--gcc/fortran/expr.cc8
-rw-r--r--gcc/fortran/f95-lang.cc6
-rw-r--r--gcc/fortran/frontend-passes.cc1
-rw-r--r--gcc/fortran/gfortran.h9
-rw-r--r--gcc/fortran/gfortran.texi238
-rw-r--r--gcc/fortran/interface.cc31
-rw-r--r--gcc/fortran/intrinsic.cc85
-rw-r--r--gcc/fortran/intrinsic.h17
-rw-r--r--gcc/fortran/intrinsic.texi191
-rw-r--r--gcc/fortran/iresolve.cc48
-rw-r--r--gcc/fortran/iso-fortran-env.def26
-rw-r--r--gcc/fortran/libgfortran.h10
-rw-r--r--gcc/fortran/match.cc405
-rw-r--r--gcc/fortran/openmp.cc42
-rw-r--r--gcc/fortran/parse.cc143
-rw-r--r--gcc/fortran/parse.h2
-rw-r--r--gcc/fortran/resolve.cc197
-rw-r--r--gcc/fortran/simplify.cc25
-rw-r--r--gcc/fortran/trans-decl.cc53
-rw-r--r--gcc/fortran/trans-expr.cc13
-rw-r--r--gcc/fortran/trans-intrinsic.cc195
-rw-r--r--gcc/fortran/trans-openmp.cc1007
-rw-r--r--gcc/fortran/trans-stmt.cc306
-rw-r--r--gcc/fortran/trans-stmt.h1
-rw-r--r--gcc/fortran/trans.cc46
-rw-r--r--gcc/fortran/trans.h19
-rw-r--r--gcc/gcc.cc80
-rw-r--r--gcc/gimple-fold.cc56
-rw-r--r--gcc/gimple-lower-bitint.cc57
-rw-r--r--gcc/gimple-lower-bitint.h1
-rw-r--r--gcc/ginclude/stddef.h15
-rw-r--r--gcc/ipa-cp.cc427
-rw-r--r--gcc/ipa-locality-cloning.cc1137
-rw-r--r--gcc/ipa-locality-cloning.h35
-rw-r--r--gcc/ipa-prop.cc191
-rw-r--r--gcc/ipa-prop.h15
-rw-r--r--gcc/lto-cgraph.cc2
-rw-r--r--gcc/lto-streamer-out.cc2
-rw-r--r--gcc/lto-streamer.h1
-rw-r--r--gcc/lto/ChangeLog10
-rw-r--r--gcc/lto/lto-partition.cc126
-rw-r--r--gcc/lto/lto-partition.h1
-rw-r--r--gcc/lto/lto.cc4
-rw-r--r--gcc/m2/ChangeLog15
-rw-r--r--gcc/m2/gm2-compiler/M2Check.mod21
-rw-r--r--gcc/m2/gm2-compiler/M2MetaError.def3
-rw-r--r--gcc/m2/gm2-compiler/M2Quads.mod10
-rw-r--r--gcc/m2/gm2-compiler/M2Range.mod43
-rw-r--r--gcc/m2/gm2-compiler/SymbolTable.def18
-rw-r--r--gcc/m2/gm2-compiler/SymbolTable.mod137
-rw-r--r--gcc/m2/gm2-gcc/m2expr.def2
-rw-r--r--gcc/m2/gm2-libiberty/pexecute.def16
-rw-r--r--gcc/m2/gm2-libs-coroutines/Executive.def6
-rw-r--r--gcc/m2/gm2-libs-iso/ClientSocket.def2
-rw-r--r--gcc/m2/gm2-libs-log/BlockOps.def2
-rw-r--r--gcc/m2/gm2-libs-log/InOut.def4
-rw-r--r--gcc/m2/gm2-libs/FormatStrings.mod4
-rw-r--r--gcc/m2/mc/mcFileName.def2
-rw-r--r--gcc/opts.cc21
-rw-r--r--gcc/params.opt31
-rw-r--r--gcc/passes.def1
-rw-r--r--gcc/po/gcc.pot12966
-rw-r--r--gcc/po/sv.po392
-rw-r--r--gcc/profile-count.cc23
-rw-r--r--gcc/profile-count.h3
-rw-r--r--gcc/rust/ChangeLog159
-rw-r--r--gcc/rust/Make-lang.in1
-rw-r--r--gcc/rust/ast/rust-ast.h1
-rw-r--r--gcc/rust/ast/rust-expr.h12
-rw-r--r--gcc/rust/checks/errors/rust-const-checker.cc3
-rw-r--r--gcc/rust/expand/rust-macro-builtins-format-args.cc7
-rw-r--r--gcc/rust/expand/rust-macro-builtins.cc2
-rw-r--r--gcc/rust/expand/rust-macro-expand.cc21
-rw-r--r--gcc/rust/expand/rust-token-tree-desugar.cc72
-rw-r--r--gcc/rust/expand/rust-token-tree-desugar.h55
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-item.cc2
-rw-r--r--gcc/rust/resolve/rust-early-name-resolver-2.0.cc7
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc12
-rw-r--r--gcc/rust/rust-gcc.cc254
-rw-r--r--gcc/rust/rust-session-manager.cc2
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-expr.cc129
-rw-r--r--gcc/rust/util/rust-attribute-values.h27
-rw-r--r--gcc/rust/util/rust-attributes.cc22
-rw-r--r--gcc/rust/util/rust-attributes.h7
-rw-r--r--gcc/rust/util/rust-lang-item.cc1
-rw-r--r--gcc/rust/util/rust-lang-item.h2
-rw-r--r--gcc/sanitizer.def2
-rw-r--r--gcc/testsuite/ChangeLog868
-rw-r--r--gcc/testsuite/c-c++-common/analyzer/realloc-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/tsan/pr119801.c24
-rw-r--r--gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob3
-rw-r--r--gcc/testsuite/g++.dg/abi/ref-temp1.C13
-rw-r--r--gcc/testsuite/g++.dg/concepts/diagnostic20.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ice21.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-diag2.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-new.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-prvalue1a.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr63996.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp23/constexpr-nonlit18.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp26/pack-indexing2.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp26/static_assert1.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-dtor7.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic10.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-new26.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-new3.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constinit14.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C12
-rw-r--r--gcc/testsuite/g++.dg/eh/pr119507.C21
-rw-r--r--gcc/testsuite/g++.dg/ext/pragma-target2.C18
-rw-r--r--gcc/testsuite/g++.dg/ext/type_pack_element2.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/type_pack_element4.C2
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov.exp15
-rw-r--r--gcc/testsuite/g++.dg/lto/pr119614_0.C34
-rw-r--r--gcc/testsuite/g++.dg/modules/lambda-10_a.H17
-rw-r--r--gcc/testsuite/g++.dg/modules/lambda-10_b.C7
-rw-r--r--gcc/testsuite/g++.dg/modules/lambda-8_b.C2
-rw-r--r--gcc/testsuite/g++.dg/modules/leg-merge-4_c.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/noexcept-4_a.H6
-rw-r--r--gcc/testsuite/g++.dg/modules/noexcept-4_b.C18
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C25
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C9
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C10
-rw-r--r--gcc/testsuite/g++.dg/no-stack-protector-attr-3.C1
-rw-r--r--gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C20
-rw-r--r--gcc/testsuite/g++.dg/opt/pr119327.C16
-rw-r--r--gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C17
-rw-r--r--gcc/testsuite/g++.dg/pr112822.C2
-rw-r--r--gcc/testsuite/g++.dg/template/explicit-args6.C8
-rw-r--r--gcc/testsuite/g++.dg/template/friend86.C25
-rw-r--r--gcc/testsuite/g++.dg/template/friend87.C42
-rw-r--r--gcc/testsuite/g++.dg/torture/pr119610.C18
-rw-r--r--gcc/testsuite/g++.dg/torture/pr119778.C20
-rw-r--r--gcc/testsuite/g++.dg/warn/Wformat-3.C19
-rw-r--r--gcc/testsuite/g++.target/aarch64/spaceship_1.C192
-rw-r--r--gcc/testsuite/g++.target/aarch64/spaceship_2.C72
-rw-r--r--gcc/testsuite/g++.target/aarch64/spaceship_3.C9
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C20
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr119706.C178
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-bad_cast-1.C15
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2.C13
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-bad_cast-2_-mfake-exceptions.C18
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-bad_cast-3.C10
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-pr118794-1.C17
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-pr118794-1_-mfake-exceptions.C16
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-throw-1.C16
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-throw-2.C14
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-throw-2_-mfake-exceptions.C19
-rw-r--r--gcc/testsuite/g++.target/gcn/exceptions-throw-3.C11
-rw-r--r--gcc/testsuite/g++.target/gcn/gcn.exp56
-rw-r--r--gcc/testsuite/g++.target/gcn/pr119692-1-1.C6
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-1.C15
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2.C13
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-2_-mfake-exceptions.C19
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-bad_cast-3.C10
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1.C17
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-pr118794-1_-mfake-exceptions.C16
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-throw-1.C16
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-throw-2.C14
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-throw-2_-mfake-exceptions.C19
-rw-r--r--gcc/testsuite/g++.target/nvptx/exceptions-throw-3.C11
-rw-r--r--gcc/testsuite/g++.target/nvptx/pr119692-1-1.C6
-rw-r--r--gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C212
-rw-r--r--gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C82
-rw-r--r--gcc/testsuite/g++.target/s390/pr119834.C76
-rw-r--r--gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-4.c4
-rw-r--r--gcc/testsuite/gcc.dg/bf-ms-attrib.c2
-rw-r--r--gcc/testsuite/gcc.dg/bitint-121.c24
-rw-r--r--gcc/testsuite/gcc.dg/bitint-122.c20
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c30
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-sra-19.c2
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr119318.c37
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr119530.c21
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr119803.c16
-rw-r--r--gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/ira-shrinkwrap-prep-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/memcpy-4.c7
-rw-r--r--gcc/testsuite/gcc.dg/pr116357.c6
-rw-r--r--gcc/testsuite/gcc.dg/pr118947-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr119160.c26
-rw-r--r--gcc/testsuite/gcc.dg/pr119717.c24
-rw-r--r--gcc/testsuite/gcc.dg/pr78408-3.c14
-rw-r--r--gcc/testsuite/gcc.dg/raw-string-1.c25
-rw-r--r--gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c71
-rw-r--r--gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c74
-rw-r--r--gcc/testsuite/gcc.dg/torture/bitint-76.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/bitint-77.c26
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr118476-1.c14
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c30
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c21
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c30
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c26
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c25
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr119757.c17
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-early-break_18.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-early-break_38.c1
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-31.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov.exp15
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c54
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c7
-rw-r--r--gcc/testsuite/gcc.target/aarch64/acle/rwsr-ungated.c13
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/bic-1.c40
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c15
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_10_run.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_5_run.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_6_run.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_7_run.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_8_run.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9.c25
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/peel_ind_9_run.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pr119351.c39
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c20
-rw-r--r--gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c76
-rw-r--r--gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c64
-rw-r--r--gcc/testsuite/gcc.target/arm/ivopts.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/lob1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/lob6.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/unsigned-extend-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/apx-interrupt-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c79
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/blendv-to-pand.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119386-1.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119386-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119386-3.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119784a.c96
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119784b.c87
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119919.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/pr89618-2.c8
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c12
-rw-r--r--gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp6
-rw-r--r--gcc/testsuite/gcc.target/mips/clear-cache-1.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/memcpy-2.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/power11-3.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/bext-ext-2.c74
-rw-r--r--gcc/testsuite/gcc.target/riscv/gnu-property-align-rv32.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/gnu-property-align-rv64.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c24
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c48
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c50
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c35
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c51
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c34
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c56
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr108016.c33
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr118410-1.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr118410-2.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c8
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c4
-rw-r--r--gcc/testsuite/gcc.target/sh/pr111814.c7
-rw-r--r--gcc/testsuite/gdc.dg/debug/imports/m119817/a.d2
-rw-r--r--gcc/testsuite/gdc.dg/debug/imports/m119817/b.d2
-rw-r--r--gcc/testsuite/gdc.dg/debug/imports/m119817/package.d4
-rw-r--r--gcc/testsuite/gdc.dg/debug/imports/pr119826b.d14
-rw-r--r--gcc/testsuite/gdc.dg/debug/pr119817.d6
-rw-r--r--gcc/testsuite/gdc.dg/debug/pr119826.d8
-rw-r--r--gcc/testsuite/gdc.dg/driver_fonly1.d2
-rw-r--r--gcc/testsuite/gdc.dg/driver_fonly2.d8
-rw-r--r--gcc/testsuite/gdc.dg/driver_fonly3.d8
-rw-r--r--gcc/testsuite/gdc.dg/gcov.exp15
-rw-r--r--gcc/testsuite/gdc.dg/import-c/import-c.exp29
-rw-r--r--gcc/testsuite/gdc.dg/import-c/pr119761.d2
-rw-r--r--gcc/testsuite/gdc.dg/import-c/pr119761c.c4
-rw-r--r--gcc/testsuite/gdc.dg/import-c/pr119799.d2
-rw-r--r--gcc/testsuite/gdc.dg/import-c/pr119799c.c1
-rw-r--r--gcc/testsuite/gdc.dg/imports/fonly.d3
-rw-r--r--gcc/testsuite/gdc.dg/torture/imports/pr109023.d3
-rw-r--r--gcc/testsuite/gdc.dg/torture/pr109023.d6
-rw-r--r--gcc/testsuite/gdc.test/compilable/test21179.d11
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d18
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test21247.d20
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test21247b.d14
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/coindexed_3.f081
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/coindexed_5.f9080
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/get_team_1.f9029
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/image_status_1.f082
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_10.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_49.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_collectives_12.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_collectives_16.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_critical_2.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_critical_3.f9032
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f904
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f904
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_this_image_1.f9063
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_this_image_2.f9068
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_this_image_3.f9031
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f902
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-1.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f902
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-3.f9023
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-4.f909
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-5.f909
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping.f9024
-rw-r--r--gcc/testsuite/gfortran.dg/interface_59.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/move_alloc_11.f9023
-rw-r--r--gcc/testsuite/gfortran.dg/num_images_1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr102458.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr119502.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_1.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_2.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_3.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_4.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/pure_formal_proc_4.f9049
-rw-r--r--gcc/testsuite/gfortran.dg/team_change_2.f9093
-rw-r--r--gcc/testsuite/gfortran.dg/team_change_3.f9029
-rw-r--r--gcc/testsuite/gfortran.dg/team_end_2.f9042
-rw-r--r--gcc/testsuite/gfortran.dg/team_end_3.f9041
-rw-r--r--gcc/testsuite/gfortran.dg/team_form_2.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/team_form_3.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/team_get_1.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/team_number_1.f906
-rw-r--r--gcc/testsuite/gfortran.dg/team_sync_1.f9024
-rw-r--r--gcc/testsuite/gfortran.dg/team_sync_2.f9027
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/pass/doc-examples-pass.exp18
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd.mod32
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/pass/exampleadd2.mod32
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/pass/hello.mod10
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/pass/hellopim.mod10
-rw-r--r--gcc/testsuite/gm2/pim/fail/constintarraybyte.mod10
-rw-r--r--gcc/testsuite/gm2/pimlib/run/pass/format2.mod63
-rw-r--r--gcc/testsuite/gnat.dg/gcov/gcov.exp15
-rw-r--r--gcc/testsuite/gnat.dg/lto29.adb9
-rw-r--r--gcc/testsuite/gnat.dg/lto29_pkg.ads15
-rw-r--r--gcc/testsuite/gnat.dg/opt105.adb30
-rw-r--r--gcc/testsuite/gnat.dg/opt105_pkg.adb6
-rw-r--r--gcc/testsuite/gnat.dg/opt105_pkg.ads11
-rw-r--r--gcc/testsuite/gnat.dg/renaming17.adb17
-rw-r--r--gcc/testsuite/go.dg/pr119533-riscv-2.go42
-rw-r--r--gcc/testsuite/go.dg/pr119533-riscv.go120
-rw-r--r--gcc/testsuite/lib/gcc-dg.exp3
-rw-r--r--gcc/testsuite/lib/target-supports.exp22
-rw-r--r--gcc/testsuite/rust/compile/enum_discriminant2.rs9
-rw-r--r--gcc/testsuite/rust/compile/format_args_extra_comma.rs47
-rw-r--r--gcc/testsuite/rust/compile/macros/mbe/macro-issue3693.rs10
-rw-r--r--gcc/testsuite/rust/compile/macros/mbe/macro-issue3708.rs80
-rw-r--r--gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-1.rs10
-rw-r--r--gcc/testsuite/rust/compile/macros/mbe/macro-issue3709-2.rs81
-rw-r--r--gcc/testsuite/rust/compile/nr2/compile.exp11
-rw-r--r--gcc/testsuite/rust/compile/track_caller.rs6
-rw-r--r--gcc/testsuite/rust/execute/torture/min_specialization2.rs31
-rw-r--r--gcc/testsuite/rust/execute/torture/min_specialization3.rs36
-rw-r--r--gcc/timevar.def1
-rw-r--r--gcc/tree-inline.cc7
-rw-r--r--gcc/tree-pass.h1
-rw-r--r--gcc/tree-pretty-print.cc2
-rw-r--r--gcc/tree-ssa-coalesce.cc22
-rw-r--r--gcc/tree-ssa-dse.cc16
-rw-r--r--gcc/tree-ssa-phiopt.cc9
-rw-r--r--gcc/tree-tailcall.cc157
-rw-r--r--gcc/tree-vect-loop.cc138
-rw-r--r--gcc/tree-vect-slp.cc24
-rw-r--r--gcc/tree-vect-stmts.cc64
-rw-r--r--gcc/tree-vectorizer.h18
-rw-r--r--gcc/tree.def6
-rw-r--r--gcc/vec.h8
-rw-r--r--libatomic/ChangeLog20
-rw-r--r--libatomic/config/mingw/lock.c50
-rw-r--r--libatomic/config/posix/lock.c39
-rw-r--r--libbacktrace/ChangeLog5
-rw-r--r--libcpp/lex.cc5
-rw-r--r--libgcc/ChangeLog80
-rw-r--r--libgcc/config/gcn/unwind-gcn.c6
-rw-r--r--libgcc/config/i386/gthr-win32.h81
-rw-r--r--libgcc/config/nvptx/unwind-nvptx.c6
-rw-r--r--libgcc/config/sh/sfp-machine.h80
-rw-r--r--libgcobol/ChangeLog72
-rw-r--r--libgcobol/acinclude.m4124
-rw-r--r--libgcobol/config.h.in3
-rwxr-xr-xlibgcobol/configure176
-rw-r--r--libgcobol/configure.ac3
-rw-r--r--libgcobol/configure.tgt7
-rw-r--r--libgcobol/gfileio.cc31
-rw-r--r--libgcobol/intrinsic.cc14
-rw-r--r--libgcobol/libgcobol-fp.h9
-rw-r--r--libgcobol/libgcobol.cc93
-rw-r--r--libgcobol/valconv.cc6
-rw-r--r--libgfortran/ChangeLog80
-rw-r--r--libgfortran/caf/libcaf.h46
-rw-r--r--libgfortran/caf/single.c278
-rw-r--r--libgfortran/io/close.c13
-rw-r--r--libgfortran/io/open.c10
-rw-r--r--libgomp/ChangeLog166
-rw-r--r--libgomp/libgomp.texi12
-rw-r--r--libgomp/omp.h.in132
-rw-r--r--libgomp/testsuite/lib/libgomp.exp133
-rw-r--r--libgomp/testsuite/libgomp.c++/allocator-1.C171
-rw-r--r--libgomp/testsuite/libgomp.c++/allocator-2.C141
-rw-r--r--libgomp/testsuite/libgomp.c++/pr106445-1-O0.C3
-rw-r--r--libgomp/testsuite/libgomp.c++/pr106445-1.C18
-rw-r--r--libgomp/testsuite/libgomp.c++/pr119692-1-1.C10
-rw-r--r--libgomp/testsuite/libgomp.c++/pr119692-1-2.C11
-rw-r--r--libgomp/testsuite/libgomp.c++/pr119692-1-3.C10
-rw-r--r--libgomp/testsuite/libgomp.c++/pr119692-1-4.C10
-rw-r--r--libgomp/testsuite/libgomp.c++/pr119692-1-5.C10
-rw-r--r--libgomp/testsuite/libgomp.c++/pr96390.C2
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C25
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C19
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C19
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2.C24
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-3.C17
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-GCN.C24
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1-offload-sorry-nvptx.C24
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-pr118794-1.C57
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-1-O0.C23
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-1.C25
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-O0.C25
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-GCN.C21
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-2-offload-sorry-nvptx.C21
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-2.C23
-rw-r--r--libgomp/testsuite/libgomp.c++/target-exceptions-throw-3.C19
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/interop-2.c129
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/pr96390.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/private.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/shared.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/simd-aligned.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/simd-nontemporal.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c2
-rw-r--r--libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c4
-rw-r--r--libgomp/testsuite/libgomp.c/interop-cublas-full.c176
-rw-r--r--libgomp/testsuite/libgomp.c/interop-cublas-libonly.c7
-rw-r--r--libgomp/testsuite/libgomp.c/interop-cuda-full.c159
-rw-r--r--libgomp/testsuite/libgomp.c/interop-cuda-libonly.c8
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hip-amd-full.c7
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c8
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c8
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c10
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c9
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hip.h234
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c7
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c8
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c7
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c9
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c8
-rw-r--r--libgomp/testsuite/libgomp.c/interop-hipblas.h240
-rw-r--r--libgomp/testsuite/libgomp.fortran/allocatable-comp.f9053
-rw-r--r--libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F907
-rw-r--r--libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F906
-rw-r--r--libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F909
-rw-r--r--libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F908
-rw-r--r--libgomp/testsuite/libgomp.fortran/interop-hip.h214
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-3.f90121
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-4.f90124
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-5.f9053
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90308
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90672
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90268
-rw-r--r--libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90559
-rw-r--r--libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90532
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-1.C54
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-GCN.C18
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2-offload-sorry-nvptx.C20
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-2.C60
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-bad_cast-3.C49
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-1.C46
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-GCN.C20
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2-offload-sorry-nvptx.C22
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-2.C55
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/exceptions-throw-3.C43
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/pr119692-1-1.C42
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/pr119692-1-2.C12
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/pr119692-1-3.C12
-rw-r--r--libphobos/ChangeLog24
-rw-r--r--libphobos/Makefile.in1
-rwxr-xr-xlibphobos/configure53
-rw-r--r--libphobos/configure.ac1
-rw-r--r--libphobos/libdruntime/MERGE2
-rw-r--r--libphobos/libdruntime/Makefile.am5
-rw-r--r--libphobos/libdruntime/Makefile.in6
-rw-r--r--libphobos/libdruntime/__importc_builtins.di (renamed from libphobos/libdruntime/__builtins.di)10
-rw-r--r--libphobos/m4/druntime/os.m427
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/Makefile.am3
-rw-r--r--libphobos/src/Makefile.in4
-rw-r--r--libphobos/src/std/format/write.d11
-rw-r--r--libphobos/src/std/random.d66
-rw-r--r--libphobos/testsuite/Makefile.in1
-rwxr-xr-xlibphobos/testsuite/testsuite_flags.in2
-rw-r--r--libstdc++-v3/ChangeLog416
-rw-r--r--libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt15
-rw-r--r--libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt214
-rw-r--r--libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt220
-rw-r--r--libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt11
-rw-r--r--libstdc++-v3/doc/html/manual/using_concurrency.html10
-rw-r--r--libstdc++-v3/doc/xml/manual/appendix_contributing.xml2
-rw-r--r--libstdc++-v3/doc/xml/manual/using.xml12
-rw-r--r--libstdc++-v3/include/bits/basic_string.h225
-rw-r--r--libstdc++-v3/include/bits/basic_string.tcc3
-rw-r--r--libstdc++-v3/include/bits/chrono_io.h16
-rw-r--r--libstdc++-v3/include/bits/cow_string.h124
-rw-r--r--libstdc++-v3/include/bits/deque.tcc4
-rw-r--r--libstdc++-v3/include/bits/forward_list.h20
-rw-r--r--libstdc++-v3/include/bits/iterator_concepts.h5
-rw-r--r--libstdc++-v3/include/bits/ranges_base.h4
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h8
-rw-r--r--libstdc++-v3/include/bits/stl_deque.h12
-rw-r--r--libstdc++-v3/include/bits/stl_list.h12
-rw-r--r--libstdc++-v3/include/bits/stl_map.h8
-rw-r--r--libstdc++-v3/include/bits/stl_multimap.h8
-rw-r--r--libstdc++-v3/include/bits/stl_multiset.h8
-rw-r--r--libstdc++-v3/include/bits/stl_queue.h14
-rw-r--r--libstdc++-v3/include/bits/stl_set.h8
-rw-r--r--libstdc++-v3/include/bits/stl_stack.h8
-rw-r--r--libstdc++-v3/include/bits/stl_vector.h16
-rw-r--r--libstdc++-v3/include/bits/unicode-data.h260
-rw-r--r--libstdc++-v3/include/bits/unicode.h17
-rw-r--r--libstdc++-v3/include/bits/unordered_map.h14
-rw-r--r--libstdc++-v3/include/bits/unordered_set.h14
-rw-r--r--libstdc++-v3/include/bits/vector.tcc4
-rw-r--r--libstdc++-v3/include/bits/version.def23
-rw-r--r--libstdc++-v3/include/bits/version.h17
-rw-r--r--libstdc++-v3/include/debug/deque8
-rw-r--r--libstdc++-v3/include/debug/forward_list10
-rw-r--r--libstdc++-v3/include/debug/list10
-rw-r--r--libstdc++-v3/include/debug/map.h4
-rw-r--r--libstdc++-v3/include/debug/multimap.h4
-rw-r--r--libstdc++-v3/include/debug/multiset.h4
-rw-r--r--libstdc++-v3/include/debug/set.h4
-rw-r--r--libstdc++-v3/include/debug/unordered_map8
-rw-r--r--libstdc++-v3/include/debug/unordered_set8
-rw-r--r--libstdc++-v3/include/debug/vector6
-rw-r--r--libstdc++-v3/include/std/deque1
-rw-r--r--libstdc++-v3/include/std/format1255
-rw-r--r--libstdc++-v3/include/std/forward_list1
-rw-r--r--libstdc++-v3/include/std/list1
-rw-r--r--libstdc++-v3/include/std/map1
-rw-r--r--libstdc++-v3/include/std/numeric8
-rw-r--r--libstdc++-v3/include/std/queue1
-rw-r--r--libstdc++-v3/include/std/ranges1
-rw-r--r--libstdc++-v3/include/std/set1
-rw-r--r--libstdc++-v3/include/std/stack1
-rw-r--r--libstdc++-v3/include/std/string1
-rw-r--r--libstdc++-v3/include/std/unordered_map1
-rw-r--r--libstdc++-v3/include/std/unordered_set1
-rw-r--r--libstdc++-v3/include/std/vector1
-rw-r--r--libstdc++-v3/src/c++11/string-inst.cc3
-rw-r--r--libstdc++-v3/src/c++17/fast_float/LOCAL_PATCHES1
-rw-r--r--libstdc++-v3/src/c++17/fast_float/fast_float.h3
-rw-r--r--libstdc++-v3/src/c++23/std.cc.in10
-rw-r--r--libstdc++-v3/testsuite/17_intro/names.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/expected/equality_constrained.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/119748.cc35
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/from_range.cc129
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/119748.cc7
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/append_range.cc125
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc116
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/insert_range.cc130
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/replace_with_range.cc133
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/cons/from_range.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/flat_map/1.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/from_range.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/cons/from_range.cc5
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/priority_queue/cons_from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/queue/cons_from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/stack/cons_from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_arrow_operator_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_const_conversion_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_copy_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_move_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_arrow_operator_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_const_conversion_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_copy_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_move_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_arrow_operator_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_const_conversion_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_copy_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_move_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_arrow_operator_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_const_conversion_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_copy_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_assignment_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_move_construction_neg.cc17
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/format.cc9
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/cons/from_range.cc5
-rw-r--r--libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc5
-rw-r--r--libstdc++-v3/testsuite/std/format/debug.cc455
-rw-r--r--libstdc++-v3/testsuite/std/format/debug_nonunicode.cc5
-rw-r--r--libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc4
-rw-r--r--libstdc++-v3/testsuite/std/format/formatter/requirements.cc14
-rw-r--r--libstdc++-v3/testsuite/std/format/parse_ctx.cc2
-rw-r--r--libstdc++-v3/testsuite/std/format/ranges/format_kind.cc94
-rw-r--r--libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc13
-rw-r--r--libstdc++-v3/testsuite/std/format/ranges/formatter.cc171
-rw-r--r--libstdc++-v3/testsuite/std/format/ranges/map.cc210
-rw-r--r--libstdc++-v3/testsuite/std/format/ranges/sequence.cc207
-rw-r--r--libstdc++-v3/testsuite/std/format/ranges/string.cc227
-rw-r--r--libstdc++-v3/testsuite/std/format/string.cc2
-rw-r--r--libstdc++-v3/testsuite/std/format/tuple.cc259
-rw-r--r--libstdc++-v3/testsuite/util/debug/unordered_checks.h152
-rw-r--r--libstdc++-v3/testsuite/util/replacement_memory_operators.h8
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc4
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_iterators.h7
-rw-r--r--maintainer-scripts/ChangeLog5
-rw-r--r--maintainer-scripts/crontab9
821 files changed, 40238 insertions, 10252 deletions
diff --git a/ChangeLog b/ChangeLog
index 16b716c..2fb380b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
diff --git a/configure b/configure
index bf574ef..ebc4441 100755
--- a/configure
+++ b/configure
@@ -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);
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index aac33e9..4fd87f2 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -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> &parameters,
for (auto &param : 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> &parameters,
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 *> &param_vars)
{
- if (function == error_mark_node)
+ if (error_operand_p (function))
return false;
tree params = NULL_TREE;
tree *pp = &params;
- 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.
diff --git a/gcc/vec.h b/gcc/vec.h
index 915df06..eae4b0f 100644
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -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