Merge branches/gcc-6-branch rev 239654.
authorYvan Roux <yvan.roux@linaro.org>
Mon, 22 Aug 2016 13:07:28 +0000 (15:07 +0200)
committerYvan Roux <yvan.roux@linaro.org>
Mon, 22 Aug 2016 13:07:28 +0000 (15:07 +0200)
Change-Id: I21e71f9dc10e3bedc0760cd5cc6b8d36234e3d41

345 files changed:
ChangeLog
boehm-gc/ChangeLog
config/ChangeLog
contrib/ChangeLog
contrib/download_prerequisites
contrib/header-tools/ChangeLog
contrib/reghunt/ChangeLog
contrib/regression/ChangeLog
fixincludes/ChangeLog
gcc/BASE-VER
gcc/ChangeLog
gcc/DATESTAMP
gcc/ada/ChangeLog
gcc/asan.c
gcc/c-family/ChangeLog
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/c/c-typeck.c
gcc/cfgrtl.c
gcc/combine.c
gcc/common/config/avr/avr-common.c
gcc/config/aarch64/aarch64-builtins.c
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h
gcc/config/avr/avr.c
gcc/config/avr/avr.h
gcc/config/avr/avr.md
gcc/config/i386/avx512bwintrin.h
gcc/config/i386/avx512dqintrin.h
gcc/config/i386/avx512fintrin.h
gcc/config/i386/avx512ifmaintrin.h
gcc/config/i386/avx512ifmavlintrin.h
gcc/config/i386/avx512vbmiintrin.h
gcc/config/i386/avx512vbmivlintrin.h
gcc/config/i386/avx512vlbwintrin.h
gcc/config/i386/avx512vldqintrin.h
gcc/config/i386/avx512vlintrin.h
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/pa/pa.c
gcc/config/pa/pa.md
gcc/config/rl78/rl78-expand.md
gcc/config/rl78/rl78-real.md
gcc/config/rl78/rl78-virt.md
gcc/config/rs6000/altivec.md
gcc/config/rs6000/constraints.md
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md
gcc/config/s390/s390-builtin-types.def
gcc/config/s390/s390-builtins.def
gcc/config/s390/s390.c
gcc/config/s390/s390.md
gcc/config/s390/vecintrin.h
gcc/config/s390/vx-builtins.md
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/constexpr.c
gcc/cp/constraint.cc
gcc/cp/cp-gimplify.c
gcc/cp/cp-tree.def
gcc/cp/cp-tree.h
gcc/cp/cxx-pretty-print.c
gcc/cp/decl.c
gcc/cp/error.c
gcc/cp/init.c
gcc/cp/lambda.c
gcc/cp/logic.cc
gcc/cp/mangle.c
gcc/cp/operators.def
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/ptree.c
gcc/cp/search.c
gcc/cp/semantics.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/cp/typeck2.c
gcc/doc/install.texi
gcc/dwarf2out.c
gcc/fortran/ChangeLog
gcc/fortran/dump-parse-tree.c
gcc/fortran/error.c
gcc/fortran/frontend-passes.c
gcc/fortran/simplify.c
gcc/fortran/trans-array.c
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-stmt.c
gcc/gcc.c
gcc/gimple-fold.c
gcc/gimplify.c
gcc/go/ChangeLog
gcc/ipa-inline-analysis.c
gcc/ipa-polymorphic-call.c
gcc/ipa-prop.c
gcc/ira-build.c
gcc/java/ChangeLog
gcc/jit/ChangeLog
gcc/lto/ChangeLog
gcc/objc/ChangeLog
gcc/objcp/ChangeLog
gcc/omp-low.c
gcc/po/ChangeLog
gcc/po/gcc.pot
gcc/po/sv.po
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/goacc/reduction-1.c
gcc/testsuite/c-c++-common/goacc/reduction-2.c
gcc/testsuite/c-c++-common/goacc/reduction-3.c
gcc/testsuite/c-c++-common/goacc/reduction-4.c
gcc/testsuite/c-c++-common/gomp/pr71758.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/ubsan/pr71512-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/ubsan/pr71512-2.c [new file with mode: 0644]
gcc/testsuite/g++.dg/concepts/diagnostic1.C
gcc/testsuite/g++.dg/concepts/dr1430.C
gcc/testsuite/g++.dg/concepts/expression2.C
gcc/testsuite/g++.dg/concepts/memfun2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/concepts/req19.C [new file with mode: 0644]
gcc/testsuite/g++.dg/concepts/req20.C [new file with mode: 0644]
gcc/testsuite/g++.dg/concepts/req4.C
gcc/testsuite/g++.dg/concepts/req5.C
gcc/testsuite/g++.dg/concepts/req6.C
gcc/testsuite/g++.dg/concepts/var-templ1.C
gcc/testsuite/g++.dg/concepts/variadic2.C
gcc/testsuite/g++.dg/concepts/variadic4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/conversion/ambig3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/alignas7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C
gcc/testsuite/g++.dg/cpp0x/decltype65.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/decltype66.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist-base2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist-base3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist-template1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/pr68724.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/pr70869.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/pr71054.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/range-for31.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/range-for8.C
gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/sfinae57.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/auto-fn32.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/constexpr-array5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/constexpr-switch4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/lambda-ice1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/paren4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/var-templ53.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/fold-mangle.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/array3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/vector31.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/pr71941.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/elide5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/pr71728.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/pr71909.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr70098.C
gcc/testsuite/g++.dg/pr71624.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/defarg21.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/dtor10.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/friend63.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/ttp29.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tm/pr71909.C [new file with mode: 0644]
gcc/testsuite/g++.dg/torture/pr71874.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ubsan/pr71512.C [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr71916.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr72802.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/ieee/pr72824-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/ieee/pr72824.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr71083.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/pr71981.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr67410.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr71518.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr72816.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr71881.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr73434.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr62171.c
gcc/testsuite/gcc.dg/vect/pr71823.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-common.h
gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
gcc/testsuite/gcc.target/aarch64/aapcs64/func-ret-1.c
gcc/testsuite/gcc.target/aarch64/aapcs64/test_2.c
gcc/testsuite/gcc.target/aarch64/aapcs64/test_27.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-2.c
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-4.c
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-5.c
gcc/testsuite/gcc.target/avr/pr71151-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/pr71151-common.h [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr76342.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/divkc3-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/float128-cmp.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/mulkc3-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr63354.c
gcc/testsuite/gcc.target/powerpc/pr71493-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr71493-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr71763.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr71805.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr72853.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/signbit-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/signbit-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/signbit-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/nolrl-1.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/allocate_with_source_20.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/allocate_with_source_21.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/array_constructor_50.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/deferred_character_17.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/dependency_48.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90
gcc/testsuite/gfortran.dg/gomp/pr71758.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/namelist_90.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/null_9.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr70040.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr71688.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr71764.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr71883.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/select_type_35.f03 [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization23.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization23_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization23_pkg.ads [new file with mode: 0644]
gcc/timevar.def
gcc/timevar.h
gcc/tree-loop-distribution.c
gcc/tree-object-size.c
gcc/tree-predcom.c
gcc/tree-ssa-sccvn.c
gcc/tree-vect-data-refs.c
gcc/tree-vect-stmts.c
gcc/ubsan.c
gnattools/ChangeLog
gotools/ChangeLog
include/ChangeLog
intl/ChangeLog
libada/ChangeLog
libatomic/ChangeLog
libbacktrace/ChangeLog
libcc1/ChangeLog
libcilkrts/ChangeLog
libcpp/ChangeLog
libcpp/po/ChangeLog
libdecnumber/ChangeLog
libffi/ChangeLog
libgcc/ChangeLog
libgcc/config/libbid/ChangeLog
libgcc/config/rs6000/_divkc3.c [new file with mode: 0644]
libgcc/config/rs6000/_mulkc3.c [new file with mode: 0644]
libgcc/config/rs6000/quad-float128.h
libgcc/config/rs6000/t-float128
libgfortran/ChangeLog
libgfortran/io/list_read.c
libgo/go/cmd/go/build.go
libgomp/ChangeLog
libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-2.c
libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c
libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c
libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c
libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-flt.c
libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/testsuite/demangle-expected
libitm/ChangeLog
libjava/ChangeLog
libjava/classpath/ChangeLog
libjava/libltdl/ChangeLog
libmpx/ChangeLog
libobjc/ChangeLog
liboffloadmic/ChangeLog
libquadmath/ChangeLog
libsanitizer/ChangeLog
libsanitizer/tsan/tsan_platform_linux.cc
libsanitizer/tsan/tsan_rtl_aarch64.S
libssp/ChangeLog
libstdc++-v3/ChangeLog
libstdc++-v3/doc/html/manual/abi.html
libstdc++-v3/doc/html/manual/status.html
libstdc++-v3/doc/xml/manual/abi.xml
libstdc++-v3/doc/xml/manual/status_cxx2011.xml
libstdc++-v3/doc/xml/manual/status_cxx2014.xml
libstdc++-v3/doc/xml/manual/status_cxx2017.xml
libstdc++-v3/include/bits/allocator.h
libstdc++-v3/include/bits/c++config
libstdc++-v3/include/bits/stl_function.h
libstdc++-v3/include/bits/stl_tree.h
libstdc++-v3/include/experimental/functional
libstdc++-v3/include/experimental/memory_resource
libstdc++-v3/include/experimental/propagate_const
libstdc++-v3/include/parallel/balanced_quicksort.h
libstdc++-v3/include/parallel/compiletime_settings.h
libstdc++-v3/include/std/functional
libstdc++-v3/include/std/shared_mutex
libstdc++-v3/include/std/type_traits
libstdc++-v3/src/filesystem/ops.cc
libstdc++-v3/testsuite/20_util/function/cons/refqual.cc [new file with mode: 0644]
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc
libstdc++-v3/testsuite/23_containers/set/allocator/71964.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/feat-cxx14.cc
libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/functional/searchers.cc
libstdc++-v3/testsuite/experimental/memory_resource/1.cc [moved from libstdc++-v3/testsuite/experimental/type_erased_allocator/1.cc with 88% similarity]
libstdc++-v3/testsuite/experimental/memory_resource/null_memory_resource.cc [moved from libstdc++-v3/testsuite/experimental/type_erased_allocator/1_neg.cc with 67% similarity]
libstdc++-v3/testsuite/experimental/memory_resource/resource_adaptor.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/propagate_const/cons/default.cc
libstdc++-v3/testsuite/lib/libstdc++.exp
libvtv/ChangeLog
lto-plugin/ChangeLog
maintainer-scripts/ChangeLog
zlib/ChangeLog

index 4a1334a..847950f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 489149a..5e7641a 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 4f1c354..5cb6f47 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 76cfe59..d90d993 100644 (file)
@@ -1,3 +1,13 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-18  Richard Biener  <rguenther@suse.de>
+
+       PR bootstrap/77279
+       * download_prerequisites: Patch ISL 0.15 to remove trailing comma
+       which causes PR77279.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index cf97ec9..1080dde 100755 (executable)
@@ -52,5 +52,7 @@ if [ "$GRAPHITE_LOOP_OPT" = "yes" ] ; then
 
   wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$ISL.tar.bz2 || exit 1
   tar xjf $ISL.tar.bz2  || exit 1
+  # Fix trailing comma which errors with -pedantic for host GCC <= 4.3
+  sed -e 's/isl_stat_ok = 0,/isl_stat_ok = 0/' isl-0.15/include/isl/ctx.h > isl-0.15/include/isl/ctx.h.tem && mv isl-0.15/include/isl/ctx.h.tem isl-0.15/include/isl/ctx.h
   ln -sf $ISL isl || exit 1
 fi
index 8a2e58b..9972e03 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index f4db33b..f99fe27 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index d6000bf..a33fa9c 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index c15fc03..475a81e 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-06-15  David Edelsohn  <dje.gcc@gmail.com>
 
        Backport from mainline
index f3b5af3..024b066 100644 (file)
@@ -1 +1 @@
-6.1.1
+6.2.1
index 92216a5..430c9fe 100644 (file)
@@ -1,3 +1,509 @@
+2016-08-22  Richard Biener  <rguenther@suse.de>
+
+       * BASE-VER: Set to 6.2.1.
+
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       Backport from mainline
+       2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR middle-end/70895
+       * gimplify.c (omp_add_variable): Adjust/add variable mapping on
+       enclosing parallel construct for reduction variables on OpenACC loop
+       directives.
+
+2016-08-18  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2016-06-17  DJ Delorie  <dj@redhat.com>
+
+       PR target/71338
+       * config/rl78/rl78-expand.c (umulqihi3): Enable for G10.
+       * config/rl78/rl78-virtual.c (umulhi3_shift_virt): Likewise.
+       (umulqihi3_virt): Likewise.
+       * config/rl78/rl78-real.c (umulhi3_shift_real): Likewise.
+       (umulqihi3_real): Likewise.
+
+2016-08-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * doc/install.texi (*-*-solaris2*): Adjust latest change.
+
+2016-08-15  Martin Liska  <mliska@suse.cz>
+
+       Backported from mainline
+       2016-08-15  Martin Liska  <mliska@suse.cz>
+
+       PR driver/72765
+       * gcc.c (do_spec_1): Call save_string with the right size.
+
+2016-08-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/71906
+       * dwarf2out.c (string_types): New variable.
+       (gen_array_type_die): Change early_dwarf handling of
+       DW_AT_string_length, create DW_OP_call4 referencing the
+       length var temporarily.  Handle parameters that are pointers
+       to string length.
+       (adjust_string_types): New function.
+       (gen_subprogram_die): Temporarily set string_types to local var,
+       call adjust_string_types if needed.
+       (non_dwarf_expression, copy_deref_exprloc, optimize_string_length):
+       New functions.
+       (resolve_addr): Adjust DW_AT_string_length if it is DW_OP_call4.
+
+2016-08-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/73434
+       * tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address): Preserve
+       TBAA info on the base when forwarding a non-invariant address.
+
+2016-08-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * doc/install.texi (*-*-solaris2*): Fix version number and document
+       requirement on GNU make for building libjava with the Solaris linker.
+
+2016-08-15  Martin Liska  <mliska@suse.cz>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/72824
+       * tree-loop-distribution.c (const_with_all_bytes_same)
+       <case VECTOR_CST>: Fix a typo.
+
+2016-08-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2016-08-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/76342
+       * config/i386/avx512fintrin.h (_mm512_undefined_epi32):
+       Renamed from _mm512_undefined_si512.
+       (_mm_undefined_si512): New definition.
+
+       Backport from mainline:
+       2016-08-09  David Wohlferd  <dw@LimeGreenSocks.com>
+
+       * config/i3836/avx512fintrin.h (_mm512_cvtsepi64_epi32): Remove
+       unused variable __O.
+
+       Backport from mainline:
+       2016-08-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/72843
+       * config/i386/i386.md (*movtf_internal): Use
+       lra_in_progress || reload_completed instead of !can_create_pseudo_p
+       in the insn constraint.
+       (*movxf_internal): Ditto.
+       (*movdf_internal): Ditto.
+       (*movsf_internal): Ditto.
+
+2016-08-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/71512
+       * ubsan.c (instrument_si_overflow): Pass true instead of false
+       to gsi_replace.
+       (pass_ubsan::execute): Call gimple_purge_dead_eh_edges at the end
+       of bbs.  Return TODO_cleanup_cfg if any returned true.
+
+2016-08-12  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       Backport from mainline
+       2016-08-11  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR tree-optimization/71083
+       * tree-predcom.c (ref_at_iteration): Correctly align the
+       reference type.
+
+2016-08-12  James Greenhalgh  <james.greenhalgh@arm.com
+
+       Backport from mainline
+       2016-08-05  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       PR Target/72819
+       * config/aarch64/aarch64.h (aarch64_fp16_type_node): Declare.
+       (aarch64_fp16_ptr_type_node): Likewise.
+       * config/aarch64/aarch64-simd-builtins.c
+       (aarch64_fp16_ptr_type_node): Define.
+       (aarch64_init_fp16_types): New, refactored out of...
+       (aarch64_init_builtins): ...here, update to call
+       aarch64_init_fp16_types.
+       * config/aarch64/aarch64.c (aarch64_gimplify_va_arg_expr): Handle
+       HFmode.
+       (aapcs_vfp_sub_candidate): Likewise.
+
+2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390-builtin-types.def: Add INT128 types.
+       * config/s390/s390-builtins.def: Add INT128 variants for the add
+       sub low-level builtins dealing with TImode.
+       * config/s390/s390.c (s390_expand_builtin): Allow mode conversions
+       via subreg when expanding a builtin.
+       * config/s390/s390.md: Remove UNSPEC_VEC_ADDC_U128,
+       UNSPEC_VEC_SUB_U128, and UNSPEC_VEC_SUBC_U128 constants.
+       Fix comment.
+       * config/s390/vecintrin.h: Adjust builtin names accordingly.
+       * config/s390/vx-builtins.md ("vec_add_u128"): Remove expander.
+       ("vec_addc<mode>", "vec_addc_u128"): Merge to
+       "vacc<bhfgq>_<mode>".
+       ("vec_adde_u128"): Rename to "vacq". Change mode to TImode.
+       ("vec_addec_u128"): Rename to "vacccq". Change mode to TImode.
+       ("vec_subc<mode>", "vec_subc_u128"): Merge to
+       "vscbi<bhfgq>_<mode>".
+       ("vec_sube_u128"): Rename to "vsbiq". Change mode to TImode.
+       ("vec_subec_u128"): Rename to "vsbcbiq". Change mode to TImode.
+
+2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390-builtins.def: Mark last operand of s390_vlvg*
+       and s390_vlgv* builtins as element selector.
+
+2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-06  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390.c (s390_expand_vec_init): Force initializer
+       element to register if it doesn't match general_operand.
+
+2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-06-13  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/vecintrin.h: Fix file description in comment.
+
+2016-08-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-06-13  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390-builtin-types.def: Change builtin type naming
+       scheme to match builtin-types.def.
+
+2016-08-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-08-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/72853
+       * config/rs6000/rs6000.c (mem_operand_ds_form): Add check for op
+       being an offsettable address.
+
+2016-08-10  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2016-08-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/72824
+       * tree-loop-distribution.c (const_with_all_bytes_same): Verify
+       real_zerop is not negative.
+
+2016-08-09  Martin Jambor  <mjambor@suse.cz>
+
+        PR ipa/71981
+        * ipa-polymorphic-call.c (get_dynamic_type): Bail out gracefully
+        if instance is a MEM_REF.
+
+2016-08-09  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2016-08-09  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/68273
+       * ipa-prop.c (ipa_modify_formal_parameters): Build
+       parameter types with natural alignment also for the
+       over-aligned case.
+
+       2016-07-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/71881
+       * tree-loop-distribution.c (destroy_loop): Remove blocks in
+       reverse DOM order to make debug temp generation happy.
+
+2016-08-09  Alan Modra  <amodra@gmail.com>
+
+       PR target/72802
+       * config/rs6000/rs6000.md (mov<mode>_hardfloat): Sort
+       alternatives.  Put loads first, then stores, and reg/reg moves
+       within same class later.  Delete attr length.
+
+2016-08-09  Alan Modra  <amodra@gmail.com>
+
+       PR target/72802
+       * config/rs6000/rs6000.c (mem_operand_gpr): Remove vsx dform test.
+       (mem_operand_ds_form): New predicate.
+       * config/rs6000/rs6000-protos.h (mem_operand_ds_form): Declare.
+       * config/rs6000/constraints.md (wY): New constraint.
+       * config/rs6000/rs6000.md (f32_lm2, f32_sm2): Use wY for SF.
+       (extendsfdf2_fpr): Replace o constraint with wY.
+
+2016-08-08  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2016-07-29 trunk r238863.
+
+       PR rtl-optimization/71976
+       * combine.c (get_last_value): Return 0 if the argument for which
+       the function is called has a wider mode than the recorded value.
+
+2016-08-04  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from trunk
+       2016-07-26  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/71869
+       * config/rs6000/rs6000.c (rs6000_generate_compare): Rework
+       __float128 support when we don't have hardware support, so that
+       the IEEE built-in functions like isgreater, first call __unordkf3
+       to make sure neither operand is a NaN, and if both operands are
+       ordered, do the normal comparison.
+
+2016-08-04  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/72805
+       * config/i386/avx512fintrin.h (_mm512_cmp_epi32_mask) [!__OPTIMIZE__]:
+       Cast builtin function result to __mmask16 instead of __mmask8.
+       (_mm512_cmp_epu32_mask) [!__OPTIMIZE__]: Ditto.
+       (_mm512_mask_cmp_epi32_mask) [!__OPTIMIZE__]: Ditto.
+       (_mm512_mask_cmp_epu32_mask) [!__OPTIMIZE__]: Ditto.
+
+2016-08-03  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR 70677
+       * common/config/avr/avr-common.c (avr_option_optimization_table)
+       [OPT_LEVELS_ALL]: Turn off -fcaller-saves.
+
+2016-08-01  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2016-08-01 trunk r238948.
+
+       PR target/72767
+       * config/avr/avr.md (length) [branch]: Correct insn length
+       attribute for forward branches.
+
+2016-08-01  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2016-06-16 trunk r237536.
+       2016-06-16  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
+
+       PR target/71151
+       * config/avr/avr.c (avr_asm_init_sections): Remove setup of
+       progmem_swtable_section.
+       (progmem_swtable_section): Remove.
+       (avr_asm_function_rodata_section): Remove.
+       (TARGET_ASM_FUNCTION_RODATA_SECTION): Remove.
+       * config/avr/avr.h (JUMP_TABLES_IN_TEXT_SECTION): Define to 1.
+
+2016-07-29  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2016-07-29  Marek Polacek  <polacek@redhat.com>
+
+       PR c/7652
+       * config/rs6000/rs6000.c (altivec_expand_ld_builtin): Add break.
+       (altivec_expand_st_builtin): Likewise.
+       * config/i386/i386.c (ix86_expand_args_builtin): Likewise.
+       (ix86_expand_round_builtin): Likewise.
+
+2016-07-27  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/71216
+       * config/rs6000/rs6000.c (rs6000_file_start): Fix condition for
+       when to emit a ".machine" pseudo-op.
+
+2016-07-26  Alan Modra  <amodra@gmail.com>
+
+       PR target/72103
+       * config/rs6000/rs6000.c (rs6000_secondary_reload): Initialize
+       sri->t_icode.
+
+2016-07-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/71953
+       * asan.c (asan_dynamic_init_call): Call asan_init_shadow_ptr_types
+       before builtin_decl_implicit.
+
+       * tree-object-size.c (unknown): Use HOST_WIDE_INT_M1U instead of -1.
+
+2016-07-21  Andrew Sutton  <andrew.n.sutton@gmail.com>
+
+       Improving concepts performance and diagnostics.
+       * timevar.def (TV_CONSTRAINT_SAT, TV_CONSTRAINT_SUB): New time vars
+       for constraint satisfaction and subsumption.
+       * timevar.h (auto_timevar): New constructor that matches the push/pop
+       pattern of usage in pt.c.
+
+2016-07-20  John David Anglin  <danglin@gcc.gnu.org>
+
+       Backport from mainline
+       2016-07-16  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.c (hppa_profile_hook): Allocate stack space for
+       register parameters.  Remove code to initialize argument pointer
+       on TARGET_64BIT.  Optimize call to _mcount when it can be reached
+       using a pc-relative branch.  Cleanup conditional code.
+       * config/pa/pa.md (call_mcount): New expander.
+       (call_mcount_nonpic): New insn.
+       (call_mcount_pic): New insn and split.
+       (call_mcount_pic_post_reload): New insn.
+       (call_mcount_64bit): New insn and split.
+       (call_mcount_64bit_post_reload): New insn.
+
+2016-07-20  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-20  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390.c (s390_encode_section_info): Remove mode size
+       check.
+
+2016-07-20  Martin Jambor  <mjambor@suse.cz>
+
+       PR fortran/71688
+       * trans-decl.c (gfc_generate_function_code): Use get_create rather
+       than create to get a call graph node.
+
+2016-07-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/71916
+       * cfgrtl.c (contains_no_active_insn_p): Return false also for
+       bb which have a single succ fake edge.
+
+2016-07-19  Aldy Hernandez  <aldyh@redhat.com>
+
+       PR debug/71855
+       * dwarf2out.c (gen_subprogram_die): Only call
+       gen_unspecified_parameters_die while dumping early dwarf.
+
+2016-07-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/71874
+       * gimple-fold.c (fold_builtin_memory_op): Use
+       get_addr_base_and_unit_offset instead of get_ref_base_and_extent.
+
+2016-07-18  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Back port from mainline
+       2016-07-18  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/71493
+       * config/rs6000/rs6000.c (rs6000_function_value): Fix
+       unintentional System V.4 structure return breakage for structures
+       with a single floating point element.
+
+2016-07-18  Martin Liska  <mliska@suse.cz>
+
+       Backported from mainline
+       2016-07-12  Martin Liska  <mliska@suse.cz>
+
+       PR rtl-optimization/71634
+       * ira-build.c (mark_loops_for_removal): Properly iterate
+       loops.
+
+2016-07-18  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-18  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390.c (s390_encode_section_info): Always set
+       notaligned marker if mode size is 0 or no MEM_ALIGN info could be
+       found.
+
+2016-07-15  Alan Modra  <amodra@gmail.com>
+
+       Apply from mainline
+       2016-07-11  Alan Modra  <amodra@gmail.com>
+       * config/rs6000/rs6000.md (UNSPEC_DOLOOP): New unspec.
+       (ctr<mode>): Add unspec.
+       (ctr<mode>_internal*): Likewise.
+
+2016-07-14  Alan Modra  <amodra@gmail.com>
+
+       PR target/71733
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): Deal
+       with p9_vector override before power9-dform override.
+
+2016-07-13  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       Backport from mainline r238086.
+       2016-07-07  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR ipa/71624
+       * ipa-inline-analysis.c (compute_inline_parameters): Set
+       local.can_change_signature to false for intrumentation
+       thunk callees.
+
+2016-07-12  Michael Meissner  <meissner@linux.vnet.ibm.com>
+           Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-05  Michael Meissner  <meissner@linux.vnet.ibm.com>
+                   Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000-protos.h (rs6000_split_signbit): New
+       prototype.
+       * config/rs6000/rs6000.c (rs6000_split_signbit): New function.
+       * config/rs6000/rs6000.md (UNSPEC_SIGNBIT): New constant.
+       (SIGNBIT): New mode iterator.
+       (Fsignbit): New mode attribute.
+       (signbit<mode>2): Change operand1 to match FLOAT128 instead of
+       IBM128; dispatch to gen_signbit{kf,tf}2_dm for __float128
+       when direct moves are available.
+       (signbit<mode>2_dm): New define_insn_and_split).
+       (signbit<mode>2_dm2): New define_insn.
+
+2016-07-12  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-12  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/71805
+       * config/rs6000/altivec.md (altivec_vperm_<mode>_internal):
+       The xxperm and xxpermr instructions require that the 2nd input
+       operand overlap with the output operand, and not the 1st.
+       (altivec_vperm_v8hiv16qi): Likewise.
+       (altivec_vperm_<mode>_uns_internal): Likewise.
+       (altivec_vpermr_<mode>_internal): Likewise.
+       (vperm_v8hiv4si): Likewise.
+       (vperm_v16qiv8hi): Likewise.
+
+2016-07-12  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       Backport from mainline
+       2016-07-06  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/70098
+       PR target/71763
+       * config/rs6000/rs6000.md (*ctr<mode>_internal1, *ctr<mode>_internal2,
+       *ctr<mode>_internal5, *ctr<mode>_internal6): Add *wi to the output
+       constraint.
+
+2016-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/71758
+       * omp-low.c (expand_omp_target): Gimplify device.
+
+       PR tree-optimization/71823
+       * tree-vect-stmts.c (vectorizable_operation): Use vect_get_vec_defs
+       to get vec_oprnds2 from op2.
+
+2016-07-11  Yuri Rumyantsev  <ysrumyan@gmail.com>
+
+       Backport from mainline r238055.
+       2016-07-06  Yuri Rumyantsev  <ysrumyan@gmail.com>
+
+       PR tree-optimization/71518
+       * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Adjust
+       misalign also for outer loops with negative step.
+
 2016-07-08  Martin Liska  <mliska@suse.cz>
 
        Backported from mainline
        Backport from mainline
        2016-07-06  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
 
-       PR target/50739 
+       PR target/50739
        * config/avr/avr.c (avr_asm_select_section): Strip off
        SECTION_DECLARED from flags when calling get_section.
 
index 94b6ca0..0dd0483 100644 (file)
@@ -1 +1 @@
-20160711
+20160822
index 233e097..46810bc 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-06-13  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Deal with
index 71095fb..398a508 100644 (file)
@@ -2159,6 +2159,9 @@ transform_statements (void)
 tree
 asan_dynamic_init_call (bool after_p)
 {
+  if (shadow_ptr_types[0] == NULL_TREE)
+    asan_init_shadow_ptr_types ();
+
   tree fn = builtin_decl_implicit (after_p
                                   ? BUILT_IN_ASAN_AFTER_DYNAMIC_INIT
                                   : BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT);
@@ -2168,8 +2171,6 @@ asan_dynamic_init_call (bool after_p)
       pretty_printer module_name_pp;
       pp_string (&module_name_pp, main_input_filename);
 
-      if (shadow_ptr_types[0] == NULL_TREE)
-       asan_init_shadow_ptr_types ();
       module_name_cst = asan_pp_string (&module_name_pp);
       module_name_cst = fold_convert (const_ptr_type_node,
                                      module_name_cst);
index ecef102..328cfa9 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-07-05  Markus Trippelsdorf  <markus@trippelsdorf.de>
 
        PR c++/71214
index 781a40f..ed09d22 100644 (file)
@@ -1,3 +1,25 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-12  Jakub Jelinek  <jakub@redhat.com>
+           Martin Liska  <mliska@suse.cz>
+
+       PR c/67410
+       * c-typeck.c (set_nonincremental_init_from_string): Use / instead of
+       % to determine val element to change.  Assert that
+       wchar_bytes * charwidth fits into val array.
+
+2016-08-11  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2016-08-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/72816
+       * c-decl.c (grokdeclarator): When adding TYPE_DOMAIN for flexible
+       array member through typedef, for orig_qual_indirect == 0 clear
+       orig_qual_type.
+
 2016-07-02  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 0dd2121..b237e93 100644 (file)
@@ -6563,6 +6563,8 @@ grokdeclarator (const struct c_declarator *declarator,
            type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
            TYPE_DOMAIN (type) = build_range_type (sizetype, size_zero_node,
                                                   NULL_TREE);
+           if (orig_qual_indirect == 0)
+             orig_qual_type = NULL_TREE;
          }
        type = c_build_qualified_type (type, type_quals, orig_qual_type,
                                       orig_qual_indirect);
index b6b4555..09cca41 100644 (file)
@@ -8485,6 +8485,8 @@ set_nonincremental_init_from_string (tree str,
 
   wchar_bytes = TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str))) / BITS_PER_UNIT;
   charwidth = TYPE_PRECISION (char_type_node);
+  gcc_assert ((size_t) wchar_bytes * charwidth
+             <= ARRAY_SIZE (val) * HOST_BITS_PER_WIDE_INT);
   type = TREE_TYPE (constructor_type);
   p = TREE_STRING_POINTER (str);
   end = p + TREE_STRING_LENGTH (str);
@@ -8510,7 +8512,7 @@ set_nonincremental_init_from_string (tree str,
                bitpos = (wchar_bytes - byte - 1) * charwidth;
              else
                bitpos = byte * charwidth;
-             val[bitpos % HOST_BITS_PER_WIDE_INT]
+             val[bitpos / HOST_BITS_PER_WIDE_INT]
                |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
                   << (bitpos % HOST_BITS_PER_WIDE_INT);
            }
index 62b0596..3a4afca 100644 (file)
@@ -572,8 +572,10 @@ contains_no_active_insn_p (const_basic_block bb)
 {
   rtx_insn *insn;
 
-  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
-      || !single_succ_p (bb))
+  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun)
+      || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
+      || !single_succ_p (bb)
+      || (single_succ_edge (bb)->flags & EDGE_FAKE) != 0)
     return false;
 
   for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn))
index 1d0e8be..dfddc10 100644 (file)
@@ -13179,6 +13179,12 @@ get_last_value (const_rtx x)
       && DF_INSN_LUID (rsp->last_set) >= subst_low_luid)
     return 0;
 
+  /* If fewer bits were set than what we are asked for now, we cannot use
+     the value.  */
+  if (GET_MODE_PRECISION (rsp->last_set_mode)
+      < GET_MODE_PRECISION (GET_MODE (x)))
+    return 0;
+
   /* If the value has all its registers valid, return it.  */
   if (get_last_value_validate (&value, rsp->last_set, rsp->last_set_label, 0))
     return value;
index d0272e4..75c8771 100644 (file)
@@ -28,6 +28,9 @@
 static const struct default_options avr_option_optimization_table[] =
   {
     { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
+    // The only effect of -fcaller-saves might be that it triggers
+    // a frame without need when it tries to be smart around calls.
+    { OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 },
     { OPT_LEVELS_NONE, 0, NULL, 0 }
   };
 
index 5573903..2c4eac0 100644 (file)
@@ -434,13 +434,15 @@ static struct aarch64_simd_type_info aarch64_simd_types [] = {
 };
 #undef ENTRY
 
-/* This type is not SIMD-specific; it is the user-visible __fp16.  */
-static tree aarch64_fp16_type_node = NULL_TREE;
-
 static tree aarch64_simd_intOI_type_node = NULL_TREE;
 static tree aarch64_simd_intCI_type_node = NULL_TREE;
 static tree aarch64_simd_intXI_type_node = NULL_TREE;
 
+/* The user-visible __fp16 type, and a pointer to that type.  Used
+   across the back-end.  */
+tree aarch64_fp16_type_node = NULL_TREE;
+tree aarch64_fp16_ptr_type_node = NULL_TREE;
+
 static const char *
 aarch64_mangle_builtin_scalar_type (const_tree type)
 {
@@ -874,6 +876,21 @@ aarch64_init_builtin_rsqrt (void)
   }
 }
 
+/* Initialize the backend types that support the user-visible __fp16
+   type, also initialize a pointer to that type, to be used when
+   forming HFAs.  */
+
+static void
+aarch64_init_fp16_types (void)
+{
+  aarch64_fp16_type_node = make_node (REAL_TYPE);
+  TYPE_PRECISION (aarch64_fp16_type_node) = 16;
+  layout_type (aarch64_fp16_type_node);
+
+  (*lang_hooks.types.register_builtin_type) (aarch64_fp16_type_node, "__fp16");
+  aarch64_fp16_ptr_type_node = build_pointer_type (aarch64_fp16_type_node);
+}
+
 void
 aarch64_init_builtins (void)
 {
@@ -895,11 +912,7 @@ aarch64_init_builtins (void)
     = add_builtin_function ("__builtin_aarch64_set_fpsr", ftype_set_fpr,
                            AARCH64_BUILTIN_SET_FPSR, BUILT_IN_MD, NULL, NULL_TREE);
 
-  aarch64_fp16_type_node = make_node (REAL_TYPE);
-  TYPE_PRECISION (aarch64_fp16_type_node) = 16;
-  layout_type (aarch64_fp16_type_node);
-
-  (*lang_hooks.types.register_builtin_type) (aarch64_fp16_type_node, "__fp16");
+  aarch64_init_fp16_types ();
 
   if (TARGET_SIMD)
     aarch64_init_simd_builtins ();
index 468d012..206edfe 100644 (file)
@@ -9889,15 +9889,10 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
          field_t = long_double_type_node;
          field_ptr_t = long_double_ptr_type_node;
          break;
-/* The half precision and quad precision are not fully supported yet.  Enable
-   the following code after the support is complete.  Need to find the correct
-   type node for __fp16 *.  */
-#if 0
        case HFmode:
-         field_t = float_type_node;
-         field_ptr_t = float_ptr_type_node;
+         field_t = aarch64_fp16_type_node;
+         field_ptr_t = aarch64_fp16_ptr_type_node;
          break;
-#endif
        case V2SImode:
        case V4SImode:
            {
@@ -10052,7 +10047,8 @@ aapcs_vfp_sub_candidate (const_tree type, machine_mode *modep)
     {
     case REAL_TYPE:
       mode = TYPE_MODE (type);
-      if (mode != DFmode && mode != SFmode && mode != TFmode)
+      if (mode != DFmode && mode != SFmode
+         && mode != TFmode && mode != HFmode)
        return -1;
 
       if (*modep == VOIDmode)
@@ -10065,7 +10061,8 @@ aapcs_vfp_sub_candidate (const_tree type, machine_mode *modep)
 
     case COMPLEX_TYPE:
       mode = TYPE_MODE (TREE_TYPE (type));
-      if (mode != DFmode && mode != SFmode && mode != TFmode)
+      if (mode != DFmode && mode != SFmode
+         && mode != TFmode && mode != HFmode)
        return -1;
 
       if (*modep == VOIDmode)
index c8657f6..be517cb 100644 (file)
@@ -915,4 +915,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 
 #define ASM_OUTPUT_POOL_EPILOGUE  aarch64_asm_output_pool_epilogue
 
+/* This type is the user-visible __fp16, and a pointer to that type.  We
+   need it in many places in the backend.  Defined in aarch64-builtins.c.  */
+extern tree aarch64_fp16_type_node;
+extern tree aarch64_fp16_ptr_type_node;
+
 #endif /* GCC_AARCH64_H */
index 024717d..0ae913c 100644 (file)
@@ -203,9 +203,6 @@ static GTY(()) rtx xstring_e;
 /* Current architecture.  */
 const avr_arch_t *avr_arch;
 
-/* Section to put switch tables in.  */
-static GTY(()) section *progmem_swtable_section;
-
 /* Unnamed sections associated to __attribute__((progmem)) aka. PROGMEM
    or to address space __flash* or __memx.  Only used as singletons inside
    avr_asm_select_section, but it must not be local there because of GTY.  */
@@ -9461,24 +9458,6 @@ avr_output_progmem_section_asm_op (const void *data)
 static void
 avr_asm_init_sections (void)
 {
-  /* Set up a section for jump tables.  Alignment is handled by
-     ASM_OUTPUT_BEFORE_CASE_LABEL.  */
-
-  if (AVR_HAVE_JMP_CALL)
-    {
-      progmem_swtable_section
-        = get_unnamed_section (0, output_section_asm_op,
-                               "\t.section\t.progmem.gcc_sw_table"
-                               ",\"a\",@progbits");
-    }
-  else
-    {
-      progmem_swtable_section
-        = get_unnamed_section (SECTION_CODE, output_section_asm_op,
-                               "\t.section\t.progmem.gcc_sw_table"
-                               ",\"ax\",@progbits");
-    }
-
   /* Override section callbacks to keep track of `avr_need_clear_bss_p'
      resp. `avr_need_copy_data_p'.  */
 
@@ -9488,65 +9467,6 @@ avr_asm_init_sections (void)
 }
 
 
-/* Implement `TARGET_ASM_FUNCTION_RODATA_SECTION'.  */
-
-static section*
-avr_asm_function_rodata_section (tree decl)
-{
-  /* If a function is unused and optimized out by -ffunction-sections
-     and --gc-sections, ensure that the same will happen for its jump
-     tables by putting them into individual sections.  */
-
-  unsigned int flags;
-  section * frodata;
-
-  /* Get the frodata section from the default function in varasm.c
-     but treat function-associated data-like jump tables as code
-     rather than as user defined data.  AVR has no constant pools.  */
-  {
-    int fdata = flag_data_sections;
-
-    flag_data_sections = flag_function_sections;
-    frodata = default_function_rodata_section (decl);
-    flag_data_sections = fdata;
-    flags = frodata->common.flags;
-  }
-
-  if (frodata != readonly_data_section
-      && flags & SECTION_NAMED)
-    {
-      /* Adjust section flags and replace section name prefix.  */
-
-      unsigned int i;
-
-      static const char* const prefix[] =
-        {
-          ".rodata",          ".progmem.gcc_sw_table",
-          ".gnu.linkonce.r.", ".gnu.linkonce.t."
-        };
-
-      for (i = 0; i < sizeof (prefix) / sizeof (*prefix); i += 2)
-        {
-          const char * old_prefix = prefix[i];
-          const char * new_prefix = prefix[i+1];
-          const char * name = frodata->named.name;
-
-          if (STR_PREFIX_P (name, old_prefix))
-            {
-              const char *rname = ACONCAT ((new_prefix,
-                                            name + strlen (old_prefix), NULL));
-              flags &= ~SECTION_CODE;
-              flags |= AVR_HAVE_JMP_CALL ? 0 : SECTION_CODE;
-
-              return get_section (rname, flags, frodata->named.decl);
-            }
-        }
-    }
-
-  return progmem_swtable_section;
-}
-
-
 /* Implement `TARGET_ASM_NAMED_SECTION'.  */
 /* Track need of __do_clear_bss, __do_copy_data for named sections.  */
 
@@ -13749,9 +13669,6 @@ avr_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *arg,
 #undef  TARGET_FOLD_BUILTIN
 #define TARGET_FOLD_BUILTIN avr_fold_builtin
 
-#undef  TARGET_ASM_FUNCTION_RODATA_SECTION
-#define TARGET_ASM_FUNCTION_RODATA_SECTION avr_asm_function_rodata_section
-
 #undef  TARGET_SCALAR_MODE_SUPPORTED_P
 #define TARGET_SCALAR_MODE_SUPPORTED_P avr_scalar_mode_supported_p
 
index 01da708..ab5e465 100644 (file)
@@ -391,7 +391,7 @@ typedef struct avr_args
 
 #define SUPPORTS_INIT_PRIORITY 0
 
-#define JUMP_TABLES_IN_TEXT_SECTION 0
+#define JUMP_TABLES_IN_TEXT_SECTION 1
 
 #define ASM_COMMENT_START " ; "
 
index 9895186..2a2b620 100644 (file)
 (define_attr "length" ""
   (cond [(eq_attr "type" "branch")
          (if_then_else (and (ge (minus (pc) (match_dup 0))
-                                (const_int -63))
+                                (const_int -62))
                             (le (minus (pc) (match_dup 0))
                                 (const_int 62)))
                        (const_int 1)
                        (if_then_else (and (ge (minus (pc) (match_dup 0))
-                                              (const_int -2045))
+                                              (const_int -2044))
                                           (le (minus (pc) (match_dup 0))
                                               (const_int 2045)))
                                      (const_int 2)
index f40a7d9..6ef63e9 100644 (file)
@@ -270,9 +270,8 @@ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_broadcastb_epi8 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pbroadcastb512_mask ((__v16qi) __A,
-                                                      (__v64qi)_mm512_undefined_si512(),
-                                                      (__mmask64) -
-                                                      1);
+                                                      (__v64qi)_mm512_undefined_epi32(),
+                                                      (__mmask64) -1);
 }
 
 extern __inline __m512i
@@ -318,8 +317,8 @@ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_broadcastw_epi16 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pbroadcastw512_mask ((__v8hi) __A,
-                                                      (__v32hi)_mm512_undefined_si512(),
-                                                      (__mmask32)-1);
+                                                      (__v32hi)_mm512_undefined_epi32(),
+                                                      (__mmask32) -1);
 }
 
 extern __inline __m512i
@@ -588,8 +587,7 @@ _mm512_permutex2var_epi16 (__m512i __A, __m512i __I, __m512i __B)
                                                        /* idx */ ,
                                                        (__v32hi) __A,
                                                        (__v32hi) __B,
-                                                       (__mmask32) -
-                                                       1);
+                                                       (__mmask32) -1);
 }
 
 extern __inline __m512i
@@ -2284,7 +2282,7 @@ _mm512_cmpneq_epu8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
                                                   (__v64qi) __Y, 4,
-                                                  (__mmask64) - 1);
+                                                  (__mmask64) -1);
 }
 
 extern __inline __mmask64
@@ -2293,7 +2291,7 @@ _mm512_cmplt_epu8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
                                                   (__v64qi) __Y, 1,
-                                                  (__mmask64) - 1);
+                                                  (__mmask64) -1);
 }
 
 extern __inline __mmask64
@@ -2302,7 +2300,7 @@ _mm512_cmpge_epu8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
                                                   (__v64qi) __Y, 5,
-                                                  (__mmask64) - 1);
+                                                  (__mmask64) -1);
 }
 
 extern __inline __mmask64
@@ -2311,7 +2309,7 @@ _mm512_cmple_epu8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
                                                   (__v64qi) __Y, 2,
-                                                  (__mmask64) - 1);
+                                                  (__mmask64) -1);
 }
 
 extern __inline __mmask32
@@ -2320,7 +2318,7 @@ _mm512_cmpneq_epu16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
                                                   (__v32hi) __Y, 4,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2329,7 +2327,7 @@ _mm512_cmplt_epu16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
                                                   (__v32hi) __Y, 1,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2338,7 +2336,7 @@ _mm512_cmpge_epu16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
                                                   (__v32hi) __Y, 5,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2347,7 +2345,7 @@ _mm512_cmple_epu16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
                                                   (__v32hi) __Y, 2,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask64
@@ -2356,7 +2354,7 @@ _mm512_cmpneq_epi8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
                                                  (__v64qi) __Y, 4,
-                                                 (__mmask64) - 1);
+                                                 (__mmask64) -1);
 }
 
 extern __inline __mmask64
@@ -2365,7 +2363,7 @@ _mm512_cmplt_epi8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
                                                  (__v64qi) __Y, 1,
-                                                 (__mmask64) - 1);
+                                                 (__mmask64) -1);
 }
 
 extern __inline __mmask64
@@ -2374,7 +2372,7 @@ _mm512_cmpge_epi8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
                                                  (__v64qi) __Y, 5,
-                                                 (__mmask64) - 1);
+                                                 (__mmask64) -1);
 }
 
 extern __inline __mmask64
@@ -2383,7 +2381,7 @@ _mm512_cmple_epi8_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
                                                  (__v64qi) __Y, 2,
-                                                 (__mmask64) - 1);
+                                                 (__mmask64) -1);
 }
 
 extern __inline __mmask32
@@ -2392,7 +2390,7 @@ _mm512_cmpneq_epi16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
                                                  (__v32hi) __Y, 4,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2401,7 +2399,7 @@ _mm512_cmplt_epi16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
                                                  (__v32hi) __Y, 1,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2410,7 +2408,7 @@ _mm512_cmpge_epi16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
                                                  (__v32hi) __Y, 5,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2419,7 +2417,7 @@ _mm512_cmple_epi16_mask (__m512i __X, __m512i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
                                                  (__v32hi) __Y, 2,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 #ifdef __OPTIMIZE__
index 14a4e88..1dbb6b0 100644 (file)
@@ -41,8 +41,7 @@ _mm512_broadcast_f64x2 (__m128d __A)
   return (__m512d) __builtin_ia32_broadcastf64x2_512_mask ((__v2df)
                                                           __A,
                                                           _mm512_undefined_pd(),
-                                                          (__mmask8) -
-                                                          1);
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m512d
@@ -72,9 +71,8 @@ _mm512_broadcast_i64x2 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_broadcasti64x2_512_mask ((__v2di)
                                                           __A,
-                                                          _mm512_undefined_si512(),
-                                                          (__mmask8) -
-                                                          1);
+                                                          _mm512_undefined_epi32(),
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m512i
@@ -104,8 +102,7 @@ _mm512_broadcast_f32x2 (__m128 __A)
 {
   return (__m512) __builtin_ia32_broadcastf32x2_512_mask ((__v4sf) __A,
                                                          (__v16sf)_mm512_undefined_ps(),
-                                                         (__mmask16) -
-                                                         1);
+                                                         (__mmask16) -1);
 }
 
 extern __inline __m512
@@ -133,9 +130,8 @@ _mm512_broadcast_i32x2 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_broadcasti32x2_512_mask ((__v4si)
                                                           __A,
-                                                          (__v16si)_mm512_undefined_si512(),
-                                                          (__mmask16)
-                                                          -1);
+                                                          (__v16si)_mm512_undefined_epi32(),
+                                                          (__mmask16) -1);
 }
 
 extern __inline __m512i
@@ -165,8 +161,7 @@ _mm512_broadcast_f32x8 (__m256 __A)
 {
   return (__m512) __builtin_ia32_broadcastf32x8_512_mask ((__v8sf) __A,
                                                          _mm512_undefined_ps(),
-                                                         (__mmask16) -
-                                                         1);
+                                                         (__mmask16) -1);
 }
 
 extern __inline __m512
@@ -194,9 +189,8 @@ _mm512_broadcast_i32x8 (__m256i __A)
 {
   return (__m512i) __builtin_ia32_broadcasti32x8_512_mask ((__v8si)
                                                           __A,
-                                                          (__v16si)_mm512_undefined_si512(),
-                                                          (__mmask16)
-                                                          -1);
+                                                          (__v16si)_mm512_undefined_epi32(),
+                                                          (__mmask16) -1);
 }
 
 extern __inline __m512i
@@ -1569,8 +1563,7 @@ _mm512_extractf64x2_pd (__m512d __A, const int __imm)
                                                         __imm,
                                                         (__v2df)
                                                         _mm_setzero_pd (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128d
@@ -1640,8 +1633,7 @@ _mm512_extracti64x2_epi64 (__m512i __A, const int __imm)
                                                         __imm,
                                                         (__v2di)
                                                         _mm_setzero_di (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -1829,8 +1821,7 @@ _mm512_inserti64x2 (__m512i __A, __m128i __B, const int __imm)
                                                        __imm,
                                                        (__v8di)
                                                        _mm512_setzero_si512 (),
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m512i
@@ -1869,8 +1860,7 @@ _mm512_insertf64x2 (__m512d __A, __m128d __B, const int __imm)
                                                        __imm,
                                                        (__v8df)
                                                        _mm512_setzero_pd (),
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m512d
@@ -1933,8 +1923,7 @@ _mm512_fpclass_ps_mask (__m512 __A, const int __imm)
 {
   return (__mmask16) __builtin_ia32_fpclassps512_mask ((__v16sf) __A,
                                                       __imm,
-                                                      (__mmask16) -
-                                                      1);
+                                                      (__mmask16) -1);
 }
 
 #else
index e009d8c..305ed55 100644 (file)
@@ -130,12 +130,14 @@ _mm512_undefined_pd (void)
 
 extern __inline __m512i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
-_mm512_undefined_si512 (void)
+_mm512_undefined_epi32 (void)
 {
   __m512i __Y = __Y;
   return __Y;
 }
 
+#define _mm512_undefined_si512 _mm512_undefined_epi32
+
 extern __inline __m512i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_set1_epi8 (char __A)
@@ -549,7 +551,7 @@ _mm512_sllv_epi32 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_psllv16si_mask ((__v16si) __X,
                                                  (__v16si) __Y,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -581,7 +583,7 @@ _mm512_srav_epi32 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_psrav16si_mask ((__v16si) __X,
                                                  (__v16si) __Y,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -613,7 +615,7 @@ _mm512_srlv_epi32 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_psrlv16si_mask ((__v16si) __X,
                                                  (__v16si) __Y,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -733,7 +735,7 @@ _mm512_srav_epi64 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_psrav8di_mask ((__v8di) __X,
                                                 (__v8di) __Y,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -765,7 +767,7 @@ _mm512_srlv_epi64 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_psrlv8di_mask ((__v8di) __X,
                                                 (__v8di) __Y,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -825,7 +827,7 @@ _mm512_mul_epi32 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_pmuldq512_mask ((__v16si) __X,
                                                  (__v16si) __Y,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -884,7 +886,7 @@ _mm512_mul_epu32 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_pmuludq512_mask ((__v16si) __X,
                                                   (__v16si) __Y,
                                                   (__v8di)
-                                                  _mm512_undefined_si512 (),
+                                                  _mm512_undefined_epi32 (),
                                                   (__mmask8) -1);
 }
 
@@ -915,7 +917,7 @@ _mm512_slli_epi64 (__m512i __A, unsigned int __B)
 {
   return (__m512i) __builtin_ia32_psllqi512_mask ((__v8di) __A, __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -941,7 +943,7 @@ _mm512_maskz_slli_epi64 (__mmask8 __U, __m512i __A, unsigned int __B)
 #else
 #define _mm512_slli_epi64(X, C)                                                   \
   ((__m512i) __builtin_ia32_psllqi512_mask ((__v8di)(__m512i)(X), (int)(C),\
-    (__v8di)(__m512i)_mm512_undefined_si512 (),\
+    (__v8di)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask8)-1))
 
 #define _mm512_mask_slli_epi64(W, U, X, C)                                \
@@ -962,7 +964,7 @@ _mm512_sll_epi64 (__m512i __A, __m128i __B)
   return (__m512i) __builtin_ia32_psllq512_mask ((__v8di) __A,
                                                 (__v2di) __B,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -994,7 +996,7 @@ _mm512_srli_epi64 (__m512i __A, unsigned int __B)
 {
   return (__m512i) __builtin_ia32_psrlqi512_mask ((__v8di) __A, __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -1020,7 +1022,7 @@ _mm512_maskz_srli_epi64 (__mmask8 __U, __m512i __A, unsigned int __B)
 #else
 #define _mm512_srli_epi64(X, C)                                                   \
   ((__m512i) __builtin_ia32_psrlqi512_mask ((__v8di)(__m512i)(X), (int)(C),\
-    (__v8di)(__m512i)_mm512_undefined_si512 (),\
+    (__v8di)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask8)-1))
 
 #define _mm512_mask_srli_epi64(W, U, X, C)                                \
@@ -1041,7 +1043,7 @@ _mm512_srl_epi64 (__m512i __A, __m128i __B)
   return (__m512i) __builtin_ia32_psrlq512_mask ((__v8di) __A,
                                                 (__v2di) __B,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -1073,7 +1075,7 @@ _mm512_srai_epi64 (__m512i __A, unsigned int __B)
 {
   return (__m512i) __builtin_ia32_psraqi512_mask ((__v8di) __A, __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -1099,7 +1101,7 @@ _mm512_maskz_srai_epi64 (__mmask8 __U, __m512i __A, unsigned int __B)
 #else
 #define _mm512_srai_epi64(X, C)                                                   \
   ((__m512i) __builtin_ia32_psraqi512_mask ((__v8di)(__m512i)(X), (int)(C),\
-    (__v8di)(__m512i)_mm512_undefined_si512 (),\
+    (__v8di)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask8)-1))
 
 #define _mm512_mask_srai_epi64(W, U, X, C)                                \
@@ -1120,7 +1122,7 @@ _mm512_sra_epi64 (__m512i __A, __m128i __B)
   return (__m512i) __builtin_ia32_psraq512_mask ((__v8di) __A,
                                                 (__v2di) __B,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -1152,7 +1154,7 @@ _mm512_slli_epi32 (__m512i __A, unsigned int __B)
 {
   return (__m512i) __builtin_ia32_pslldi512_mask ((__v16si) __A, __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -1178,7 +1180,7 @@ _mm512_maskz_slli_epi32 (__mmask16 __U, __m512i __A, unsigned int __B)
 #else
 #define _mm512_slli_epi32(X, C)                                                    \
   ((__m512i) __builtin_ia32_pslldi512_mask ((__v16si)(__m512i)(X), (int)(C),\
-    (__v16si)(__m512i)_mm512_undefined_si512 (),\
+    (__v16si)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask16)-1))
 
 #define _mm512_mask_slli_epi32(W, U, X, C)                                  \
@@ -1199,7 +1201,7 @@ _mm512_sll_epi32 (__m512i __A, __m128i __B)
   return (__m512i) __builtin_ia32_pslld512_mask ((__v16si) __A,
                                                 (__v4si) __B,
                                                 (__v16si)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask16) -1);
 }
 
@@ -1231,7 +1233,7 @@ _mm512_srli_epi32 (__m512i __A, unsigned int __B)
 {
   return (__m512i) __builtin_ia32_psrldi512_mask ((__v16si) __A, __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -1257,7 +1259,7 @@ _mm512_maskz_srli_epi32 (__mmask16 __U, __m512i __A, unsigned int __B)
 #else
 #define _mm512_srli_epi32(X, C)                                                    \
   ((__m512i) __builtin_ia32_psrldi512_mask ((__v16si)(__m512i)(X), (int)(C),\
-    (__v16si)(__m512i)_mm512_undefined_si512 (),\
+    (__v16si)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask16)-1))
 
 #define _mm512_mask_srli_epi32(W, U, X, C)                                  \
@@ -1278,7 +1280,7 @@ _mm512_srl_epi32 (__m512i __A, __m128i __B)
   return (__m512i) __builtin_ia32_psrld512_mask ((__v16si) __A,
                                                 (__v4si) __B,
                                                 (__v16si)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask16) -1);
 }
 
@@ -1310,7 +1312,7 @@ _mm512_srai_epi32 (__m512i __A, unsigned int __B)
 {
   return (__m512i) __builtin_ia32_psradi512_mask ((__v16si) __A, __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -1336,7 +1338,7 @@ _mm512_maskz_srai_epi32 (__mmask16 __U, __m512i __A, unsigned int __B)
 #else
 #define _mm512_srai_epi32(X, C)                                                    \
   ((__m512i) __builtin_ia32_psradi512_mask ((__v16si)(__m512i)(X), (int)(C),\
-    (__v16si)(__m512i)_mm512_undefined_si512 (),\
+    (__v16si)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask16)-1))
 
 #define _mm512_mask_srai_epi32(W, U, X, C)                                 \
@@ -1357,7 +1359,7 @@ _mm512_sra_epi32 (__m512i __A, __m128i __B)
   return (__m512i) __builtin_ia32_psrad512_mask ((__v16si) __A,
                                                 (__v4si) __B,
                                                 (__v16si)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask16) -1);
 }
 
@@ -1778,7 +1780,7 @@ _mm512_cvtepi8_epi32 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pmovsxbd512_mask ((__v16qi) __A,
                                                    (__v16si)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask16) -1);
 }
 
@@ -1807,7 +1809,7 @@ _mm512_cvtepi8_epi64 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pmovsxbq512_mask ((__v16qi) __A,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -1836,7 +1838,7 @@ _mm512_cvtepi16_epi32 (__m256i __A)
 {
   return (__m512i) __builtin_ia32_pmovsxwd512_mask ((__v16hi) __A,
                                                    (__v16si)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask16) -1);
 }
 
@@ -1865,7 +1867,7 @@ _mm512_cvtepi16_epi64 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pmovsxwq512_mask ((__v8hi) __A,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -1894,7 +1896,7 @@ _mm512_cvtepi32_epi64 (__m256i __X)
 {
   return (__m512i) __builtin_ia32_pmovsxdq512_mask ((__v8si) __X,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -1923,7 +1925,7 @@ _mm512_cvtepu8_epi32 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pmovzxbd512_mask ((__v16qi) __A,
                                                    (__v16si)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask16) -1);
 }
 
@@ -1952,7 +1954,7 @@ _mm512_cvtepu8_epi64 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pmovzxbq512_mask ((__v16qi) __A,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -1981,7 +1983,7 @@ _mm512_cvtepu16_epi32 (__m256i __A)
 {
   return (__m512i) __builtin_ia32_pmovzxwd512_mask ((__v16hi) __A,
                                                    (__v16si)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask16) -1);
 }
 
@@ -2010,7 +2012,7 @@ _mm512_cvtepu16_epi64 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pmovzxwq512_mask ((__v8hi) __A,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -2039,7 +2041,7 @@ _mm512_cvtepu32_epi64 (__m256i __X)
 {
   return (__m512i) __builtin_ia32_pmovzxdq512_mask ((__v8si) __X,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -3407,7 +3409,7 @@ _mm512_abs_epi64 (__m512i __A)
 {
   return (__m512i) __builtin_ia32_pabsq512_mask ((__v8di) __A,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -3436,7 +3438,7 @@ _mm512_abs_epi32 (__m512i __A)
 {
   return (__m512i) __builtin_ia32_pabsd512_mask ((__v16si) __A,
                                                 (__v16si)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask16) -1);
 }
 
@@ -3521,7 +3523,7 @@ _mm512_broadcastd_epi32 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pbroadcastd512 ((__v4si) __A,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -3549,7 +3551,7 @@ _mm512_set1_epi32 (int __A)
 {
   return (__m512i) __builtin_ia32_pbroadcastd512_gpr_mask (__A,
                                                           (__v16si)
-                                                          _mm512_undefined_si512 (),
+                                                          _mm512_undefined_epi32 (),
                                                           (__mmask16)(-1));
 }
 
@@ -3577,7 +3579,7 @@ _mm512_broadcastq_epi64 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_pbroadcastq512 ((__v2di) __A,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -3605,7 +3607,7 @@ _mm512_set1_epi64 (long long __A)
 {
   return (__m512i) __builtin_ia32_pbroadcastq512_gpr_mask (__A,
                                                           (__v8di)
-                                                          _mm512_undefined_si512 (),
+                                                          _mm512_undefined_epi32 (),
                                                           (__mmask8)(-1));
 }
 
@@ -3662,7 +3664,7 @@ _mm512_broadcast_i32x4 (__m128i __A)
 {
   return (__m512i) __builtin_ia32_broadcasti32x4_512 ((__v4si) __A,
                                                      (__v16si)
-                                                     _mm512_undefined_si512 (),
+                                                     _mm512_undefined_epi32 (),
                                                      (__mmask16) -1);
 }
 
@@ -3720,7 +3722,7 @@ _mm512_broadcast_i64x4 (__m256i __A)
 {
   return (__m512i) __builtin_ia32_broadcasti64x4_512 ((__v4di) __A,
                                                      (__v8di)
-                                                     _mm512_undefined_si512 (),
+                                                     _mm512_undefined_epi32 (),
                                                      (__mmask8) -1);
 }
 
@@ -3841,7 +3843,7 @@ _mm512_shuffle_epi32 (__m512i __A, _MM_PERM_ENUM __mask)
   return (__m512i) __builtin_ia32_pshufd512_mask ((__v16si) __A,
                                                  __mask,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -3874,7 +3876,7 @@ _mm512_shuffle_i64x2 (__m512i __A, __m512i __B, const int __imm)
   return (__m512i) __builtin_ia32_shuf_i64x2_mask ((__v8di) __A,
                                                   (__v8di) __B, __imm,
                                                   (__v8di)
-                                                  _mm512_undefined_si512 (),
+                                                  _mm512_undefined_epi32 (),
                                                   (__mmask8) -1);
 }
 
@@ -3909,7 +3911,7 @@ _mm512_shuffle_i32x4 (__m512i __A, __m512i __B, const int __imm)
                                                   (__v16si) __B,
                                                   __imm,
                                                   (__v16si)
-                                                  _mm512_undefined_si512 (),
+                                                  _mm512_undefined_epi32 (),
                                                   (__mmask16) -1);
 }
 
@@ -4009,7 +4011,7 @@ _mm512_maskz_shuffle_f32x4 (__mmask16 __U, __m512 __A, __m512 __B,
 #else
 #define _mm512_shuffle_epi32(X, C)                                      \
   ((__m512i)  __builtin_ia32_pshufd512_mask ((__v16si)(__m512i)(X), (int)(C),\
-    (__v16si)(__m512i)_mm512_undefined_si512 (),\
+    (__v16si)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask16)-1))
 
 #define _mm512_mask_shuffle_epi32(W, U, X, C)                           \
@@ -4025,7 +4027,7 @@ _mm512_maskz_shuffle_f32x4 (__mmask16 __U, __m512 __A, __m512 __B,
 #define _mm512_shuffle_i64x2(X, Y, C)                                   \
   ((__m512i)  __builtin_ia32_shuf_i64x2_mask ((__v8di)(__m512i)(X),     \
       (__v8di)(__m512i)(Y), (int)(C),\
-    (__v8di)(__m512i)_mm512_undefined_si512 (),\
+    (__v8di)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask8)-1))
 
 #define _mm512_mask_shuffle_i64x2(W, U, X, Y, C)                        \
@@ -4043,7 +4045,7 @@ _mm512_maskz_shuffle_f32x4 (__mmask16 __U, __m512 __A, __m512 __B,
 #define _mm512_shuffle_i32x4(X, Y, C)                                   \
   ((__m512i)  __builtin_ia32_shuf_i32x4_mask ((__v16si)(__m512i)(X),    \
       (__v16si)(__m512i)(Y), (int)(C),\
-    (__v16si)(__m512i)_mm512_undefined_si512 (),\
+    (__v16si)(__m512i)_mm512_undefined_epi32 (),\
     (__mmask16)-1))
 
 #define _mm512_mask_shuffle_i32x4(W, U, X, Y, C)                        \
@@ -4102,7 +4104,7 @@ _mm512_rolv_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_prolvd512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -4134,7 +4136,7 @@ _mm512_rorv_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_prorvd512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -4166,7 +4168,7 @@ _mm512_rolv_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_prolvq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -4198,7 +4200,7 @@ _mm512_rorv_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_prorvq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -4390,7 +4392,7 @@ _mm512_cvtt_roundps_epi32 (__m512 __A, const int __R)
 {
   return (__m512i) __builtin_ia32_cvttps2dq512_mask ((__v16sf) __A,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1, __R);
 }
 
@@ -4420,7 +4422,7 @@ _mm512_cvtt_roundps_epu32 (__m512 __A, const int __R)
 {
   return (__m512i) __builtin_ia32_cvttps2udq512_mask ((__v16sf) __A,
                                                      (__v16si)
-                                                     _mm512_undefined_si512 (),
+                                                     _mm512_undefined_epi32 (),
                                                      (__mmask16) -1, __R);
 }
 
@@ -4445,7 +4447,7 @@ _mm512_maskz_cvtt_roundps_epu32 (__mmask16 __U, __m512 __A, const int __R)
 }
 #else
 #define _mm512_cvtt_roundps_epi32(A, B)                     \
-    ((__m512i)__builtin_ia32_cvttps2dq512_mask(A, (__v16si)_mm512_undefined_si512 (), -1, B))
+    ((__m512i)__builtin_ia32_cvttps2dq512_mask(A, (__v16si)_mm512_undefined_epi32 (), -1, B))
 
 #define _mm512_mask_cvtt_roundps_epi32(W, U, A, B)   \
     ((__m512i)__builtin_ia32_cvttps2dq512_mask(A, (__v16si)(W), U, B))
@@ -4454,7 +4456,7 @@ _mm512_maskz_cvtt_roundps_epu32 (__mmask16 __U, __m512 __A, const int __R)
     ((__m512i)__builtin_ia32_cvttps2dq512_mask(A, (__v16si)_mm512_setzero_si512 (), U, B))
 
 #define _mm512_cvtt_roundps_epu32(A, B)                     \
-    ((__m512i)__builtin_ia32_cvttps2udq512_mask(A, (__v16si)_mm512_undefined_si512 (), -1, B))
+    ((__m512i)__builtin_ia32_cvttps2udq512_mask(A, (__v16si)_mm512_undefined_epi32 (), -1, B))
 
 #define _mm512_mask_cvtt_roundps_epu32(W, U, A, B)   \
     ((__m512i)__builtin_ia32_cvttps2udq512_mask(A, (__v16si)(W), U, B))
@@ -4470,7 +4472,7 @@ _mm512_cvt_roundps_epi32 (__m512 __A, const int __R)
 {
   return (__m512i) __builtin_ia32_cvtps2dq512_mask ((__v16sf) __A,
                                                    (__v16si)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask16) -1, __R);
 }
 
@@ -4500,7 +4502,7 @@ _mm512_cvt_roundps_epu32 (__m512 __A, const int __R)
 {
   return (__m512i) __builtin_ia32_cvtps2udq512_mask ((__v16sf) __A,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1, __R);
 }
 
@@ -4525,7 +4527,7 @@ _mm512_maskz_cvt_roundps_epu32 (__mmask16 __U, __m512 __A, const int __R)
 }
 #else
 #define _mm512_cvt_roundps_epi32(A, B)             \
-    ((__m512i)__builtin_ia32_cvtps2dq512_mask(A, (__v16si)_mm512_undefined_si512 (), -1, B))
+    ((__m512i)__builtin_ia32_cvtps2dq512_mask(A, (__v16si)_mm512_undefined_epi32 (), -1, B))
 
 #define _mm512_mask_cvt_roundps_epi32(W, U, A, B)   \
     ((__m512i)__builtin_ia32_cvtps2dq512_mask(A, (__v16si)(W), U, B))
@@ -4534,7 +4536,7 @@ _mm512_maskz_cvt_roundps_epu32 (__mmask16 __U, __m512 __A, const int __R)
     ((__m512i)__builtin_ia32_cvtps2dq512_mask(A, (__v16si)_mm512_setzero_si512 (), U, B))
 
 #define _mm512_cvt_roundps_epu32(A, B)             \
-    ((__m512i)__builtin_ia32_cvtps2udq512_mask(A, (__v16si)_mm512_undefined_si512 (), -1, B))
+    ((__m512i)__builtin_ia32_cvtps2udq512_mask(A, (__v16si)_mm512_undefined_epi32 (), -1, B))
 
 #define _mm512_mask_cvt_roundps_epu32(W, U, A, B)   \
     ((__m512i)__builtin_ia32_cvtps2udq512_mask(A, (__v16si)(W), U, B))
@@ -4903,7 +4905,6 @@ extern __inline __m256i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_cvtsepi64_epi32 (__m512i __A)
 {
-  __v8si __O;
   return (__m256i) __builtin_ia32_pmovsqd512_mask ((__v8di) __A,
                                                   (__v8si)
                                                   _mm256_undefined_si256 (),
@@ -5556,7 +5557,7 @@ _mm512_inserti64x4 (__m512i __A, __m256i __B, const int __imm)
                                                    (__v4di) __B,
                                                    __imm,
                                                    (__v8di)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask8) -1);
 }
 
@@ -5651,7 +5652,7 @@ _mm512_maskz_insertf64x4 (__mmask8 __U, __m512d __A, __m256d __B,
 #define _mm512_inserti64x4(X, Y, C)                                     \
   ((__m512i) __builtin_ia32_inserti64x4_mask ((__v8di)(__m512i) (X),    \
     (__v4di)(__m256i) (Y), (int) (C),                                  \
-    (__v8di)(__m512i)_mm512_undefined_si512 (),                                \
+    (__v8di)(__m512i)_mm512_undefined_epi32 (),                                \
     (__mmask8)-1))
 
 #define _mm512_mask_inserti64x4(W, U, X, Y, C)                          \
@@ -6177,7 +6178,7 @@ _mm512_permutex_epi64 (__m512i __X, const int __I)
 {
   return (__m512i) __builtin_ia32_permdi512_mask ((__v8di) __X, __I,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) (-1));
 }
 
@@ -6248,7 +6249,7 @@ _mm512_maskz_permutex_pd (__mmask8 __U, __m512d __X, const int __M)
   ((__m512i) __builtin_ia32_permdi512_mask ((__v8di)(__m512i)(X), \
                                            (int)(I),             \
                                            (__v8di)(__m512i)     \
-                                           (_mm512_undefined_si512 ()),\
+                                           (_mm512_undefined_epi32 ()),\
                                            (__mmask8)(-1)))
 
 #define _mm512_maskz_permutex_epi64(M, X, I)                 \
@@ -6283,7 +6284,7 @@ _mm512_permutexvar_epi64 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_permvardi512_mask ((__v8di) __Y,
                                                     (__v8di) __X,
                                                     (__v8di)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask8) -1);
 }
 
@@ -6316,7 +6317,7 @@ _mm512_permutexvar_epi32 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_permvarsi512_mask ((__v16si) __Y,
                                                     (__v16si) __X,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1);
 }
 
@@ -6891,7 +6892,7 @@ _mm512_rol_epi32 (__m512i __A, const int __B)
 {
   return (__m512i) __builtin_ia32_prold512_mask ((__v16si) __A, __B,
                                                 (__v16si)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask16) -1);
 }
 
@@ -6920,7 +6921,7 @@ _mm512_ror_epi32 (__m512i __A, int __B)
 {
   return (__m512i) __builtin_ia32_prord512_mask ((__v16si) __A, __B,
                                                 (__v16si)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask16) -1);
 }
 
@@ -6949,7 +6950,7 @@ _mm512_rol_epi64 (__m512i __A, const int __B)
 {
   return (__m512i) __builtin_ia32_prolq512_mask ((__v8di) __A, __B,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -6978,7 +6979,7 @@ _mm512_ror_epi64 (__m512i __A, int __B)
 {
   return (__m512i) __builtin_ia32_prorq512_mask ((__v8di) __A, __B,
                                                 (__v8di)
-                                                _mm512_undefined_si512 (),
+                                                _mm512_undefined_epi32 (),
                                                 (__mmask8) -1);
 }
 
@@ -7005,7 +7006,7 @@ _mm512_maskz_ror_epi64 (__mmask8 __U, __m512i __A, int __B)
 #define _mm512_rol_epi32(A, B)                                           \
     ((__m512i)__builtin_ia32_prold512_mask ((__v16si)(__m512i)(A),       \
                                            (int)(B),                     \
-                                           (__v16si)_mm512_undefined_si512 (), \
+                                           (__v16si)_mm512_undefined_epi32 (), \
                                            (__mmask16)(-1)))
 #define _mm512_mask_rol_epi32(W, U, A, B)                                \
     ((__m512i)__builtin_ia32_prold512_mask ((__v16si)(__m512i)(A),       \
@@ -7020,7 +7021,7 @@ _mm512_maskz_ror_epi64 (__mmask8 __U, __m512i __A, int __B)
 #define _mm512_ror_epi32(A, B)                                           \
     ((__m512i)__builtin_ia32_prord512_mask ((__v16si)(__m512i)(A),       \
                                            (int)(B),                     \
-                                           (__v16si)_mm512_undefined_si512 (), \
+                                           (__v16si)_mm512_undefined_epi32 (), \
                                            (__mmask16)(-1)))
 #define _mm512_mask_ror_epi32(W, U, A, B)                                \
     ((__m512i)__builtin_ia32_prord512_mask ((__v16si)(__m512i)(A),       \
@@ -7035,7 +7036,7 @@ _mm512_maskz_ror_epi64 (__mmask8 __U, __m512i __A, int __B)
 #define _mm512_rol_epi64(A, B)                                           \
     ((__m512i)__builtin_ia32_prolq512_mask ((__v8di)(__m512i)(A),        \
                                            (int)(B),                     \
-                                           (__v8di)_mm512_undefined_si512 (),  \
+                                           (__v8di)_mm512_undefined_epi32 (),  \
                                            (__mmask8)(-1)))
 #define _mm512_mask_rol_epi64(W, U, A, B)                                \
     ((__m512i)__builtin_ia32_prolq512_mask ((__v8di)(__m512i)(A),        \
@@ -7051,7 +7052,7 @@ _mm512_maskz_ror_epi64 (__mmask8 __U, __m512i __A, int __B)
 #define _mm512_ror_epi64(A, B)                                           \
     ((__m512i)__builtin_ia32_prorq512_mask ((__v8di)(__m512i)(A),        \
                                            (int)(B),                     \
-                                           (__v8di)_mm512_undefined_si512 (),  \
+                                           (__v8di)_mm512_undefined_epi32 (),  \
                                            (__mmask8)(-1)))
 #define _mm512_mask_ror_epi64(W, U, A, B)                                \
     ((__m512i)__builtin_ia32_prorq512_mask ((__v8di)(__m512i)(A),        \
@@ -7134,7 +7135,7 @@ _mm512_andnot_si512 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -7145,7 +7146,7 @@ _mm512_andnot_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pandnd512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -7177,7 +7178,7 @@ _mm512_andnot_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pandnq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -7275,7 +7276,7 @@ _mm512_unpackhi_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_punpckhdq512_mask ((__v16si) __A,
                                                     (__v16si) __B,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1);
 }
 
@@ -7308,7 +7309,7 @@ _mm512_unpackhi_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_punpckhqdq512_mask ((__v8di) __A,
                                                      (__v8di) __B,
                                                      (__v8di)
-                                                     _mm512_undefined_si512 (),
+                                                     _mm512_undefined_epi32 (),
                                                      (__mmask8) -1);
 }
 
@@ -7340,7 +7341,7 @@ _mm512_unpacklo_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_punpckldq512_mask ((__v16si) __A,
                                                     (__v16si) __B,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1);
 }
 
@@ -7373,7 +7374,7 @@ _mm512_unpacklo_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_punpcklqdq512_mask ((__v8di) __A,
                                                      (__v8di) __B,
                                                      (__v8di)
-                                                     _mm512_undefined_si512 (),
+                                                     _mm512_undefined_epi32 (),
                                                      (__mmask8) -1);
 }
 
@@ -8512,7 +8513,7 @@ _mm512_alignr_epi32 (__m512i __A, __m512i __B, const int __imm)
   return (__m512i) __builtin_ia32_alignd512_mask ((__v16si) __A,
                                                  (__v16si) __B, __imm,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -8546,7 +8547,7 @@ _mm512_alignr_epi64 (__m512i __A, __m512i __B, const int __imm)
   return (__m512i) __builtin_ia32_alignq512_mask ((__v8di) __A,
                                                  (__v8di) __B, __imm,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -8575,7 +8576,7 @@ _mm512_maskz_alignr_epi64 (__mmask8 __U, __m512i __A, __m512i __B,
 #else
 #define _mm512_alignr_epi32(X, Y, C)                                        \
     ((__m512i)__builtin_ia32_alignd512_mask ((__v16si)(__m512i)(X),         \
-        (__v16si)(__m512i)(Y), (int)(C), (__v16si)_mm512_undefined_si512 (),\
+        (__v16si)(__m512i)(Y), (int)(C), (__v16si)_mm512_undefined_epi32 (),\
         (__mmask16)-1))
 
 #define _mm512_mask_alignr_epi32(W, U, X, Y, C)                             \
@@ -8590,7 +8591,7 @@ _mm512_maskz_alignr_epi64 (__mmask8 __U, __m512i __A, __m512i __B,
 
 #define _mm512_alignr_epi64(X, Y, C)                                        \
     ((__m512i)__builtin_ia32_alignq512_mask ((__v8di)(__m512i)(X),          \
-        (__v8di)(__m512i)(Y), (int)(C), (__v8di)_mm512_undefined_si512 (),  \
+        (__v8di)(__m512i)(Y), (int)(C), (__v8di)_mm512_undefined_epi32 (),  \
        (__mmask8)-1))
 
 #define _mm512_mask_alignr_epi64(W, U, X, Y, C)                             \
@@ -9130,9 +9131,9 @@ _mm_mask_cmp_round_ss_mask (__mmask8 __M, __m128 __X, __m128 __Y,
                                           (__mmask8)-1))
 
 #define _mm512_cmp_epi32_mask(X, Y, P)                                 \
-  ((__mmask8) __builtin_ia32_cmpd512_mask ((__v16si)(__m512i)(X),      \
-                                          (__v16si)(__m512i)(Y), (int)(P),\
-                                          (__mmask16)-1))
+  ((__mmask16) __builtin_ia32_cmpd512_mask ((__v16si)(__m512i)(X),     \
+                                           (__v16si)(__m512i)(Y), (int)(P), \
+                                           (__mmask16)-1))
 
 #define _mm512_cmp_epu64_mask(X, Y, P)                                 \
   ((__mmask8) __builtin_ia32_ucmpq512_mask ((__v8di)(__m512i)(X),      \
@@ -9140,66 +9141,66 @@ _mm_mask_cmp_round_ss_mask (__mmask8 __M, __m128 __X, __m128 __Y,
                                            (__mmask8)-1))
 
 #define _mm512_cmp_epu32_mask(X, Y, P)                                 \
-  ((__mmask8) __builtin_ia32_ucmpd512_mask ((__v16si)(__m512i)(X),     \
-                                           (__v16si)(__m512i)(Y), (int)(P),\
-                                           (__mmask16)-1))
+  ((__mmask16) __builtin_ia32_ucmpd512_mask ((__v16si)(__m512i)(X),    \
+                                            (__v16si)(__m512i)(Y), (int)(P), \
+                                            (__mmask16)-1))
 
-#define _mm512_cmp_round_pd_mask(X, Y, P, R)                                   \
+#define _mm512_cmp_round_pd_mask(X, Y, P, R)                           \
   ((__mmask8) __builtin_ia32_cmppd512_mask ((__v8df)(__m512d)(X),      \
                                            (__v8df)(__m512d)(Y), (int)(P),\
                                            (__mmask8)-1, R))
 
-#define _mm512_cmp_round_ps_mask(X, Y, P, R)                                   \
+#define _mm512_cmp_round_ps_mask(X, Y, P, R)                           \
   ((__mmask16) __builtin_ia32_cmpps512_mask ((__v16sf)(__m512)(X),     \
                                             (__v16sf)(__m512)(Y), (int)(P),\
                                             (__mmask16)-1, R))
 
-#define _mm512_mask_cmp_epi64_mask(M, X, Y, P)                                 \
+#define _mm512_mask_cmp_epi64_mask(M, X, Y, P)                         \
   ((__mmask8) __builtin_ia32_cmpq512_mask ((__v8di)(__m512i)(X),       \
                                           (__v8di)(__m512i)(Y), (int)(P),\
                                           (__mmask8)M))
 
-#define _mm512_mask_cmp_epi32_mask(M, X, Y, P)                                 \
-  ((__mmask8) __builtin_ia32_cmpd512_mask ((__v16si)(__m512i)(X),      \
-                                          (__v16si)(__m512i)(Y), (int)(P),\
-                                          (__mmask16)M))
+#define _mm512_mask_cmp_epi32_mask(M, X, Y, P)                         \
+  ((__mmask16) __builtin_ia32_cmpd512_mask ((__v16si)(__m512i)(X),     \
+                                           (__v16si)(__m512i)(Y), (int)(P), \
+                                           (__mmask16)M))
 
-#define _mm512_mask_cmp_epu64_mask(M, X, Y, P)                                 \
+#define _mm512_mask_cmp_epu64_mask(M, X, Y, P)                         \
   ((__mmask8) __builtin_ia32_ucmpq512_mask ((__v8di)(__m512i)(X),      \
                                            (__v8di)(__m512i)(Y), (int)(P),\
                                            (__mmask8)M))
 
-#define _mm512_mask_cmp_epu32_mask(M, X, Y, P)                                 \
-  ((__mmask8) __builtin_ia32_ucmpd512_mask ((__v16si)(__m512i)(X),     \
-                                           (__v16si)(__m512i)(Y), (int)(P),\
-                                           (__mmask16)M))
+#define _mm512_mask_cmp_epu32_mask(M, X, Y, P)                         \
+  ((__mmask16) __builtin_ia32_ucmpd512_mask ((__v16si)(__m512i)(X),    \
+                                            (__v16si)(__m512i)(Y), (int)(P), \
+                                            (__mmask16)M))
 
-#define _mm512_mask_cmp_round_pd_mask(M, X, Y, P, R)                                   \
+#define _mm512_mask_cmp_round_pd_mask(M, X, Y, P, R)                   \
   ((__mmask8) __builtin_ia32_cmppd512_mask ((__v8df)(__m512d)(X),      \
                                            (__v8df)(__m512d)(Y), (int)(P),\
                                            (__mmask8)M, R))
 
-#define _mm512_mask_cmp_round_ps_mask(M, X, Y, P, R)                                   \
+#define _mm512_mask_cmp_round_ps_mask(M, X, Y, P, R)                   \
   ((__mmask16) __builtin_ia32_cmpps512_mask ((__v16sf)(__m512)(X),     \
                                             (__v16sf)(__m512)(Y), (int)(P),\
                                             (__mmask16)M, R))
 
-#define _mm_cmp_round_sd_mask(X, Y, P, R)                                      \
+#define _mm_cmp_round_sd_mask(X, Y, P, R)                              \
   ((__mmask8) __builtin_ia32_cmpsd_mask ((__v2df)(__m128d)(X),         \
                                         (__v2df)(__m128d)(Y), (int)(P),\
                                         (__mmask8)-1, R))
 
-#define _mm_mask_cmp_round_sd_mask(M, X, Y, P, R)                                      \
+#define _mm_mask_cmp_round_sd_mask(M, X, Y, P, R)                      \
   ((__mmask8) __builtin_ia32_cmpsd_mask ((__v2df)(__m128d)(X),         \
                                         (__v2df)(__m128d)(Y), (int)(P),\
                                         (M), R))
 
-#define _mm_cmp_round_ss_mask(X, Y, P, R)                                      \
+#define _mm_cmp_round_ss_mask(X, Y, P, R)                              \
   ((__mmask8) __builtin_ia32_cmpss_mask ((__v4sf)(__m128)(X),          \
                                         (__v4sf)(__m128)(Y), (int)(P), \
                                         (__mmask8)-1, R))
 
-#define _mm_mask_cmp_round_ss_mask(M, X, Y, P, R)                                      \
+#define _mm_mask_cmp_round_ss_mask(M, X, Y, P, R)                      \
   ((__mmask8) __builtin_ia32_cmpss_mask ((__v4sf)(__m128)(X),          \
                                         (__v4sf)(__m128)(Y), (int)(P), \
                                         (M), R))
@@ -9306,7 +9307,7 @@ extern __inline __m512i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_i32gather_epi32 (__m512i __index, int const *__addr, int __scale)
 {
-  __m512i v1_old = _mm512_undefined_si512 ();
+  __m512i v1_old = _mm512_undefined_epi32 ();
   __mmask16 mask = 0xFFFF;
 
   return (__m512i) __builtin_ia32_gathersiv16si ((__v16si) v1_old,
@@ -9330,7 +9331,7 @@ extern __inline __m512i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_i32gather_epi64 (__m256i __index, long long const *__addr, int __scale)
 {
-  __m512i v1_old = _mm512_undefined_si512 ();
+  __m512i v1_old = _mm512_undefined_epi32 ();
   __mmask8 mask = 0xFF;
 
   return (__m512i) __builtin_ia32_gathersiv8di ((__v8di) v1_old,
@@ -9379,7 +9380,7 @@ extern __inline __m512i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_i64gather_epi64 (__m512i __index, long long const *__addr, int __scale)
 {
-  __m512i v1_old = _mm512_undefined_si512 ();
+  __m512i v1_old = _mm512_undefined_epi32 ();
   __mmask8 mask = 0xFF;
 
   return (__m512i) __builtin_ia32_gatherdiv8di ((__v8di) v1_old,
@@ -9591,7 +9592,7 @@ _mm512_mask_i64scatter_epi64 (long long *__addr, __mmask8 __mask,
                                         (__mmask8)MASK, (int)SCALE)
 
 #define _mm512_i32gather_epi32(INDEX, ADDR, SCALE)                     \
-  (__m512i) __builtin_ia32_gathersiv16si ((__v16si)_mm512_undefined_si512 (),  \
+  (__m512i) __builtin_ia32_gathersiv16si ((__v16si)_mm512_undefined_epi32 (),  \
                                          (int const *)ADDR,            \
                                          (__v16si)(__m512i)INDEX,      \
                                          (__mmask16)0xFFFF, (int)SCALE)
@@ -9603,7 +9604,7 @@ _mm512_mask_i64scatter_epi64 (long long *__addr, __mmask8 __mask,
                                          (__mmask16)MASK, (int)SCALE)
 
 #define _mm512_i32gather_epi64(INDEX, ADDR, SCALE)                     \
-  (__m512i) __builtin_ia32_gathersiv8di ((__v8di)_mm512_undefined_si512 (),    \
+  (__m512i) __builtin_ia32_gathersiv8di ((__v8di)_mm512_undefined_epi32 (),    \
                                         (long long const *)ADDR,       \
                                         (__v8si)(__m256i)INDEX,        \
                                         (__mmask8)0xFF, (int)SCALE)
@@ -9627,7 +9628,7 @@ _mm512_mask_i64scatter_epi64 (long long *__addr, __mmask8 __mask,
                                          (__mmask8)MASK, (int)SCALE)
 
 #define _mm512_i64gather_epi64(INDEX, ADDR, SCALE)                     \
-  (__m512i) __builtin_ia32_gatherdiv8di ((__v8di)_mm512_undefined_si512 (),    \
+  (__m512i) __builtin_ia32_gatherdiv8di ((__v8di)_mm512_undefined_epi32 (),    \
                                         (long long const *)ADDR,       \
                                         (__v8di)(__m512i)INDEX,        \
                                         (__mmask8)0xFF, (int)SCALE)
@@ -10123,7 +10124,7 @@ _mm512_max_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pmaxsq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -10154,7 +10155,7 @@ _mm512_min_epi64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pminsq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -10185,7 +10186,7 @@ _mm512_max_epu64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pmaxuq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -10216,7 +10217,7 @@ _mm512_min_epu64 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pminuq512_mask ((__v8di) __A,
                                                  (__v8di) __B,
                                                  (__v8di)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask8) -1);
 }
 
@@ -10247,7 +10248,7 @@ _mm512_max_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pmaxsd512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -10278,7 +10279,7 @@ _mm512_min_epi32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pminsd512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -10309,7 +10310,7 @@ _mm512_max_epu32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pmaxud512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -10340,7 +10341,7 @@ _mm512_min_epu32 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_pminud512_mask ((__v16si) __A,
                                                  (__v16si) __B,
                                                  (__v16si)
-                                                 _mm512_undefined_si512 (),
+                                                 _mm512_undefined_epi32 (),
                                                  (__mmask16) -1);
 }
 
@@ -11804,7 +11805,7 @@ _mm512_cvttps_epi32 (__m512 __A)
 {
   return (__m512i) __builtin_ia32_cvttps2dq512_mask ((__v16sf) __A,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1,
                                                     _MM_FROUND_CUR_DIRECTION);
 }
@@ -11836,7 +11837,7 @@ _mm512_cvttps_epu32 (__m512 __A)
 {
   return (__m512i) __builtin_ia32_cvttps2udq512_mask ((__v16sf) __A,
                                                      (__v16si)
-                                                     _mm512_undefined_si512 (),
+                                                     _mm512_undefined_epi32 (),
                                                      (__mmask16) -1,
                                                      _MM_FROUND_CUR_DIRECTION);
 }
@@ -11868,7 +11869,7 @@ _mm512_cvtps_epi32 (__m512 __A)
 {
   return (__m512i) __builtin_ia32_cvtps2dq512_mask ((__v16sf) __A,
                                                    (__v16si)
-                                                   _mm512_undefined_si512 (),
+                                                   _mm512_undefined_epi32 (),
                                                    (__mmask16) -1,
                                                    _MM_FROUND_CUR_DIRECTION);
 }
@@ -11900,7 +11901,7 @@ _mm512_cvtps_epu32 (__m512 __A)
 {
   return (__m512i) __builtin_ia32_cvtps2udq512_mask ((__v16sf) __A,
                                                     (__v16si)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask16) -1,
                                                     _MM_FROUND_CUR_DIRECTION);
 }
index c2f4311..c50aa65 100644 (file)
@@ -41,7 +41,7 @@ _mm512_madd52lo_epu64 (__m512i __X, __m512i __Y, __m512i __Z)
   return (__m512i) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
                                                       (__v8di) __Y,
                                                       (__v8di) __Z,
-                                                      (__mmask8) - 1);
+                                                      (__mmask8) -1);
 }
 
 extern __inline __m512i
@@ -51,7 +51,7 @@ _mm512_madd52hi_epu64 (__m512i __X, __m512i __Y, __m512i __Z)
   return (__m512i) __builtin_ia32_vpmadd52huq512_mask ((__v8di) __X,
                                                       (__v8di) __Y,
                                                       (__v8di) __Z,
-                                                      (__mmask8) - 1);
+                                                      (__mmask8) -1);
 }
 
 extern __inline __m512i
index 9091f89..6c496f7 100644 (file)
@@ -41,7 +41,7 @@ _mm_madd52lo_epu64 (__m128i __X, __m128i __Y, __m128i __Z)
   return (__m128i) __builtin_ia32_vpmadd52luq128_mask ((__v2di) __X,
                                                       (__v2di) __Y,
                                                       (__v2di) __Z,
-                                                      (__mmask8) - 1);
+                                                      (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -51,7 +51,7 @@ _mm_madd52hi_epu64 (__m128i __X, __m128i __Y, __m128i __Z)
   return (__m128i) __builtin_ia32_vpmadd52huq128_mask ((__v2di) __X,
                                                       (__v2di) __Y,
                                                       (__v2di) __Z,
-                                                      (__mmask8) - 1);
+                                                      (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -61,7 +61,7 @@ _mm256_madd52lo_epu64 (__m256i __X, __m256i __Y, __m256i __Z)
   return (__m256i) __builtin_ia32_vpmadd52luq256_mask ((__v4di) __X,
                                                       (__v4di) __Y,
                                                       (__v4di) __Z,
-                                                      (__mmask8) - 1);
+                                                      (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -71,7 +71,7 @@ _mm256_madd52hi_epu64 (__m256i __X, __m256i __Y, __m256i __Z)
   return (__m256i) __builtin_ia32_vpmadd52huq256_mask ((__v4di) __X,
                                                       (__v4di) __Y,
                                                       (__v4di) __Z,
-                                                      (__mmask8) - 1);
+                                                      (__mmask8) -1);
 }
 
 extern __inline __m128i
index a00cf70..a2ad07a 100644 (file)
@@ -62,7 +62,7 @@ _mm512_multishift_epi64_epi8 (__m512i __X, __m512i __Y)
   return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
                                                          (__v64qi) __Y,
                                                          (__v64qi)
-                                                         _mm512_undefined_si512 (),
+                                                         _mm512_undefined_epi32 (),
                                                          (__mmask64) -1);
 }
 
@@ -73,7 +73,7 @@ _mm512_permutexvar_epi8 (__m512i __A, __m512i __B)
   return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
                                                     (__v64qi) __A,
                                                     (__v64qi)
-                                                    _mm512_undefined_si512 (),
+                                                    _mm512_undefined_epi32 (),
                                                     (__mmask64) -1);
 }
 
@@ -108,8 +108,7 @@ _mm512_permutex2var_epi8 (__m512i __A, __m512i __I, __m512i __B)
                                                        /* idx */ ,
                                                        (__v64qi) __A,
                                                        (__v64qi) __B,
-                                                       (__mmask64) -
-                                                       1);
+                                                       (__mmask64) -1);
 }
 
 extern __inline __m512i
index 4af9fb9..04308ea 100644 (file)
@@ -173,8 +173,7 @@ _mm256_permutex2var_epi8 (__m256i __A, __m256i __I, __m256i __B)
                                                        /* idx */ ,
                                                        (__v32qi) __A,
                                                        (__v32qi) __B,
-                                                       (__mmask32) -
-                                                       1);
+                                                       (__mmask32) -1);
 }
 
 extern __inline __m256i
@@ -224,8 +223,7 @@ _mm_permutex2var_epi8 (__m128i __A, __m128i __I, __m128i __B)
                                                        /* idx */ ,
                                                        (__v16qi) __A,
                                                        (__v16qi) __B,
-                                                       (__mmask16) -
-                                                       1);
+                                                       (__mmask16) -1);
 }
 
 extern __inline __m128i
index f260526..cf94755 100644 (file)
@@ -575,8 +575,7 @@ _mm256_permutex2var_epi16 (__m256i __A, __m256i __I, __m256i __B)
                                                        /* idx */ ,
                                                        (__v16hi) __A,
                                                        (__v16hi) __B,
-                                                       (__mmask16) -
-                                                       1);
+                                                       (__mmask16) -1);
 }
 
 extern __inline __m256i
@@ -626,8 +625,7 @@ _mm_permutex2var_epi16 (__m128i __A, __m128i __I, __m128i __B)
                                                        /* idx */ ,
                                                        (__v8hi) __A,
                                                        (__v8hi) __B,
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -2009,7 +2007,7 @@ _mm256_cmpneq_epi8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpb256_mask ((__v32qi) __X,
                                                  (__v32qi) __Y, 4,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2018,7 +2016,7 @@ _mm256_cmplt_epi8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpb256_mask ((__v32qi) __X,
                                                  (__v32qi) __Y, 1,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2027,7 +2025,7 @@ _mm256_cmpge_epi8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpb256_mask ((__v32qi) __X,
                                                  (__v32qi) __Y, 5,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -2036,7 +2034,7 @@ _mm256_cmple_epi8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_cmpb256_mask ((__v32qi) __X,
                                                  (__v32qi) __Y, 2,
-                                                 (__mmask32) - 1);
+                                                 (__mmask32) -1);
 }
 
 extern __inline __mmask16
@@ -2045,7 +2043,7 @@ _mm256_cmpneq_epi16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpw256_mask ((__v16hi) __X,
                                                  (__v16hi) __Y, 4,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2054,7 +2052,7 @@ _mm256_cmplt_epi16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpw256_mask ((__v16hi) __X,
                                                  (__v16hi) __Y, 1,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2063,7 +2061,7 @@ _mm256_cmpge_epi16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpw256_mask ((__v16hi) __X,
                                                  (__v16hi) __Y, 5,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2072,7 +2070,7 @@ _mm256_cmple_epi16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpw256_mask ((__v16hi) __X,
                                                  (__v16hi) __Y, 2,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2081,7 +2079,7 @@ _mm_cmpneq_epu8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpb128_mask ((__v16qi) __X,
                                                   (__v16qi) __Y, 4,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2090,7 +2088,7 @@ _mm_cmplt_epu8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpb128_mask ((__v16qi) __X,
                                                   (__v16qi) __Y, 1,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2099,7 +2097,7 @@ _mm_cmpge_epu8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpb128_mask ((__v16qi) __X,
                                                   (__v16qi) __Y, 5,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2108,7 +2106,7 @@ _mm_cmple_epu8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpb128_mask ((__v16qi) __X,
                                                   (__v16qi) __Y, 2,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask8
@@ -2117,7 +2115,7 @@ _mm_cmpneq_epu16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpw128_mask ((__v8hi) __X,
                                                  (__v8hi) __Y, 4,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -2126,7 +2124,7 @@ _mm_cmplt_epu16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpw128_mask ((__v8hi) __X,
                                                  (__v8hi) __Y, 1,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -2135,7 +2133,7 @@ _mm_cmpge_epu16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpw128_mask ((__v8hi) __X,
                                                  (__v8hi) __Y, 5,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -2144,7 +2142,7 @@ _mm_cmple_epu16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpw128_mask ((__v8hi) __X,
                                                  (__v8hi) __Y, 2,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask16
@@ -2153,7 +2151,7 @@ _mm_cmpneq_epi8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpb128_mask ((__v16qi) __X,
                                                  (__v16qi) __Y, 4,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2162,7 +2160,7 @@ _mm_cmplt_epi8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpb128_mask ((__v16qi) __X,
                                                  (__v16qi) __Y, 1,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2171,7 +2169,7 @@ _mm_cmpge_epi8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpb128_mask ((__v16qi) __X,
                                                  (__v16qi) __Y, 5,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -2180,7 +2178,7 @@ _mm_cmple_epi8_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask16) __builtin_ia32_cmpb128_mask ((__v16qi) __X,
                                                  (__v16qi) __Y, 2,
-                                                 (__mmask16) - 1);
+                                                 (__mmask16) -1);
 }
 
 extern __inline __mmask8
@@ -2189,7 +2187,7 @@ _mm_cmpneq_epi16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpw128_mask ((__v8hi) __X,
                                                 (__v8hi) __Y, 4,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -2198,7 +2196,7 @@ _mm_cmplt_epi16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpw128_mask ((__v8hi) __X,
                                                 (__v8hi) __Y, 1,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -2207,7 +2205,7 @@ _mm_cmpge_epi16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpw128_mask ((__v8hi) __X,
                                                 (__v8hi) __Y, 5,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -2216,7 +2214,7 @@ _mm_cmple_epi16_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpw128_mask ((__v8hi) __X,
                                                 (__v8hi) __Y, 2,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -3609,7 +3607,7 @@ _mm256_cmpneq_epu8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpb256_mask ((__v32qi) __X,
                                                   (__v32qi) __Y, 4,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -3618,7 +3616,7 @@ _mm256_cmplt_epu8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpb256_mask ((__v32qi) __X,
                                                   (__v32qi) __Y, 1,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -3627,7 +3625,7 @@ _mm256_cmpge_epu8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpb256_mask ((__v32qi) __X,
                                                   (__v32qi) __Y, 5,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask32
@@ -3636,7 +3634,7 @@ _mm256_cmple_epu8_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask32) __builtin_ia32_ucmpb256_mask ((__v32qi) __X,
                                                   (__v32qi) __Y, 2,
-                                                  (__mmask32) - 1);
+                                                  (__mmask32) -1);
 }
 
 extern __inline __mmask16
@@ -3645,7 +3643,7 @@ _mm256_cmpneq_epu16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpw256_mask ((__v16hi) __X,
                                                   (__v16hi) __Y, 4,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -3654,7 +3652,7 @@ _mm256_cmplt_epu16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpw256_mask ((__v16hi) __X,
                                                   (__v16hi) __Y, 1,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -3663,7 +3661,7 @@ _mm256_cmpge_epu16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpw256_mask ((__v16hi) __X,
                                                   (__v16hi) __Y, 5,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline __mmask16
@@ -3672,7 +3670,7 @@ _mm256_cmple_epu16_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask16) __builtin_ia32_ucmpw256_mask ((__v16hi) __X,
                                                   (__v16hi) __Y, 2,
-                                                  (__mmask16) - 1);
+                                                  (__mmask16) -1);
 }
 
 extern __inline void
index 697b81c..5ff0a52 100644 (file)
@@ -389,8 +389,7 @@ _mm256_broadcast_f64x2 (__m128d __A)
   return (__m256d) __builtin_ia32_broadcastf64x2_256_mask ((__v2df)
                                                           __A,
                                                           (__v4df)_mm256_undefined_pd(),
-                                                          (__mmask8) -
-                                                          1);
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m256d
@@ -421,8 +420,7 @@ _mm256_broadcast_i64x2 (__m128i __A)
   return (__m256i) __builtin_ia32_broadcasti64x2_256_mask ((__v2di)
                                                           __A,
                                                           (__v4di)_mm256_undefined_si256(),
-                                                          (__mmask8) -
-                                                          1);
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -452,8 +450,7 @@ _mm256_broadcast_f32x2 (__m128 __A)
 {
   return (__m256) __builtin_ia32_broadcastf32x2_256_mask ((__v4sf) __A,
                                                          (__v8sf)_mm256_undefined_ps(),
-                                                         (__mmask8) -
-                                                         1);
+                                                         (__mmask8) -1);
 }
 
 extern __inline __m256
@@ -482,8 +479,7 @@ _mm256_broadcast_i32x2 (__m128i __A)
   return (__m256i) __builtin_ia32_broadcasti32x2_256_mask ((__v4si)
                                                           __A,
                                                          (__v8si)_mm256_undefined_si256(),
-                                                          (__mmask8) -
-                                                          1);
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -514,8 +510,7 @@ _mm_broadcast_i32x2 (__m128i __A)
   return (__m128i) __builtin_ia32_broadcasti32x2_128_mask ((__v4si)
                                                           __A,
                                                          (__v4si)_mm_undefined_si128(),
-                                                          (__mmask8) -
-                                                          1);
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -1351,8 +1346,7 @@ _mm256_extractf64x2_pd (__m256d __A, const int __imm)
                                                         __imm,
                                                         (__v2df)
                                                         _mm_setzero_pd (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128d
@@ -1388,8 +1382,7 @@ _mm256_extracti64x2_epi64 (__m256i __A, const int __imm)
                                                         __imm,
                                                         (__v2di)
                                                         _mm_setzero_di (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -1743,8 +1736,7 @@ _mm256_inserti64x2 (__m256i __A, __m128i __B, const int __imm)
                                                        __imm,
                                                        (__v4di)
                                                        _mm256_setzero_si256 (),
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -1783,8 +1775,7 @@ _mm256_insertf64x2 (__m256d __A, __m128d __B, const int __imm)
                                                        __imm,
                                                        (__v4df)
                                                        _mm256_setzero_pd (),
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m256d
index d0ffb2b..d627ad8 100644 (file)
@@ -2698,8 +2698,7 @@ _mm256_broadcast_f32x4 (__m128 __A)
 {
   return (__m256) __builtin_ia32_broadcastf32x4_256_mask ((__v4sf) __A,
                                                          (__v8sf)_mm256_undefined_pd (),
-                                                         (__mmask8) -
-                                                         1);
+                                                         (__mmask8) -1);
 }
 
 extern __inline __m256
@@ -2728,8 +2727,7 @@ _mm256_broadcast_i32x4 (__m128i __A)
   return (__m256i) __builtin_ia32_broadcasti32x4_256_mask ((__v4si)
                                                           __A,
                                                           (__v8si)_mm256_undefined_si256 (),
-                                                          (__mmask8) -
-                                                          1);
+                                                          (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -6293,8 +6291,7 @@ _mm256_permutex2var_pd (__m256d __A, __m256i __I, __m256d __B)
                                                        /* idx */ ,
                                                        (__v4df) __A,
                                                        (__v4df) __B,
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m256d
@@ -6584,8 +6581,7 @@ _mm_permutex2var_pd (__m128d __A, __m128i __I, __m128d __B)
                                                        /* idx */ ,
                                                        (__v2df) __A,
                                                        (__v2df) __B,
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m128d
@@ -8259,8 +8255,7 @@ _mm256_conflict_epi64 (__m256i __A)
   return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
                                                         (__v4di)
                                                         _mm256_setzero_si256 (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -8291,8 +8286,7 @@ _mm256_conflict_epi32 (__m256i __A)
   return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
                                                         (__v8si)
                                                         _mm256_setzero_si256 (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -8381,8 +8375,7 @@ _mm_conflict_epi64 (__m128i __A)
   return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
                                                         (__v2di)
                                                         _mm_setzero_di (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -8413,8 +8406,7 @@ _mm_conflict_epi32 (__m128i __A)
   return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
                                                         (__v4si)
                                                         _mm_setzero_si128 (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -9291,8 +9283,7 @@ _mm256_inserti32x4 (__m256i __A, __m128i __B, const int __imm)
                                                        __imm,
                                                        (__v8si)
                                                        _mm256_setzero_si256 (),
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m256i
@@ -9367,8 +9358,7 @@ _mm256_extracti32x4_epi32 (__m256i __A, const int __imm)
                                                         __imm,
                                                         (__v4si)
                                                         _mm_setzero_si128 (),
-                                                        (__mmask8) -
-                                                        1);
+                                                        (__mmask8) -1);
 }
 
 extern __inline __m128i
@@ -9404,8 +9394,7 @@ _mm256_extractf32x4_ps (__m256 __A, const int __imm)
                                                        __imm,
                                                        (__v4sf)
                                                        _mm_setzero_ps (),
-                                                       (__mmask8) -
-                                                       1);
+                                                       (__mmask8) -1);
 }
 
 extern __inline __m128
@@ -11797,7 +11786,7 @@ _mm256_cmpneq_epu32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X,
                                                  (__v8si) __Y, 4,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11815,7 +11804,7 @@ _mm256_cmplt_epu32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X,
                                                  (__v8si) __Y, 1,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11833,7 +11822,7 @@ _mm256_cmpge_epu32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X,
                                                  (__v8si) __Y, 5,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11851,7 +11840,7 @@ _mm256_cmple_epu32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X,
                                                  (__v8si) __Y, 2,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11869,7 +11858,7 @@ _mm256_cmpneq_epu64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X,
                                                  (__v4di) __Y, 4,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11887,7 +11876,7 @@ _mm256_cmplt_epu64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X,
                                                  (__v4di) __Y, 1,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11905,7 +11894,7 @@ _mm256_cmpge_epu64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X,
                                                  (__v4di) __Y, 5,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11923,7 +11912,7 @@ _mm256_cmple_epu64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X,
                                                  (__v4di) __Y, 2,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11941,7 +11930,7 @@ _mm256_cmpneq_epi32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X,
                                                 (__v8si) __Y, 4,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11959,7 +11948,7 @@ _mm256_cmplt_epi32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X,
                                                 (__v8si) __Y, 1,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11977,7 +11966,7 @@ _mm256_cmpge_epi32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X,
                                                 (__v8si) __Y, 5,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -11995,7 +11984,7 @@ _mm256_cmple_epi32_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X,
                                                 (__v8si) __Y, 2,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12013,7 +12002,7 @@ _mm256_cmpneq_epi64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X,
                                                 (__v4di) __Y, 4,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12031,7 +12020,7 @@ _mm256_cmplt_epi64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X,
                                                 (__v4di) __Y, 1,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12049,7 +12038,7 @@ _mm256_cmpge_epi64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X,
                                                 (__v4di) __Y, 5,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12067,7 +12056,7 @@ _mm256_cmple_epi64_mask (__m256i __X, __m256i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X,
                                                 (__v4di) __Y, 2,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12085,7 +12074,7 @@ _mm_cmpneq_epu32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X,
                                                  (__v4si) __Y, 4,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12103,7 +12092,7 @@ _mm_cmplt_epu32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X,
                                                  (__v4si) __Y, 1,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12121,7 +12110,7 @@ _mm_cmpge_epu32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X,
                                                  (__v4si) __Y, 5,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12139,7 +12128,7 @@ _mm_cmple_epu32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X,
                                                  (__v4si) __Y, 2,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12157,7 +12146,7 @@ _mm_cmpneq_epu64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X,
                                                  (__v2di) __Y, 4,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12175,7 +12164,7 @@ _mm_cmplt_epu64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X,
                                                  (__v2di) __Y, 1,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12193,7 +12182,7 @@ _mm_cmpge_epu64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X,
                                                  (__v2di) __Y, 5,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12211,7 +12200,7 @@ _mm_cmple_epu64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X,
                                                  (__v2di) __Y, 2,
-                                                 (__mmask8) - 1);
+                                                 (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12229,7 +12218,7 @@ _mm_cmpneq_epi32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X,
                                                 (__v4si) __Y, 4,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12247,7 +12236,7 @@ _mm_cmplt_epi32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X,
                                                 (__v4si) __Y, 1,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12265,7 +12254,7 @@ _mm_cmpge_epi32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X,
                                                 (__v4si) __Y, 5,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12283,7 +12272,7 @@ _mm_cmple_epi32_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X,
                                                 (__v4si) __Y, 2,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12301,7 +12290,7 @@ _mm_cmpneq_epi64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X,
                                                 (__v2di) __Y, 4,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12319,7 +12308,7 @@ _mm_cmplt_epi64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X,
                                                 (__v2di) __Y, 1,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12337,7 +12326,7 @@ _mm_cmpge_epi64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X,
                                                 (__v2di) __Y, 5,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 extern __inline __mmask8
@@ -12355,7 +12344,7 @@ _mm_cmple_epi64_mask (__m128i __X, __m128i __Y)
 {
   return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X,
                                                 (__v2di) __Y, 2,
-                                                (__mmask8) - 1);
+                                                (__mmask8) -1);
 }
 
 #else
index 861a029..c1bdcc7 100644 (file)
@@ -39369,6 +39369,7 @@ ix86_expand_args_builtin (const struct builtin_description *d,
     case 5:
       pat = GEN_FCN (icode) (real_target, args[0].op, args[1].op,
                             args[2].op, args[3].op, args[4].op);
+      break;
     case 6:
       pat = GEN_FCN (icode) (real_target, args[0].op, args[1].op,
                             args[2].op, args[3].op, args[4].op,
@@ -39743,6 +39744,7 @@ ix86_expand_round_builtin (const struct builtin_description *d,
     case 5:
       pat = GEN_FCN (icode) (target, args[0].op, args[1].op,
                             args[2].op, args[3].op, args[4].op);
+      break;
     case 6:
       pat = GEN_FCN (icode) (target, args[0].op, args[1].op,
                             args[2].op, args[3].op, args[4].op,
index c4c4cd8..7fbbea6 100644 (file)
        (match_operand:TF 1 "general_operand"      "C ,xm,x,*roF,*rC"))]
   "(TARGET_64BIT || TARGET_SSE)
    && !(MEM_P (operands[0]) && MEM_P (operands[1]))
-   && (!can_create_pseudo_p ()
+   && (lra_in_progress || reload_completed
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || !CONST_DOUBLE_P (operands[1])
        || (optimize_function_for_size_p (cfun)
        (match_operand:XF 1 "general_operand"
         "fm,f,G,roF,r , *roF,*r,F ,C,roF,rF"))]
   "!(MEM_P (operands[0]) && MEM_P (operands[1]))
-   && (!can_create_pseudo_p ()
+   && (lra_in_progress || reload_completed
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || !CONST_DOUBLE_P (operands[1])
        || (optimize_function_for_size_p (cfun)
        (match_operand:DF 1 "general_operand"
     "Yf*fm,Yf*f,G   ,roF,r ,*roF,*r,F ,rm,rC,C ,F ,C,v,m,v,C ,*x,m ,*x,Yj,r ,roF,rF,rmF,rC"))]
   "!(MEM_P (operands[0]) && MEM_P (operands[1]))
-   && (!can_create_pseudo_p ()
+   && (lra_in_progress || reload_completed
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || !CONST_DOUBLE_P (operands[1])
        || (optimize_function_for_size_p (cfun)
        (match_operand:SF 1 "general_operand"
          "Yf*fm,Yf*f,G   ,rmF,rF,C,v,m,v,Yj,r  ,*y ,m  ,*y,*Yn,r   ,rmF,rF"))]
   "!(MEM_P (operands[0]) && MEM_P (operands[1]))
-   && (!can_create_pseudo_p ()
+   && (lra_in_progress || reload_completed
        || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
        || !CONST_DOUBLE_P (operands[1])
        || (optimize_function_for_size_p (cfun)
index 8b1c832..5fb1da7 100644 (file)
@@ -4541,63 +4541,78 @@ hppa_profile_hook (int label_no)
      lcla2 and load_offset_label_address insn patterns.  */
   rtx reg = gen_reg_rtx (SImode);
   rtx_code_label *label_rtx = gen_label_rtx ();
-  rtx begin_label_rtx;
+  rtx mcount = gen_rtx_MEM (Pmode, gen_rtx_SYMBOL_REF (Pmode, "_mcount"));
+  int reg_parm_stack_space = REG_PARM_STACK_SPACE (NULL_TREE);
+  rtx arg_bytes, begin_label_rtx;
   rtx_insn *call_insn;
   char begin_label_name[16];
+  bool use_mcount_pcrel_call;
+
+  /* If we can reach _mcount with a pc-relative call, we can optimize
+     loading the address of the current function.  This requires linker
+     long branch stub support.  */
+  if (!TARGET_PORTABLE_RUNTIME
+      && !TARGET_LONG_CALLS
+      && (TARGET_SOM || flag_function_sections))
+    use_mcount_pcrel_call = TRUE;
+  else
+    use_mcount_pcrel_call = FALSE;
 
   ASM_GENERATE_INTERNAL_LABEL (begin_label_name, FUNC_BEGIN_PROLOG_LABEL,
                               label_no);
   begin_label_rtx = gen_rtx_SYMBOL_REF (SImode, ggc_strdup (begin_label_name));
 
-  if (TARGET_64BIT)
-    emit_move_insn (arg_pointer_rtx,
-                   gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
-                                 GEN_INT (64)));
-
   emit_move_insn (gen_rtx_REG (word_mode, 26), gen_rtx_REG (word_mode, 2));
 
-  /* The address of the function is loaded into %r25 with an instruction-
-     relative sequence that avoids the use of relocations.  The sequence
-     is split so that the load_offset_label_address instruction can
-     occupy the delay slot of the call to _mcount.  */
-  if (TARGET_PA_20)
-    emit_insn (gen_lcla2 (reg, label_rtx));
-  else
-    emit_insn (gen_lcla1 (reg, label_rtx));
-
-  emit_insn (gen_load_offset_label_address (gen_rtx_REG (SImode, 25), 
-                                           reg, begin_label_rtx, label_rtx));
-
-#if !NO_DEFERRED_PROFILE_COUNTERS
-  {
-    rtx count_label_rtx, addr, r24;
-    char count_label_name[16];
+  if (!use_mcount_pcrel_call)
+    {
+      /* The address of the function is loaded into %r25 with an instruction-
+        relative sequence that avoids the use of relocations.  The sequence
+        is split so that the load_offset_label_address instruction can
+        occupy the delay slot of the call to _mcount.  */
+      if (TARGET_PA_20)
+       emit_insn (gen_lcla2 (reg, label_rtx));
+      else
+       emit_insn (gen_lcla1 (reg, label_rtx));
 
-    funcdef_nos.safe_push (label_no);
-    ASM_GENERATE_INTERNAL_LABEL (count_label_name, "LP", label_no);
-    count_label_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (count_label_name));
+      emit_insn (gen_load_offset_label_address (gen_rtx_REG (SImode, 25), 
+                                               reg,
+                                               begin_label_rtx,
+                                               label_rtx));
+    }
 
-    addr = force_reg (Pmode, count_label_rtx);
-    r24 = gen_rtx_REG (Pmode, 24);
-    emit_move_insn (r24, addr);
+  if (!NO_DEFERRED_PROFILE_COUNTERS)
+    {
+      rtx count_label_rtx, addr, r24;
+      char count_label_name[16];
 
-    call_insn =
-      emit_call_insn (gen_call (gen_rtx_MEM (Pmode, 
-                                            gen_rtx_SYMBOL_REF (Pmode, 
-                                                                "_mcount")),
-                               GEN_INT (TARGET_64BIT ? 24 : 12)));
+      funcdef_nos.safe_push (label_no);
+      ASM_GENERATE_INTERNAL_LABEL (count_label_name, "LP", label_no);
+      count_label_rtx = gen_rtx_SYMBOL_REF (Pmode,
+                                           ggc_strdup (count_label_name));
 
-    use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), r24);
-  }
-#else
+      addr = force_reg (Pmode, count_label_rtx);
+      r24 = gen_rtx_REG (Pmode, 24);
+      emit_move_insn (r24, addr);
 
-  call_insn =
-    emit_call_insn (gen_call (gen_rtx_MEM (Pmode, 
-                                          gen_rtx_SYMBOL_REF (Pmode, 
-                                                              "_mcount")),
-                             GEN_INT (TARGET_64BIT ? 16 : 8)));
+      arg_bytes = GEN_INT (TARGET_64BIT ? 24 : 12);
+      if (use_mcount_pcrel_call)
+       call_insn = emit_call_insn (gen_call_mcount (mcount, arg_bytes,
+                                                    begin_label_rtx));
+      else
+       call_insn = emit_call_insn (gen_call (mcount, arg_bytes));
 
-#endif
+      use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), r24);
+    }
+  else
+    {
+      arg_bytes = GEN_INT (TARGET_64BIT ? 16 : 8);
+      if (use_mcount_pcrel_call)
+       call_insn = emit_call_insn (gen_call_mcount (mcount, arg_bytes,
+                                                    begin_label_rtx));
+      else
+       call_insn = emit_call_insn (gen_call (mcount, arg_bytes));
+    }
 
   use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), gen_rtx_REG (SImode, 25));
   use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), gen_rtx_REG (SImode, 26));
@@ -4605,6 +4620,10 @@ hppa_profile_hook (int label_no)
   /* Indicate the _mcount call cannot throw, nor will it execute a
      non-local goto.  */
   make_reg_eh_region_note_nothrow_nononlocal (call_insn);
+
+  /* Allocate space for fixed arguments.  */
+  if (reg_parm_stack_space > crtl->outgoing_args_size)
+    crtl->outgoing_args_size = reg_parm_stack_space;
 }
 
 /* Fetch the return address for the frame COUNT steps up from
index 75100d2..2c52465 100644 (file)
@@ -8216,6 +8216,170 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
        (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 12)]
              (symbol_ref "pa_attr_length_indirect_call (insn)")))])
 
+/* Expand special pc-relative call to _mcount.  */
+
+(define_expand "call_mcount"
+  [(parallel [(call (match_operand:SI 0 "" "")
+                   (match_operand 1 "" ""))
+             (set (reg:SI 25)
+                  (plus:SI (reg:SI 2)
+                           (minus:SI (match_operand 2 "" "")
+                                     (plus:SI (pc) (const_int 4)))))
+             (clobber (reg:SI 2))])]
+  "!TARGET_PORTABLE_RUNTIME"
+  "
+{
+  rtx op = XEXP (operands[0], 0);
+  rtx nb = operands[1];
+  rtx lab = operands[2];
+
+  if (TARGET_64BIT)
+    {
+      rtx r4 = gen_rtx_REG (word_mode, 4);
+      emit_move_insn (arg_pointer_rtx,
+                     gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
+                                   GEN_INT (64)));
+      emit_call_insn (gen_call_mcount_64bit (op, nb, lab, r4));
+    }
+  else
+    {
+      if (flag_pic)
+       {
+         rtx r4 = gen_rtx_REG (word_mode, 4);
+         emit_call_insn (gen_call_mcount_pic (op, nb, lab, r4));
+       }
+      else
+       emit_call_insn (gen_call_mcount_nonpic (op, nb, lab));
+    }
+
+  DONE;
+}")
+
+(define_insn "call_mcount_nonpic"
+  [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+        (match_operand 1 "" "i"))
+   (set (reg:SI 25)
+       (plus:SI (reg:SI 2)
+                (minus:SI (match_operand 2 "" "")
+                          (plus:SI (pc) (const_int 4)))))
+   (clobber (reg:SI 2))]
+  "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT"
+  "*
+{
+  pa_output_arg_descriptor (insn);
+  return \"{bl|b,l} %0,%%r2\;ldo %2-.-4(%%r2),%%r25\";
+}"
+  [(set_attr "type" "multi")
+   (set_attr "length" "8")])
+
+(define_insn "call_mcount_pic"
+  [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+        (match_operand 1 "" "i"))
+   (set (reg:SI 25)
+       (plus:SI (reg:SI 2)
+                (minus:SI (match_operand 2 "" "")
+                          (plus:SI (pc) (const_int 4)))))
+   (clobber (reg:SI 2))
+   (clobber (match_operand 3))
+   (use (reg:SI 19))]
+  "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT"
+  "#")
+
+(define_split
+  [(parallel [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+                   (match_operand 1 "" ""))
+             (set (reg:SI 25)
+                  (plus:SI (reg:SI 2)
+                           (minus:SI (match_operand 2 "" "")
+                                     (plus:SI (pc) (const_int 4)))))
+             (clobber (reg:SI 2))
+             (clobber (match_operand 3))
+             (use (reg:SI 19))])]
+  "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT && reload_completed"
+  [(set (match_dup 3) (reg:SI 19))
+   (parallel [(call (mem:SI (match_dup 0))
+                   (match_dup 1))
+             (set (reg:SI 25)
+                  (plus:SI (reg:SI 2)
+                           (minus:SI (match_dup 2)
+                                     (plus:SI (pc) (const_int 4)))))
+             (clobber (reg:SI 2))
+             (use (reg:SI 19))])
+   (set (reg:SI 19) (match_dup 3))]
+  "")
+
+(define_insn "*call_mcount_pic_post_reload"
+  [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+        (match_operand 1 "" "i"))
+   (set (reg:SI 25)
+       (plus:SI (reg:SI 2)
+                (minus:SI (match_operand 2 "" "")
+                          (plus:SI (pc) (const_int 4)))))
+   (clobber (reg:SI 2))
+   (use (reg:SI 19))]
+  "!TARGET_PORTABLE_RUNTIME && !TARGET_64BIT"
+  "*
+{
+  pa_output_arg_descriptor (insn);
+  return \"{bl|b,l} %0,%%r2\;ldo %2-.-4(%%r2),%%r25\";
+}"
+  [(set_attr "type" "multi")
+   (set_attr "length" "8")])
+
+(define_insn "call_mcount_64bit"
+  [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+        (match_operand 1 "" "i"))
+   (set (reg:SI 25)
+       (plus:SI (reg:SI 2)
+                (minus:SI (match_operand 2 "" "")
+                          (plus:SI (pc) (const_int 4)))))
+   (clobber (reg:DI 2))
+   (clobber (match_operand 3))
+   (use (reg:DI 27))
+   (use (reg:DI 29))]
+  "TARGET_64BIT"
+  "#")
+
+(define_split
+  [(parallel [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+                   (match_operand 1 "" ""))
+             (set (reg:SI 25)
+                  (plus:SI (reg:SI 2)
+                           (minus:SI (match_operand 2 "" "")
+                                     (plus:SI (pc) (const_int 4)))))
+             (clobber (reg:DI 2))
+             (clobber (match_operand 3))
+             (use (reg:DI 27))
+             (use (reg:DI 29))])]
+  "TARGET_64BIT && reload_completed"
+  [(set (match_dup 3) (reg:DI 27))
+   (parallel [(call (mem:SI (match_dup 0))
+                   (match_dup 1))
+             (set (reg:SI 25)
+                  (plus:SI (reg:SI 2)
+                           (minus:SI (match_dup 2)
+                                     (plus:SI (pc) (const_int 4)))))
+             (clobber (reg:DI 2))
+             (use (reg:DI 27))
+             (use (reg:DI 29))])
+   (set (reg:DI 27) (match_dup 3))]
+  "")
+
+(define_insn "*call_mcount_64bit_post_reload"
+  [(call (mem:SI (match_operand 0 "call_operand_address" ""))
+        (match_operand 1 "" "i"))
+   (set (reg:SI 25)
+       (plus:SI (reg:SI 2)
+                (minus:SI (match_operand 2 "" "")
+                          (plus:SI (pc) (const_int 4)))))
+   (clobber (reg:DI 2))
+   (use (reg:DI 27))
+   (use (reg:DI 29))]
+  "TARGET_64BIT"
+  "{bl|b,l} %0,%%r2\;ldo %2-.-4(%%r2),%%r25"
+  [(set_attr "type" "multi")
+   (set_attr "length" "8")])
+
 ;; Call subroutine returning any type.
 
 (define_expand "untyped_call"
index 331eec1..4fd1958 100644 (file)
   [(set (match_operand:HI 0 "register_operand")
         (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand"))
                  (zero_extend:HI (match_operand:QI 2 "register_operand"))))]
-  "!TARGET_G10"
+  ""
   ""
 )
 
index aacaeff..530b2fe 100644 (file)
   [(set (match_operand:HI 0 "register_operand" "=A,A")
         (mult:HI (match_operand:HI 1 "rl78_nonfar_operand" "0,0")
                  (match_operand:HI 2 "rl78_24_operand" "N,i")))]
-  "rl78_real_insns_ok () && !TARGET_G10"
+  "rl78_real_insns_ok ()"
   "@
    shlw\t%0, 1
    shlw\t%0, 2"
   [(set (match_operand:HI 0 "nonimmediate_operand" "=A")
         (mult:HI (zero_extend:HI (match_operand:QI 1 "general_operand" "%a"))
                  (zero_extend:HI (match_operand:QI 2 "general_operand" "x"))))]
-  "rl78_real_insns_ok () && !TARGET_G10"
+  "rl78_real_insns_ok ()"
   "mulu\t%2"
 )
 
index e2e7f47..8d1b2a8 100644 (file)
   [(set (match_operand:HI          0 "register_operand" "=v")
         (mult:HI (match_operand:HI 1 "rl78_nonfar_operand" "%vim")
                  (match_operand:HI 2 "rl78_24_operand" "Ni")))]
-  "rl78_virt_insns_ok () && !TARGET_G10"
+  "rl78_virt_insns_ok ()"
   "v.mulu\t%0, %1, %2"
   [(set_attr "valloc" "umul")]
 )
   [(set (match_operand:HI                          0 "register_operand" "=v")
         (mult:HI (zero_extend:HI (match_operand:QI 1 "rl78_nonfar_operand" "%vim"))
                  (zero_extend:HI (match_operand:QI 2 "general_operand" "vim"))))]
-  "rl78_virt_insns_ok () && !TARGET_G10"
+  "rl78_virt_insns_ok ()"
   "v.mulu\t%0, %2"
   [(set_attr "valloc" "umul")]
 )
index 3a52161..362fa22 100644 (file)
 ;; Slightly prefer vperm, since the target does not overlap the source
 (define_insn "*altivec_vperm_<mode>_internal"
   [(set (match_operand:VM 0 "register_operand" "=v,?wo")
-       (unspec:VM [(match_operand:VM 1 "register_operand" "v,0")
-                   (match_operand:VM 2 "register_operand" "v,wo")
+       (unspec:VM [(match_operand:VM 1 "register_operand" "v,wo")
+                   (match_operand:VM 2 "register_operand" "v,0")
                    (match_operand:V16QI 3 "register_operand" "v,wo")]
                   UNSPEC_VPERM))]
   "TARGET_ALTIVEC"
   "@
    vperm %0,%1,%2,%3
-   xxperm %x0,%x2,%x3"
+   xxperm %x0,%x1,%x3"
   [(set_attr "type" "vecperm")
    (set_attr "length" "4")])
 
 (define_insn "altivec_vperm_v8hiv16qi"
   [(set (match_operand:V16QI 0 "register_operand" "=v,?wo")
-       (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v,0")
-                      (match_operand:V8HI 2 "register_operand" "v,wo")
+       (unspec:V16QI [(match_operand:V8HI 1 "register_operand" "v,wo")
+                      (match_operand:V8HI 2 "register_operand" "v,0")
                       (match_operand:V16QI 3 "register_operand" "v,wo")]
                   UNSPEC_VPERM))]
   "TARGET_ALTIVEC"
   "@
    vperm %0,%1,%2,%3
-   xxperm %x0,%x2,%x3"
+   xxperm %x0,%x1,%x3"
   [(set_attr "type" "vecperm")
    (set_attr "length" "4")])
 
 
 (define_insn "*altivec_vperm_<mode>_uns_internal"
   [(set (match_operand:VM 0 "register_operand" "=v,?wo")
-       (unspec:VM [(match_operand:VM 1 "register_operand" "v,0")
-                   (match_operand:VM 2 "register_operand" "v,wo")
+       (unspec:VM [(match_operand:VM 1 "register_operand" "v,wo")
+                   (match_operand:VM 2 "register_operand" "v,0")
                    (match_operand:V16QI 3 "register_operand" "v,wo")]
                   UNSPEC_VPERM_UNS))]
   "TARGET_ALTIVEC"
   "@
    vperm %0,%1,%2,%3
-   xxperm %x0,%x2,%x3"
+   xxperm %x0,%x1,%x3"
   [(set_attr "type" "vecperm")
    (set_attr "length" "4")])
 
 
 (define_insn "*altivec_vpermr_<mode>_internal"
   [(set (match_operand:VM 0 "register_operand" "=v,?wo")
-       (unspec:VM [(match_operand:VM 1 "register_operand" "v,0")
-                   (match_operand:VM 2 "register_operand" "v,wo")
+       (unspec:VM [(match_operand:VM 1 "register_operand" "v,wo")
+                   (match_operand:VM 2 "register_operand" "v,0")
                    (match_operand:V16QI 3 "register_operand" "v,wo")]
                   UNSPEC_VPERMR))]
   "TARGET_P9_VECTOR"
   "@
    vpermr %0,%2,%1,%3
-   xxpermr %x0,%x2,%x3"
+   xxpermr %x0,%x1,%x3"
   [(set_attr "type" "vecperm")
    (set_attr "length" "4")])
 
 
 (define_insn "vperm_v8hiv4si"
   [(set (match_operand:V4SI 0 "register_operand" "=v,?wo")
-        (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v,0")
-                     (match_operand:V4SI 2 "register_operand" "v,wo")
+        (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v,wo")
+                     (match_operand:V4SI 2 "register_operand" "v,0")
                      (match_operand:V16QI 3 "register_operand" "v,wo")]
                   UNSPEC_VPERMSI))]
   "TARGET_ALTIVEC"
   "@
    vperm %0,%1,%2,%3
-   xxperm %x0,%x2,%x3"
+   xxperm %x0,%x1,%x3"
   [(set_attr "type" "vecperm")
    (set_attr "length" "4")])
 
 (define_insn "vperm_v16qiv8hi"
   [(set (match_operand:V8HI 0 "register_operand" "=v,?wo")
-        (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v,0")
-                     (match_operand:V8HI 2 "register_operand" "v,wo")
+        (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v,wo")
+                     (match_operand:V8HI 2 "register_operand" "v,0")
                      (match_operand:V16QI 3 "register_operand" "v,wo")]
                   UNSPEC_VPERMHI))]
   "TARGET_ALTIVEC"
   "@
    vperm %0,%1,%2,%3
-   xxperm %x0,%x2,%x3"
+   xxperm %x0,%x1,%x3"
   [(set_attr "type" "vecperm")
    (set_attr "length" "4")])
 
index ef8f617..465ad6d 100644 (file)
   "Vector constant that can be loaded with XXSPLTIB & sign extension."
   (match_test "xxspltib_constant_split (op, mode)"))
 
+;; ISA 3.0 DS-form instruction that has the bottom 2 bits 0 and no update form.
+;; Used by LXSD/STXSD/LXSSP/STXSSP.  In contrast to "Y", the multiple-of-four
+;; offset is enforced for 32-bit too.
+(define_memory_constraint "wY"
+  "Offsettable memory operand, with bottom 2 bits 0"
+  (and (match_code "mem")
+       (not (match_test "update_address_mem (op, mode)"))
+       (match_test "mem_operand_ds_form (op, mode)")))
+
 ;; Altivec style load/store that ignores the bottom bits of the address
 (define_memory_constraint "wZ"
   "Indexed or indirect memory operand, ignoring the bottom 4 bits"
index 6b4d178..3bb25c0 100644 (file)
@@ -39,6 +39,7 @@ extern int num_insns_constant (rtx, machine_mode);
 extern int num_insns_constant_wide (HOST_WIDE_INT);
 extern int small_data_operand (rtx, machine_mode);
 extern bool mem_operand_gpr (rtx, machine_mode);
+extern bool mem_operand_ds_form (rtx, machine_mode);
 extern bool toc_relative_expr_p (const_rtx, bool);
 extern bool invalid_e500_subreg (rtx, machine_mode);
 extern void validate_condition_mode (enum rtx_code, machine_mode);
@@ -135,6 +136,7 @@ extern bool rs6000_emit_set_const (rtx, rtx);
 extern int rs6000_emit_cmove (rtx, rtx, rtx, rtx);
 extern int rs6000_emit_vector_cond_expr (rtx, rtx, rtx, rtx, rtx, rtx);
 extern void rs6000_emit_minmax (rtx, enum rtx_code, rtx, rtx);
+extern void rs6000_split_signbit (rtx, rtx);
 extern void rs6000_expand_atomic_compare_and_swap (rtx op[]);
 extern void rs6000_expand_atomic_exchange (rtx op[]);
 extern void rs6000_expand_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx);
index 1428d4c..9c24ad5 100644 (file)
@@ -4226,6 +4226,14 @@ rs6000_option_override_internal (bool global_init_p)
       && !(rs6000_isa_flags_explicit & OPTION_MASK_TOC_FUSION))
     rs6000_isa_flags |= OPTION_MASK_TOC_FUSION;
 
+  /* ISA 3.0 vector instructions include ISA 2.07.  */
+  if (TARGET_P9_VECTOR && !TARGET_P8_VECTOR)
+    {
+      if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)
+       error ("-mpower9-vector requires -mpower8-vector");
+      rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR;
+    }
+
   /* -mpower9-dform turns on both -mpower9-dform-scalar and
       -mpower9-dform-vector.  */
   if (TARGET_P9_DFORM_BOTH > 0)
@@ -4268,14 +4276,6 @@ rs6000_option_override_internal (bool global_init_p)
       rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR;
     }
 
-  /* ISA 3.0 vector instructions include ISA 2.07.  */
-  if (TARGET_P9_VECTOR && !TARGET_P8_VECTOR)
-    {
-      if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)
-       error ("-mpower9-vector requires -mpower8-vector");
-      rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR;
-    }
-
   /* There have been bugs with -mvsx-timode that don't show up with -mlra,
      but do show up with -mno-lra.  Given -mlra will become the default once
      PR 69847 is fixed, turn off the options with problems by default if
@@ -5764,8 +5764,8 @@ rs6000_file_start (void)
     }
 
 #ifdef USING_ELFOS_H
-  if (rs6000_default_cpu == 0 || rs6000_default_cpu[0] == '\0'
-      || !global_options_set.x_rs6000_cpu_index)
+  if (!(rs6000_default_cpu && rs6000_default_cpu[0])
+      && !global_options_set.x_rs6000_cpu_index)
     {
       fputs ("\t.machine ", asm_out_file);
       if ((rs6000_isa_flags & OPTION_MASK_MODULO) != 0)
@@ -7309,8 +7309,37 @@ mem_operand_gpr (rtx op, machine_mode mode)
   if (TARGET_POWERPC64 && (offset & 3) != 0)
     return false;
 
-  if (mode_supports_vsx_dform_quad (mode)
-      && !quad_address_offset_p (offset))
+  extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD;
+  if (extra < 0)
+    extra = 0;
+
+  if (GET_CODE (addr) == LO_SUM)
+    /* For lo_sum addresses, we must allow any offset except one that
+       causes a wrap, so test only the low 16 bits.  */
+    offset = ((offset & 0xffff) ^ 0x8000) - 0x8000;
+
+  return offset + 0x8000 < 0x10000u - extra;
+}
+
+/* As above, but for DS-FORM VSX insns.  Unlike mem_operand_gpr,
+   enforce an offset divisible by 4 even for 32-bit.  */
+
+bool
+mem_operand_ds_form (rtx op, machine_mode mode)
+{
+  unsigned HOST_WIDE_INT offset;
+  int extra;
+  rtx addr = XEXP (op, 0);
+
+  if (!offsettable_address_p (false, mode, addr))
+    return false;
+
+  op = address_offset (addr);
+  if (op == NULL_RTX)
+    return true;
+
+  offset = INTVAL (op);
+  if ((offset & 3) != 0)
     return false;
 
   extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD;
@@ -14245,6 +14274,7 @@ altivec_expand_ld_builtin (tree exp, rtx target, bool *expandedp)
       break;
     case ALTIVEC_BUILTIN_LD_INTERNAL_2di:
       icode = CODE_FOR_vector_altivec_load_v2di;
+      break;
     case ALTIVEC_BUILTIN_LD_INTERNAL_1ti:
       icode = CODE_FOR_vector_altivec_load_v1ti;
       break;
@@ -14306,6 +14336,7 @@ altivec_expand_st_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
       break;
     case ALTIVEC_BUILTIN_ST_INTERNAL_2di:
       icode = CODE_FOR_vector_altivec_store_v2di;
+      break;
     case ALTIVEC_BUILTIN_ST_INTERNAL_1ti:
       icode = CODE_FOR_vector_altivec_store_v1ti;
       break;
@@ -19229,6 +19260,7 @@ rs6000_secondary_reload (bool in_p,
                       && MEM_P (SUBREG_REG (x))));
 
   sri->icode = CODE_FOR_nothing;
+  sri->t_icode = CODE_FOR_nothing;
   sri->extra_cost = 0;
   icode = ((in_p)
           ? reg_addr[mode].reload_load
@@ -21565,8 +21597,8 @@ rs6000_generate_compare (rtx cmp, machine_mode mode)
   else if (!TARGET_FLOAT128_HW && FLOAT128_VECTOR_P (mode))
     {
       rtx libfunc = NULL_RTX;
-      bool uneq_or_ltgt = false;
-      rtx dest = gen_reg_rtx (SImode);
+      bool check_nan = false;
+      rtx dest;
 
       switch (code)
        {
@@ -21593,21 +21625,23 @@ rs6000_generate_compare (rtx cmp, machine_mode mode)
 
        case UNGE:
        case UNGT:
-         libfunc = optab_libfunc (le_optab, mode);
+         check_nan = true;
+         libfunc = optab_libfunc (ge_optab, mode);
          code = (code == UNGE) ? GE : GT;
          break;
 
        case UNLE:
        case UNLT:
-         libfunc = optab_libfunc (ge_optab, mode);
+         check_nan = true;
+         libfunc = optab_libfunc (le_optab, mode);
          code = (code == UNLE) ? LE : LT;
          break;
 
        case UNEQ:
        case LTGT:
-         libfunc = optab_libfunc (le_optab, mode);
-         uneq_or_ltgt = true;
-         code = (code = UNEQ) ? NE : EQ;
+         check_nan = true;
+         libfunc = optab_libfunc (eq_optab, mode);
+         code = (code = UNEQ) ? EQ : NE;
          break;
 
        default:
@@ -21615,21 +21649,56 @@ rs6000_generate_compare (rtx cmp, machine_mode mode)
        }
 
       gcc_assert (libfunc);
-      dest = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
-                                     SImode, 2, op0, mode, op1, mode);
 
-      /* If this is UNEQ or LTGT, we call __lekf2, which returns -1 for less
-        than, 0 for equal, +1 for greater, and +2 for nan.  We add 1, to give
-        a value of 0..3, and then do and AND immediate of 1 to isolate whether
-        it is 0/Nan (i.e. bottom bit is 0), or less than/greater than
-        (i.e. bottom bit is 1).  */
-      if (uneq_or_ltgt)
+      if (!check_nan)
+       dest = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
+                                       SImode, 2, op0, mode, op1, mode);
+
+      /* The library signals an exception for signalling NaNs, so we need to
+        handle isgreater, etc. by first checking isordered.  */
+      else
        {
-         rtx add_result = gen_reg_rtx (SImode);
-         rtx and_result = gen_reg_rtx (SImode);
-         emit_insn (gen_addsi3 (add_result, dest, GEN_INT (1)));
-         emit_insn (gen_andsi3 (and_result, add_result, GEN_INT (1)));
-         dest = and_result;
+         rtx ne_rtx, normal_dest, unord_dest;
+         rtx unord_func = optab_libfunc (unord_optab, mode);
+         rtx join_label = gen_label_rtx ();
+         rtx join_ref = gen_rtx_LABEL_REF (VOIDmode, join_label);
+         rtx unord_cmp = gen_reg_rtx (comp_mode);
+
+
+         /* Test for either value being a NaN.  */
+         gcc_assert (unord_func);
+         unord_dest = emit_library_call_value (unord_func, NULL_RTX, LCT_CONST,
+                                               SImode, 2, op0, mode, op1,
+                                               mode);
+
+         /* Set value (0) if either value is a NaN, and jump to the join
+            label.  */
+         dest = gen_reg_rtx (SImode);
+         emit_move_insn (dest, const1_rtx);
+         emit_insn (gen_rtx_SET (unord_cmp,
+                                 gen_rtx_COMPARE (comp_mode, unord_dest,
+                                                  const0_rtx)));
+
+         ne_rtx = gen_rtx_NE (comp_mode, unord_cmp, const0_rtx);
+         emit_jump_insn (gen_rtx_SET (pc_rtx,
+                                      gen_rtx_IF_THEN_ELSE (VOIDmode, ne_rtx,
+                                                            join_ref,
+                                                            pc_rtx)));
+
+         /* Do the normal comparison, knowing that the values are not
+            NaNs.  */
+         normal_dest = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
+                                                SImode, 2, op0, mode, op1,
+                                                mode);
+
+         emit_insn (gen_cstoresi4 (dest,
+                                   gen_rtx_fmt_ee (code, SImode, normal_dest,
+                                                   const0_rtx),
+                                   normal_dest, const0_rtx));
+
+         /* Join NaN and non-Nan paths.  Compare dest against 0.  */
+         emit_label (join_label);
+         code = NE;
        }
 
       emit_insn (gen_rtx_SET (compare_result,
@@ -22974,6 +23043,48 @@ rs6000_emit_minmax (rtx dest, enum rtx_code code, rtx op0, rtx op1)
     emit_move_insn (dest, target);
 }
 
+/* Split a signbit operation on 64-bit machines with direct move.  Also allow
+   for the value to come from memory or if it is already loaded into a GPR.  */
+
+void
+rs6000_split_signbit (rtx dest, rtx src)
+{
+  machine_mode d_mode = GET_MODE (dest);
+  machine_mode s_mode = GET_MODE (src);
+  rtx dest_di = (d_mode == DImode) ? dest : gen_lowpart (DImode, dest);
+  rtx shift_reg = dest_di;
+
+  gcc_assert (REG_P (dest));
+  gcc_assert (REG_P (src) || MEM_P (src));
+  gcc_assert (s_mode == KFmode || s_mode == TFmode);
+
+  if (MEM_P (src))
+    {
+      rtx mem = (WORDS_BIG_ENDIAN
+                ? adjust_address (src, DImode, 0)
+                : adjust_address (src, DImode, 8));
+      emit_insn (gen_rtx_SET (dest_di, mem));
+    }
+
+  else
+    {
+      unsigned int r = REGNO (src);
+
+      /* If this is a VSX register, generate the special mfvsrd instruction
+        to get it in a GPR.  Until we support SF and DF modes, that will
+        always be true.  */
+      gcc_assert (VSX_REGNO_P (r));
+
+      if (s_mode == KFmode)
+       emit_insn (gen_signbitkf2_dm2 (dest_di, src));
+      else
+       emit_insn (gen_signbittf2_dm2 (dest_di, src));
+    }
+
+  emit_insn (gen_lshrdi3 (dest_di, shift_reg, GEN_INT (63)));
+  return;
+}
+
 /* A subroutine of the atomic operation splitters.  Jump to LABEL if
    COND is true.  Mark the jump as unlikely to be taken.  */
 
@@ -35257,7 +35368,8 @@ rs6000_function_value (const_tree valtype,
   if (DECIMAL_FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS)
     /* _Decimal128 must use an even/odd register pair.  */
     regno = (mode == TDmode) ? FP_ARG_RETURN + 1 : FP_ARG_RETURN;
-  else if (SCALAR_FLOAT_MODE_NOT_VECTOR_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS
+  else if (SCALAR_FLOAT_TYPE_P (valtype) && TARGET_HARD_FLOAT && TARGET_FPRS
+          && !FLOAT128_VECTOR_P (mode)
           && ((TARGET_SINGLE_FLOAT && (mode == SFmode)) || TARGET_DOUBLE_FLOAT))
     regno = FP_ARG_RETURN;
   else if (TREE_CODE (valtype) == COMPLEX_TYPE
index 34fc30e..29d82c9 100644 (file)
    UNSPEC_ROUND_TO_ODD
    UNSPEC_IEEE128_MOVE
    UNSPEC_IEEE128_CONVERT
+   UNSPEC_SIGNBIT
+   UNSPEC_DOLOOP
   ])
 
 ;;
 (define_mode_attr f32_lr  [(SF "f")              (SD "wz")])
 (define_mode_attr f32_lr2 [(SF "wb")             (SD "wn")])
 (define_mode_attr f32_lm  [(SF "m")              (SD "Z")])
-(define_mode_attr f32_lm2 [(SF "o")              (SD "wn")])
+(define_mode_attr f32_lm2 [(SF "wY")             (SD "wn")])
 (define_mode_attr f32_li  [(SF "lfs%U1%X1 %0,%1") (SD "lfiwzx %0,%y1")])
 (define_mode_attr f32_li2 [(SF "lxssp %0,%1")     (SD "lfiwzx %0,%y1")])
 (define_mode_attr f32_lv  [(SF "lxsspx %x0,%y1")  (SD "lxsiwzx %x0,%y1")])
 (define_mode_attr f32_sr  [(SF "f")               (SD "wx")])
 (define_mode_attr f32_sr2 [(SF "wb")              (SD "wn")])
 (define_mode_attr f32_sm  [(SF "m")               (SD "Z")])
-(define_mode_attr f32_sm2 [(SF "o")               (SD "wn")])
+(define_mode_attr f32_sm2 [(SF "wY")              (SD "wn")])
 (define_mode_attr f32_si  [(SF "stfs%U0%X0 %1,%0") (SD "stfiwx %1,%y0")])
 (define_mode_attr f32_si2 [(SF "stxssp %1,%0")     (SD "stfiwx %1,%y0")])
 (define_mode_attr f32_sv  [(SF "stxsspx %x1,%y0")  (SD "stxsiwzx %x1,%y0")])
                                (IF "TARGET_FLOAT128")
                                (TF "TARGET_LONG_DOUBLE_128")])
 
+; Iterator for signbit on 64-bit machines with direct move
+(define_mode_iterator SIGNBIT [(KF "FLOAT128_VECTOR_P (KFmode)")
+                              (TF "FLOAT128_VECTOR_P (TFmode)")])
+
+(define_mode_attr Fsignbit     [(KF "wa")
+                                (TF "wa")])
+
 ; SF/DF suffix for traditional floating instructions
 (define_mode_attr Ftrad                [(SF "s") (DF "")])
 
 
 (define_insn_and_split "*extendsfdf2_fpr"
   [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d,ws,?ws,wu,wb")
-       (float_extend:DF (match_operand:SF 1 "reg_or_mem_operand" "0,f,m,0,wy,Z,o")))]
+       (float_extend:DF (match_operand:SF 1 "reg_or_mem_operand" "0,f,m,0,wy,Z,wY")))]
   "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT"
   "@
    #
 ;; when little-endian.
 (define_expand "signbit<mode>2"
   [(set (match_dup 2)
-       (float_truncate:DF (match_operand:IBM128 1 "gpc_reg_operand" "")))
+       (float_truncate:DF (match_operand:FLOAT128 1 "gpc_reg_operand" "")))
    (set (match_dup 3)
        (subreg:DI (match_dup 2) 0))
    (set (match_dup 4)
    (set (match_operand:SI 0 "gpc_reg_operand" "")
        (match_dup 6))]
   "TARGET_HARD_FLOAT
-   && (TARGET_FPRS || TARGET_E500_DOUBLE)"
+   && (TARGET_FPRS || TARGET_E500_DOUBLE)
+   && (!FLOAT128_IEEE_P (<MODE>mode)
+       || (TARGET_POWERPC64 && TARGET_DIRECT_MOVE))"
 {
+  if (FLOAT128_IEEE_P (<MODE>mode))
+    {
+      if (<MODE>mode == KFmode)
+       emit_insn (gen_signbitkf2_dm (operands[0], operands[1]));
+      else if (<MODE>mode == TFmode)
+       emit_insn (gen_signbittf2_dm (operands[0], operands[1]));
+      else
+       gcc_unreachable ();
+      DONE;
+    }
   operands[2] = gen_reg_rtx (DFmode);
   operands[3] = gen_reg_rtx (DImode);
   if (TARGET_POWERPC64)
    operands[5] = CONST0_RTX (<MODE>mode);
   })
 
+;; Optimize signbit on 64-bit systems with direct move to avoid doing the store
+;; and load.
+(define_insn_and_split "signbit<mode>2_dm"
+  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
+       (unspec:SI
+        [(match_operand:SIGNBIT 1 "input_operand" "<Fsignbit>,m,r")]
+        UNSPEC_SIGNBIT))]
+  "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+  "#"
+  "&& reload_completed"
+  [(const_int 0)]
+{
+  rs6000_split_signbit (operands[0], operands[1]);
+  DONE;
+}
+ [(set_attr "length" "8,8,12")
+  (set_attr "type" "mftgpr,load,integer")])
+
+;; MODES_TIEABLE_P doesn't allow DImode to be tied with the various floating
+;; point types, which makes normal SUBREG's problematical. Instead use a
+;; special pattern to avoid using a normal movdi.
+(define_insn "signbit<mode>2_dm2"
+  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
+       (unspec:DI [(match_operand:SIGNBIT 1 "gpc_reg_operand" "<Fsignbit>")
+                   (const_int 0)]
+                  UNSPEC_SIGNBIT))]
+  "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+  "mfvsrd %0,%x1"
+ [(set_attr "type" "mftgpr")])
+
+
 ;; Use an unspec rather providing an if-then-else in RTL, to prevent the
 ;; compiler from optimizing -0.0
 (define_insn "copysign<mode>3_fcpsgn"
 }")
 
 (define_insn "mov<mode>_hardfloat"
-  [(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=!r,!r,m,f,<f32_vsx>,<f32_vsx>,!r,<f32_lr>,<f32_lr2>,<f32_sm>,<f32_sm2>,<f32_av>,Z,?<f32_dm>,?r,*c*l,!r,*h")
-       (match_operand:FMOVE32 1 "input_operand" "r,m,r,f,<f32_vsx>,<zero_fp>,<zero_fp>,<f32_lm>,<f32_lm2>,<f32_sr>,<f32_sr2>,Z,<f32_av>,r,<f32_dm>,r,h,0"))]
+  [(set (match_operand:FMOVE32 0 "nonimmediate_operand"
+        "=!r,       <f32_lr>,  <f32_lr2>, <f32_av>,  m,         <f32_sm>,
+         <f32_sm2>, Z,         <f32_vsx>, !r,        ?<f32_dm>, ?r,
+         f,         <f32_vsx>, !r,        *c*l,      !r,        *h")
+       (match_operand:FMOVE32 1 "input_operand"
+        "m,         <f32_lm>,  <f32_lm2>, Z,         r,         <f32_sr>,
+         <f32_sr2>, <f32_av>,  <zero_fp>, <zero_fp>, r,         <f32_dm>,
+         f,         <f32_vsx>, r,         r,         *h,        0"))]
   "(gpc_reg_operand (operands[0], <MODE>mode)
    || gpc_reg_operand (operands[1], <MODE>mode))
    && (TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT)"
   "@
-   mr %0,%1
    lwz%U1%X1 %0,%1
-   stw%U0%X0 %1,%0
-   fmr %0,%1
-   xscpsgndp %x0,%x1,%x1
-   xxlxor %x0,%x0,%x0
-   li %0,0
    <f32_li>
    <f32_li2>
+   <f32_lv>
+   stw%U0%X0 %1,%0
    <f32_si>
    <f32_si2>
-   <f32_lv>
    <f32_sv>
+   xxlxor %x0,%x0,%x0
+   li %0,0
    mtvsrwz %x0,%1
    mfvsrwz %0,%x1
+   fmr %0,%1
+   xscpsgndp %x0,%x1,%x1
+   mr %0,%1
    mt%0 %1
    mf%1 %0
    nop"
-  [(set_attr "type" "*,load,store,fpsimple,fpsimple,veclogical,integer,fpload,fpload,fpstore,fpstore,fpload,fpstore,mffgpr,mftgpr,mtjmpr,mfjmpr,*")
-   (set_attr "length" "4")])
+  [(set_attr "type" "load,fpload,fpload,fpload,store,fpstore,fpstore,fpstore,veclogical,integer,mffgpr,mftgpr,fpsimple,fpsimple,*,mtjmpr,mfjmpr,*")])
 
 (define_insn "*mov<mode>_softfloat"
   [(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=r,cl,r,r,m,r,r,r,r,*h")
              (set (match_dup 0)
                   (plus:P (match_dup 0)
                            (const_int -1)))
+             (unspec [(const_int 0)] UNSPEC_DOLOOP)
              (clobber (match_scratch:CC 2 ""))
              (clobber (match_scratch:P 3 ""))])]
   ""
 ;; JUMP_INSNs.
 ;; For the length attribute to be calculated correctly, the
 ;; label MUST be operand 0.
+;; The UNSPEC is present to prevent combine creating this pattern.
 
 (define_insn "*ctr<mode>_internal1"
   [(set (pc)
                          (const_int 1))
                      (label_ref (match_operand 0 "" ""))
                      (pc)))
-   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
+   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l")
        (plus:P (match_dup 1)
                 (const_int -1)))
+   (unspec [(const_int 0)] UNSPEC_DOLOOP)
    (clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
    (clobber (match_scratch:P 4 "=X,X,&r,r"))]
   ""
                          (const_int 1))
                      (pc)
                      (label_ref (match_operand 0 "" ""))))
-   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
+   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l")
        (plus:P (match_dup 1)
                 (const_int -1)))
+   (unspec [(const_int 0)] UNSPEC_DOLOOP)
    (clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
    (clobber (match_scratch:P 4 "=X,X,&r,r"))]
   ""
                          (const_int 1))
                      (label_ref (match_operand 0 "" ""))
                      (pc)))
-   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
+   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l")
        (plus:P (match_dup 1)
                 (const_int -1)))
+   (unspec [(const_int 0)] UNSPEC_DOLOOP)
    (clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
    (clobber (match_scratch:P 4 "=X,X,&r,r"))]
   ""
                          (const_int 1))
                      (pc)
                      (label_ref (match_operand 0 "" ""))))
-   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
+   (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l")
        (plus:P (match_dup 1)
                 (const_int -1)))
+   (unspec [(const_int 0)] UNSPEC_DOLOOP)
    (clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
    (clobber (match_scratch:P 4 "=X,X,&r,r"))]
   ""
                      (match_operand 6 "" "")))
    (set (match_operand:P 0 "int_reg_operand" "")
        (plus:P (match_dup 1) (const_int -1)))
+   (unspec [(const_int 0)] UNSPEC_DOLOOP)
    (clobber (match_scratch:CC 3 ""))
    (clobber (match_scratch:P 4 ""))]
   "reload_completed"
                      (match_operand 6 "" "")))
    (set (match_operand:P 0 "nonimmediate_operand" "")
        (plus:P (match_dup 1) (const_int -1)))
+   (unspec [(const_int 0)] UNSPEC_DOLOOP)
    (clobber (match_scratch:CC 3 ""))
    (clobber (match_scratch:P 4 ""))]
   "reload_completed && ! gpc_reg_operand (operands[0], SImode)"
index 6179b04..f5fcf98 100644 (file)
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
-#define DEF_FN_TYPE_1(FN_TYPE, FLAGS, T1)      \
+#define DEF_FN_TYPE_0(FN_TYPE, FLAGS, T1)      \
   DEF_FN_TYPE (FN_TYPE,                                \
               FLAGS,                           \
               s390_builtin_types[T1])
-#define DEF_FN_TYPE_2(FN_TYPE, FLAGS, T1, T2)  \
+#define DEF_FN_TYPE_1(FN_TYPE, FLAGS, T1, T2)  \
   DEF_FN_TYPE (FN_TYPE,                                \
               FLAGS,                           \
               s390_builtin_types[T1],          \
               s390_builtin_types[T2])
-#define DEF_FN_TYPE_3(FN_TYPE, FLAGS, T1, T2, T3)      \
+#define DEF_FN_TYPE_2(FN_TYPE, FLAGS, T1, T2, T3)      \
   DEF_FN_TYPE (FN_TYPE,                                        \
               FLAGS,                                   \
               s390_builtin_types[T1],                  \
               s390_builtin_types[T2],                  \
               s390_builtin_types[T3])
-#define DEF_FN_TYPE_4(FN_TYPE, FLAGS, T1, T2, T3, T4)  \
+#define DEF_FN_TYPE_3(FN_TYPE, FLAGS, T1, T2, T3, T4)  \
   DEF_FN_TYPE (FN_TYPE,                                        \
               FLAGS,                                   \
               s390_builtin_types[T1],                  \
               s390_builtin_types[T2],                  \
               s390_builtin_types[T3],                  \
               s390_builtin_types[T4])
-#define DEF_FN_TYPE_5(FN_TYPE, FLAGS, T1, T2, T3, T4, T5)      \
+#define DEF_FN_TYPE_4(FN_TYPE, FLAGS, T1, T2, T3, T4, T5)      \
   DEF_FN_TYPE (FN_TYPE,                                                \
               FLAGS,                                           \
               s390_builtin_types[T1],                          \
@@ -49,7 +49,7 @@
               s390_builtin_types[T3],                          \
               s390_builtin_types[T4],                          \
               s390_builtin_types[T5])
-#define DEF_FN_TYPE_6(FN_TYPE, FLAGS, T1, T2, T3, T4, T5, T6)  \
+#define DEF_FN_TYPE_5(FN_TYPE, FLAGS, T1, T2, T3, T4, T5, T6)  \
   DEF_FN_TYPE (FN_TYPE,                                                \
               FLAGS,                                           \
               s390_builtin_types[T1],                          \
@@ -66,6 +66,7 @@ DEF_TYPE (BT_FLT, B_VX, float_type_node, 0)
 DEF_TYPE (BT_UINT, 0, unsigned_type_node, 0)
 DEF_TYPE (BT_VOIDCONST, B_VX, void_type_node, 1)
 DEF_TYPE (BT_ULONG, B_VX, long_unsigned_type_node, 0)
+DEF_TYPE (BT_INT128, B_VX, intTI_type_node, 0)
 DEF_TYPE (BT_USHORTCONST, B_VX, short_unsigned_type_node, 1)
 DEF_TYPE (BT_SHORTCONST, B_VX, short_integer_type_node, 1)
 DEF_TYPE (BT_INTCONST, B_VX, integer_type_node, 1)
@@ -126,210 +127,212 @@ DEF_OPAQUE_VECTOR_TYPE (BT_OUV4SI, B_VX, BT_UINT, 4)
 DEF_OPAQUE_VECTOR_TYPE (BT_BV4SI, B_VX, BT_BINT, 4)
 DEF_OPAQUE_VECTOR_TYPE (BT_BV2DI, B_VX, BT_BLONGLONG, 2)
 DEF_OPAQUE_VECTOR_TYPE (BT_BV8HI, B_VX, BT_BSHORT, 8)
-DEF_FN_TYPE_1 (BT_FN_INT, B_HTM, BT_INT)
-DEF_FN_TYPE_1 (BT_FN_UINT, 0, BT_UINT)
-DEF_FN_TYPE_2 (BT_FN_INT_INT, B_VX, BT_INT, BT_INT)
-DEF_FN_TYPE_2 (BT_FN_INT_VOIDPTR, B_HTM, BT_INT, BT_VOIDPTR)
-DEF_FN_TYPE_2 (BT_FN_OV4SI_INT, B_VX, BT_OV4SI, BT_INT)
-DEF_FN_TYPE_2 (BT_FN_OV4SI_INTCONSTPTR, B_VX, BT_OV4SI, BT_INTCONSTPTR)
-DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI, B_VX, BT_OV4SI, BT_OV4SI)
-DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHAR, B_VX, BT_UV16QI, BT_UCHAR)
-DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHARCONSTPTR, B_VX, BT_UV16QI, BT_UCHARCONSTPTR)
-DEF_FN_TYPE_2 (BT_FN_UV16QI_USHORT, B_VX, BT_UV16QI, BT_USHORT)
-DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI, B_VX, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_2 (BT_FN_UV2DI_ULONGLONG, B_VX, BT_UV2DI, BT_ULONGLONG)
-DEF_FN_TYPE_2 (BT_FN_UV2DI_ULONGLONGCONSTPTR, B_VX, BT_UV2DI, BT_ULONGLONGCONSTPTR)
-DEF_FN_TYPE_2 (BT_FN_UV2DI_USHORT, B_VX, BT_UV2DI, BT_USHORT)
-DEF_FN_TYPE_2 (BT_FN_UV2DI_UV2DI, B_VX, BT_UV2DI, BT_UV2DI)
-DEF_FN_TYPE_2 (BT_FN_UV2DI_UV4SI, B_VX, BT_UV2DI, BT_UV4SI)
-DEF_FN_TYPE_2 (BT_FN_UV4SI_UINT, B_VX, BT_UV4SI, BT_UINT)
-DEF_FN_TYPE_2 (BT_FN_UV4SI_UINTCONSTPTR, B_VX, BT_UV4SI, BT_UINTCONSTPTR)
-DEF_FN_TYPE_2 (BT_FN_UV4SI_USHORT, B_VX, BT_UV4SI, BT_USHORT)
-DEF_FN_TYPE_2 (BT_FN_UV4SI_UV4SI, B_VX, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_2 (BT_FN_UV4SI_UV8HI, B_VX, BT_UV4SI, BT_UV8HI)
-DEF_FN_TYPE_2 (BT_FN_UV8HI_USHORT, B_VX, BT_UV8HI, BT_USHORT)
-DEF_FN_TYPE_2 (BT_FN_UV8HI_USHORTCONSTPTR, B_VX, BT_UV8HI, BT_USHORTCONSTPTR)
-DEF_FN_TYPE_2 (BT_FN_UV8HI_UV16QI, B_VX, BT_UV8HI, BT_UV16QI)
-DEF_FN_TYPE_2 (BT_FN_UV8HI_UV8HI, B_VX, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_2 (BT_FN_V16QI_SCHAR, B_VX, BT_V16QI, BT_SCHAR)
-DEF_FN_TYPE_2 (BT_FN_V16QI_UCHAR, B_VX, BT_V16QI, BT_UCHAR)
-DEF_FN_TYPE_2 (BT_FN_V16QI_V16QI, B_VX, BT_V16QI, BT_V16QI)
-DEF_FN_TYPE_2 (BT_FN_V2DF_DBL, B_VX, BT_V2DF, BT_DBL)
-DEF_FN_TYPE_2 (BT_FN_V2DF_FLTCONSTPTR, B_VX, BT_V2DF, BT_FLTCONSTPTR)
-DEF_FN_TYPE_2 (BT_FN_V2DF_V2DF, B_VX, BT_V2DF, BT_V2DF)
-DEF_FN_TYPE_2 (BT_FN_V2DI_SHORT, B_VX, BT_V2DI, BT_SHORT)
-DEF_FN_TYPE_2 (BT_FN_V2DI_V16QI, B_VX, BT_V2DI, BT_V16QI)
-DEF_FN_TYPE_2 (BT_FN_V2DI_V2DI, B_VX, BT_V2DI, BT_V2DI)
-DEF_FN_TYPE_2 (BT_FN_V2DI_V4SI, B_VX, BT_V2DI, BT_V4SI)
-DEF_FN_TYPE_2 (BT_FN_V2DI_V8HI, B_VX, BT_V2DI, BT_V8HI)
-DEF_FN_TYPE_2 (BT_FN_V4SI_SHORT, B_VX, BT_V4SI, BT_SHORT)
-DEF_FN_TYPE_2 (BT_FN_V4SI_V4SI, B_VX, BT_V4SI, BT_V4SI)
-DEF_FN_TYPE_2 (BT_FN_V4SI_V8HI, B_VX, BT_V4SI, BT_V8HI)
-DEF_FN_TYPE_2 (BT_FN_V8HI_SHORT, B_VX, BT_V8HI, BT_SHORT)
-DEF_FN_TYPE_2 (BT_FN_V8HI_V16QI, B_VX, BT_V8HI, BT_V16QI)
-DEF_FN_TYPE_2 (BT_FN_V8HI_V8HI, B_VX, BT_V8HI, BT_V8HI)
-DEF_FN_TYPE_2 (BT_FN_VOID_INT, B_HTM, BT_VOID, BT_INT)
-DEF_FN_TYPE_2 (BT_FN_VOID_UINT, 0, BT_VOID, BT_UINT)
-DEF_FN_TYPE_3 (BT_FN_DBL_V2DF_INT, B_VX, BT_DBL, BT_V2DF, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_INT_OV4SI_INT, B_VX, BT_INT, BT_OV4SI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_INT_OV4SI_OV4SI, B_VX, BT_INT, BT_OV4SI, BT_OV4SI)
-DEF_FN_TYPE_3 (BT_FN_INT_UV16QI_UV16QI, B_VX, BT_INT, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_3 (BT_FN_INT_UV2DI_UV2DI, B_VX, BT_INT, BT_UV2DI, BT_UV2DI)
-DEF_FN_TYPE_3 (BT_FN_INT_UV4SI_UV4SI, B_VX, BT_INT, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_3 (BT_FN_INT_UV8HI_UV8HI, B_VX, BT_INT, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_3 (BT_FN_INT_V16QI_V16QI, B_VX, BT_INT, BT_V16QI, BT_V16QI)
-DEF_FN_TYPE_3 (BT_FN_INT_V2DF_V2DF, B_VX, BT_INT, BT_V2DF, BT_V2DF)
-DEF_FN_TYPE_3 (BT_FN_INT_V2DI_V2DI, B_VX, BT_INT, BT_V2DI, BT_V2DI)
-DEF_FN_TYPE_3 (BT_FN_INT_V4SI_V4SI, B_VX, BT_INT, BT_V4SI, BT_V4SI)
-DEF_FN_TYPE_3 (BT_FN_INT_V8HI_V8HI, B_VX, BT_INT, BT_V8HI, BT_V8HI)
-DEF_FN_TYPE_3 (BT_FN_INT_VOIDPTR_INT, B_HTM, BT_INT, BT_VOIDPTR, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_OV2DI_LONGLONG_LONGLONG, B_VX, BT_OV2DI, BT_LONGLONG, BT_LONGLONG)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_INTCONSTPTR_INT, B_VX, BT_OV4SI, BT_INTCONSTPTR, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_INTCONSTPTR_UINT, B_VX, BT_OV4SI, BT_INTCONSTPTR, BT_UINT)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_INT_INT, B_VX, BT_OV4SI, BT_INT, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_INTPTR, B_VX, BT_OV4SI, BT_OV4SI, BT_INTPTR)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_UCHAR, B_VX, BT_OV4SI, BT_OV4SI, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_ULONG, B_VX, BT_OV4SI, BT_OV4SI, BT_ULONG)
-DEF_FN_TYPE_3 (BT_FN_UCHAR_UV16QI_INT, B_VX, BT_UCHAR, BT_UV16QI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UINT_UV4SI_INT, B_VX, BT_UINT, BT_UV4SI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UINT_VOIDCONSTPTR_INT, B_VX, BT_UINT, BT_VOIDCONSTPTR, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_ULONGLONG_UV2DI_INT, B_VX, BT_ULONGLONG, BT_UV2DI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_USHORT_UV8HI_INT, B_VX, BT_USHORT, BT_UV8HI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UCHARCONSTPTR_USHORT, B_VX, BT_UV16QI, BT_UCHARCONSTPTR, BT_USHORT)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UCHAR_INT, B_VX, BT_UV16QI, BT_UCHAR, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UCHAR_UCHAR, B_VX, BT_UV16QI, BT_UCHAR, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_INTPTR)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UCHAR, B_VX, BT_UV16QI, BT_UV16QI, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UINT, B_VX, BT_UV16QI, BT_UV16QI, BT_UINT)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV2DI_UV2DI, B_VX, BT_UV16QI, BT_UV2DI, BT_UV2DI)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV4SI_UV4SI, B_VX, BT_UV16QI, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_3 (BT_FN_UV16QI_UV8HI_UV8HI, B_VX, BT_UV16QI, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_UCHAR_UCHAR, B_VX, BT_UV2DI, BT_UCHAR, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_ULONGLONG_INT, B_VX, BT_UV2DI, BT_ULONGLONG, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UCHAR, B_VX, BT_UV2DI, BT_UV2DI, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UINT, B_VX, BT_UV2DI, BT_UV2DI, BT_UINT)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_UV4SI_UV4SI, B_VX, BT_UV2DI, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_UV8HI_UV8HI, B_VX, BT_UV2DI, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_3 (BT_FN_UV2DI_V2DF_INT, B_VX, BT_UV2DI, BT_V2DF, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UCHAR_UCHAR, B_VX, BT_UV4SI, BT_UCHAR, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UINT_INT, B_VX, BT_UV4SI, BT_UINT, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV16QI_UV16QI, B_VX, BT_UV4SI, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV2DI_UV2DI, B_VX, BT_UV4SI, BT_UV2DI, BT_UV2DI)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_INTPTR)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UCHAR, B_VX, BT_UV4SI, BT_UV4SI, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UINT, B_VX, BT_UV4SI, BT_UV4SI, BT_UINT)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_3 (BT_FN_UV4SI_UV8HI_UV8HI, B_VX, BT_UV4SI, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UCHAR_UCHAR, B_VX, BT_UV8HI, BT_UCHAR, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_USHORT_INT, B_VX, BT_UV8HI, BT_USHORT, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UV16QI_UV16QI, B_VX, BT_UV8HI, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UV4SI_UV4SI, B_VX, BT_UV8HI, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_INTPTR)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UCHAR, B_VX, BT_UV8HI, BT_UV8HI, BT_UCHAR)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UINT, B_VX, BT_UV8HI, BT_UV8HI, BT_UINT)
-DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_3 (BT_FN_V16QI_BV16QI_V16QI, B_VX, BT_V16QI, BT_BV16QI, BT_V16QI)
-DEF_FN_TYPE_3 (BT_FN_V16QI_UINT_VOIDCONSTPTR, B_VX, BT_V16QI, BT_UINT, BT_VOIDCONSTPTR)
-DEF_FN_TYPE_3 (BT_FN_V16QI_UV16QI_UV16QI, B_VX, BT_V16QI, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_3 (BT_FN_V16QI_V16QI_V16QI, B_VX, BT_V16QI, BT_V16QI, BT_V16QI)
-DEF_FN_TYPE_3 (BT_FN_V16QI_V8HI_V8HI, B_VX, BT_V16QI, BT_V8HI, BT_V8HI)
-DEF_FN_TYPE_3 (BT_FN_V2DF_DBL_INT, B_VX, BT_V2DF, BT_DBL, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_V2DF_UV2DI_INT, B_VX, BT_V2DF, BT_UV2DI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_V2DF_UV4SI_INT, B_VX, BT_V2DF, BT_UV4SI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_V2DF_V2DF_V2DF, B_VX, BT_V2DF, BT_V2DF, BT_V2DF)
-DEF_FN_TYPE_3 (BT_FN_V2DF_V2DI_INT, B_VX, BT_V2DF, BT_V2DI, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_V2DI_BV2DI_V2DI, B_VX, BT_V2DI, BT_BV2DI, BT_V2DI)
-DEF_FN_TYPE_3 (BT_FN_V2DI_UV2DI_UV2DI, B_VX, BT_V2DI, BT_UV2DI, BT_UV2DI)
-DEF_FN_TYPE_3 (BT_FN_V2DI_V2DF_INT, B_VX, BT_V2DI, BT_V2DF, BT_INT)
-DEF_FN_TYPE_3 (BT_FN_V2DI_V2DF_V2DF, B_VX, BT_V2DI, BT_V2DF, BT_V2DF)
-DEF_FN_TYPE_3 (BT_FN_V2DI_V2DI_V2DI, B_VX, BT_V2DI, BT_V2DI, BT_V2DI)
-DEF_FN_TYPE_3 (BT_FN_V2DI_V4SI_V4SI, B_VX, BT_V2DI, BT_V4SI, BT_V4SI)
-DEF_FN_TYPE_3 (BT_FN_V4SI_BV4SI_V4SI, B_VX, BT_V4SI, BT_BV4SI, BT_V4SI)
-DEF_FN_TYPE_3 (BT_FN_V4SI_INT_VOIDPTR, B_VX, BT_V4SI, BT_INT, BT_VOIDPTR)
-DEF_FN_TYPE_3 (BT_FN_V4SI_UV4SI_UV4SI, B_VX, BT_V4SI, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_3 (BT_FN_V4SI_V2DI_V2DI, B_VX, BT_V4SI, BT_V2DI, BT_V2DI)
-DEF_FN_TYPE_3 (BT_FN_V4SI_V4SI_V4SI, B_VX, BT_V4SI, BT_V4SI, BT_V4SI)
-DEF_FN_TYPE_3 (BT_FN_V4SI_V8HI_V8HI, B_VX, BT_V4SI, BT_V8HI, BT_V8HI)
-DEF_FN_TYPE_3 (BT_FN_V8HI_BV8HI_V8HI, B_VX, BT_V8HI, BT_BV8HI, BT_V8HI)
-DEF_FN_TYPE_3 (BT_FN_V8HI_UV8HI_UV8HI, B_VX, BT_V8HI, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_3 (BT_FN_V8HI_V16QI_V16QI, B_VX, BT_V8HI, BT_V16QI, BT_V16QI)
-DEF_FN_TYPE_3 (BT_FN_V8HI_V4SI_V4SI, B_VX, BT_V8HI, BT_V4SI, BT_V4SI)
-DEF_FN_TYPE_3 (BT_FN_V8HI_V8HI_V8HI, B_VX, BT_V8HI, BT_V8HI, BT_V8HI)
-DEF_FN_TYPE_3 (BT_FN_VOID_UINT64PTR_UINT64, B_HTM, BT_VOID, BT_UINT64PTR, BT_UINT64)
-DEF_FN_TYPE_3 (BT_FN_VOID_V2DF_FLTPTR, B_VX, BT_VOID, BT_V2DF, BT_FLTPTR)
-DEF_FN_TYPE_4 (BT_FN_INT_OV4SI_OV4SI_INTPTR, B_VX, BT_INT, BT_OV4SI, BT_OV4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_OV4SI_INT_OV4SI_INT, B_VX, BT_OV4SI, BT_INT, BT_OV4SI, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_INT, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_INTPTR, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI)
-DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_UCHAR, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_UCHAR)
-DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_ULONGLONG, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_ULONGLONG)
-DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UCHAR_INT, B_VX, BT_UV16QI, BT_UV16QI, BT_UCHAR, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_INT, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI)
-DEF_FN_TYPE_4 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI, B_VX, BT_UV16QI, BT_UV2DI, BT_UV2DI, BT_UV16QI)
-DEF_FN_TYPE_4 (BT_FN_UV16QI_UV8HI_UV8HI_INTPTR, B_VX, BT_UV16QI, BT_UV8HI, BT_UV8HI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_ULONGLONG_INT, B_VX, BT_UV2DI, BT_UV2DI, BT_ULONGLONG, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_INT, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV2DI_UV4SI_UV4SI_UV2DI, B_VX, BT_UV2DI, BT_UV4SI, BT_UV4SI, BT_UV2DI)
-DEF_FN_TYPE_4 (BT_FN_UV4SI_UV2DI_UV2DI_INTPTR, B_VX, BT_UV4SI, BT_UV2DI, BT_UV2DI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UINT_INT, B_VX, BT_UV4SI, BT_UV4SI, BT_UINT, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_INT, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI)
-DEF_FN_TYPE_4 (BT_FN_UV4SI_UV8HI_UV8HI_UV4SI, B_VX, BT_UV4SI, BT_UV8HI, BT_UV8HI, BT_UV4SI)
-DEF_FN_TYPE_4 (BT_FN_UV8HI_UV16QI_UV16QI_UV8HI, B_VX, BT_UV8HI, BT_UV16QI, BT_UV16QI, BT_UV8HI)
-DEF_FN_TYPE_4 (BT_FN_UV8HI_UV4SI_UV4SI_INTPTR, B_VX, BT_UV8HI, BT_UV4SI, BT_UV4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_USHORT_INT, B_VX, BT_UV8HI, BT_UV8HI, BT_USHORT, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_INT, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI)
-DEF_FN_TYPE_4 (BT_FN_V16QI_UV16QI_UV16QI_INTPTR, B_VX, BT_V16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V16QI_V16QI_V16QI_INTPTR, B_VX, BT_V16QI, BT_V16QI, BT_V16QI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V16QI_V16QI_V16QI_V16QI, B_VX, BT_V16QI, BT_V16QI, BT_V16QI, BT_V16QI)
-DEF_FN_TYPE_4 (BT_FN_V16QI_V8HI_V8HI_INTPTR, B_VX, BT_V16QI, BT_V8HI, BT_V8HI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V2DF_V2DF_DBL_INT, B_VX, BT_V2DF, BT_V2DF, BT_DBL, BT_INT)
-DEF_FN_TYPE_4 (BT_FN_V2DF_V2DF_UCHAR_UCHAR, B_VX, BT_V2DF, BT_V2DF, BT_UCHAR, BT_UCHAR)
-DEF_FN_TYPE_4 (BT_FN_V2DF_V2DF_V2DF_V2DF, B_VX, BT_V2DF, BT_V2DF, BT_V2DF, BT_V2DF)
-DEF_FN_TYPE_4 (BT_FN_V2DI_UV2DI_UV2DI_INTPTR, B_VX, BT_V2DI, BT_UV2DI, BT_UV2DI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V2DI_V2DF_INT_INTPTR, B_VX, BT_V2DI, BT_V2DF, BT_INT, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V2DI_V2DF_V2DF_INTPTR, B_VX, BT_V2DI, BT_V2DF, BT_V2DF, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V2DI_V2DI_V2DI_INTPTR, B_VX, BT_V2DI, BT_V2DI, BT_V2DI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V2DI_V4SI_V4SI_V2DI, B_VX, BT_V2DI, BT_V4SI, BT_V4SI, BT_V2DI)
-DEF_FN_TYPE_4 (BT_FN_V4SI_UV4SI_UV4SI_INTPTR, B_VX, BT_V4SI, BT_UV4SI, BT_UV4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V4SI_V2DI_V2DI_INTPTR, B_VX, BT_V4SI, BT_V2DI, BT_V2DI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V4SI_V4SI_V4SI_INTPTR, B_VX, BT_V4SI, BT_V4SI, BT_V4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V4SI_V4SI_V4SI_V4SI, B_VX, BT_V4SI, BT_V4SI, BT_V4SI, BT_V4SI)
-DEF_FN_TYPE_4 (BT_FN_V4SI_V8HI_V8HI_V4SI, B_VX, BT_V4SI, BT_V8HI, BT_V8HI, BT_V4SI)
-DEF_FN_TYPE_4 (BT_FN_V8HI_UV8HI_UV8HI_INTPTR, B_VX, BT_V8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V8HI_V16QI_V16QI_V8HI, B_VX, BT_V8HI, BT_V16QI, BT_V16QI, BT_V8HI)
-DEF_FN_TYPE_4 (BT_FN_V8HI_V4SI_V4SI_INTPTR, B_VX, BT_V8HI, BT_V4SI, BT_V4SI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V8HI_V8HI_V8HI_INTPTR, B_VX, BT_V8HI, BT_V8HI, BT_V8HI, BT_INTPTR)
-DEF_FN_TYPE_4 (BT_FN_V8HI_V8HI_V8HI_V8HI, B_VX, BT_V8HI, BT_V8HI, BT_V8HI, BT_V8HI)
-DEF_FN_TYPE_4 (BT_FN_VOID_OV4SI_INT_VOIDPTR, B_VX, BT_VOID, BT_OV4SI, BT_INT, BT_VOIDPTR)
-DEF_FN_TYPE_4 (BT_FN_VOID_OV4SI_VOIDPTR_UINT, B_VX, BT_VOID, BT_OV4SI, BT_VOIDPTR, BT_UINT)
-DEF_FN_TYPE_4 (BT_FN_VOID_V16QI_UINT_VOIDPTR, B_VX, BT_VOID, BT_V16QI, BT_UINT, BT_VOIDPTR)
-DEF_FN_TYPE_5 (BT_FN_OV4SI_OV4SI_OUV4SI_INTCONSTPTR_UCHAR, B_VX, BT_OV4SI, BT_OV4SI, BT_OUV4SI, BT_INTCONSTPTR, BT_UCHAR)
-DEF_FN_TYPE_5 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI_INTPTR, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INTPTR)
-DEF_FN_TYPE_5 (BT_FN_UV16QI_UV16QI_UV16QI_INT_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT, BT_INTPTR)
-DEF_FN_TYPE_5 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INT, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT)
-DEF_FN_TYPE_5 (BT_FN_UV2DI_UV2DI_UV2DI_ULONGLONGCONSTPTR_UCHAR, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_ULONGLONGCONSTPTR, BT_UCHAR)
-DEF_FN_TYPE_5 (BT_FN_UV2DI_UV2DI_UV2DI_UV2DI_INT, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_INT)
-DEF_FN_TYPE_5 (BT_FN_UV4SI_UV4SI_UV4SI_INT_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT, BT_INTPTR)
-DEF_FN_TYPE_5 (BT_FN_UV4SI_UV4SI_UV4SI_UINTCONSTPTR_UCHAR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UINTCONSTPTR, BT_UCHAR)
-DEF_FN_TYPE_5 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI_INT, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT)
-DEF_FN_TYPE_5 (BT_FN_UV8HI_UV8HI_UV8HI_INT_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT, BT_INTPTR)
-DEF_FN_TYPE_5 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INT, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT)
-DEF_FN_TYPE_5 (BT_FN_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG, B_VX, BT_VOID, BT_UV2DI, BT_UV2DI, BT_ULONGLONGPTR, BT_ULONGLONG)
-DEF_FN_TYPE_5 (BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG, B_VX, BT_VOID, BT_UV4SI, BT_UV4SI, BT_UINTPTR, BT_ULONGLONG)
-DEF_FN_TYPE_5 (BT_FN_VOID_V4SI_V4SI_INTPTR_ULONGLONG, B_VX, BT_VOID, BT_V4SI, BT_V4SI, BT_INTPTR, BT_ULONGLONG)
-DEF_FN_TYPE_6 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INT_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT, BT_INTPTR)
-DEF_FN_TYPE_6 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI_INT_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT, BT_INTPTR)
-DEF_FN_TYPE_6 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INT_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_0 (BT_FN_INT, B_HTM, BT_INT)
+DEF_FN_TYPE_0 (BT_FN_UINT, 0, BT_UINT)
+DEF_FN_TYPE_1 (BT_FN_INT_INT, B_VX, BT_INT, BT_INT)
+DEF_FN_TYPE_1 (BT_FN_INT_VOIDPTR, B_HTM, BT_INT, BT_VOIDPTR)
+DEF_FN_TYPE_1 (BT_FN_OV4SI_INT, B_VX, BT_OV4SI, BT_INT)
+DEF_FN_TYPE_1 (BT_FN_OV4SI_INTCONSTPTR, B_VX, BT_OV4SI, BT_INTCONSTPTR)
+DEF_FN_TYPE_1 (BT_FN_OV4SI_OV4SI, B_VX, BT_OV4SI, BT_OV4SI)
+DEF_FN_TYPE_1 (BT_FN_UV16QI_UCHAR, B_VX, BT_UV16QI, BT_UCHAR)
+DEF_FN_TYPE_1 (BT_FN_UV16QI_UCHARCONSTPTR, B_VX, BT_UV16QI, BT_UCHARCONSTPTR)
+DEF_FN_TYPE_1 (BT_FN_UV16QI_USHORT, B_VX, BT_UV16QI, BT_USHORT)
+DEF_FN_TYPE_1 (BT_FN_UV16QI_UV16QI, B_VX, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_1 (BT_FN_UV2DI_ULONGLONG, B_VX, BT_UV2DI, BT_ULONGLONG)
+DEF_FN_TYPE_1 (BT_FN_UV2DI_ULONGLONGCONSTPTR, B_VX, BT_UV2DI, BT_ULONGLONGCONSTPTR)
+DEF_FN_TYPE_1 (BT_FN_UV2DI_USHORT, B_VX, BT_UV2DI, BT_USHORT)
+DEF_FN_TYPE_1 (BT_FN_UV2DI_UV2DI, B_VX, BT_UV2DI, BT_UV2DI)
+DEF_FN_TYPE_1 (BT_FN_UV2DI_UV4SI, B_VX, BT_UV2DI, BT_UV4SI)
+DEF_FN_TYPE_1 (BT_FN_UV4SI_UINT, B_VX, BT_UV4SI, BT_UINT)
+DEF_FN_TYPE_1 (BT_FN_UV4SI_UINTCONSTPTR, B_VX, BT_UV4SI, BT_UINTCONSTPTR)
+DEF_FN_TYPE_1 (BT_FN_UV4SI_USHORT, B_VX, BT_UV4SI, BT_USHORT)
+DEF_FN_TYPE_1 (BT_FN_UV4SI_UV4SI, B_VX, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_1 (BT_FN_UV4SI_UV8HI, B_VX, BT_UV4SI, BT_UV8HI)
+DEF_FN_TYPE_1 (BT_FN_UV8HI_USHORT, B_VX, BT_UV8HI, BT_USHORT)
+DEF_FN_TYPE_1 (BT_FN_UV8HI_USHORTCONSTPTR, B_VX, BT_UV8HI, BT_USHORTCONSTPTR)
+DEF_FN_TYPE_1 (BT_FN_UV8HI_UV16QI, B_VX, BT_UV8HI, BT_UV16QI)
+DEF_FN_TYPE_1 (BT_FN_UV8HI_UV8HI, B_VX, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_1 (BT_FN_V16QI_SCHAR, B_VX, BT_V16QI, BT_SCHAR)
+DEF_FN_TYPE_1 (BT_FN_V16QI_UCHAR, B_VX, BT_V16QI, BT_UCHAR)
+DEF_FN_TYPE_1 (BT_FN_V16QI_V16QI, B_VX, BT_V16QI, BT_V16QI)
+DEF_FN_TYPE_1 (BT_FN_V2DF_DBL, B_VX, BT_V2DF, BT_DBL)
+DEF_FN_TYPE_1 (BT_FN_V2DF_FLTCONSTPTR, B_VX, BT_V2DF, BT_FLTCONSTPTR)
+DEF_FN_TYPE_1 (BT_FN_V2DF_V2DF, B_VX, BT_V2DF, BT_V2DF)
+DEF_FN_TYPE_1 (BT_FN_V2DI_SHORT, B_VX, BT_V2DI, BT_SHORT)
+DEF_FN_TYPE_1 (BT_FN_V2DI_V16QI, B_VX, BT_V2DI, BT_V16QI)
+DEF_FN_TYPE_1 (BT_FN_V2DI_V2DI, B_VX, BT_V2DI, BT_V2DI)
+DEF_FN_TYPE_1 (BT_FN_V2DI_V4SI, B_VX, BT_V2DI, BT_V4SI)
+DEF_FN_TYPE_1 (BT_FN_V2DI_V8HI, B_VX, BT_V2DI, BT_V8HI)
+DEF_FN_TYPE_1 (BT_FN_V4SI_SHORT, B_VX, BT_V4SI, BT_SHORT)
+DEF_FN_TYPE_1 (BT_FN_V4SI_V4SI, B_VX, BT_V4SI, BT_V4SI)
+DEF_FN_TYPE_1 (BT_FN_V4SI_V8HI, B_VX, BT_V4SI, BT_V8HI)
+DEF_FN_TYPE_1 (BT_FN_V8HI_SHORT, B_VX, BT_V8HI, BT_SHORT)
+DEF_FN_TYPE_1 (BT_FN_V8HI_V16QI, B_VX, BT_V8HI, BT_V16QI)
+DEF_FN_TYPE_1 (BT_FN_V8HI_V8HI, B_VX, BT_V8HI, BT_V8HI)
+DEF_FN_TYPE_1 (BT_FN_VOID_INT, B_HTM, BT_VOID, BT_INT)
+DEF_FN_TYPE_1 (BT_FN_VOID_UINT, 0, BT_VOID, BT_UINT)
+DEF_FN_TYPE_2 (BT_FN_DBL_V2DF_INT, B_VX, BT_DBL, BT_V2DF, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_INT128_INT128_INT128, B_VX, BT_INT128, BT_INT128, BT_INT128)
+DEF_FN_TYPE_2 (BT_FN_INT_OV4SI_INT, B_VX, BT_INT, BT_OV4SI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_INT_OV4SI_OV4SI, B_VX, BT_INT, BT_OV4SI, BT_OV4SI)
+DEF_FN_TYPE_2 (BT_FN_INT_UV16QI_UV16QI, B_VX, BT_INT, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_INT_UV2DI_UV2DI, B_VX, BT_INT, BT_UV2DI, BT_UV2DI)
+DEF_FN_TYPE_2 (BT_FN_INT_UV4SI_UV4SI, B_VX, BT_INT, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_2 (BT_FN_INT_UV8HI_UV8HI, B_VX, BT_INT, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_2 (BT_FN_INT_V16QI_V16QI, B_VX, BT_INT, BT_V16QI, BT_V16QI)
+DEF_FN_TYPE_2 (BT_FN_INT_V2DF_V2DF, B_VX, BT_INT, BT_V2DF, BT_V2DF)
+DEF_FN_TYPE_2 (BT_FN_INT_V2DI_V2DI, B_VX, BT_INT, BT_V2DI, BT_V2DI)
+DEF_FN_TYPE_2 (BT_FN_INT_V4SI_V4SI, B_VX, BT_INT, BT_V4SI, BT_V4SI)
+DEF_FN_TYPE_2 (BT_FN_INT_V8HI_V8HI, B_VX, BT_INT, BT_V8HI, BT_V8HI)
+DEF_FN_TYPE_2 (BT_FN_INT_VOIDPTR_INT, B_HTM, BT_INT, BT_VOIDPTR, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_OV2DI_LONGLONG_LONGLONG, B_VX, BT_OV2DI, BT_LONGLONG, BT_LONGLONG)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_INTCONSTPTR_INT, B_VX, BT_OV4SI, BT_INTCONSTPTR, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_INTCONSTPTR_UINT, B_VX, BT_OV4SI, BT_INTCONSTPTR, BT_UINT)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_INT_INT, B_VX, BT_OV4SI, BT_INT, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_INTPTR, B_VX, BT_OV4SI, BT_OV4SI, BT_INTPTR)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_OV4SI, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_UCHAR, B_VX, BT_OV4SI, BT_OV4SI, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_ULONG, B_VX, BT_OV4SI, BT_OV4SI, BT_ULONG)
+DEF_FN_TYPE_2 (BT_FN_UCHAR_UV16QI_INT, B_VX, BT_UCHAR, BT_UV16QI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UINT_UV4SI_INT, B_VX, BT_UINT, BT_UV4SI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UINT_VOIDCONSTPTR_INT, B_VX, BT_UINT, BT_VOIDCONSTPTR, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_ULONGLONG_UV2DI_INT, B_VX, BT_ULONGLONG, BT_UV2DI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_USHORT_UV8HI_INT, B_VX, BT_USHORT, BT_UV8HI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHARCONSTPTR_USHORT, B_VX, BT_UV16QI, BT_UCHARCONSTPTR, BT_USHORT)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHAR_INT, B_VX, BT_UV16QI, BT_UCHAR, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHAR_UCHAR, B_VX, BT_UV16QI, BT_UCHAR, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_INTPTR)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UCHAR, B_VX, BT_UV16QI, BT_UV16QI, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UINT, B_VX, BT_UV16QI, BT_UV16QI, BT_UINT)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UV16QI, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV2DI_UV2DI, B_VX, BT_UV16QI, BT_UV2DI, BT_UV2DI)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV4SI_UV4SI, B_VX, BT_UV16QI, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV8HI_UV8HI, B_VX, BT_UV16QI, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UCHAR_UCHAR, B_VX, BT_UV2DI, BT_UCHAR, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_ULONGLONG_INT, B_VX, BT_UV2DI, BT_ULONGLONG, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UV2DI_UCHAR, B_VX, BT_UV2DI, BT_UV2DI, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UV2DI_UINT, B_VX, BT_UV2DI, BT_UV2DI, BT_UINT)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UV2DI_UV2DI, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UV4SI_UV4SI, B_VX, BT_UV2DI, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_UV8HI_UV8HI, B_VX, BT_UV2DI, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_2 (BT_FN_UV2DI_V2DF_INT, B_VX, BT_UV2DI, BT_V2DF, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UCHAR_UCHAR, B_VX, BT_UV4SI, BT_UCHAR, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UINT_INT, B_VX, BT_UV4SI, BT_UINT, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV16QI_UV16QI, B_VX, BT_UV4SI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV2DI_UV2DI, B_VX, BT_UV4SI, BT_UV2DI, BT_UV2DI)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV4SI_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_INTPTR)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV4SI_UCHAR, B_VX, BT_UV4SI, BT_UV4SI, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV4SI_UINT, B_VX, BT_UV4SI, BT_UV4SI, BT_UINT)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV4SI_UV4SI, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_2 (BT_FN_UV4SI_UV8HI_UV8HI, B_VX, BT_UV4SI, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UCHAR_UCHAR, B_VX, BT_UV8HI, BT_UCHAR, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_USHORT_INT, B_VX, BT_UV8HI, BT_USHORT, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UV16QI_UV16QI, B_VX, BT_UV8HI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UV4SI_UV4SI, B_VX, BT_UV8HI, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UV8HI_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_INTPTR)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UV8HI_UCHAR, B_VX, BT_UV8HI, BT_UV8HI, BT_UCHAR)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UV8HI_UINT, B_VX, BT_UV8HI, BT_UV8HI, BT_UINT)
+DEF_FN_TYPE_2 (BT_FN_UV8HI_UV8HI_UV8HI, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_2 (BT_FN_V16QI_BV16QI_V16QI, B_VX, BT_V16QI, BT_BV16QI, BT_V16QI)
+DEF_FN_TYPE_2 (BT_FN_V16QI_UINT_VOIDCONSTPTR, B_VX, BT_V16QI, BT_UINT, BT_VOIDCONSTPTR)
+DEF_FN_TYPE_2 (BT_FN_V16QI_UV16QI_UV16QI, B_VX, BT_V16QI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_V16QI_V16QI_V16QI, B_VX, BT_V16QI, BT_V16QI, BT_V16QI)
+DEF_FN_TYPE_2 (BT_FN_V16QI_V8HI_V8HI, B_VX, BT_V16QI, BT_V8HI, BT_V8HI)
+DEF_FN_TYPE_2 (BT_FN_V2DF_DBL_INT, B_VX, BT_V2DF, BT_DBL, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_V2DF_UV2DI_INT, B_VX, BT_V2DF, BT_UV2DI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_V2DF_UV4SI_INT, B_VX, BT_V2DF, BT_UV4SI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_V2DF_V2DF_V2DF, B_VX, BT_V2DF, BT_V2DF, BT_V2DF)
+DEF_FN_TYPE_2 (BT_FN_V2DF_V2DI_INT, B_VX, BT_V2DF, BT_V2DI, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_V2DI_BV2DI_V2DI, B_VX, BT_V2DI, BT_BV2DI, BT_V2DI)
+DEF_FN_TYPE_2 (BT_FN_V2DI_UV2DI_UV2DI, B_VX, BT_V2DI, BT_UV2DI, BT_UV2DI)
+DEF_FN_TYPE_2 (BT_FN_V2DI_V2DF_INT, B_VX, BT_V2DI, BT_V2DF, BT_INT)
+DEF_FN_TYPE_2 (BT_FN_V2DI_V2DF_V2DF, B_VX, BT_V2DI, BT_V2DF, BT_V2DF)
+DEF_FN_TYPE_2 (BT_FN_V2DI_V2DI_V2DI, B_VX, BT_V2DI, BT_V2DI, BT_V2DI)
+DEF_FN_TYPE_2 (BT_FN_V2DI_V4SI_V4SI, B_VX, BT_V2DI, BT_V4SI, BT_V4SI)
+DEF_FN_TYPE_2 (BT_FN_V4SI_BV4SI_V4SI, B_VX, BT_V4SI, BT_BV4SI, BT_V4SI)
+DEF_FN_TYPE_2 (BT_FN_V4SI_INT_VOIDPTR, B_VX, BT_V4SI, BT_INT, BT_VOIDPTR)
+DEF_FN_TYPE_2 (BT_FN_V4SI_UV4SI_UV4SI, B_VX, BT_V4SI, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_2 (BT_FN_V4SI_V2DI_V2DI, B_VX, BT_V4SI, BT_V2DI, BT_V2DI)
+DEF_FN_TYPE_2 (BT_FN_V4SI_V4SI_V4SI, B_VX, BT_V4SI, BT_V4SI, BT_V4SI)
+DEF_FN_TYPE_2 (BT_FN_V4SI_V8HI_V8HI, B_VX, BT_V4SI, BT_V8HI, BT_V8HI)
+DEF_FN_TYPE_2 (BT_FN_V8HI_BV8HI_V8HI, B_VX, BT_V8HI, BT_BV8HI, BT_V8HI)
+DEF_FN_TYPE_2 (BT_FN_V8HI_UV8HI_UV8HI, B_VX, BT_V8HI, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_2 (BT_FN_V8HI_V16QI_V16QI, B_VX, BT_V8HI, BT_V16QI, BT_V16QI)
+DEF_FN_TYPE_2 (BT_FN_V8HI_V4SI_V4SI, B_VX, BT_V8HI, BT_V4SI, BT_V4SI)
+DEF_FN_TYPE_2 (BT_FN_V8HI_V8HI_V8HI, B_VX, BT_V8HI, BT_V8HI, BT_V8HI)
+DEF_FN_TYPE_2 (BT_FN_VOID_UINT64PTR_UINT64, B_HTM, BT_VOID, BT_UINT64PTR, BT_UINT64)
+DEF_FN_TYPE_2 (BT_FN_VOID_V2DF_FLTPTR, B_VX, BT_VOID, BT_V2DF, BT_FLTPTR)
+DEF_FN_TYPE_3 (BT_FN_INT128_INT128_INT128_INT128, B_VX, BT_INT128, BT_INT128, BT_INT128, BT_INT128)
+DEF_FN_TYPE_3 (BT_FN_INT_OV4SI_OV4SI_INTPTR, B_VX, BT_INT, BT_OV4SI, BT_OV4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_OV4SI_INT_OV4SI_INT, B_VX, BT_OV4SI, BT_INT, BT_OV4SI, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_INT, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_INTPTR, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI)
+DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_UCHAR, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_UCHAR)
+DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_ULONGLONG, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_ULONGLONG)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UCHAR_INT, B_VX, BT_UV16QI, BT_UV16QI, BT_UCHAR, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INT, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI, B_VX, BT_UV16QI, BT_UV2DI, BT_UV2DI, BT_UV16QI)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV8HI_UV8HI_INTPTR, B_VX, BT_UV16QI, BT_UV8HI, BT_UV8HI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_ULONGLONG_INT, B_VX, BT_UV2DI, BT_UV2DI, BT_ULONGLONG, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI_INT, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV2DI_UV4SI_UV4SI_UV2DI, B_VX, BT_UV2DI, BT_UV4SI, BT_UV4SI, BT_UV2DI)
+DEF_FN_TYPE_3 (BT_FN_UV4SI_UV2DI_UV2DI_INTPTR, B_VX, BT_UV4SI, BT_UV2DI, BT_UV2DI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UINT_INT, B_VX, BT_UV4SI, BT_UV4SI, BT_UINT, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_INT, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI)
+DEF_FN_TYPE_3 (BT_FN_UV4SI_UV8HI_UV8HI_UV4SI, B_VX, BT_UV4SI, BT_UV8HI, BT_UV8HI, BT_UV4SI)
+DEF_FN_TYPE_3 (BT_FN_UV8HI_UV16QI_UV16QI_UV8HI, B_VX, BT_UV8HI, BT_UV16QI, BT_UV16QI, BT_UV8HI)
+DEF_FN_TYPE_3 (BT_FN_UV8HI_UV4SI_UV4SI_INTPTR, B_VX, BT_UV8HI, BT_UV4SI, BT_UV4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_USHORT_INT, B_VX, BT_UV8HI, BT_UV8HI, BT_USHORT, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_INT, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI)
+DEF_FN_TYPE_3 (BT_FN_V16QI_UV16QI_UV16QI_INTPTR, B_VX, BT_V16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V16QI_V16QI_V16QI_INTPTR, B_VX, BT_V16QI, BT_V16QI, BT_V16QI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V16QI_V16QI_V16QI_V16QI, B_VX, BT_V16QI, BT_V16QI, BT_V16QI, BT_V16QI)
+DEF_FN_TYPE_3 (BT_FN_V16QI_V8HI_V8HI_INTPTR, B_VX, BT_V16QI, BT_V8HI, BT_V8HI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V2DF_V2DF_DBL_INT, B_VX, BT_V2DF, BT_V2DF, BT_DBL, BT_INT)
+DEF_FN_TYPE_3 (BT_FN_V2DF_V2DF_UCHAR_UCHAR, B_VX, BT_V2DF, BT_V2DF, BT_UCHAR, BT_UCHAR)
+DEF_FN_TYPE_3 (BT_FN_V2DF_V2DF_V2DF_V2DF, B_VX, BT_V2DF, BT_V2DF, BT_V2DF, BT_V2DF)
+DEF_FN_TYPE_3 (BT_FN_V2DI_UV2DI_UV2DI_INTPTR, B_VX, BT_V2DI, BT_UV2DI, BT_UV2DI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V2DI_V2DF_INT_INTPTR, B_VX, BT_V2DI, BT_V2DF, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V2DI_V2DF_V2DF_INTPTR, B_VX, BT_V2DI, BT_V2DF, BT_V2DF, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V2DI_V2DI_V2DI_INTPTR, B_VX, BT_V2DI, BT_V2DI, BT_V2DI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V2DI_V4SI_V4SI_V2DI, B_VX, BT_V2DI, BT_V4SI, BT_V4SI, BT_V2DI)
+DEF_FN_TYPE_3 (BT_FN_V4SI_UV4SI_UV4SI_INTPTR, B_VX, BT_V4SI, BT_UV4SI, BT_UV4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V4SI_V2DI_V2DI_INTPTR, B_VX, BT_V4SI, BT_V2DI, BT_V2DI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V4SI_V4SI_V4SI_INTPTR, B_VX, BT_V4SI, BT_V4SI, BT_V4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V4SI_V4SI_V4SI_V4SI, B_VX, BT_V4SI, BT_V4SI, BT_V4SI, BT_V4SI)
+DEF_FN_TYPE_3 (BT_FN_V4SI_V8HI_V8HI_V4SI, B_VX, BT_V4SI, BT_V8HI, BT_V8HI, BT_V4SI)
+DEF_FN_TYPE_3 (BT_FN_V8HI_UV8HI_UV8HI_INTPTR, B_VX, BT_V8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V8HI_V16QI_V16QI_V8HI, B_VX, BT_V8HI, BT_V16QI, BT_V16QI, BT_V8HI)
+DEF_FN_TYPE_3 (BT_FN_V8HI_V4SI_V4SI_INTPTR, B_VX, BT_V8HI, BT_V4SI, BT_V4SI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V8HI_V8HI_V8HI_INTPTR, B_VX, BT_V8HI, BT_V8HI, BT_V8HI, BT_INTPTR)
+DEF_FN_TYPE_3 (BT_FN_V8HI_V8HI_V8HI_V8HI, B_VX, BT_V8HI, BT_V8HI, BT_V8HI, BT_V8HI)
+DEF_FN_TYPE_3 (BT_FN_VOID_OV4SI_INT_VOIDPTR, B_VX, BT_VOID, BT_OV4SI, BT_INT, BT_VOIDPTR)
+DEF_FN_TYPE_3 (BT_FN_VOID_OV4SI_VOIDPTR_UINT, B_VX, BT_VOID, BT_OV4SI, BT_VOIDPTR, BT_UINT)
+DEF_FN_TYPE_3 (BT_FN_VOID_V16QI_UINT_VOIDPTR, B_VX, BT_VOID, BT_V16QI, BT_UINT, BT_VOIDPTR)
+DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OUV4SI_INTCONSTPTR_UCHAR, B_VX, BT_OV4SI, BT_OV4SI, BT_OUV4SI, BT_INTCONSTPTR, BT_UCHAR)
+DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI_INTPTR, B_VX, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INTPTR)
+DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_INT_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INT, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT)
+DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_ULONGLONGCONSTPTR_UCHAR, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_ULONGLONGCONSTPTR, BT_UCHAR)
+DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_UV2DI_INT, B_VX, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_INT)
+DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_INT_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UINTCONSTPTR_UCHAR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UINTCONSTPTR, BT_UCHAR)
+DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI_INT, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT)
+DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_INT_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INT, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT)
+DEF_FN_TYPE_4 (BT_FN_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG, B_VX, BT_VOID, BT_UV2DI, BT_UV2DI, BT_ULONGLONGPTR, BT_ULONGLONG)
+DEF_FN_TYPE_4 (BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG, B_VX, BT_VOID, BT_UV4SI, BT_UV4SI, BT_UINTPTR, BT_ULONGLONG)
+DEF_FN_TYPE_4 (BT_FN_VOID_V4SI_V4SI_INTPTR_ULONGLONG, B_VX, BT_VOID, BT_V4SI, BT_V4SI, BT_INTPTR, BT_ULONGLONG)
+DEF_FN_TYPE_5 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INT_INTPTR, B_VX, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_5 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI_INT_INTPTR, B_VX, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT, BT_INTPTR)
+DEF_FN_TYPE_5 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INT_INTPTR, B_VX, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT, BT_INTPTR)
 DEF_OV_TYPE (BT_OV_BV16QI_BV16QI, BT_BV16QI, BT_BV16QI)
 DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI, BT_BV16QI, BT_BV16QI, BT_BV16QI)
 DEF_OV_TYPE (BT_OV_BV16QI_BV16QI_BV16QI_BV16QI, BT_BV16QI, BT_BV16QI, BT_BV16QI, BT_BV16QI)
index 408c519..4bcdb22 100644 (file)
@@ -386,11 +386,11 @@ OB_DEF_VAR (s390_vec_insert_u64,        s390_vlvgg,         O3_ELEM,
 OB_DEF_VAR (s390_vec_insert_b64,        s390_vlvgg,         O3_ELEM,            BT_OV_UV2DI_ULONGLONG_BV2DI_INT)
 OB_DEF_VAR (s390_vec_insert_dbl,        s390_vlvgg_dbl,     O3_ELEM,            BT_OV_V2DF_DBL_V2DF_INT)
 
-B_DEF      (s390_vlvgb,                 vec_insertv16qi,    0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UCHAR_INT)
-B_DEF      (s390_vlvgh,                 vec_insertv8hi,     0,                  B_VX,               0,                  BT_FN_UV8HI_UV8HI_USHORT_INT)
-B_DEF      (s390_vlvgf,                 vec_insertv4si,     0,                  B_VX,               0,                  BT_FN_UV4SI_UV4SI_UINT_INT)
-B_DEF      (s390_vlvgg,                 vec_insertv2di,     0,                  B_VX,               0,                  BT_FN_UV2DI_UV2DI_ULONGLONG_INT)
-B_DEF      (s390_vlvgg_dbl,             vec_insertv2df,     0,                  B_VX | B_INT,       0,                  BT_FN_V2DF_V2DF_DBL_INT)
+B_DEF      (s390_vlvgb,                 vec_insertv16qi,    0,                  B_VX,               O3_ELEM,            BT_FN_UV16QI_UV16QI_UCHAR_INT)
+B_DEF      (s390_vlvgh,                 vec_insertv8hi,     0,                  B_VX,               O3_ELEM,            BT_FN_UV8HI_UV8HI_USHORT_INT)
+B_DEF      (s390_vlvgf,                 vec_insertv4si,     0,                  B_VX,               O3_ELEM,            BT_FN_UV4SI_UV4SI_UINT_INT)
+B_DEF      (s390_vlvgg,                 vec_insertv2di,     0,                  B_VX,               O3_ELEM,            BT_FN_UV2DI_UV2DI_ULONGLONG_INT)
+B_DEF      (s390_vlvgg_dbl,             vec_insertv2df,     0,                  B_VX | B_INT,       O3_ELEM,            BT_FN_V2DF_V2DF_DBL_INT)
 
 OB_DEF     (s390_vec_promote,           s390_vec_promote_s8,s390_vec_promote_dbl,B_VX,              BT_FN_OV4SI_INT_INT)
 OB_DEF_VAR (s390_vec_promote_s8,        s390_vlvgb_noin,    O2_ELEM,            BT_OV_V16QI_SCHAR_INT)                   /* vlvgb */
@@ -424,11 +424,11 @@ OB_DEF_VAR (s390_vec_extract_u64,       s390_vlgvg,         O2_ELEM,
 OB_DEF_VAR (s390_vec_extract_b64,       s390_vlgvg,         O2_ELEM,            BT_OV_ULONGLONG_BV2DI_INT)
 OB_DEF_VAR (s390_vec_extract_dbl,       s390_vlgvg_dbl,     O2_ELEM,            BT_OV_DBL_V2DF_INT)                      /* vlgvg */
 
-B_DEF      (s390_vlgvb,                 vec_extractv16qi,   0,                  B_VX,               0,                  BT_FN_UCHAR_UV16QI_INT)
-B_DEF      (s390_vlgvh,                 vec_extractv8hi,    0,                  B_VX,               0,                  BT_FN_USHORT_UV8HI_INT)
-B_DEF      (s390_vlgvf,                 vec_extractv4si,    0,                  B_VX,               0,                  BT_FN_UINT_UV4SI_INT)
-B_DEF      (s390_vlgvg,                 vec_extractv2di,    0,                  B_VX,               0,                  BT_FN_ULONGLONG_UV2DI_INT)
-B_DEF      (s390_vlgvg_dbl,             vec_extractv2df,    0,                  B_VX | B_INT,       0,                  BT_FN_DBL_V2DF_INT)
+B_DEF      (s390_vlgvb,                 vec_extractv16qi,   0,                  B_VX,               O2_ELEM,            BT_FN_UCHAR_UV16QI_INT)
+B_DEF      (s390_vlgvh,                 vec_extractv8hi,    0,                  B_VX,               O2_ELEM,            BT_FN_USHORT_UV8HI_INT)
+B_DEF      (s390_vlgvf,                 vec_extractv4si,    0,                  B_VX,               O2_ELEM,            BT_FN_UINT_UV4SI_INT)
+B_DEF      (s390_vlgvg,                 vec_extractv2di,    0,                  B_VX,               O2_ELEM,            BT_FN_ULONGLONG_UV2DI_INT)
+B_DEF      (s390_vlgvg_dbl,             vec_extractv2df,    0,                  B_VX | B_INT,       O2_ELEM,            BT_FN_DBL_V2DF_INT)
 
 OB_DEF     (s390_vec_insert_and_zero,   s390_vec_insert_and_zero_s8,s390_vec_insert_and_zero_dbl,B_VX,BT_FN_OV4SI_INTCONSTPTR)
 OB_DEF_VAR (s390_vec_insert_and_zero_s8,s390_vllezb,        0,                  BT_OV_V16QI_SCHARCONSTPTR)
@@ -741,7 +741,6 @@ B_DEF      (s390_vuplhw,                vec_unpacklv8hi,    0,
 B_DEF      (s390_vupllh,                vec_unpackl_lv8hi,  0,                  B_VX,               0,                  BT_FN_UV4SI_UV8HI)
 B_DEF      (s390_vuplf,                 vec_unpacklv4si,    0,                  B_VX,               0,                  BT_FN_V2DI_V4SI)
 B_DEF      (s390_vupllf,                vec_unpackl_lv4si,  0,                  B_VX,               0,                  BT_FN_UV2DI_UV4SI)
-B_DEF      (s390_vaq,                   vec_add_u128,       0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 
 OB_DEF     (s390_vec_addc,              s390_vec_addc_u8,   s390_vec_addc_u64,  B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_addc_u8,           s390_vaccb,         0,                  BT_OV_UV16QI_UV16QI_UV16QI)
@@ -749,13 +748,20 @@ OB_DEF_VAR (s390_vec_addc_u16,          s390_vacch,         0,
 OB_DEF_VAR (s390_vec_addc_u32,          s390_vaccf,         0,                  BT_OV_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_addc_u64,          s390_vaccg,         0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 
-B_DEF      (s390_vaccb,                 vec_addcv16qi,      0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vacch,                 vec_addcv8hi,       0,                  B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI)
-B_DEF      (s390_vaccf,                 vec_addcv4si,       0,                  B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
-B_DEF      (s390_vaccg,                 vec_addcv2di,       0,                  B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
-B_DEF      (s390_vaccq,                 vec_addc_u128,      0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vacq,                  vec_adde_u128,      0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vacccq,                vec_addec_u128,     0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vaccb,                 vaccb_v16qi,        0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vacch,                 vacch_v8hi,         0,                  B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI)
+B_DEF      (s390_vaccf,                 vaccf_v4si,         0,                  B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
+B_DEF      (s390_vaccg,                 vaccg_v2di,         0,                  B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
+
+B_DEF      (s390_vec_add_u128,          addti3,             0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_addc_u128,         vaccq_ti,           0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_adde_u128,         vacq,               0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_addec_u128,        vacccq,             0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+
+B_DEF      (s390_vaq,                   addti3,             0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128)
+B_DEF      (s390_vaccq,                 vaccq_ti,           0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128)
+B_DEF      (s390_vacq,                  vacq,               0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128_INT128)
+B_DEF      (s390_vacccq,                vacccq,             0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128_INT128)
 
 OB_DEF     (s390_vec_and,               s390_vec_and_b8,    s390_vec_and_dbl_c, B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_and_b8,            s390_vn,            0,                  BT_OV_BV16QI_BV16QI_BV16QI)
@@ -2051,7 +2057,6 @@ OB_DEF_VAR (s390_vec_srb_dbl_u64,       s390_vsrlb,         0,
 OB_DEF_VAR (s390_vec_srb_dbl_s64,       s390_vsrlb,         0,                  BT_OV_V2DF_V2DF_V2DI)
 
 B_DEF      (s390_vsrlb,                 vec_srbv16qi,       0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vsq,                   vec_sub_u128,       0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
 
 OB_DEF     (s390_vec_subc,              s390_vec_subc_u8,   s390_vec_subc_u64,  B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_subc_u8,           s390_vscbib,        0,                  BT_OV_UV16QI_UV16QI_UV16QI)
@@ -2059,13 +2064,25 @@ OB_DEF_VAR (s390_vec_subc_u16,          s390_vscbih,        0,
 OB_DEF_VAR (s390_vec_subc_u32,          s390_vscbif,        0,                  BT_OV_UV4SI_UV4SI_UV4SI)
 OB_DEF_VAR (s390_vec_subc_u64,          s390_vscbig,        0,                  BT_OV_UV2DI_UV2DI_UV2DI)
 
-B_DEF      (s390_vscbib,                vec_subcv16qi,      0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vscbih,                vec_subcv8hi,       0,                  B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI)
-B_DEF      (s390_vscbif,                vec_subcv4si,       0,                  B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
-B_DEF      (s390_vscbig,                vec_subcv2di,       0,                  B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
-B_DEF      (s390_vscbiq,                vec_subc_u128,      0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vsbiq,                 vec_sube_u128,      0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
-B_DEF      (s390_vsbcbiq,               vec_subec_u128,     0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vscbib,                vscbib_v16qi,       0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vscbih,                vscbih_v8hi,        0,                  B_VX,               0,                  BT_FN_UV8HI_UV8HI_UV8HI)
+B_DEF      (s390_vscbif,                vscbif_v4si,        0,                  B_VX,               0,                  BT_FN_UV4SI_UV4SI_UV4SI)
+B_DEF      (s390_vscbig,                vscbig_v2di,        0,                  B_VX,               0,                  BT_FN_UV2DI_UV2DI_UV2DI)
+
+/* The builtin definitions requires these to use vector unsigned char.
+   But we want the GCC low-level builtins and the insn patterns to
+   allow int128_t and TImode.  So we rely on s390_expand_builtin to
+   switch modes.  */
+
+B_DEF      (s390_vec_sub_u128,          subti3,             0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_subc_u128,         vscbiq_ti,          0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_sube_u128,         vsbiq,              0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+B_DEF      (s390_vec_subec_u128,        vsbcbiq,            0,                  B_VX,               0,                  BT_FN_UV16QI_UV16QI_UV16QI_UV16QI)
+
+B_DEF      (s390_vsq,                   subti3,            0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128)
+B_DEF      (s390_vscbiq,                vscbiq_ti,          0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128)
+B_DEF      (s390_vsbiq,                 vsbiq,              0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128_INT128)
+B_DEF      (s390_vsbcbiq,               vsbcbiq,            0,                  B_VX,               0,                  BT_FN_INT128_INT128_INT128_INT128)
 
 OB_DEF     (s390_vec_sum2,              s390_vec_sum2_u16,  s390_vec_sum2_u32,  B_VX,               BT_FN_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_sum2_u16,          s390_vsumgh,        0,                  BT_OV_UV2DI_UV8HI_UV8HI)
index 50fee7c..452b415 100644 (file)
@@ -875,6 +875,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
   arity = 0;
   FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
     {
+      rtx tmp_rtx;
       const struct insn_operand_data *insn_op;
       unsigned int op_flags = all_op_flags & ((1 << O_SHIFT) - 1);
 
@@ -950,6 +951,20 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
                                             copy_to_mode_reg (Pmode,
                                               XEXP (op[arity], 0)));
        }
+      /* Some of the builtins require different modes/types than the
+        pattern in order to implement a specific API.  Instead of
+        adding many expanders which do the mode change we do it here.
+        E.g. s390_vec_add_u128 required to have vector unsigned char
+        arguments is mapped to addti3.  */
+      else if (insn_op->mode != VOIDmode
+              && GET_MODE (op[arity]) != VOIDmode
+              && GET_MODE (op[arity]) != insn_op->mode
+              && ((tmp_rtx = simplify_gen_subreg (insn_op->mode, op[arity],
+                                                  GET_MODE (op[arity]), 0))
+                  != NULL_RTX))
+       {
+         op[arity] = tmp_rtx;
+       }
       else if (GET_MODE (op[arity]) == insn_op->mode
               || GET_MODE (op[arity]) == VOIDmode
               || (insn_op->predicate == address_operand
@@ -6442,11 +6457,17 @@ s390_expand_vec_init (rtx target, rtx vals)
   /* Unfortunately the vec_init expander is not allowed to fail.  So
      we have to implement the fallback ourselves.  */
   for (i = 0; i < n_elts; i++)
-    emit_insn (gen_rtx_SET (target,
-                           gen_rtx_UNSPEC (mode,
-                                           gen_rtvec (3, XVECEXP (vals, 0, i),
-                                                      GEN_INT (i), target),
-                                           UNSPEC_VEC_SET)));
+    {
+      rtx elem = XVECEXP (vals, 0, i);
+      if (!general_operand (elem, GET_MODE (elem)))
+       elem = force_reg (inner_mode, elem);
+
+      emit_insn (gen_rtx_SET (target,
+                             gen_rtx_UNSPEC (mode,
+                                             gen_rtvec (3, elem,
+                                                        GEN_INT (i), target),
+                                             UNSPEC_VEC_SET)));
+    }
 }
 
 /* Structure to hold the initial parameters for a compare_and_swap operation
@@ -12405,17 +12426,13 @@ s390_encode_section_info (tree decl, rtx rtl, int first)
     {
       /* Store the alignment to be able to check if we can use
         a larl/load-relative instruction.  We only handle the cases
-        that can go wrong (i.e. no FUNC_DECLs).  If a symref does
-        not have any flag we assume it to be correctly aligned.  */
-
-      if (DECL_ALIGN (decl) % 64)
-       SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0));
-
-      if (DECL_ALIGN (decl) % 32)
-       SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0));
-
+        that can go wrong (i.e. no FUNC_DECLs).  */
       if (DECL_ALIGN (decl) == 0 || DECL_ALIGN (decl) % 16)
        SYMBOL_FLAG_SET_NOTALIGN2 (XEXP (rtl, 0));
+      else if (DECL_ALIGN (decl) % 32)
+       SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0));
+      else if (DECL_ALIGN (decl) % 64)
+       SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0));
     }
 
   /* Literal pool references don't have a decl so they are handled
@@ -12423,18 +12440,14 @@ s390_encode_section_info (tree decl, rtx rtl, int first)
      entry to decide upon the alignment.  */
   if (MEM_P (rtl)
       && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF
-      && TREE_CONSTANT_POOL_ADDRESS_P (XEXP (rtl, 0))
-      && MEM_ALIGN (rtl) != 0
-      && GET_MODE_BITSIZE (GET_MODE (rtl)) != 0)
+      && TREE_CONSTANT_POOL_ADDRESS_P (XEXP (rtl, 0)))
     {
-      if (MEM_ALIGN (rtl) % 64)
-       SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0));
-
-      if (MEM_ALIGN (rtl) % 32)
-       SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0));
-
       if (MEM_ALIGN (rtl) == 0 || MEM_ALIGN (rtl) % 16)
        SYMBOL_FLAG_SET_NOTALIGN2 (XEXP (rtl, 0));
+      else if (MEM_ALIGN (rtl) % 32)
+       SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0));
+      else if (MEM_ALIGN (rtl) % 64)
+       SYMBOL_FLAG_SET_NOTALIGN8 (XEXP (rtl, 0));
     }
 }
 
index 28e44cf..b3d4370 100644 (file)
    UNSPEC_VEC_UNPACKL
    UNSPEC_VEC_UNPACKL_L
    UNSPEC_VEC_ADDC
-   UNSPEC_VEC_ADDC_U128
    UNSPEC_VEC_ADDE_U128
    UNSPEC_VEC_ADDEC_U128
    UNSPEC_VEC_AVG
    UNSPEC_VEC_SRL
    UNSPEC_VEC_SRLB
 
-   UNSPEC_VEC_SUB_U128
    UNSPEC_VEC_SUBC
-   UNSPEC_VEC_SUBC_U128
    UNSPEC_VEC_SUBE_U128
    UNSPEC_VEC_SUBEC_U128
 
      (clobber (reg:CC CC_REGNUM))])]
   "TARGET_ZARCH"
 {
-  /* For z13 we have vaq which doesn't set CC.  */
+  /* For z13 we have vsq which doesn't set CC.  */
   if (TARGET_VX)
     {
       emit_insn (gen_rtx_SET (operands[0],
index ab82e7a..52e46ff 100644 (file)
@@ -1,4 +1,4 @@
-/* GNU compiler hardware transactional execution intrinsics
+/* GNU compiler vector extension intrinsics
    Copyright (C) 2015-2016 Free Software Foundation, Inc.
    Contributed by Andreas Krebbel (Andreas.Krebbel@de.ibm.com)
 
@@ -73,17 +73,9 @@ __lcbb(const void *ptr, int bndry)
 #define vec_splat_s32 __builtin_s390_vec_splat_s32
 #define vec_splat_u64 __builtin_s390_vec_splat_u64
 #define vec_splat_s64 __builtin_s390_vec_splat_s64
-#define vec_add_u128 __builtin_s390_vaq
-#define vec_addc_u128 __builtin_s390_vaccq
-#define vec_adde_u128 __builtin_s390_vacq
-#define vec_addec_u128 __builtin_s390_vacccq
 #define vec_checksum __builtin_s390_vcksm
 #define vec_gfmsum_128 __builtin_s390_vgfmg
 #define vec_gfmsum_accum_128 __builtin_s390_vgfmag
-#define vec_sub_u128 __builtin_s390_vsq
-#define vec_subc_u128 __builtin_s390_vscbiq
-#define vec_sube_u128 __builtin_s390_vsbiq
-#define vec_subec_u128 __builtin_s390_vsbcbiq
 #define vec_ceil(X) __builtin_s390_vfidb((X), 4, 6)
 #define vec_roundp(X) __builtin_s390_vfidb((X), 4, 6)
 #define vec_floor(X) __builtin_s390_vfidb((X), 4, 7)
@@ -169,6 +161,10 @@ __lcbb(const void *ptr, int bndry)
 #define vec_unpackh __builtin_s390_vec_unpackh
 #define vec_unpackl __builtin_s390_vec_unpackl
 #define vec_addc __builtin_s390_vec_addc
+#define vec_add_u128 __builtin_s390_vec_add_u128
+#define vec_addc_u128 __builtin_s390_vec_addc_u128
+#define vec_adde_u128 __builtin_s390_vec_adde_u128
+#define vec_addec_u128 __builtin_s390_vec_addec_u128
 #define vec_and __builtin_s390_vec_and
 #define vec_andc __builtin_s390_vec_andc
 #define vec_avg __builtin_s390_vec_avg
@@ -219,6 +215,10 @@ __lcbb(const void *ptr, int bndry)
 #define vec_srl __builtin_s390_vec_srl
 #define vec_srb __builtin_s390_vec_srb
 #define vec_subc __builtin_s390_vec_subc
+#define vec_sub_u128 __builtin_s390_vec_sub_u128
+#define vec_subc_u128 __builtin_s390_vec_subc_u128
+#define vec_sube_u128 __builtin_s390_vec_sube_u128
+#define vec_subec_u128 __builtin_s390_vec_subec_u128
 #define vec_sum2 __builtin_s390_vec_sum2
 #define vec_sum_u128 __builtin_s390_vec_sum_u128
 #define vec_sum4 __builtin_s390_vec_sum4
index c4a837b..34fd630 100644 (file)
 
 ; Vector add
 
-; vaq
-
-; zvector builtins uses V16QI operands.  So replace the modes in order
-; to map this to a TImode add.  We have to keep the V16QI mode
-; operands in the expander in order to allow some operand type
-; checking when expanding the builtin.
-(define_expand "vec_add_u128"
-  [(match_operand:V16QI 0 "register_operand" "")
-   (match_operand:V16QI 1 "register_operand" "")
-   (match_operand:V16QI 2 "register_operand" "")]
-  "TARGET_VX"
-{
-  rtx op0 = gen_rtx_SUBREG (TImode, operands[0], 0);
-  rtx op1 = gen_rtx_SUBREG (TImode, operands[1], 0);
-  rtx op2 = gen_rtx_SUBREG (TImode, operands[2], 0);
-
-  emit_insn (gen_rtx_SET (op0,
-                         gen_rtx_PLUS (TImode, op1, op2)));
-  DONE;
-})
-
 ; Vector add compute carry
 
-(define_insn "vec_addc<mode>"
-  [(set (match_operand:VI_HW                0 "register_operand" "=v")
-       (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "%v")
-                      (match_operand:VI_HW 2 "register_operand"  "v")]
-                     UNSPEC_VEC_ADDC))]
+(define_insn "vacc<bhfgq>_<mode>"
+  [(set (match_operand:VIT_HW                 0 "register_operand" "=v")
+       (unspec:VIT_HW [(match_operand:VIT_HW 1 "register_operand" "%v")
+                       (match_operand:VIT_HW 2 "register_operand"  "v")]
+                      UNSPEC_VEC_ADDC))]
   "TARGET_VX"
   "vacc<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-(define_insn "vec_addc_u128"
-  [(set (match_operand:V16QI                0 "register_operand" "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "%v")
-                      (match_operand:V16QI 2 "register_operand"  "v")]
-                     UNSPEC_VEC_ADDC_U128))]
-  "TARGET_VX"
-  "vaccq\t%v0,%v1,%v2"
-  [(set_attr "op_type" "VRR")])
-
-
 ; Vector add with carry
 
-(define_insn "vec_adde_u128"
-  [(set (match_operand:V16QI                0 "register_operand" "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "%v")
-                      (match_operand:V16QI 2 "register_operand"  "v")
-                      (match_operand:V16QI 3 "register_operand"  "v")]
-                     UNSPEC_VEC_ADDE_U128))]
+(define_insn "vacq"
+  [(set (match_operand:TI             0 "register_operand" "=v")
+       (unspec:TI [(match_operand:TI 1 "register_operand" "%v")
+                   (match_operand:TI 2 "register_operand"  "v")
+                   (match_operand:TI 3 "register_operand"  "v")]
+                  UNSPEC_VEC_ADDE_U128))]
   "TARGET_VX"
   "vacq\t%v0,%v1,%v2,%v3"
   [(set_attr "op_type" "VRR")])
 
 ; Vector add with carry compute carry
 
-(define_insn "vec_addec_u128"
-  [(set (match_operand:V16QI                0 "register_operand" "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "%v")
-                      (match_operand:V16QI 2 "register_operand"  "v")
-                      (match_operand:V16QI 3 "register_operand"  "v")]
-                     UNSPEC_VEC_ADDEC_U128))]
+(define_insn "vacccq"
+  [(set (match_operand:TI             0 "register_operand" "=v")
+       (unspec:TI [(match_operand:TI 1 "register_operand" "%v")
+                   (match_operand:TI 2 "register_operand"  "v")
+                   (match_operand:TI 3 "register_operand"  "v")]
+                  UNSPEC_VEC_ADDEC_U128))]
   "TARGET_VX"
   "vacccq\t%v0,%v1,%v2,%v3"
   [(set_attr "op_type" "VRR")])
 
 ; Vector subtract
 
-(define_insn "vec_sub_u128"
-  [(set (match_operand:V16QI 0 "register_operand"               "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
-                      (match_operand:V16QI 2 "register_operand" "v")]
-                    UNSPEC_VEC_SUB_U128))]
-  "TARGET_VX"
-  "vsq\t%v0,%v1,%v2"
-  [(set_attr "op_type" "VRR")])
-
-
 ; Vector subtract compute borrow indication
 
-(define_insn "vec_subc<mode>"
-  [(set (match_operand:VI_HW 0 "register_operand"               "=v")
-       (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "v")
-                      (match_operand:VI_HW 2 "register_operand" "v")]
+(define_insn "vscbi<bhfgq>_<mode>"
+  [(set (match_operand:VIT_HW 0 "register_operand"                "=v")
+       (unspec:VIT_HW [(match_operand:VIT_HW 1 "register_operand" "v")
+                       (match_operand:VIT_HW 2 "register_operand" "v")]
                      UNSPEC_VEC_SUBC))]
   "TARGET_VX"
   "vscbi<bhfgq>\t%v0,%v1,%v2"
   [(set_attr "op_type" "VRR")])
 
-(define_insn "vec_subc_u128"
-  [(set (match_operand:V16QI 0 "register_operand"               "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
-                      (match_operand:V16QI 2 "register_operand" "v")]
-                    UNSPEC_VEC_SUBC_U128))]
-  "TARGET_VX"
-  "vscbiq\t%v0,%v1,%v2"
-  [(set_attr "op_type" "VRR")])
-
-
 ; Vector subtract with borrow indication
 
-(define_insn "vec_sube_u128"
-  [(set (match_operand:V16QI 0 "register_operand"               "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
-                      (match_operand:V16QI 2 "register_operand" "v")
-                      (match_operand:V16QI 3 "register_operand" "v")]
+(define_insn "vsbiq"
+  [(set (match_operand:TI 0 "register_operand"               "=v")
+       (unspec:TI [(match_operand:TI 1 "register_operand"    "v")
+                      (match_operand:TI 2 "register_operand" "v")
+                      (match_operand:TI 3 "register_operand" "v")]
                      UNSPEC_VEC_SUBE_U128))]
   "TARGET_VX"
   "vsbiq\t%v0,%v1,%v2,%v3"
 
 ; Vector subtract with borrow compute and borrow indication
 
-(define_insn "vec_subec_u128"
-  [(set (match_operand:V16QI 0 "register_operand"               "=v")
-       (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
-                      (match_operand:V16QI 2 "register_operand" "v")
-                      (match_operand:V16QI 3 "register_operand" "v")]
+(define_insn "vsbcbiq"
+  [(set (match_operand:TI 0 "register_operand"               "=v")
+       (unspec:TI [(match_operand:TI 1 "register_operand"    "v")
+                      (match_operand:TI 2 "register_operand" "v")
+                      (match_operand:TI 3 "register_operand" "v")]
                      UNSPEC_VEC_SUBEC_U128))]
   "TARGET_VX"
   "vsbcbiq\t%v0,%v1,%v2,%v3"
index 6215b0c..2026a82 100644 (file)
@@ -1,3 +1,352 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-13  Jason Merrill  <jason@redhat.com>
+
+       PR c++/71972
+       * constexpr.c (cxx_eval_array_reference): Handle looking for the
+       value of an element we're currently modifying.
+
+2016-08-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/72868
+       * constexpr.c (label_matches): Handle case range expressions.
+
+2016-08-11  Jason Merrill  <jason@redhat.com>
+
+       PR c++/73456
+       * logic.cc (non_atomic_constraint_p): Handle EXPR_PACK_EXPANSION.
+
+2016-08-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/72800
+       * lambda.c (add_capture): Check lambda_capture_field_type return
+       value for error_mark_node.
+
+2016-08-05  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/68724
+       * pt.c (unify): TRAIT_EXPR is an expr.
+
+2016-08-04  Jason Merrill  <jason@redhat.com>
+
+       PR c++/72415
+       * pt.c (tsubst_pack_expansion): Pull a single pack expansion out
+       of the TREE_VEC.
+
+2016-07-29  Jason Merrill  <jason@redhat.com>
+
+       PR c++/72457
+       * init.c (expand_aggr_init_1): Only handle value-init of bases.
+       * constexpr.c (build_data_member_initialization): Handle multiple
+       initializers for the same field.
+
+2016-07-25  Jason Merrill  <jason@redhat.com>
+
+       PR c++/71576
+       * call.c (convert_like_real): Use lvalue_kind.
+
+       PR c++/71833
+       * pt.c (coerce_template_parameter_pack): Fix logic for
+       pack index.
+
+2016-07-23  Jason Merrill  <jason@redhat.com>
+
+       PR c++/55922
+       PR c++/63151
+       * init.c (expand_aggr_init_1): Handle list-initialization from {}.
+
+       PR c++/70709
+       * class.c (walk_subobject_offsets): Handle 0-length array.
+
+       PR c++/70778
+       * pt.c (tsubst): Also substitute into the template of a
+       BOUND_TEMPLATE_TEMPLATE_PARM.
+
+       PR c++/71738
+       * pt.c (lookup_template_class_1): Handle getting template from tsubst.
+
+       PR c++/71350
+       * decl.c (reshape_init_r): Check complain for missing braces warning.
+
+2016-07-22  Jason Merrill  <jason@redhat.com>
+
+       PR c++/71748
+       PR c++/52746
+       * pt.c (tsubst_baselink): Call
+       adjust_result_of_qualified_name_lookup for unqualified
+       destructors.
+
+2016-07-21  Jason Merrill  <jason@redhat.com>
+
+       PR c++/69223
+       * semantics.c (apply_deduced_return_type): Call
+       complete_type_or_else before building the new RESULT_DECL.
+
+       PR c++/71630
+       * pt.c (instantiate_decl): Fix pattern_defined for namespace scope
+       variable templates.
+
+       PR c++/71913
+       * call.c (unsafe_copy_elision_p): It's OK to elide when
+       initializing an unknown object.
+
+2016-07-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71728
+       * constexpr.c (potential_constant_expression_1) <case GOTO_EXPR>:
+       Replace assert with test, return false if the goto isn't break
+       or continue.  Formatting fix.
+
+2016-07-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71941
+       * cp-gimplify.c (cp_genericize): For nested cp_genericize calls
+       save/restore bc_label array.
+
+2016-07-21  Patrick Palka  <ppalka@gcc.gnu.org>
+
+       PR c++/70822
+       PR c++/70106
+       * cp-tree.h (REF_PARENTHESIZED_P): Make this flag apply to
+       SCOPE_REFs too.
+       * pt.c (tsubst_qualified_id): If REF_PARENTHESIZED_P is set
+       on the qualified_id then propagate it to the resulting
+       expression.
+       (do_auto_deduction): Check REF_PARENTHESIZED_P on SCOPE_REFs
+       too.
+       * semantics.c (force_paren_expr): If given a SCOPE_REF, just set
+       its REF_PARENTHESIZED_P flag.
+
+2016-07-21  Andrew Sutton  <andrew.n.sutton@gmail.com>
+           Jason Merrill  <jason@redhat.com>
+
+       Improving concepts performance and diagnostics.
+       PR c++/67565
+       PR c++/67579
+       PR c++/71843
+       * cp-tree.def (CHECK_CONSTR): New.
+       * cp-tree.h (CHECK_CONSTR_CONCEPT): New.
+       (CHECK_CONSTR_ARGS): New.
+       * constraint.cc (make_predicate_constraint): Remove in favor of
+       normalize_expression.
+       (resolve_constraint_check): Actually return error_mark_node when
+       resolution fails.
+       (resolve_variable_concept_check): Perform coercion as if processing
+       a template. Also return errors on resolution failure.
+       (lift_*): Remove all of these functions. Don't unnecessarily inline
+       concepts.
+       (learn_*): Add facilities to memoize implications for subsumption
+       during normalization.
+       (expanding_concept): New.
+       (expand_concept): New. Return the inlined and normalized definition
+       of a concept when needed.
+       (transform_*, xform_*): Rename to normalize_* to better reflect the
+       responsibility of those functions.
+       (normalize_template_id_expression): Check for non-boolean operands
+       when possible. Generate check constraints instead of normal variable
+       references.
+       (normalize_call_expression): Report errors when resolution fails.
+       (check_for_logical_overloads): Rewrite this check to more accurately
+       report the error.
+       (normalize_atom): Check for overloaded calls and invalid types before
+       determining if the expression refers to a concept.
+       (build_constraints): Don't cache normalized constraints or decomposed
+       assumptions.
+       (finish_shorthand_constraint): Return a normalized expression instead
+       of a predicate constraint.
+       (finish_template_introduction): Same.
+       (placeholder_extract_concept_and_args): Rewrite this since we only
+       ever get check constraints here.
+       (equivalent_placeholder_constraints): Rewrite in terms of check
+       constraints, and handle error_mark_nodes correctly.
+       (tsubst_check_constraint, tsubst_expr_constr, tsubst_type_constr)
+       (tsubst_implicit_conversion_constr)
+       (tsubst_argument_deduction_constr, tsubst_exception_constr)
+       (tsubst_parameterized_constraint, tsubst_constraint): New.
+       (tsbust_conjunection): Replace with tsubst_logical_operator and
+       actually generate the right kind of constraint.
+       (tsubst_requirement_body): Reverse the order of substituted arguments
+       so that they appear in the order written (helps diagnostics).
+       (satisfy_check_constraint): New.
+       (satisfy_conjunction): Simplify.
+       (satisfy_disjunction): Same.
+       (satisfy_constraint_1): Handle check constraints.
+       (eval_constr): New (private) global state.
+       (evaluating_constraints_sentinel): New. Manages eval_constr.
+       (satisfy_constraint): Add timing variables.
+       (satisfy_associated_constraints): Add hooks for memoization.
+       (evaluate_function_concept): Build a check constraint instead of
+       normalizing its definition.
+       (evaluate_variable_concept): Same.
+       (evaluate_constraint_expression): Normalize, but in the current
+       declaration processing context.
+       (evaluating_constraints_p): New.
+       (elide_constraint_failure_p): Actually emit constraint_thresh errors.
+       (diagnose_*): Remove artificial indentation. Add a new parameter to
+       each that tracks the current (complete) constraint prior to any
+       substitutions.
+       (diagnose_expression): Removed.
+       (diagnose_call_expression): Same.
+       (diagnose_template_id): Same.
+       (diagnose_template_id): New.
+       (diagnose_logical_constraint): New.
+       (diagnose_expression_constraint): Show the original expression.
+       (diagnose_type_constraint): Show the original type.
+       (diagnose_implicit_conversion_constraint): Be specific about
+       failures, don't re-diagnose a known-to-be-failed substitutions,
+       and manage elisions properly.
+       (diagnose_argument_deduction_constraint): Same.
+       (diagnose_exception_constraint): Same.
+       (diagnose_parameterized_constraint): Same.
+       (constraint_p): Allow EXPR_PACK_EXPANSION.
+       * logic.cc (next_by_distance): Removed. No longer used.
+       (any_p): Renamed from any_of.
+       (term_entry, term_hasher): New.
+       (term_list): Rewrite to include a hash table for quick lookup.
+       Also, make less stateful.
+       (proof_state): Extend to allow goals to be discharged once
+       satisfied.
+       (non_atomic_constraint_p): New.
+       (any_non_atomic_constraints_p): New.
+       (...rest...): Previous implementation completely replaced with an
+       iterative algorithm that opportunistically prunes the search space
+       before committing to using more memory.
+       * parser.c: (cp_parser_type_parameter): Normalize constraints.
+       (cp_parser_explicit_template_declaration): Same.
+       * pt.c: (finish_template_variable): Be less redundant with this error
+       message.
+       (template_args_equal): No longer static.
+       (tsubst_decl): Don't try to find specializations of variables that
+       have already been instantiated.
+       (build_non_dependent_expr): Avoid infinite recursion during concept
+       expansion.
+       (make_constrained_auto): Normalize constraints.
+       (do_auto_deduction): When doing auto deduction from a
+       partial-concept-id, be sure to include the explicit args checking
+       the constraints.
+       (constraint_sat_*): New. Memoize satisfied constraints.
+       (concept_spec_*): New. Memoize expressions associated with a concept
+       specialization.
+       (constraint_memos, concept_memos): New.
+       (lookup_constraint_satisfaction, memoize_constraint_satisfaction): New.
+       (lookup_concept_satisfaction, memoize_concept_satisfaction): New.
+       (get_concept_expansion, save_concept_expansion): New.
+       (hash_subsumption_args): New.
+       (comp_subsumption_args): New.
+       (subsumption_*): New. Memoize parts of the subsumption relation.
+       (lookup_subsumption_result, save_subsumption_result): New.
+       (init_constraint_processing): Initialize memo tables.
+       (get_constraints): Shortcut if !flag_concepts.
+       * decl.c (grokfndecl): Normalize constraints.
+       * error.c (dump_simple_decl): Print "concept" when appropriate.
+       (dump_function_decl): Same.
+       (dump_template_decl): Don't write requirements when we're not
+       printing the header.
+       (dump_expr): Handle fold expressions.
+       * cxx-pretty-print.c (cxx_pretty_printer::expression): Handle
+       fold expressions.
+       (get_fold_operator): New.
+       (pp_cxx_unary_left_fold_expression): New.
+       (pp_cxx_unary_right_fold_expression): New.
+       (pp_cxx_binary_fold_expression): New.
+       (pp_cxx_check_constraint): New.
+       (pp_cxx_*_constraint): Rewrite the grammar of internal constraints
+       to make them easier to read when debugging.
+       * search.c (accessible_p): Don't shortcut when evaluating constraints.
+       * tree.c (cp_tree_equal): Handle CHECK_CONSTR.
+
+2016-07-21  Jason Merrill  <jason@redhat.com>
+
+       PR c++/70781
+       * parser.c (cp_parser_lambda_expression): Unset OK if there was an
+       error parsing the lambda-declarator.
+
+       PR c++/71896
+       * constexpr.c (cxx_eval_binary_expression): Handle comparison
+       between lowered and unlowered PTRMEM_CST.
+
+       PR c++/71092
+       * constexpr.c (cxx_eval_call_expression): Fail quietly when cgraph
+       threw away DECL_SAVED_TREE.
+
+       PR c++/71117
+       Core 2189
+       * call.c (add_template_conv_candidate): Disable if there are
+       viable candidates.
+
+       PR c++/71495
+       * call.c (convert_like_real): Mask complain.
+
+       PR c++/71511
+       * typeck2.c (cxx_incomplete_type_diagnostic): Handle DECLTYPE_TYPE.
+
+       PR c++/71513
+       * pt.c (tsubst_attributes): Fix loop logic.
+
+       PR c++/71604
+       PR c++/54430
+       * parser.c (cp_parser_range_for): Modify IDENTIFIER_BINDING directly.
+       (cp_parser_simple_declaration): Diagnose type definition in
+       for-range-declaration.
+
+       PR c++/71711
+       * operators.def: Add *_FOLD_EXPR.
+       * cp-tree.h (FOLD_EXPR_P): Parenthesize.
+       * mangle.c (write_expression): Handle fold-expressions.
+       * pt.c (tsubst_unary_left_fold, tsubst_binary_left_fold)
+       (tsubst_unary_right_fold, tsubst_binary_right_fold): Handle
+       partial instantiation.
+
+       PR c++/71814
+       * mangle.c (write_expression): Handle sizeof... an argument pack.
+
+       PR c++/71718
+       * pt.c (push_tinst_level_loc): Set at_eof before fatal_error.
+
+       PR c++/70824
+       * init.c (constant_value_1): Don't instantiated DECL_INITIAL of
+       artificial variables.
+
+       * lambda.c (maybe_add_lambda_conv_op): Fix null object argument.
+
+2016-07-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71909
+       * parser.c (cp_parser_save_member_function_body): Consume
+       __transaction_relaxed or __transaction_atomic with optional
+       attribute.  Only skip catch with block if try keyword is seen.
+
+2016-07-19  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2016-07-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71835
+       * call.c (build_op_call_1): Use convert_like_with_context only
+       if cand->fn is a decl.
+
+       PR c++/71828
+       * constexpr.c (cxx_eval_constant_expression) <case REALPART_EXPR>:
+       For lval don't use cxx_eval_unary_expression and instead recurse
+       and if needed rebuild the reference.
+
+       PR c++/71822
+       * cp-gimplify.c (cp_gimplify_expr) <case VEC_INIT_EXPR>: Recursively
+       fold *expr_p before genericizing it.
+
+       PR c++/71871
+       * typeck.c (build_x_conditional_expr): Revert the 2012-10-25 change.
+
+       2016-07-07  Jakub Jelinek  <jakub@redhat.com>
+                   Kai Tietz  <ktietz70@googlemail.com>
+
+       PR c++/70869
+       PR c++/71054
+       * cp-gimplify.c (cp_genericize_r): For DECL_EXPR for non-static
+       artificial vars, genericize their initializers.
+
 2016-06-21  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 34a8840..a7d35b9 100644 (file)
@@ -3184,6 +3184,12 @@ add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
                             tree return_type, tree access_path,
                             tree conversion_path, tsubst_flags_t complain)
 {
+  /* Making this work broke PR 71117, so until the committee resolves core
+     issue 2189, let's disable this candidate if there are any viable call
+     operators.  */
+  if (any_strictly_viable (*candidates))
+    return NULL;
+
   return
     add_template_candidate_real (candidates, tmpl, NULL_TREE, NULL_TREE,
                                 NULL_TREE, arglist, return_type, access_path,
@@ -4386,8 +4392,11 @@ build_op_call_1 (tree obj, vec<tree, va_gc> **args, tsubst_flags_t complain)
        result = build_over_call (cand, LOOKUP_NORMAL, complain);
       else
        {
-         obj = convert_like_with_context (cand->convs[0], obj, cand->fn, -1,
-                                          complain);
+         if (DECL_P (cand->fn))
+           obj = convert_like_with_context (cand->convs[0], obj, cand->fn,
+                                            -1, complain);
+         else
+           obj = convert_like (cand->convs[0], obj, complain);
          obj = convert_from_reference (obj);
          result = cp_build_function_call_vec (obj, args, complain);
        }
@@ -6547,7 +6556,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
       expr = decay_conversion (expr, complain);
       if (expr == error_mark_node)
        {
-         if (complain)
+         if (complain & tf_error)
            {
              maybe_print_user_conv_context (convs);
              if (fn)
@@ -6641,7 +6650,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
               for a non-reference copy-initialization (8.5).  */
 
            tree type = TREE_TYPE (ref_type);
-           cp_lvalue_kind lvalue = real_lvalue_p (expr);
+           cp_lvalue_kind lvalue = lvalue_kind (expr);
 
            gcc_assert (same_type_ignoring_top_level_qualifiers_p
                        (type, next_conversion (convs)->type));
@@ -7170,10 +7179,11 @@ static bool
 unsafe_copy_elision_p (tree target, tree exp)
 {
   tree type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
-  if (type == CLASSTYPE_AS_BASE (type))
+  /* It's safe to elide the copy for a class with no tail padding.  */
+  if (tree_int_cst_equal (TYPE_SIZE (type), CLASSTYPE_SIZE (type)))
     return false;
-  if (!is_base_field_ref (target)
-      && resolves_to_fixed_type_p (target, NULL))
+  /* It's safe to elide the copy if we aren't initializing a base object.  */
+  if (!is_base_field_ref (target))
     return false;
   tree init = TARGET_EXPR_INITIAL (exp);
   /* build_compound_expr pushes COMPOUND_EXPR inside TARGET_EXPR.  */
index 2c5ce73..1687c18 100644 (file)
@@ -4172,7 +4172,8 @@ walk_subobject_offsets (tree type,
       /* Avoid recursing into objects that are not interesting.  */
       if (!CLASS_TYPE_P (element_type)
          || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type)
-         || !domain)
+         || !domain
+         || integer_minus_onep (TYPE_MAX_VALUE (domain)))
        return 0;
 
       /* Step through each of the elements in the array.  */
index 55b05e7..c9beed1 100644 (file)
@@ -390,7 +390,12 @@ build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
        gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
     }
 
-  CONSTRUCTOR_APPEND_ELT (*vec, member, init);
+  /* Value-initialization can produce multiple initializers for the
+     same field; use the last one.  */
+  if (!vec_safe_is_empty (*vec) && (*vec)->last().index == member)
+    (*vec)->last().value = init;
+  else
+    CONSTRUCTOR_APPEND_ELT (*vec, member, init);
   return true;
 }
 
@@ -1450,9 +1455,19 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
     }
   else
     {
-      if (!result || result == error_mark_node)
+      if (result && result != error_mark_node)
+       /* OK */;
+      else if (!DECL_SAVED_TREE (fun))
+       {
+         /* When at_eof >= 2, cgraph has started throwing away
+            DECL_SAVED_TREE, so fail quietly.  FIXME we get here because of
+            late code generation for VEC_INIT_EXPR, which needs to be
+            completely reconsidered.  */
+         gcc_assert (at_eof >= 2 && ctx->quiet);
+         *non_constant_p = true;
+       }
+      else
        {
-         gcc_assert (DECL_SAVED_TREE (fun));
          tree body, parms, res;
 
          /* Reuse or create a new unshared copy of this function's body.  */
@@ -1756,6 +1771,10 @@ cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
               && (null_member_pointer_value_p (lhs)
                   || null_member_pointer_value_p (rhs)))
        r = constant_boolean_node (!is_code_eq, type);
+      else if (TREE_CODE (lhs) == PTRMEM_CST)
+       lhs = cplus_expand_constant (lhs);
+      else if (TREE_CODE (rhs) == PTRMEM_CST)
+       rhs = cplus_expand_constant (rhs);
     }
 
   if (r == NULL_TREE)
@@ -2030,40 +2049,47 @@ cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
   else
     found = (i < len);
 
-  if (!found)
+  if (found)
     {
-      if (TREE_CODE (ary) == CONSTRUCTOR
-         && CONSTRUCTOR_NO_IMPLICIT_ZERO (ary))
+      tree r;
+      if (TREE_CODE (ary) == CONSTRUCTOR)
+       r = (*CONSTRUCTOR_ELTS (ary))[i].value;
+      else if (elem_nchars == 1)
+       r = build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
+                          TREE_STRING_POINTER (ary)[i]);
+      else
        {
-         /* 'ary' is part of the aggregate initializer we're currently
-            building; if there's no initializer for this element yet,
-            that's an error.  */
-         if (!ctx->quiet)
-           error ("accessing uninitialized array element");
-         *non_constant_p = true;
-         return t;
+         tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
+         r = native_interpret_expr (type, (const unsigned char *)
+                                    TREE_STRING_POINTER (ary)
+                                    + i * elem_nchars, elem_nchars);
        }
+      if (r)
+       /* Don't VERIFY_CONSTANT here.  */
+       return r;
 
-      /* If it's within the array bounds but doesn't have an explicit
-        initializer, it's value-initialized.  */
-      tree val = build_value_init (elem_type, tf_warning_or_error);
-      return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
-                                          overflow_p);
+      /* Otherwise the element doesn't have a value yet.  */
     }
 
-  if (TREE_CODE (ary) == CONSTRUCTOR)
-    return (*CONSTRUCTOR_ELTS (ary))[i].value;
-  else if (elem_nchars == 1)
-    return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
-                         TREE_STRING_POINTER (ary)[i]);
-  else
+  /* Not found.  */
+
+  if (TREE_CODE (ary) == CONSTRUCTOR
+      && CONSTRUCTOR_NO_IMPLICIT_ZERO (ary))
     {
-      tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
-      return native_interpret_expr (type, (const unsigned char *)
-                                         TREE_STRING_POINTER (ary)
-                                         + i * elem_nchars, elem_nchars);
+      /* 'ary' is part of the aggregate initializer we're currently
+        building; if there's no initializer for this element yet,
+        that's an error.  */
+      if (!ctx->quiet)
+       error ("accessing uninitialized array element");
+      *non_constant_p = true;
+      return t;
     }
-  /* Don't VERIFY_CONSTANT here.  */
+
+  /* If it's within the array bounds but doesn't have an explicit
+     initializer, it's value-initialized.  */
+  tree val = build_value_init (elem_type, tf_warning_or_error);
+  return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
+                                      overflow_p);
 }
 
 /* Subroutine of cxx_eval_constant_expression.
@@ -3288,6 +3314,12 @@ label_matches (tree *jump_target, tree_stmt_iterator i,
        {
          if (!CASE_LOW (stmt))
            default_label = i;
+         else if (CASE_HIGH (stmt))
+           {
+             if (tree_int_cst_le (CASE_LOW (stmt), *jump_target)
+                 && tree_int_cst_le (*jump_target, CASE_HIGH (stmt)))
+               return true;
+           }
          else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
            return true;
        }
@@ -3720,6 +3752,19 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
 
     case REALPART_EXPR:
     case IMAGPART_EXPR:
+      if (lval)
+       {
+         r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
+                                           non_constant_p, overflow_p);
+         if (r == error_mark_node)
+           ;
+         else if (r == TREE_OPERAND (t, 0))
+           r = t;
+         else
+           r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r);
+         break;
+       }
+      /* FALLTHRU */
     case CONJ_EXPR:
     case FIX_TRUNC_EXPR:
     case FLOAT_EXPR:
@@ -5146,10 +5191,12 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict,
     case GOTO_EXPR:
       {
        tree *target = &TREE_OPERAND (t, 0);
-       /* Gotos representing break and continue are OK; we should have
-          rejected other gotos in parsing.  */
-       gcc_assert (breaks (target) || continues (target));
-       return true;
+       /* Gotos representing break and continue are OK.  */
+       if (breaks (target) || continues (target))
+         return true;
+       if (flags & tf_error)
+         error ("%<goto%> is not a constant-expression");
+       return false;
       }
 
     default:
@@ -5157,7 +5204,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict,
        return false;
 
       sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
-      gcc_unreachable();
+      gcc_unreachable ();
       return false;
     }
 #undef RECUR
index 5e42fa9..09ae301 100644 (file)
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
+#include "timevar.h"
 #include "hash-set.h"
 #include "machmode.h"
 #include "vec.h"
@@ -55,7 +56,9 @@ along with GCC; see the file COPYING3.  If not see
 static inline bool
 constraint_p (tree_code c)
 {
-  return (PRED_CONSTR <= c && c <= DISJ_CONSTR) || c == ERROR_MARK;
+  return ((PRED_CONSTR <= c && c <= DISJ_CONSTR)
+          || c == EXPR_PACK_EXPANSION
+          || c == ERROR_MARK);
 }
 
 /* Returns true if T is a constraint. Note that error_mark_node
@@ -67,14 +70,6 @@ constraint_p (tree t)
   return constraint_p (TREE_CODE (t));
 }
 
-/* Make a predicate constraint from the given expression. */
-
-tree
-make_predicate_constraint (tree expr)
-{
-  return build_nt (PRED_CONSTR, expr);
-}
-
 /* Returns the conjunction of two constraints A and B. Note that
    conjoining a non-null constraint with NULL_TREE is an identity
    operation. That is, for non-null A,
@@ -132,6 +127,53 @@ function_concept_check_p (tree t)
   return false;
 }
 
+/* Returns true if any of the arguments in the template
+   argument list is a wildcard or wildcard pack.  */
+
+bool
+contains_wildcard_p (tree args)
+{
+  for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
+    {
+      tree arg = TREE_VEC_ELT (args, i);
+      if (TREE_CODE (arg) == WILDCARD_DECL)
+       return true;
+    }
+  return false;
+}
+
+/* Build a new call expression, but don't actually generate a
+   new function call. We just want the tree, not the semantics.  */
+
+inline tree
+build_call_check (tree id)
+{
+  ++processing_template_decl;
+  vec<tree, va_gc> *fargs = make_tree_vector();
+  tree call = finish_call_expr (id, &fargs, false, false, tf_none);
+  release_tree_vector (fargs);
+  --processing_template_decl;
+  return call;
+}
+
+/* Build an expression that will check a variable concept. If any
+   argument contains a wildcard, don't try to finish the variable
+   template because we can't substitute into a non-existent
+   declaration.  */
+
+tree
+build_variable_check (tree id)
+{
+  gcc_assert (TREE_CODE (id) == TEMPLATE_ID_EXPR);
+  if (contains_wildcard_p (TREE_OPERAND (id, 1)))
+    return id;
+
+  ++processing_template_decl;
+  tree var = finish_template_variable (id);
+  --processing_template_decl;
+  return var;
+}
+
 /*---------------------------------------------------------------------------
                     Resolution of qualified concept names
 ---------------------------------------------------------------------------*/
@@ -160,6 +202,7 @@ function_concept_check_p (tree t)
 static tree
 resolve_constraint_check (tree ovl, tree args)
 {
+  int nerrs = 0;
   tree cands = NULL_TREE;
   for (tree p = ovl; p != NULL_TREE; p = OVL_NEXT (p))
     {
@@ -185,15 +228,21 @@ resolve_constraint_check (tree ovl, tree args)
       ++processing_template_decl;
       tree parms = TREE_VALUE (DECL_TEMPLATE_PARMS (tmpl));
       if (tree subst = coerce_template_parms (parms, args, tmpl))
-        if (subst != error_mark_node)
-          cands = tree_cons (subst, fn, cands);
+        {
+          if (subst == error_mark_node)
+            ++nerrs;
+          else
+           cands = tree_cons (subst, fn, cands);
+        }
       --processing_template_decl;
     }
 
-  // If we didn't find a unique candidate, then this is
-  // not a constraint check.
-  if (!cands || TREE_CHAIN (cands))
-    return NULL_TREE;
+  if (!cands)
+    /* We either had no candidates or failed deductions.  */
+    return nerrs ? error_mark_node : NULL_TREE;
+  else if (TREE_CHAIN (cands))
+    /* There are multiple candidates.  */
+    return error_mark_node;
 
   return cands;
 }
@@ -250,14 +299,16 @@ resolve_variable_concept_check (tree id)
      assuming that it works.  Note that failing to deduce
      will result in diagnostics.  */
   tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
+  ++processing_template_decl;
   tree result = coerce_template_parms (parms, args, tmpl);
+  --processing_template_decl;
   if (result != error_mark_node)
     {
       tree decl = DECL_TEMPLATE_RESULT (tmpl);
       return build_tree_list (result, decl);
     }
   else
-    return NULL_TREE;
+    return error_mark_node;
 }
 
 
@@ -315,45 +366,119 @@ deduce_concept_introduction (tree expr)
 namespace {
 
 /*---------------------------------------------------------------------------
-                       Lifting of concept definitions
+                       Constraint implication learning
 ---------------------------------------------------------------------------*/
 
-/* Part of constraint normalization.  Whenever we find a reference to
-   a variable concept or a call to a function concept, we lift or
-   inline that concept's definition into the constraint.  This ensures
-   that constraints are always checked in the immediate instantiation
-   context. */
+/* The implication context determines how we memoize concept checks.
+   Given two checks C1 and C2, the direction of implication depends
+   on whether we are learning implications of a conjunction or disjunction.
+   For example:
 
-tree lift_expression (tree);
+      template<typename T> concept bool C = ...;
+      template<typenaem T> concept bool D = C<T> && true;
 
-/* If the tree T has operands, then lift any concepts out of them.  */
-tree
-lift_operands (tree t)
+   From this, we can learn that D<T> implies C<T>. We cannot learn,
+   without further testing, that C<T> does not imply D<T>. If, for
+   example, C<T> were defined as true, then these constraints would
+   be logically equivalent.
+
+   In rare cases, we may start with a logical equivalence. For example:
+
+      template<typename T> concept bool C = ...;
+      template<typename T> concept bool D = C<T>;
+
+   Here, we learn that C<T> implies D<T> and vice versa.   */
+
+enum implication_context
+{
+  conjunction_cxt, /* C1 implies C2. */
+  disjunction_cxt, /* C2 implies C1. */
+  equivalence_cxt  /* C1 implies C2, C2 implies C1. */
+};
+
+void learn_implications(tree, tree, implication_context);
+
+void
+learn_implication (tree parent, tree child, implication_context cxt)
 {
-  if (int n = tree_operand_length (t))
+  switch (cxt)
     {
-      t = copy_node (t);
-      for (int i = 0; i < n; ++i)
-        TREE_OPERAND (t, i) = lift_expression (TREE_OPERAND (t, i));
+      case conjunction_cxt:
+        save_subsumption_result (parent, child, true);
+        break;
+      case disjunction_cxt:
+        save_subsumption_result (child, parent, true);
+        break;
+      case equivalence_cxt:
+        save_subsumption_result (parent, child, true);
+        save_subsumption_result (child, parent, true);
+        break;
     }
-  return t;
 }
 
-/* Recursively lift all operands of the function call. Also, check
-   that the call target is not accidentally a variable concept
-   since that's ill-formed.  */
-tree
-lift_function_call (tree t)
+void
+learn_logical_operation (tree parent, tree constr, implication_context cxt)
 {
-  gcc_assert (TREE_CODE (t) == CALL_EXPR);
-  gcc_assert (!VAR_P (CALL_EXPR_FN (t)));
-  return lift_operands (t);
+  learn_implications (parent, TREE_OPERAND (constr, 0), cxt);
+  learn_implications (parent, TREE_OPERAND (constr, 1), cxt);
 }
 
-/* Inline a function (concept) definition by substituting
-   ARGS into its body. */
+void
+learn_implications (tree parent, tree constr, implication_context cxt)
+{
+  switch (TREE_CODE (constr))
+    {
+      case CHECK_CONSTR:
+        return learn_implication (parent, constr, cxt);
+
+      case CONJ_CONSTR:
+        if (cxt == disjunction_cxt)
+          return;
+        return learn_logical_operation (parent, constr, cxt);
+
+      case DISJ_CONSTR:
+        if (cxt == conjunction_cxt)
+          return;
+        return learn_logical_operation (parent, constr, cxt);
+
+      default:
+        break;
+    }
+}
+
+/* Quickly scan the top-level constraints of CONSTR to learn and
+   cache logical relations between concepts.  The search does not
+   include conjunctions of disjunctions or vice versa.  */
+
+void
+learn_implications (tree tmpl, tree args, tree constr)
+{
+  /* Don't memoize relations between non-dependent arguemnts. It's not
+     helpful. */
+  if (!uses_template_parms (args))
+    return;
+
+  /* Build a check constraint for the purpose of caching. */
+  tree parent = build_nt (CHECK_CONSTR, tmpl, args);
+
+  /* Start learning based on the kind of the top-level contraint. */
+  if (TREE_CODE (constr) == CONJ_CONSTR)
+    return learn_logical_operation (parent, constr, conjunction_cxt);
+  else if (TREE_CODE (constr) == DISJ_CONSTR)
+    return learn_logical_operation (parent, constr, disjunction_cxt);
+  else if (TREE_CODE (constr) == CHECK_CONSTR)
+    /* This is the rare concept alias case. */
+    return learn_implication (parent, constr, equivalence_cxt);
+}
+
+/*---------------------------------------------------------------------------
+                       Expansion of concept definitions
+---------------------------------------------------------------------------*/
+
+/* Returns the expression of a function concept. */
+
 tree
-lift_function_definition (tree fn, tree args)
+get_returned_expression (tree fn)
 {
   /* Extract the body of the function minus the return expression.  */
   tree body = DECL_SAVED_TREE (fn);
@@ -364,202 +489,107 @@ lift_function_definition (tree fn, tree args)
   if (TREE_CODE (body) != RETURN_EXPR)
     return error_mark_node;
 
-  body = TREE_OPERAND (body, 0);
-
-  /* Substitute template arguments to produce our inline expression.  */
-  tree result = tsubst_expr (body, args, tf_none, NULL_TREE, false);
-  if (result == error_mark_node)
-    return error_mark_node;
-
-  return lift_expression (result);
+  return TREE_OPERAND (body, 0);
 }
 
-/* Inline a reference to a function concept.  */
-tree
-lift_call_expression (tree t)
-{
-  /* Try to resolve this function call as a concept.  If not, then
-     it can be returned as-is.  */
-  tree check = resolve_constraint_check (t);
-  if (!check)
-    return lift_function_call (t);
-  if (check == error_mark_node)
-    return error_mark_node;
-
-  tree fn = TREE_VALUE (check);
-  tree args = TREE_PURPOSE (check);
-  return lift_function_definition (fn, args);
-}
+/* Returns the initializer of a variable concept. */
 
 tree
-lift_variable_initializer (tree var, tree args)
+get_variable_initializer (tree var)
 {
-  /* Extract the body from the variable initializer.  */
   tree init = DECL_INITIAL (var);
   if (!init)
     return error_mark_node;
+  return init;
+}
 
-  /* Substitute the arguments to form our new inline expression.  */
-  tree result = tsubst_expr (init, args, tf_none, NULL_TREE, false);
-  if (result == error_mark_node)
-    return error_mark_node;
+/* Returns the definition of a variable or function concept.  */
 
-  return lift_expression (result);
+tree
+get_concept_definition (tree decl)
+{
+  if (TREE_CODE (decl) == VAR_DECL)
+    return get_variable_initializer (decl);
+  else if (TREE_CODE (decl) == FUNCTION_DECL)
+    return get_returned_expression (decl);
+  gcc_unreachable ();
 }
 
-/* Determine if a template-id is a variable concept and inline.  */
+int expansion_level = 0;
 
-tree
-lift_template_id (tree t)
+struct expanding_concept_sentinel
 {
-  if (tree info = resolve_variable_concept_check (t))
-    {
-      tree decl = TREE_VALUE (info);
-      tree args = TREE_PURPOSE (info);
-      return lift_variable_initializer (decl, args);
-    }
+  expanding_concept_sentinel ()
+  {
+    ++expansion_level;
+  }
 
-  /* Check that we didn't refer to a function concept like
-      a variable.
+  ~expanding_concept_sentinel()
+  {
+    --expansion_level;
+  }
+};
 
-     TODO: Add a note on how to fix this.  */
-  tree tmpl = TREE_OPERAND (t, 0);
-  if (TREE_CODE (tmpl) == OVERLOAD)
-    {
-      tree fn = OVL_FUNCTION (tmpl);
-      if (TREE_CODE (fn) == TEMPLATE_DECL
-          && DECL_DECLARED_CONCEPT_P (DECL_TEMPLATE_RESULT (fn)))
-        {
-          error_at (location_of (t),
-                   "invalid reference to function concept %qD", fn);
-          return error_mark_node;
-        }
-    }
 
-  return t;
-}
+} /* namespace */
 
-/* Lift any constraints appearing in a nested requirement of
-   a requires-expression. */
-tree
-lift_requires_expression (tree t)
+/* Returns true when a concept is being expanded.  */
+
+bool
+expanding_concept()
 {
-  tree parms = TREE_OPERAND (t, 0);
-  tree reqs = TREE_OPERAND (t, 1);
-  tree result = NULL_TREE;
-  for (; reqs != NULL_TREE; reqs = TREE_CHAIN (reqs))
-    {
-      tree req = TREE_VALUE (reqs);
-      if (TREE_CODE (req) == NESTED_REQ)
-        {
-          tree expr = lift_expression (TREE_OPERAND (req, 0));
-          req = finish_nested_requirement (expr);
-        }
-      result = tree_cons (NULL_TREE, req, result);
-    }
-  return finish_requires_expr (parms, result);
+  return expansion_level > 0;
 }
 
-/* Inline references to specializations of concepts.  */
+/* Expand a concept declaration (not a template) and its arguments to
+   a constraint defined by the concept's initializer or definition.  */
+
 tree
-lift_expression (tree t)
+expand_concept (tree decl, tree args)
 {
-  if (t == NULL_TREE)
-    return NULL_TREE;
+  expanding_concept_sentinel sentinel;
 
-  if (t == error_mark_node)
-    return error_mark_node;
+  if (TREE_CODE (decl) == TEMPLATE_DECL)
+    decl = DECL_TEMPLATE_RESULT (decl);
+  tree tmpl = DECL_TI_TEMPLATE (decl);
 
-  /* Concepts can be referred to by call or variable. All other
-     nodes are preserved.  */
-  switch (TREE_CODE (t))
-    {
-    case CALL_EXPR:
-      return lift_call_expression (t);
+  /* Check for a previous specialization. */
+  if (tree spec = get_concept_expansion (tmpl, args))
+    return spec;
 
-    case TEMPLATE_ID_EXPR:
-      return lift_template_id (t);
+  /* Substitute the arguments to form a new definition expression.  */
+  tree def = get_concept_definition (decl);
 
-    case REQUIRES_EXPR:
-      return lift_requires_expression (t);
-
-    case EXPR_PACK_EXPANSION:
-      /* Use copy_node rather than make_pack_expansion so that
-        PACK_EXPANSION_PARAMETER_PACKS stays the same.  */
-      t = copy_node (t);
-      SET_PACK_EXPANSION_PATTERN
-       (t, lift_expression (PACK_EXPANSION_PATTERN (t)));
-      return t;
-
-    case TREE_LIST:
-      {
-        t = copy_node (t);
-        TREE_VALUE (t) = lift_expression (TREE_VALUE (t));
-        TREE_CHAIN (t) = lift_expression (TREE_CHAIN (t));
-        return t;
-      }
+  ++processing_template_decl;
+  tree result = tsubst_expr (def, args, tf_none, NULL_TREE, true);
+  --processing_template_decl;
+  if (result == error_mark_node)
+    return error_mark_node;
 
-    default:
-      return lift_operands (t);
-    }
+  /* And lastly, normalize it, check for implications, and save
+     the specialization for later.  */
+  tree norm = normalize_expression (result);
+  learn_implications (tmpl, args, norm);
+  return save_concept_expansion (tmpl, args, norm);
 }
 
-/*---------------------------------------------------------------------------
-                Transformation of expressions into constraints
----------------------------------------------------------------------------*/
-
-/* Part of constraint normalization. The following functions rewrite
-   expressions as constraints.  */
-
-tree transform_expression (tree);
-
-/* Check that the logical-or or logical-and expression does
-   not result in a call to a user-defined user-defined operator
-   (temp.constr.op). Returns true if the logical operator is
-   admissible and false otherwise. */
 
-bool
-check_logical_expr (tree t)
-{
-  /* We can't do much for type dependent expressions. */
-  if (type_dependent_expression_p (t))
-    return true;
+/*---------------------------------------------------------------------------
+                Stepwise normalization of expressions
 
-  /* Resolve the logical operator. Note that template processing is
-     disabled so we get the actual call or target expression back.
-     not_processing_template_sentinel sentinel.
-
-     TODO: This check is actually subsumed by the requirement that
-     constraint operands have type bool. I'm not sure we need it
-     unless we allow conversions.  */
-  tree arg1 = TREE_OPERAND (t, 0);
-  tree arg2 = TREE_OPERAND (t, 1);
-  tree ovl = NULL_TREE;
-  tree expr = build_x_binary_op (EXPR_LOC_OR_LOC (arg2, input_location),
-                                 TREE_CODE (t),
-                                 arg1, TREE_CODE (arg1),
-                                 arg2, TREE_CODE (arg2),
-                                 &ovl,
-                                 tf_none);
-  if (TREE_CODE (expr) != TREE_CODE (t))
-    {
-      error ("user-defined operator %qs in constraint %q+E",
-            operator_name_info[TREE_CODE (t)].name, t);
-      return false;
-    }
-  return true;
-}
+This set of functions will transform an expression into a constraint
+in a sequence of steps. Normalization does not not look into concept
+definitions.
+---------------------------------------------------------------------------*/
 
 /* Transform a logical-or or logical-and expression into either
    a conjunction or disjunction. */
 
 tree
-xform_logical (tree t, tree_code c)
+normalize_logical_operation (tree t, tree_code c)
 {
-  if (!check_logical_expr (t))
-    return error_mark_node;
-  tree t0 = transform_expression (TREE_OPERAND (t, 0));
-  tree t1 = transform_expression (TREE_OPERAND (t, 1));
+  tree t0 = normalize_expression (TREE_OPERAND (t, 0));
+  tree t1 = normalize_expression (TREE_OPERAND (t, 1));
   return build_nt (c, t0, t1);
 }
 
@@ -567,7 +597,7 @@ xform_logical (tree t, tree_code c)
    for its expression. */
 
 inline tree
-xform_simple_requirement (tree t)
+normalize_simple_requirement (tree t)
 {
   return build_nt (EXPR_CONSTR, TREE_OPERAND (t, 0));
 }
@@ -575,7 +605,7 @@ xform_simple_requirement (tree t)
 /* A type requirement T introduce a type constraint for its type.  */
 
 inline tree
-xform_type_requirement (tree t)
+normalize_type_requirement (tree t)
 {
   return build_nt (TYPE_CONSTR, TREE_OPERAND (t, 0));
 }
@@ -589,7 +619,7 @@ xform_type_requirement (tree t)
    includes an exception constraint.  */
 
 tree
-xform_compound_requirement (tree t)
+normalize_compound_requirement (tree t)
 {
   tree expr = TREE_OPERAND (t, 0);
   tree constr = build_nt (EXPR_CONSTR, TREE_OPERAND (t, 0));
@@ -627,29 +657,29 @@ xform_compound_requirement (tree t)
    will guarantee that the constraint is never satisfied.  */
 
 inline tree
-xform_nested_requirement (tree t)
+normalize_nested_requirement (tree t)
 {
-  return transform_expression (TREE_OPERAND (t, 0));
+  return normalize_expression (TREE_OPERAND (t, 0));
 }
 
 /* Transform a requirement T into one or more constraints.  */
 
 tree
-xform_requirement (tree t)
+normalize_requirement (tree t)
 {
   switch (TREE_CODE (t))
     {
     case SIMPLE_REQ:
-      return xform_simple_requirement (t);
+      return normalize_simple_requirement (t);
 
     case TYPE_REQ:
-      return xform_type_requirement (t);
+      return normalize_type_requirement (t);
 
     case COMPOUND_REQ:
-      return xform_compound_requirement (t);
+      return normalize_compound_requirement (t);
 
     case NESTED_REQ:
-      return xform_nested_requirement (t);
+      return normalize_nested_requirement (t);
 
     default:
       gcc_unreachable ();
@@ -661,46 +691,165 @@ xform_requirement (tree t)
    constraints. */
 
 tree
-xform_requirements (tree t)
+normalize_requirements (tree t)
 {
   tree result = NULL_TREE;
   for (; t; t = TREE_CHAIN (t))
     {
-      tree constr = xform_requirement (TREE_VALUE (t));
+      tree constr = normalize_requirement (TREE_VALUE (t));
       result = conjoin_constraints (result, constr);
     }
   return result;
 }
 
-/* Transform a requires-expression into a parameterized constraint.  */
+/* The normal form of a requires-expression is a parameterized
+   constraint having the same parameters and a conjunction of
+   constraints representing the normal form of requirements.  */
 
 tree
-xform_requires_expr (tree t)
+normalize_requires_expression (tree t)
 {
-  tree operand = xform_requirements (TREE_OPERAND (t, 1));
+  tree operand = normalize_requirements (TREE_OPERAND (t, 1));
   if (tree parms = TREE_OPERAND (t, 0))
     return build_nt (PARM_CONSTR, parms, operand);
   else
     return operand;
 }
 
-/* Transform an expression into an atomic predicate constraint.
-   After substitution, the expression of a predicate constraint
-   shall have type bool (temp.constr.pred).  For non-type-dependent
-   expressions, we can check that now.  */
+/* For a template-id referring to a variable concept, returns
+   a check constraint. Otherwise, returns a predicate constraint. */
 
 tree
-xform_atomic (tree t)
+normalize_template_id_expression (tree t)
 {
-  if (TREE_TYPE (t) && !type_dependent_expression_p (t))
-  {
-    tree type = cv_unqualified (TREE_TYPE (t));
-    if (!same_type_p (type, boolean_type_node))
-      {
-        error ("predicate constraint %q+E does not have type %<bool%>", t);
+  if (tree info = resolve_variable_concept_check (t))
+    {
+      if (info == error_mark_node)
+        {
+          /* We get this when the template arguments don't match
+             the variable concept. */
+          error ("invalid reference to concept %qE", t);
+          return error_mark_node;
+        }
+
+      tree decl = TREE_VALUE (info);
+      tree args = TREE_PURPOSE (info);
+      return build_nt (CHECK_CONSTR, decl, args);
+    }
+
+  /* Check that we didn't refer to a function concept like a variable.  */
+  tree tmpl = TREE_OPERAND (t, 0);
+  if (TREE_CODE (tmpl) == OVERLOAD)
+    {
+      tree fn = OVL_FUNCTION (tmpl);
+      if (TREE_CODE (fn) == TEMPLATE_DECL
+          && DECL_DECLARED_CONCEPT_P (DECL_TEMPLATE_RESULT (fn)))
+        {
+          error_at (location_of (t),
+                    "invalid reference to function concept %qD", fn);
+          return error_mark_node;
+        }
+    }
+
+  return build_nt (PRED_CONSTR, t);
+}
+
+/* For a call expression to a function concept, returns a check
+   constraint. Otherwise, returns a predicate constraint. */
+
+tree
+normalize_call_expression (tree t)
+{
+  /* Try to resolve this function call as a concept.  If not, then
+     it can be returned as a predicate constraint.  */
+  tree check = resolve_constraint_check (t);
+  if (!check)
+    return build_nt (PRED_CONSTR, t);
+  if (check == error_mark_node)
+    {
+      /* TODO: Improve diagnostics. We could report why the reference
+         is invalid. */
+      error ("invalid reference to concept %qE", t);
+      return error_mark_node;
+    }
+
+  tree fn = TREE_VALUE (check);
+  tree args = TREE_PURPOSE (check);
+  return build_nt (CHECK_CONSTR, fn, args);
+}
+
+/* If T is a call to an overloaded && or || operator, diagnose that
+   as a non-SFINAEable error.  Returns true if an error is emitted.
+
+   TODO: It would be better to diagnose this at the point of definition,
+   if possible. Perhaps we should immediately do a first-pass normalization
+   of a concept definition to catch obvious non-dependent errors like
+   this.  */
+
+bool
+check_for_logical_overloads (tree t)
+{
+  if (TREE_CODE (t) != CALL_EXPR)
+    return false;
+
+  tree fn = CALL_EXPR_FN (t);
+
+  /* For member calls, try extracting the function from the
+     component ref.  */
+  if (TREE_CODE (fn) == COMPONENT_REF)
+    {
+      fn = TREE_OPERAND (fn, 1);
+      if (TREE_CODE (fn) == BASELINK)
+        fn = BASELINK_FUNCTIONS (fn);
+    }
+
+  if (TREE_CODE (fn) != FUNCTION_DECL)
+    return false;
+
+  if (DECL_OVERLOADED_OPERATOR_P (fn))
+    {
+      location_t loc = EXPR_LOC_OR_LOC (t, input_location);
+      error_at (loc, "constraint %qE, uses overloaded operator", t);
+      return true;
+    }
+
+  return false;
+}
+
+/* The normal form of an atom depends on the expression. The normal
+   form of a function call to a function concept is a check constraint
+   for that concept. The normal form of a reference to a variable
+   concept is a check constraint for that concept. Otherwise, the
+   constraint is a predicate constraint.  */
+
+tree
+normalize_atom (tree t)
+{
+  /* We can get constraints pushed down through pack expansions, so
+     just return them. */
+  if (constraint_p (t))
+    return t;
+
+  tree type = TREE_TYPE (t);
+  if (!type || type_unknown_p (t) || TREE_CODE (type) == TEMPLATE_TYPE_PARM)
+    ;
+  else if (!dependent_type_p (type))
+    {
+      if (check_for_logical_overloads (t))
         return error_mark_node;
-      }
-  }
+
+      type = cv_unqualified (type);
+      if (!same_type_p (type, boolean_type_node))
+       {
+         error ("predicate constraint %q+E does not have type %<bool%>", t);
+         return error_mark_node;
+       }
+    }
+
+  if (TREE_CODE (t) == TEMPLATE_ID_EXPR)
+    return normalize_template_id_expression (t);
+  if (TREE_CODE (t) == CALL_EXPR)
+    return normalize_call_expression (t);
   return build_nt (PRED_CONSTR, t);
 }
 
@@ -735,49 +884,48 @@ push_down_pack_expansion (tree exp, tree pat)
    leaves of the constraint so that partial ordering will work.  */
 
 tree
-xform_pack_expansion (tree t)
+normalize_pack_expansion (tree t)
 {
-  tree pat = transform_expression (PACK_EXPANSION_PATTERN (t));
+  tree pat = normalize_expression (PACK_EXPANSION_PATTERN (t));
   return push_down_pack_expansion (t, pat);
 }
 
 /* Transform an expression into a constraint.  */
 
 tree
-xform_expr (tree t)
+normalize_any_expression (tree t)
 {
   switch (TREE_CODE (t))
     {
     case TRUTH_ANDIF_EXPR:
-      return xform_logical (t, CONJ_CONSTR);
+      return normalize_logical_operation (t, CONJ_CONSTR);
 
     case TRUTH_ORIF_EXPR:
-      return xform_logical (t, DISJ_CONSTR);
+      return normalize_logical_operation (t, DISJ_CONSTR);
 
     case REQUIRES_EXPR:
-      return xform_requires_expr (t);
+      return normalize_requires_expression (t);
 
     case BIND_EXPR:
-      return transform_expression (BIND_EXPR_BODY (t));
+      return normalize_expression (BIND_EXPR_BODY (t));
 
     case EXPR_PACK_EXPANSION:
-      return xform_pack_expansion (t);
+      return normalize_pack_expansion (t);
 
     default:
       /* All other constraints are atomic. */
-      return xform_atomic (t);
+      return normalize_atom (t);
     }
 }
 
 /* Transform a statement into an expression.  */
-
 tree
-xform_stmt (tree t)
+normalize_any_statement (tree t)
 {
   switch (TREE_CODE (t))
     {
     case RETURN_EXPR:
-      return transform_expression (TREE_OPERAND (t, 0));
+      return normalize_expression (TREE_OPERAND (t, 0));
     default:
       gcc_unreachable ();
     }
@@ -787,24 +935,22 @@ xform_stmt (tree t)
 /* Reduction rules for the declaration T.  */
 
 tree
-xform_decl (tree t)
+normalize_any_declaration (tree t)
 {
   switch (TREE_CODE (t))
     {
     case VAR_DECL:
-      return xform_atomic (t);
+      return normalize_atom (t);
     default:
       gcc_unreachable ();
     }
   return error_mark_node;
 }
 
-/* Transform a lifted expression into a constraint. This either
-   returns a constraint, or it returns error_mark_node when
-   a constraint cannot be formed.  */
+/* Returns the normal form of a constraint expression. */
 
 tree
-transform_expression (tree t)
+normalize_expression (tree t)
 {
   if (!t)
     return NULL_TREE;
@@ -818,20 +964,20 @@ transform_expression (tree t)
     case tcc_binary:
     case tcc_expression:
     case tcc_vl_exp:
-      return xform_expr (t);
+      return normalize_any_expression (t);
 
     case tcc_statement:
-      return xform_stmt (t);
+      return normalize_any_statement (t);
 
     case tcc_declaration:
-      return xform_decl (t);
+      return normalize_any_declaration (t);
 
     case tcc_exceptional:
     case tcc_constant:
     case tcc_reference:
     case tcc_comparison:
       /* These are all atomic predicate constraints. */
-      return xform_atomic (t);
+      return normalize_atom (t);
 
     default:
       /* Unhandled node kind. */
@@ -840,6 +986,7 @@ transform_expression (tree t)
   return error_mark_node;
 }
 
+
 /*---------------------------------------------------------------------------
                         Constraint normalization
 ---------------------------------------------------------------------------*/
@@ -879,8 +1026,7 @@ normalize_predicate_constraint (tree t)
 {
   ++processing_template_decl;
   tree expr = PRED_CONSTR_EXPR (t);
-  tree lifted = lift_expression (expr);
-  tree constr = transform_expression (lifted);
+  tree constr = normalize_expression (expr);
   --processing_template_decl;
   return constr;
 }
@@ -938,7 +1084,6 @@ normalize_constraint (tree t)
   return error_mark_node;
 }
 
-} /* namespace */
 
 
 // -------------------------------------------------------------------------- //
@@ -1028,61 +1173,11 @@ build_constraints (tree tmpl_reqs, tree decl_reqs)
   ci->declarator_reqs = decl_reqs;
   ci->associated_constr = conjoin_constraints (tmpl_reqs, decl_reqs);
 
-  ++processing_template_decl;
-  ci->normalized_constr = normalize_constraint (ci->associated_constr);
-  --processing_template_decl;
-
-  ci->assumptions = decompose_assumptions (ci->normalized_constr);
   return (tree)ci;
 }
 
 namespace {
 
-/* Returns true if any of the arguments in the template
-   argument list is a wildcard or wildcard pack. */
-bool
-contains_wildcard_p (tree args)
-{
-  for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
-    {
-      tree arg = TREE_VEC_ELT (args, i);
-      if (TREE_CODE (arg) == WILDCARD_DECL)
-       return true;
-    }
-  return false;
-}
-
-/* Build a new call expression, but don't actually generate
-   a new function call. We just want the tree, not the
-   semantics. */
-inline tree
-build_call_check (tree id)
-{
-  ++processing_template_decl;
-  vec<tree, va_gc> *fargs = make_tree_vector();
-  tree call = finish_call_expr (id, &fargs, false, false, tf_none);
-  release_tree_vector (fargs);
-  --processing_template_decl;
-  return call;
-}
-
-/* Build an expression that will check a variable concept. If any
-   argument contains a wildcard, don't try to finish the variable
-   template because we can't substitute into a non-existent
-   declaration.  */
-tree
-build_variable_check (tree id)
-{
-  gcc_assert (TREE_CODE (id) == TEMPLATE_ID_EXPR);
-  if (contains_wildcard_p (TREE_OPERAND (id, 1)))
-    return id;
-
-  ++processing_template_decl;
-  tree var = finish_template_variable (id);
-  --processing_template_decl;
-  return var;
-}
-
 /* Construct a sequence of template arguments by prepending
    ARG to REST. Either ARG or REST may be null. */
 tree
@@ -1158,7 +1253,9 @@ build_constrained_parameter (tree cnc, tree proto, tree args)
 
    Note that the constraints are neither reduced nor decomposed.
    That is done only after the requires clause has been parsed
-   (or not). */
+   (or not).
+
+   This will always return a CHECK_CONSTR. */
 tree
 finish_shorthand_constraint (tree decl, tree constr)
 {
@@ -1207,7 +1304,7 @@ finish_shorthand_constraint (tree decl, tree constr)
       TREE_TYPE (check) = boolean_type_node;
     }
 
-  return make_predicate_constraint (check);
+  return normalize_expression (check);
 }
 
 /* Returns a conjunction of shorthand requirements for the template
@@ -1346,7 +1443,7 @@ finish_template_introduction (tree tmpl_decl, tree intro_list)
 
   /* Associate the constraint. */
   tree check = build_concept_check (tmpl_decl, NULL_TREE, check_args);
-  tree constr = make_predicate_constraint (check);
+  tree constr = normalize_expression (check);
   TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = constr;
 
   return parm_list;
@@ -1362,41 +1459,28 @@ placeholder_extract_concept_and_args (tree t, tree &tmpl, tree &args)
 {
   if (TREE_CODE (t) == TYPE_DECL)
     {
-      /* A constrained parameter.  */
-      tmpl = DECL_TI_TEMPLATE (CONSTRAINED_PARM_CONCEPT (t));
-      args = CONSTRAINED_PARM_EXTRA_ARGS (t);
+      /* A constrained parameter.  Build a constraint check
+         based on the prototype parameter and then extract the
+         arguments from that.  */
+      tree proto = CONSTRAINED_PARM_PROTOTYPE (t);
+      tree check = finish_shorthand_constraint (proto, t);
+      placeholder_extract_concept_and_args (check, tmpl, args);
       return;
     }
 
-  gcc_assert (TREE_CODE (t) == PRED_CONSTR);
-  t = PRED_CONSTR_EXPR (t);
-  gcc_assert (TREE_CODE (t) == CALL_EXPR
-              || TREE_CODE (t) == TEMPLATE_ID_EXPR
-              || VAR_P (t));
-
-  if (TREE_CODE (t) == CALL_EXPR)
-    t = CALL_EXPR_FN (t);
-  if (TREE_CODE (t) == TEMPLATE_ID_EXPR)
+  if (TREE_CODE (t) == CHECK_CONSTR)
     {
-      tmpl = TREE_OPERAND (t, 0);
-      if (TREE_CODE (tmpl) == OVERLOAD)
-       {
-         gcc_assert (OVL_CHAIN (tmpl) == NULL_TREE);
-         tmpl = OVL_FUNCTION (tmpl);
-       }
-      args = TREE_OPERAND (t, 1);
-    }
-  else if (DECL_P (t))
-    {
-      tmpl = DECL_TI_TEMPLATE (t);
-      args = DECL_TI_ARGS (t);
+      tree decl = CHECK_CONSTR_CONCEPT (t);
+      tmpl = DECL_TI_TEMPLATE (decl);
+      args = CHECK_CONSTR_ARGS (t);
+      return;
     }
-  else
+
     gcc_unreachable ();
 }
 
 /* Returns true iff the placeholders C1 and C2 are equivalent.  C1
-   and C2 can be either PRED_CONSTR_EXPR or TEMPLATE_TYPE_PARM.  */
+   and C2 can be either CHECK_CONSTR or TEMPLATE_TYPE_PARM.  */
 
 bool
 equivalent_placeholder_constraints (tree c1, tree c2)
@@ -1411,6 +1495,11 @@ equivalent_placeholder_constraints (tree c1, tree c2)
     return true;
   if (!c1 || !c2)
     return false;
+  if (c1 == error_mark_node || c2 == error_mark_node)
+    /* We get here during satisfaction; when a deduction constraint
+       fails, substitution can produce an error_mark_node for the
+       placeholder constraints.  */
+    return false;
 
   tree t1, t2, a1, a2;
   placeholder_extract_concept_and_args (c1, t1, a1);
@@ -1419,21 +1508,20 @@ equivalent_placeholder_constraints (tree c1, tree c2)
   if (t1 != t2)
     return false;
 
-  /* Skip the first argument to avoid infinite recursion on the
-     placeholder auto itself.  */
-  bool skip1 = (TREE_CODE (c1) == PRED_CONSTR);
-  bool skip2 = (TREE_CODE (c2) == PRED_CONSTR);
-
-  int len1 = (a1 ? TREE_VEC_LENGTH (a1) : 0) - skip1;
-  int len2 = (a2 ? TREE_VEC_LENGTH (a2) : 0) - skip2;
-
+  int len1 = TREE_VEC_LENGTH (a1);
+  int len2 = TREE_VEC_LENGTH (a2);
   if (len1 != len2)
     return false;
 
-  for (int i = 0; i < len1; ++i)
-    if (!cp_tree_equal (TREE_VEC_ELT (a1, i + skip1),
-                       TREE_VEC_ELT (a2, i + skip2)))
+  /* Skip the first argument so we don't infinitely recurse.
+     Also, they may differ in template parameter index.  */
+  for (int i = 1; i < len1; ++i)
+    {
+      tree t1 = TREE_VEC_ELT (a1, i);
+      tree t2 = TREE_VEC_ELT (a2, i);
+      if (!template_args_equal (t1, t2))
       return false;
+    }
   return true;
 }
 
@@ -1492,40 +1580,139 @@ tsubst_predicate_constraint (tree t, tree args,
   return build_nt (PRED_CONSTR, result);
 }
 
+/* Substitute into a check constraint. */
+
+tree
+tsubst_check_constraint (tree t, tree args,
+                         tsubst_flags_t complain, tree in_decl)
+{
+  tree decl = CHECK_CONSTR_CONCEPT (t);
+  tree tmpl = DECL_TI_TEMPLATE (decl);
+  tree targs = CHECK_CONSTR_ARGS (t);
+
+  /* Substitute through by building an template-id expression
+     and then substituting into that. */
+  tree expr = build_nt(TEMPLATE_ID_EXPR, tmpl, targs);
+  ++processing_template_decl;
+  tree result = tsubst_expr (expr, args, complain, in_decl, false);
+  --processing_template_decl;
+
+  if (result == error_mark_node)
+    return error_mark_node;
+
+  /* Extract the results and rebuild the check constraint. */
+  decl = DECL_TEMPLATE_RESULT (TREE_OPERAND (result, 0));
+  args = TREE_OPERAND (result, 1);
+
+  return build_nt (CHECK_CONSTR, decl, args);
+}
+
 /* Substitute into the conjunction of constraints. Returns
    error_mark_node if substitution into either operand fails. */
+
 tree
-tsubst_conjunction (tree t, tree args,
-                    tsubst_flags_t complain, tree in_decl)
+tsubst_logical_operator (tree t, tree args,
+                        tsubst_flags_t complain, tree in_decl)
 {
   tree t0 = TREE_OPERAND (t, 0);
   tree r0 = tsubst_constraint (t0, args, complain, in_decl);
+  if (r0 == error_mark_node)
+    return error_mark_node;
   tree t1 = TREE_OPERAND (t, 1);
   tree r1 = tsubst_constraint (t1, args, complain, in_decl);
-  return build_nt (CONJ_CONSTR, r0, r1);
+  if (r1 == error_mark_node)
+    return error_mark_node;
+  return build_nt (TREE_CODE (t), r0, r1);
+}
+
+namespace {
+
+/* Substitute ARGS into the expression constraint T.  */
+
+tree
+tsubst_expr_constr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
+{
+  cp_unevaluated guard;
+  tree expr = EXPR_CONSTR_EXPR (t);
+  tree ret = tsubst_expr (expr, args, complain, in_decl, false);
+  if (ret == error_mark_node)
+    return error_mark_node;
+  return build_nt (EXPR_CONSTR, ret);
+}
+
+/* Substitute ARGS into the type constraint T.  */
+
+tree
+tsubst_type_constr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
+{
+  tree type = TYPE_CONSTR_TYPE (t);
+  tree ret = tsubst (type, args, complain, in_decl);
+  if (ret == error_mark_node)
+    return error_mark_node;
+  return build_nt (TYPE_CONSTR, ret);
+}
+
+/* Substitute ARGS into the implicit conversion constraint T.  */
+
+tree
+tsubst_implicit_conversion_constr (tree t, tree args, tsubst_flags_t complain,
+                                   tree in_decl)
+{
+  cp_unevaluated guard;
+  tree expr = ICONV_CONSTR_EXPR (t);
+  tree type = ICONV_CONSTR_TYPE (t);
+  tree new_expr = tsubst_expr (expr, args, complain, in_decl, false);
+  if (new_expr == error_mark_node)
+    return error_mark_node;
+  tree new_type = tsubst (type, args, complain, in_decl);
+  if (new_type == error_mark_node)
+    return error_mark_node;
+  return build_nt (ICONV_CONSTR, new_expr, new_type);
+}
+
+/* Substitute ARGS into the argument deduction constraint T.  */
+
+tree
+tsubst_argument_deduction_constr (tree t, tree args, tsubst_flags_t complain,
+                                  tree in_decl)
+{
+  cp_unevaluated guard;
+  tree expr = DEDUCT_CONSTR_EXPR (t);
+  tree pattern = DEDUCT_CONSTR_PATTERN (t);
+  tree autos = DEDUCT_CONSTR_PLACEHOLDER(t);
+  tree new_expr = tsubst_expr (expr, args, complain, in_decl, false);
+  if (new_expr == error_mark_node)
+    return error_mark_node;
+  /* It seems like substituting through the pattern will not affect the
+     placeholders.  We should (?) be able to reuse the existing list
+     without any problems.  If not, then we probably want to create a
+     new list of placeholders and then instantiate the pattern using
+     those.  */
+  tree new_pattern = tsubst (pattern, args, complain, in_decl);
+  if (new_pattern == error_mark_node)
+    return error_mark_node;
+  return build_nt (DEDUCT_CONSTR, new_expr, new_pattern, autos);
 }
 
-/* Substitute ARGS into the constraint T. */
+/* Substitute ARGS into the exception constraint T.  */
+
 tree
-tsubst_constraint (tree t, tree args, tsubst_flags_t complain, tree in_decl)
+tsubst_exception_constr (tree t, tree args, tsubst_flags_t complain,
+                        tree in_decl)
 {
-  if (t == NULL_TREE)
-    return t;
-  if (TREE_CODE (t) == CONJ_CONSTR)
-    return tsubst_conjunction (t, args, complain, in_decl);
-  else if (TREE_CODE (t) == PRED_CONSTR)
-    return tsubst_predicate_constraint (t, args, complain, in_decl);
-  else
-    gcc_unreachable ();
-  return error_mark_node;
+  cp_unevaluated guard;
+  tree expr = EXCEPT_CONSTR_EXPR (t);
+  tree ret = tsubst_expr (expr, args, complain, in_decl, false);
+  if (ret == error_mark_node)
+    return error_mark_node;
+  return build_nt (EXCEPT_CONSTR, ret);
 }
 
-namespace {
-
 /* A subroutine of tsubst_constraint_variables. Register local
    specializations for each of parameter in PARMS and its
    corresponding substituted constraint variable in VARS.
    Returns VARS. */
+
 tree
 declare_constraint_vars (tree parms, tree vars)
 {
@@ -1553,6 +1740,7 @@ declare_constraint_vars (tree parms, tree vars)
    Note that the caller must establish a local specialization stack
    prior to calling this function since this substitution will
    declare the substituted parameters. */
+
 tree
 tsubst_constraint_variables (tree t, tree args,
                              tsubst_flags_t complain, tree in_decl)
@@ -1568,10 +1756,29 @@ tsubst_constraint_variables (tree t, tree args,
   return declare_constraint_vars (t, vars);
 }
 
+/* Substitute ARGS into the parameterized constraint T.  */
+
+tree
+tsubst_parameterized_constraint (tree t, tree args,
+                                tsubst_flags_t complain, tree in_decl)
+{
+  local_specialization_stack stack;
+  tree vars = tsubst_constraint_variables (PARM_CONSTR_PARMS (t),
+                                          args, complain, in_decl);
+  if (vars == error_mark_node)
+    return error_mark_node;
+  tree expr = tsubst_constraint (PARM_CONSTR_OPERAND (t), args,
+                                complain, in_decl);
+  if (expr == error_mark_node)
+    return error_mark_node;
+  return build_nt (PARM_CONSTR, vars, expr);
+}
+
 /* Substitute ARGS into the simple requirement T. Note that
    substitution may result in an ill-formed expression without
    causing the program to be ill-formed. In such cases, the
    requirement wraps an error_mark_node. */
+
 inline tree
 tsubst_simple_requirement (tree t, tree args,
                            tsubst_flags_t complain, tree in_decl)
@@ -1627,6 +1834,8 @@ tsubst_nested_requirement (tree t, tree args,
   return finish_nested_requirement (expr);
 }
 
+/* Substitute ARGS into the requirement T.  */
+
 inline tree
 tsubst_requirement (tree t, tree args, tsubst_flags_t complain, tree in_decl)
 {
@@ -1662,7 +1871,8 @@ tsubst_requirement_body (tree t, tree args,
       r = tree_cons (NULL_TREE, e, r);
       t = TREE_CHAIN (t);
     }
-  return r;
+  /* Ensure that the order of constraints is the same as the original.  */
+  return nreverse (r);
 }
 
 } /* namespace */
@@ -1696,6 +1906,7 @@ tsubst_requires_expr (tree t, tree args,
 
 /* Substitute ARGS into the constraint information CI, producing a new
    constraint record. */
+
 tree
 tsubst_constraint_info (tree t, tree args,
                         tsubst_flags_t complain, tree in_decl)
@@ -1714,6 +1925,39 @@ tsubst_constraint_info (tree t, tree args,
   return build_constraints (tmpl_constr, decl_constr);
 }
 
+/* Substitute ARGS into the constraint T. */
+
+tree
+tsubst_constraint (tree t, tree args, tsubst_flags_t complain, tree in_decl)
+{
+  if (t == NULL_TREE)
+    return t;
+  switch (TREE_CODE (t))
+  {
+  case PRED_CONSTR:
+    return tsubst_predicate_constraint (t, args, complain, in_decl);
+  case CHECK_CONSTR:
+    return tsubst_check_constraint (t, args, complain, in_decl);
+  case CONJ_CONSTR:
+  case DISJ_CONSTR:
+    return tsubst_logical_operator (t, args, complain, in_decl);
+  case PARM_CONSTR:
+    return tsubst_parameterized_constraint (t, args, complain, in_decl);
+  case EXPR_CONSTR:
+    return tsubst_expr_constr (t, args, complain, in_decl);
+  case TYPE_CONSTR:
+    return tsubst_type_constr (t, args, complain, in_decl);
+  case ICONV_CONSTR:
+    return tsubst_implicit_conversion_constr (t, args, complain, in_decl);
+  case DEDUCT_CONSTR:
+    return tsubst_argument_deduction_constr (t, args, complain, in_decl);
+  case EXCEPT_CONSTR:
+    return tsubst_exception_constr (t, args, complain, in_decl);
+  default:
+    gcc_unreachable ();
+  }
+  return error_mark_node;
+}
 
 /*---------------------------------------------------------------------------
                         Constraint satisfaction
@@ -1738,11 +1982,14 @@ satisfy_pack_expansion (tree t, tree args,
      gen_elem_of_pack_expansion_instantiation will check that each element of
      the expansion is satisfied.  */
   tree exprs = tsubst_pack_expansion (t, args, complain, in_decl);
+
   if (exprs == error_mark_node)
     return boolean_false_node;
-  int n = TREE_VEC_LENGTH (exprs);
 
-  for (int i = 0; i < n; ++i)
+  /* TODO: It might be better to normalize each expanded term
+     and evaluate them separately. That would provide better
+     opportunities for diagnostics.  */
+  for (int i = 0; i < TREE_VEC_LENGTH (exprs); ++i)
     if (TREE_VEC_ELT (exprs, i) != boolean_true_node)
       return boolean_false_node;
   return boolean_true_node;
@@ -1760,12 +2007,14 @@ tree
 satisfy_predicate_constraint (tree t, tree args,
                               tsubst_flags_t complain, tree in_decl)
 {
-  tree original = TREE_OPERAND (t, 0);
+  tree expr = TREE_OPERAND (t, 0);
 
   /* We should never have a naked pack expansion in a predicate constraint.  */
-  gcc_assert (TREE_CODE (original) != EXPR_PACK_EXPANSION);
+  gcc_assert (TREE_CODE (expr) != EXPR_PACK_EXPANSION);
 
-  tree expr = tsubst_expr (original, args, complain, in_decl, false);
+  /* If substitution into the expression fails, the constraint
+     is not satisfied.  */
+  expr = tsubst_expr (expr, args, complain, in_decl, false);
   if (expr == error_mark_node)
     return boolean_false_node;
 
@@ -1781,8 +2030,37 @@ satisfy_predicate_constraint (tree t, tree args,
       return boolean_false_node;
     }
 
-  tree value = cxx_constant_value (expr);
-  return value;
+  return cxx_constant_value (expr);
+}
+
+/* A concept check constraint like C<CARGS> is satisfied if substituting ARGS
+   into CARGS succeeds and C is satisfied for the resulting arguments.  */
+
+tree
+satisfy_check_constraint (tree t, tree args,
+                          tsubst_flags_t complain, tree in_decl)
+{
+  tree decl = CHECK_CONSTR_CONCEPT (t);
+  tree tmpl = DECL_TI_TEMPLATE (decl);
+  tree cargs = CHECK_CONSTR_ARGS (t);
+
+  /* Instantiate the concept check arguments.  */
+  tree targs = tsubst (cargs, args, tf_none, NULL_TREE);
+  if (targs == error_mark_node)
+    return boolean_false_node;
+
+  /* Search for a previous value.  */
+  if (tree prev = lookup_concept_satisfaction (tmpl, targs))
+    return prev;
+
+  /* Expand the concept; failure here implies non-satisfaction.  */
+  tree def = expand_concept (decl, targs);
+  if (def == error_mark_node)
+    return memoize_concept_satisfaction (tmpl, args, boolean_false_node);
+
+  /* Recursively satisfy the constraint.  */
+  tree result = satisfy_constraint_1 (def, targs, complain, in_decl);
+  return memoize_concept_satisfaction (tmpl, targs, result);
 }
 
 /* Check an expression constraint. The constraint is satisfied if
@@ -1803,7 +2081,6 @@ satisfy_expression_constraint (tree t, tree args,
     return boolean_false_node;
   if (!perform_deferred_access_checks (tf_none))
     return boolean_false_node;
-
   return boolean_true_node;
 }
 
@@ -1822,7 +2099,6 @@ satisfy_type_constraint (tree t, tree args,
     return boolean_false_node;
   if (!perform_deferred_access_checks (complain))
     return boolean_false_node;
-
   return boolean_true_node;
 }
 
@@ -1932,11 +2208,8 @@ satisfy_conjunction (tree t, tree args, tsubst_flags_t complain, tree in_decl)
 {
   tree t0 = satisfy_constraint_1 (TREE_OPERAND (t, 0), args, complain, in_decl);
   if (t0 == boolean_false_node)
-    return t0;
-  tree t1 = satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl);
-  if (t1 == boolean_false_node)
-    return t1;
-  return boolean_true_node;
+    return boolean_false_node;
+  return satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl);
 }
 
 /* Check that the disjunction of constraints is satisfied. Note
@@ -1949,10 +2222,7 @@ satisfy_disjunction (tree t, tree args, tsubst_flags_t complain, tree in_decl)
   tree t0 = satisfy_constraint_1 (TREE_OPERAND (t, 0), args, complain, in_decl);
   if (t0 == boolean_true_node)
     return boolean_true_node;
-  tree t1 = satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl);
-  if (t1 == boolean_true_node)
-    return boolean_true_node;
-  return boolean_false_node;
+  return satisfy_constraint_1 (TREE_OPERAND (t, 1), args, complain, in_decl);
 }
 
 /* Dispatch to an appropriate satisfaction routine depending on the
@@ -1974,6 +2244,9 @@ satisfy_constraint_1 (tree t, tree args, tsubst_flags_t complain, tree in_decl)
   case PRED_CONSTR:
     return satisfy_predicate_constraint (t, args, complain, in_decl);
 
+  case CHECK_CONSTR:
+    return satisfy_check_constraint (t, args, complain, in_decl);
+
   case EXPR_CONSTR:
     return satisfy_expression_constraint (t, args, complain, in_decl);
 
@@ -2014,15 +2287,19 @@ satisfy_constraint_1 (tree t, tree args, tsubst_flags_t complain, tree in_decl)
 tree
 satisfy_constraint (tree t, tree args)
 {
+  auto_timevar time (TV_CONSTRAINT_SAT);
+
   /* Turn off template processing. Constraint satisfaction only applies
-     to non-dependent terms, so we want full checking here.  */
-  processing_template_decl_sentinel sentinel (true);
+     to non-dependent terms, so we want to ensure full checking here.  */
+  processing_template_decl_sentinel proc (true);
+
   /* Avoid early exit in tsubst and tsubst_copy from null args; since earlier
      substitution was done with processing_template_decl forced on, there will
      be expressions that still need semantic processing, possibly buried in
      decltype or a template argument.  */
   if (args == NULL_TREE)
     args = make_tree_vec (1);
+
   return satisfy_constraint_1 (t, args, tf_none, NULL_TREE);
 }
 
@@ -2042,11 +2319,13 @@ satisfy_associated_constraints (tree ci, tree args)
   if (args && uses_template_parms (args))
     return boolean_true_node;
 
-  /* Invalid requirements cannot be satisfied. */
-  if (!valid_constraints_p (ci))
-    return boolean_false_node;
+  /* Check if we've seen a previous result. */
+  if (tree prev = lookup_constraint_satisfaction (ci, args))
+    return prev;
 
-  return satisfy_constraint (CI_NORMALIZED_CONSTRAINTS (ci), args);
+  /* Actually test for satisfaction. */
+  tree result = satisfy_constraint (CI_ASSOCIATED_CONSTRAINTS (ci), args);
+  return memoize_constraint_satisfaction (ci, args, result);
 }
 
 } /* namespace */
@@ -2059,7 +2338,7 @@ tree
 evaluate_constraints (tree constr, tree args)
 {
   gcc_assert (constraint_p (constr));
-  return satisfy_constraint (normalize_constraint (constr), args);
+  return satisfy_constraint (constr, args);
 }
 
 /* Evaluate the function concept FN by substituting its own args
@@ -2070,14 +2349,7 @@ evaluate_constraints (tree constr, tree args)
 tree
 evaluate_function_concept (tree fn, tree args)
 {
-  ++processing_template_decl;
-  /* We lift using DECL_TI_ARGS because we want to delay producing
-     non-dependent expressions until we're doing satisfaction.  We can't just
-     go without any substitution because we need to lower the level of 'auto's
-     in type deduction constraints.  */
-  tree constr = transform_expression (lift_function_definition
-                                     (fn, DECL_TI_ARGS (fn)));
-  --processing_template_decl;
+  tree constr = build_nt (CHECK_CONSTR, fn, args);
   return satisfy_constraint (constr, args);
 }
 
@@ -2087,12 +2359,9 @@ evaluate_function_concept (tree fn, tree args)
    boolean_false_node otherwise.  */
 
 tree
-evaluate_variable_concept (tree decl, tree args)
+evaluate_variable_concept (tree var, tree args)
 {
-  ++processing_template_decl;
-  tree constr = transform_expression (lift_variable_initializer
-                                     (decl, DECL_TI_ARGS (decl)));
-  --processing_template_decl;
+  tree constr = build_nt (CHECK_CONSTR, var, args);
   return satisfy_constraint (constr, args);
 }
 
@@ -2103,9 +2372,7 @@ evaluate_variable_concept (tree decl, tree args)
 tree
 evaluate_constraint_expression (tree expr, tree args)
 {
-  ++processing_template_decl;
-  tree constr = transform_expression (lift_expression (expr));
-  --processing_template_decl;
+  tree constr = normalize_expression (expr);
   return satisfy_constraint (constr, args);
 }
 
@@ -2165,7 +2432,6 @@ constraint_expression_satisfied_p (tree expr, tree args)
 
 } /* namespace */
 
-
 /*---------------------------------------------------------------------------
                 Semantic analysis of requires-expressions
 ---------------------------------------------------------------------------*/
@@ -2309,6 +2575,7 @@ equivalently_constrained (tree d1, tree d2)
 ---------------------------------------------------------------------------*/
 
 /* Returns true when the the constraints in A subsume those in B.  */
+
 bool
 subsumes_constraints (tree a, tree b)
 {
@@ -2332,6 +2599,7 @@ strictly_subsumes (tree a, tree b)
 
    Returns 1 if A is more constrained than B, -1 if B is more constrained
    than A, and 0 otherwise. */
+
 int
 more_constrained (tree d1, tree d2)
 {
@@ -2348,6 +2616,7 @@ more_constrained (tree d1, tree d2)
 /* Returns true if D1 is at least as constrained as D2. That is, the
    associated constraints of D1 subsume those of D2, or both declarations
    are unconstrained. */
+
 bool
 at_least_as_constrained (tree d1, tree d2)
 {
@@ -2359,49 +2628,71 @@ at_least_as_constrained (tree d1, tree d2)
 
 /*---------------------------------------------------------------------------
                         Constraint diagnostics
+
+FIXME: Normalize expressions into constraints before evaluating them.
+This should be the general pattern for all such diagnostics.
 ---------------------------------------------------------------------------*/
 
-/* The diagnosis of constraints performs a combination of
-   normalization and satisfaction testing. We recursively
-   walk through the conjunction (or disjunctions) of associated
-   constraints, testing each sub-expression in turn.
+/* The number of detailed constraint failures.  */
 
-   We currently restrict diagnostics to just the top-level
-   conjunctions within the associated constraints. A fully
-   recursive walk is possible, but it can generate a lot
-   of errors. */
+int constraint_errors = 0;
 
+/* Do not generate errors after diagnosing this number of constraint
+   failures.
 
-namespace {
+   FIXME: This is a really arbitrary number. Provide better control of
+   constraint diagnostics with a command line option.  */
 
-void diagnose_expression (location_t, tree, tree);
-void diagnose_constraint (location_t, tree, tree);
+int constraint_thresh = 20;
 
-/* Diagnose a conjunction of constraints. */
-void
-diagnose_logical_operation (location_t loc, tree t, tree args)
+
+/* Returns true if we should elide the diagnostic for a constraint failure.
+   This is the case when the number of errors has exceeded the pre-configured
+   threshold.  */
+
+inline bool
+elide_constraint_failure_p ()
+{
+  bool ret = constraint_thresh <= constraint_errors;
+  ++constraint_errors;
+  return ret;
+}
+
+/* Returns the number of undiagnosed errors. */
+
+inline int
+undiagnosed_constraint_failures ()
 {
-  diagnose_expression (loc, TREE_OPERAND (t, 0), args);
-  diagnose_expression (loc, TREE_OPERAND (t, 0), args);
+  return constraint_errors - constraint_thresh;
 }
 
-/* Determine if the trait expression T is satisfied by ARGS.
-   Emit a precise diagnostic if it is not. */
+/* The diagnosis of constraints performs a combination of normalization
+   and satisfaction testing. We recursively walk through the conjunction or
+   disjunction of associated constraints, testing each sub-constraint in
+   turn.  */
+
+namespace {
+
+void diagnose_constraint (location_t, tree, tree, tree);
+
+/* Emit a specific diagnostics for a failed trait.  */
+
 void
-diagnose_trait_expression (location_t loc, tree t, tree args)
+diagnose_trait_expression (location_t loc, tree, tree cur, tree args)
 {
-  if (constraint_expression_satisfied_p (t, args))
+  if (constraint_expression_satisfied_p (cur, args))
+    return;
+  if (elide_constraint_failure_p())
     return;
 
-  /* Rebuild the trait expression so we can diagnose the
-     specific failure. */
+  tree expr = PRED_CONSTR_EXPR (cur);
   ++processing_template_decl;
-  tree expr = tsubst_expr (t, args, tf_none, NULL_TREE, false);
+  expr = tsubst_expr (expr, args, tf_none, NULL_TREE, false);
   --processing_template_decl;
 
   tree t1 = TRAIT_EXPR_TYPE1 (expr);
   tree t2 = TRAIT_EXPR_TYPE2 (expr);
-  switch (TRAIT_EXPR_KIND (t))
+  switch (TRAIT_EXPR_KIND (expr))
     {
     case CPTK_HAS_NOTHROW_ASSIGN:
       inform (loc, "  %qT is not nothrow copy assignable", t1);
@@ -2471,93 +2762,52 @@ diagnose_trait_expression (location_t loc, tree t, tree args)
     }
 }
 
-/* Determine if the call expression T, when normalized as a constraint,
-   is satisfied by ARGS.
+/* Diagnose the expression of a predicate constraint.  */
 
-   TODO: If T is refers to a concept, We could recursively analyze
-   its definition to identify the exact failure, but that could
-   emit a *lot* of error messages (defeating the purpose of
-   improved diagnostics). Consider adding a flag to control the
-   depth of diagnostics. */
 void
-diagnose_call_expression (location_t loc, tree t, tree args)
+diagnose_other_expression (location_t loc, tree, tree cur, tree args)
 {
-  if (constraint_expression_satisfied_p (t, args))
+  if (constraint_expression_satisfied_p (cur, args))
     return;
-
-  /* Rebuild the expression for the purpose of diagnostics. */
-  ++processing_template_decl;
-  tree expr = tsubst_expr (t, args, tf_none, NULL_TREE, false);
-  --processing_template_decl;
-
-  /* If the function call is known to be a concept check, then
-     diagnose it differently (i.e., we may recurse). */
-  if (resolve_constraint_check (t))
-    inform (loc, "  concept %qE was not satisfied", expr);
-  else
-    inform (loc, "  %qE evaluated to false", expr);
-}
-
-/* Determine if the template-id T, when normalized as a constraint
-   is satisfied by ARGS. */
-void
-diagnose_template_id (location_t loc, tree t, tree args)
-{
-  /* Check for invalid template-ids. */
-  if (!variable_template_p (TREE_OPERAND (t, 0)))
-    {
-      inform (loc, "  invalid constraint %qE", t);
-      return;
-    }
-
-  if (constraint_expression_satisfied_p (t, args))
+  if (elide_constraint_failure_p())
     return;
+  inform (loc, "%qE evaluated to false", cur);
+}
 
-  /* Rebuild the expression for the purpose of diagnostics. */
-  ++processing_template_decl;
-  tree expr = tsubst_expr (t, args, tf_none, NULL_TREE, false);
-  --processing_template_decl;
+/* Do our best to infer meaning from predicates.  */
 
-  tree var = DECL_TEMPLATE_RESULT (TREE_OPERAND (t, 0));
-  if (DECL_DECLARED_CONCEPT_P (var))
-    inform (loc, "  concept %qE was not satisfied", expr);
+inline void
+diagnose_predicate_constraint (location_t loc, tree orig, tree cur, tree args)
+{
+  if (TREE_CODE (PRED_CONSTR_EXPR (cur)) == TRAIT_EXPR)
+    diagnose_trait_expression (loc, orig, cur, args);
   else
-    inform (loc, "  %qE evaluated to false", expr);
+    diagnose_other_expression (loc, orig, cur, args);
 }
 
-/* Determine if the requires-expression, when normalized as a
-   constraint is satisfied by ARGS.
+/* Diagnose a failed pack expansion, possibly containing constraints.  */
 
-   TODO: Build sets of expressions, types, and constraints
-   based on the requirements in T and emit specific diagnostics
-   for those. */
 void
-diagnose_requires_expression (location_t loc, tree t, tree args)
+diagnose_pack_expansion (location_t loc, tree, tree cur, tree args)
 {
-  if (constraint_expression_satisfied_p (t, args))
+  if (constraint_expression_satisfied_p (cur, args))
     return;
-  inform (loc, "requirements not satisfied");
-}
-
-void
-diagnose_pack_expansion (location_t loc, tree t, tree args)
-{
-  if (constraint_expression_satisfied_p (t, args))
+  if (elide_constraint_failure_p())
     return;
 
   /* Make sure that we don't have naked packs that we don't expect. */
-  if (!same_type_p (TREE_TYPE (t), boolean_type_node))
+  if (!same_type_p (TREE_TYPE (cur), boolean_type_node))
     {
-      inform (loc, "invalid pack expansion in constraint %qE", t);
+      inform (loc, "invalid pack expansion in constraint %qE", cur);
       return;
     }
 
-  inform (loc, "  in the expansion of %qE", t);
+  inform (loc, "in the expansion of %qE", cur);
 
   /* Get the vector of expanded arguments. Note that n must not
      be 0 since this constraint is not satisfied.  */
   ++processing_template_decl;
-  tree exprs = tsubst_pack_expansion (t, args, tf_none, NULL_TREE);
+  tree exprs = tsubst_pack_expansion (cur, args, tf_none, NULL_TREE);
   --processing_template_decl;
   if (exprs == error_mark_node)
     {
@@ -2576,82 +2826,276 @@ diagnose_pack_expansion (location_t loc, tree t, tree args)
     }
 }
 
-/* Diagnose an expression that would be characterized as
-   a predicate constraint. */
+/* Diagnose a potentially unsatisfied concept check constraint DECL<CARGS>.
+   Parameters are as for diagnose_constraint.  */
+
 void
-diagnose_other_expression (location_t loc, tree t, tree args)
+diagnose_check_constraint (location_t loc, tree orig, tree cur, tree args)
 {
-  if (constraint_expression_satisfied_p (t, args))
+  if (constraints_satisfied_p (cur, args))
     return;
-  inform (loc, "  %qE evaluated to false", t);
+
+  tree decl = CHECK_CONSTR_CONCEPT (cur);
+  tree cargs = CHECK_CONSTR_ARGS (cur);
+  tree tmpl = DECL_TI_TEMPLATE (decl);
+  tree check = build_nt (CHECK_CONSTR, decl, cargs);
+
+  /* Instantiate the concept check arguments.  */
+  tree targs = tsubst (cargs, args, tf_none, NULL_TREE);
+  if (targs == error_mark_node)
+    {
+      if (elide_constraint_failure_p ())
+        return;
+      inform (loc, "invalid use of the concept %qE", check);
+      tsubst (cargs, args, tf_warning_or_error, NULL_TREE);
+      return;
+    }
+
+  tree sub = build_tree_list (tmpl, targs);
+  /* Update to the expanded definitions. */
+  cur = expand_concept (decl, targs);
+  if (cur == error_mark_node)
+    {
+      if (elide_constraint_failure_p ())
+        return;
+      inform (loc, "in the expansion of concept %qE %S", check, sub);
+      cur = get_concept_definition (decl);
+      tsubst_expr (cur, targs, tf_warning_or_error, NULL_TREE, false);
+      return;
+    }
+
+  orig = get_concept_definition (CHECK_CONSTR_CONCEPT (orig));
+  orig = normalize_expression (orig);
+
+  location_t dloc = DECL_SOURCE_LOCATION (decl);
+  inform (dloc, "within %qS", sub);
+  diagnose_constraint (dloc, orig, cur, targs);
 }
 
+/* Diagnose a potentially unsatisfied conjunction or disjunction.  Parameters
+   are as for diagnose_constraint.  */
+
 void
-diagnose_expression (location_t loc, tree t, tree args)
+diagnose_logical_constraint (location_t loc, tree orig, tree cur, tree args)
 {
-  switch (TREE_CODE (t))
-    {
-    case TRUTH_ANDIF_EXPR:
-      diagnose_logical_operation (loc, t, args);
-      break;
+  tree t0 = TREE_OPERAND (cur, 0);
+  tree t1 = TREE_OPERAND (cur, 1);
+  if (!constraints_satisfied_p (t0, args))
+    diagnose_constraint (loc, TREE_OPERAND (orig, 0), t0, args);
+  else if (TREE_CODE (orig) == TRUTH_ORIF_EXPR)
+    return;
+  if (!constraints_satisfied_p (t1, args))
+    diagnose_constraint (loc, TREE_OPERAND (orig, 1), t1, args);
+}
 
-    case TRUTH_ORIF_EXPR:
-      diagnose_logical_operation (loc, t, args);
-      break;
+/* Diagnose a potential expression constraint failure. */
 
-    case CALL_EXPR:
-      diagnose_call_expression (loc, t, args);
-      break;
+void
+diagnose_expression_constraint (location_t loc, tree orig, tree cur, tree args)
+{
+  if (constraints_satisfied_p (cur, args))
+    return;
+  if (elide_constraint_failure_p())
+    return;
 
-    case TEMPLATE_ID_EXPR:
-      diagnose_template_id (loc, t, args);
-      break;
+  tree expr = EXPR_CONSTR_EXPR (orig);
+  inform (loc, "the required expression %qE would be ill-formed", expr);
 
-    case REQUIRES_EXPR:
-      diagnose_requires_expression (loc, t, args);
-      break;
+  // TODO: We should have a flag that controls this substitution.
+  // I'm finding it very useful for resolving concept check errors.
 
-    case TRAIT_EXPR:
-      diagnose_trait_expression (loc, t, args);
-      break;
+  // inform (input_location, "==== BEGIN DUMP ====");
+  // tsubst_expr (EXPR_CONSTR_EXPR (orig), args, tf_warning_or_error, NULL_TREE, false);
+  // inform (input_location, "==== END DUMP ====");
+}
 
-    case EXPR_PACK_EXPANSION:
-      diagnose_pack_expansion (loc, t, args);
-      break;
+/* Diagnose a potentially failed type constraint. */
 
-    default:
-      diagnose_other_expression (loc, t, args);
-      break;
+void
+diagnose_type_constraint (location_t loc, tree orig, tree cur, tree args)
+{
+  if (constraints_satisfied_p (cur, args))
+    return;
+  if (elide_constraint_failure_p())
+    return;
+
+  tree type = TYPE_CONSTR_TYPE (orig);
+  inform (loc, "the required type %qT would be ill-formed", type);
+}
+
+/* Diagnose a potentially unsatisfied conversion constraint. */
+
+void
+diagnose_implicit_conversion_constraint (location_t loc, tree orig, tree cur,
+                                        tree args)
+{
+  if (constraints_satisfied_p (cur, args))
+    return;
+
+  /* The expression and type will previously have been substituted into,
+     and therefore may already be an error. Also, we will have already
+     diagnosed substitution failures into an expression since this must be
+     part of a compound requirement.  */
+  tree expr = ICONV_CONSTR_EXPR (cur);
+  if (error_operand_p (expr))
+    return;
+
+  /* Don't elide a previously diagnosed failure.  */
+  if (elide_constraint_failure_p())
+    return;
+
+  tree type = ICONV_CONSTR_TYPE (cur);
+  if (error_operand_p (type))
+    {
+      inform (loc, "substitution into type %qT failed",
+             ICONV_CONSTR_TYPE (orig));
+      return;
     }
+
+  inform(loc, "%qE is not implicitly convertible to %qT", expr, type);
 }
 
-inline void
-diagnose_predicate_constraint (location_t loc, tree t, tree args)
+/* Diagnose an argument deduction constraint. */
+
+void
+diagnose_argument_deduction_constraint (location_t loc, tree orig, tree cur,
+                                       tree args)
+{
+  if (constraints_satisfied_p (cur, args))
+    return;
+
+  /* The expression and type will previously have been substituted into,
+     and therefore may already be an error. Also, we will have already
+     diagnosed substution failures into an expression since this must be
+     part of a compound requirement.  */
+  tree expr = DEDUCT_CONSTR_EXPR (cur);
+  if (error_operand_p (expr))
+    return;
+
+  /* Don't elide a previously diagnosed failure.  */
+  if (elide_constraint_failure_p ())
+    return;
+
+  tree pattern = DEDUCT_CONSTR_PATTERN (cur);
+  if (error_operand_p (pattern))
+    {
+      inform (loc, "substitution into type %qT failed",
+             DEDUCT_CONSTR_PATTERN (orig));
+      return;
+    }
+
+  inform (loc, "unable to deduce placeholder type %qT from %qE",
+         pattern, expr);
+}
+
+/* Diagnose an exception constraint. */
+
+void
+diagnose_exception_constraint (location_t loc, tree orig, tree cur, tree args)
 {
-  diagnose_expression (loc, PRED_CONSTR_EXPR (t), args);
+  if (constraints_satisfied_p (cur, args))
+    return;
+  if (elide_constraint_failure_p ())
+    return;
+
+  /* Rebuild a noexcept expression. */
+  tree expr = EXCEPT_CONSTR_EXPR (cur);
+  if (error_operand_p (expr))
+    return;
+
+  inform (loc, "%qE evaluated to false", EXCEPT_CONSTR_EXPR (orig));
 }
 
-inline void
-diagnose_conjunction (location_t loc, tree t, tree args)
+/* Diagnose a potentially unsatisfied parameterized constraint.  */
+
+void
+diagnose_parameterized_constraint (location_t loc, tree orig, tree cur,
+                                  tree args)
 {
-  diagnose_constraint (loc, TREE_OPERAND (t, 0), args);
-  diagnose_constraint (loc, TREE_OPERAND (t, 1), args);
+  if (constraints_satisfied_p (cur, args))
+    return;
+
+  local_specialization_stack stack;
+  tree parms = PARM_CONSTR_PARMS (cur);
+  tree vars = tsubst_constraint_variables (parms, args, tf_warning_or_error,
+                                          NULL_TREE);
+  if (vars == error_mark_node)
+    {
+      if (elide_constraint_failure_p ())
+        return;
+
+      /* TODO: Check which variable failed and use orig to diagnose
+         that substitution error.  */
+      inform (loc, "failed to instantiate constraint variables");
+      return;
+    }
+
+  /* TODO: It would be better write these in a list. */
+  while (vars)
+    {
+      inform (loc, "    with %q#D", vars);
+      vars = TREE_CHAIN (vars);
+    }
+  orig = PARM_CONSTR_OPERAND (orig);
+  cur = PARM_CONSTR_OPERAND (cur);
+  return diagnose_constraint (loc, orig, cur, args);
 }
 
-/* Diagnose the constraint T for the given ARGS. This is only
-   ever invoked on the associated constraints, so we can
-   only have conjunctions of predicate constraints. */
+/* Diagnose the constraint CUR for the given ARGS. This is only ever invoked
+   on the associated constraints, so we can only have conjunctions of
+   predicate constraints.  The ORIGinal (dependent) constructs follow
+   the current constraints to enable better diagnostics.  Note that ORIG
+   and CUR must be the same kinds of node, except when CUR is an error.  */
+
 void
-diagnose_constraint (location_t loc, tree t, tree args)
+diagnose_constraint (location_t loc, tree orig, tree cur, tree args)
 {
-  switch (TREE_CODE (t))
+  switch (TREE_CODE (cur))
     {
+    case EXPR_CONSTR:
+      diagnose_expression_constraint (loc, orig, cur, args);
+      break;
+
+    case TYPE_CONSTR:
+      diagnose_type_constraint (loc, orig, cur, args);
+      break;
+
+    case ICONV_CONSTR:
+      diagnose_implicit_conversion_constraint (loc, orig, cur, args);
+      break;
+
+    case DEDUCT_CONSTR:
+      diagnose_argument_deduction_constraint (loc, orig, cur, args);
+      break;
+
+    case EXCEPT_CONSTR:
+      diagnose_exception_constraint (loc, orig, cur, args);
+      break;
+
     case CONJ_CONSTR:
-      diagnose_conjunction (loc, t, args);
+    case DISJ_CONSTR:
+      diagnose_logical_constraint (loc, orig, cur, args);
       break;
 
     case PRED_CONSTR:
-      diagnose_predicate_constraint (loc, t, args);
+      diagnose_predicate_constraint (loc, orig, cur, args);
+      break;
+
+    case PARM_CONSTR:
+      diagnose_parameterized_constraint (loc, orig, cur, args);
+      break;
+
+    case CHECK_CONSTR:
+      diagnose_check_constraint (loc, orig, cur, args);
+      break;
+
+    case EXPR_PACK_EXPANSION:
+      diagnose_pack_expansion (loc, orig, cur, args);
+      break;
+
+    case ERROR_MARK:
+      /* TODO: Can we improve the diagnostic with the original?  */
+      inform (input_location, "ill-formed constraint");
       break;
 
     default:
@@ -2676,16 +3120,10 @@ diagnose_declaration_constraints (location_t loc, tree decl, tree args)
        args = TI_ARGS (ti);
     }
 
-  /* Check that the constraints are actually valid.  */
-  tree ci = get_constraints (decl);
-  if (!valid_constraints_p (ci))
-    {
-      inform (loc, "    invalid constraints");
-      return;
-    }
-
   /* Recursively diagnose the associated constraints.  */
-  diagnose_constraint (loc, CI_ASSOCIATED_CONSTRAINTS (ci), args);
+  tree ci = get_constraints (decl);
+  tree t = CI_ASSOCIATED_CONSTRAINTS (ci);
+  diagnose_constraint (loc, t, t, args);
 }
 
 } // namespace
@@ -2697,8 +3135,17 @@ diagnose_declaration_constraints (location_t loc, tree decl, tree args)
 void
 diagnose_constraints (location_t loc, tree t, tree args)
 {
+  constraint_errors = 0;
+
   if (constraint_p (t))
-    diagnose_constraint (loc, t, args);
-  else
+    diagnose_constraint (loc, t, t, args);
+  else if (DECL_P (t))
     diagnose_declaration_constraints (loc, t, args);
+  else
+    gcc_unreachable ();
+
+  /* Note the number of elided failures. */
+  int n = undiagnosed_constraint_failures ();
+  if (n > 0)
+    inform (loc, "... and %d more constraint errors not shown", n);
 }
index 5c815d9..edea6f5 100644 (file)
@@ -592,6 +592,8 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
                                  init, VEC_INIT_EXPR_VALUE_INIT (*expr_p),
                                  from_array,
                                  tf_warning_or_error);
+       hash_set<tree> pset;
+       cp_walk_tree (expr_p, cp_fold_r, &pset, NULL);
        cp_genericize_tree (expr_p);
        ret = GS_OK;
        input_location = loc;
@@ -1278,7 +1280,15 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
     {
       tree d = DECL_EXPR_DECL (stmt);
       if (TREE_CODE (d) == VAR_DECL)
-       gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d));
+       {
+         gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d));
+         /* User var initializers should be genericized during containing
+            BIND_EXPR genericization when walk_tree walks DECL_INITIAL
+            of BIND_EXPR_VARS.  Artificial temporaries might not be
+            mentioned there though, so walk them now.  */
+         if (DECL_ARTIFICIAL (d) && !TREE_STATIC (d) && DECL_INITIAL (d))
+           cp_walk_tree (&DECL_INITIAL (d), cp_genericize_r, data, NULL);
+       }
     }
   else if (TREE_CODE (stmt) == OMP_PARALLEL
           || TREE_CODE (stmt) == OMP_TASK
@@ -1559,6 +1569,13 @@ cp_genericize (tree fndecl)
   if (DECL_CLONED_FUNCTION_P (fndecl))
     return;
 
+  /* Allow cp_genericize calls to be nested.  */
+  tree save_bc_label[2];
+  save_bc_label[bc_break] = bc_label[bc_break];
+  save_bc_label[bc_continue] = bc_label[bc_continue];
+  bc_label[bc_break] = NULL_TREE;
+  bc_label[bc_continue] = NULL_TREE;
+
   /* Expand all the array notations here.  */
   if (flag_cilkplus 
       && contains_array_notation_expr (DECL_SAVED_TREE (fndecl)))
@@ -1578,6 +1595,8 @@ cp_genericize (tree fndecl)
 
   gcc_assert (bc_label[bc_break] == NULL);
   gcc_assert (bc_label[bc_continue] == NULL);
+  bc_label[bc_break] = save_bc_label[bc_break];
+  bc_label[bc_continue] = save_bc_label[bc_continue];
 }
 \f
 /* Build code to apply FN to each member of ARG1 and ARG2.  FN may be
index e6e5139..6cb5a69 100644 (file)
@@ -536,6 +536,14 @@ DEFTREECODE (NESTED_REQ, "nested_req", tcc_expression, 1)
    PRED_CONSTR_EXPR has the expression to be evaluated. */
 DEFTREECODE (PRED_CONSTR, "pred_constr", tcc_expression, 1)
 
+/* A check constraint represents the checking of a concept
+   C. It has two operands: the template defining the concept
+   and a sequence of template arguments.
+
+   CHECK_CONSTR_CONCEPT has the concept definition
+   CHECK_CONSTR_ARGUMENTS are the template arguments */
+DEFTREECODE (CHECK_CONSTR, "check_constr", tcc_expression, 2)
+
 /* An expression constraint determines the validity of a expression E.
 
    EXPR_CONST_EXPR has the expression being validated. */
@@ -560,7 +568,7 @@ DEFTREECODE (ICONV_CONSTR, "iconv_constr", tcc_expression, 2)
    T must contain at least one place holder.
 
    DEDUCT_CONSTR_EXPR has the expression E
-   DEDUCT_CONSTR_PATTERN has the type patter T.
+   DEDUCT_CONSTR_PATTERN has the type pattern T.
    DEDUCT_CONSTR_PLACEHOLDERS has the list of placeholder nodes in T. */
 DEFTREECODE (DEDUCT_CONSTR, "deduct_constr", tcc_expression, 3)
 
index 5f8af13..f4322af 100644 (file)
@@ -170,7 +170,7 @@ operator == (const cp_expr &lhs, tree rhs)
       TARGET_EXPR_DIRECT_INIT_P (in TARGET_EXPR)
       FNDECL_USED_AUTO (in FUNCTION_DECL)
       DECLTYPE_FOR_LAMBDA_PROXY (in DECLTYPE_TYPE)
-      REF_PARENTHESIZED_P (in COMPONENT_REF, INDIRECT_REF)
+      REF_PARENTHESIZED_P (in COMPONENT_REF, INDIRECT_REF, SCOPE_REF)
       AGGR_INIT_ZERO_FIRST (in AGGR_INIT_EXPR)
       CONSTRUCTOR_MUTABLE_POISON (in CONSTRUCTOR)
    3: (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out).
@@ -891,10 +891,6 @@ struct GTY(()) tree_template_info {
 // - a constraint expression introduced by a function declarator
 // - the associated constraints, which are the conjunction of those,
 //   and used for declaration matching
-// - the cached normalized associated constraints which are used
-//   to support satisfaction and subsumption.
-// - assumptions which is the result of decomposing the normalized
-//   constraints.
 //
 // The template and declarator requirements are kept to support pretty
 // printing constrained declarations.
@@ -903,8 +899,6 @@ struct GTY(()) tree_constraint_info {
   tree template_reqs;
   tree declarator_reqs;
   tree associated_constr;
-  tree normalized_constr;
-  tree assumptions;
 };
 
 // Require that pointer P is non-null before returning.
@@ -943,14 +937,6 @@ check_constraint_info (tree t)
 #define CI_ASSOCIATED_CONSTRAINTS(NODE) \
   check_constraint_info (check_nonnull(NODE))->associated_constr
 
-// The normalized associated constraints.
-#define CI_NORMALIZED_CONSTRAINTS(NODE) \
-  check_constraint_info (check_nonnull(NODE))->normalized_constr
-
-// Get the set of assumptions associated with the constraint info node.
-#define CI_ASSUMPTIONS(NODE) \
-  check_constraint_info (check_nonnull(NODE))->assumptions
-
 // Access the logical constraints on the template parameters introduced
 // at a given template parameter list level indicated by NODE.
 #define TEMPLATE_PARMS_CONSTRAINTS(NODE) \
@@ -974,6 +960,14 @@ check_constraint_info (tree t)
 #define PRED_CONSTR_EXPR(NODE) \
   TREE_OPERAND (TREE_CHECK (NODE, PRED_CONSTR), 0)
 
+/* The concept of a concept check. */
+#define CHECK_CONSTR_CONCEPT(NODE) \
+  TREE_OPERAND (TREE_CHECK (NODE, CHECK_CONSTR), 0)
+
+/* The template arguments of a concept check. */
+#define CHECK_CONSTR_ARGS(NODE) \
+  TREE_OPERAND (TREE_CHECK (NODE, CHECK_CONSTR), 1)
+
 /* The expression validated by the predicate constraint. */
 #define EXPR_CONSTR_EXPR(NODE) \
   TREE_OPERAND (TREE_CHECK (NODE, EXPR_CONSTR), 0)
@@ -3332,11 +3326,11 @@ extern void decl_shadowed_for_var_insert (tree, tree);
   TREE_CHECK2 (NODE, BINARY_LEFT_FOLD_EXPR, BINARY_RIGHT_FOLD_EXPR)
 
 /* True if NODE is UNARY_FOLD_EXPR or a BINARY_FOLD_EXPR */
-#define FOLD_EXPR_P(NODE) \
-  TREE_CODE (NODE) == UNARY_LEFT_FOLD_EXPR \
-    || TREE_CODE (NODE) == UNARY_RIGHT_FOLD_EXPR \
-    || TREE_CODE (NODE) == BINARY_LEFT_FOLD_EXPR \
-    || TREE_CODE (NODE) == BINARY_RIGHT_FOLD_EXPR
+#define FOLD_EXPR_P(NODE)                              \
+  (TREE_CODE (NODE) == UNARY_LEFT_FOLD_EXPR            \
+   || TREE_CODE (NODE) == UNARY_RIGHT_FOLD_EXPR                \
+   || TREE_CODE (NODE) == BINARY_LEFT_FOLD_EXPR                \
+   || TREE_CODE (NODE) == BINARY_RIGHT_FOLD_EXPR)
 
 /* True when NODE is a fold over a compound assignment operator. */
 #define FOLD_EXPR_MODIFY_P(NODE) \
@@ -3398,12 +3392,12 @@ extern void decl_shadowed_for_var_insert (tree, tree);
 #define PAREN_STRING_LITERAL_P(NODE) \
   TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE))
 
-/* Indicates whether a COMPONENT_REF has been parenthesized, or an
-   INDIRECT_REF comes from parenthesizing a _DECL.  Currently only set
-   some of the time in C++14 mode.  */
+/* Indicates whether a COMPONENT_REF or a SCOPE_REF has been parenthesized, or
+   an INDIRECT_REF comes from parenthesizing a _DECL.  Currently only set some
+   of the time in C++14 mode.  */
 
 #define REF_PARENTHESIZED_P(NODE) \
-  TREE_LANG_FLAG_2 (TREE_CHECK2 ((NODE), COMPONENT_REF, INDIRECT_REF))
+  TREE_LANG_FLAG_2 (TREE_CHECK3 ((NODE), COMPONENT_REF, INDIRECT_REF, SCOPE_REF))
 
 /* Nonzero if this AGGR_INIT_EXPR provides for initialization via a
    constructor call, rather than an ordinary function call.  */
@@ -6097,6 +6091,7 @@ extern bool is_specialization_of_friend           (tree, tree);
 extern tree get_pattern_parm                   (tree, tree);
 extern int comp_template_args                  (tree, tree, tree * = NULL,
                                                 tree * = NULL);
+extern int template_args_equal                  (tree, tree);
 extern tree maybe_process_partial_specialization (tree);
 extern tree most_specialized_instantiation     (tree);
 extern void print_candidates                   (tree);
@@ -6810,10 +6805,8 @@ extern tree strip_using_decl                    (tree);
 /* in constraint.cc */
 extern void init_constraint_processing          ();
 extern bool constraint_p                        (tree);
-extern tree make_predicate_constraint           (tree);
 extern tree conjoin_constraints                 (tree, tree);
 extern tree conjoin_constraints                 (tree);
-extern bool valid_constraints_p                 (tree);
 extern tree get_constraints                     (tree);
 extern void set_constraints                     (tree, tree);
 extern void remove_constraints                  (tree);
@@ -6844,13 +6837,23 @@ extern tree tsubst_requires_expr                (tree, tree, tsubst_flags_t, tre
 extern tree tsubst_constraint                   (tree, tree, tsubst_flags_t, tree);
 extern tree tsubst_constraint_info              (tree, tree, tsubst_flags_t, tree);
 extern bool function_concept_check_p            (tree);
-
+extern tree normalize_expression                (tree);
+extern tree expand_concept                      (tree, tree);
+extern bool expanding_concept                   ();
 extern tree evaluate_constraints                (tree, tree);
 extern tree evaluate_function_concept           (tree, tree);
 extern tree evaluate_variable_concept           (tree, tree);
 extern tree evaluate_constraint_expression      (tree, tree);
 extern bool constraints_satisfied_p             (tree);
 extern bool constraints_satisfied_p             (tree, tree);
+extern tree lookup_constraint_satisfaction      (tree, tree);
+extern tree memoize_constraint_satisfaction     (tree, tree, tree);
+extern tree lookup_concept_satisfaction         (tree, tree);
+extern tree memoize_concept_satisfaction        (tree, tree, tree);
+extern tree get_concept_expansion               (tree, tree);
+extern tree save_concept_expansion              (tree, tree, tree);
+extern bool* lookup_subsumption_result          (tree, tree);
+extern bool save_subsumption_result             (tree, tree, bool);
 
 extern bool equivalent_constraints              (tree, tree);
 extern bool equivalently_constrained            (tree, tree);
@@ -6861,7 +6864,6 @@ extern int more_constrained                     (tree, tree);
 extern void diagnose_constraints                (location_t, tree, tree);
 
 /* in logic.cc */
-extern tree decompose_assumptions               (tree);
 extern tree decompose_conclusions               (tree);
 extern bool subsumes                            (tree, tree);
 
index cc28045..cd5d606 100644 (file)
@@ -35,6 +35,9 @@ static void pp_cxx_parameter_declaration_clause (cxx_pretty_printer *, tree);
 static void pp_cxx_template_parameter (cxx_pretty_printer *, tree);
 static void pp_cxx_cast_expression (cxx_pretty_printer *, tree);
 static void pp_cxx_typeid_expression (cxx_pretty_printer *, tree);
+static void pp_cxx_unary_left_fold_expression (cxx_pretty_printer *, tree);
+static void pp_cxx_unary_right_fold_expression (cxx_pretty_printer *, tree);
+static void pp_cxx_binary_fold_expression (cxx_pretty_printer *, tree);
 \f
 
 static inline void
@@ -1140,6 +1143,19 @@ cxx_pretty_printer::expression (tree t)
       pp_cxx_ws_string (this, "...");
       break;
 
+    case UNARY_LEFT_FOLD_EXPR:
+      pp_cxx_unary_left_fold_expression (this, t);
+      break;
+
+    case UNARY_RIGHT_FOLD_EXPR:
+      pp_cxx_unary_right_fold_expression (this, t);
+    break;
+
+    case BINARY_LEFT_FOLD_EXPR:
+    case BINARY_RIGHT_FOLD_EXPR:
+      pp_cxx_binary_fold_expression (this, t);
+      break;
+
     case TEMPLATE_ID_EXPR:
       pp_cxx_template_id (this, t);
       break;
@@ -1166,6 +1182,7 @@ cxx_pretty_printer::expression (tree t)
       break;
 
     case PRED_CONSTR:
+    case CHECK_CONSTR:
     case EXPR_CONSTR:
     case TYPE_CONSTR:
     case ICONV_CONSTR:
@@ -2199,6 +2216,11 @@ void
 pp_cxx_constrained_type_spec (cxx_pretty_printer *pp, tree c)
 {
   tree t, a;
+  if (c == error_mark_node)
+    {
+      pp_cxx_ws_string(pp, "<unsatisfied-constrained-placeholder>");
+      return;
+    }
   placeholder_extract_concept_and_args (c, t, a);
   pp->id_expression (t);
   if (TREE_VEC_LENGTH (a) > 1)
@@ -2408,6 +2430,102 @@ pp_cxx_offsetof_expression (cxx_pretty_printer *pp, tree t)
   pp_cxx_right_paren (pp);
 }
 
+static char const*
+get_fold_operator (tree t)
+{
+  int op = int_cst_value (FOLD_EXPR_OP (t));
+  if (FOLD_EXPR_MODIFY_P (t))
+    {
+      switch (op)
+        {
+        case NOP_EXPR: return "=";
+        case PLUS_EXPR: return "+=";
+        case MINUS_EXPR: return "-=";
+        case MULT_EXPR: return "*=";
+        case TRUNC_DIV_EXPR: return "/=";
+        case TRUNC_MOD_EXPR: return "%=";
+        case BIT_XOR_EXPR: return "^=";
+        case BIT_AND_EXPR: return "&=";
+        case BIT_IOR_EXPR: return "|=";
+        case LSHIFT_EXPR: return "<<=";
+        case RSHIFT_EXPR: return ">>=";
+        default: gcc_unreachable ();
+        }
+    }
+  else
+    {
+      switch (op)
+        {
+        case PLUS_EXPR: return "+";
+        case MINUS_EXPR: return "-";
+        case MULT_EXPR: return "*";
+        case TRUNC_DIV_EXPR: return "/";
+        case TRUNC_MOD_EXPR: return "%";
+        case BIT_XOR_EXPR: return "^";
+        case BIT_AND_EXPR: return "&";
+        case BIT_IOR_EXPR: return "|";
+        case LSHIFT_EXPR: return "<<";
+        case RSHIFT_EXPR: return ">>";
+        case EQ_EXPR: return "==";
+        case NE_EXPR: return "!=";
+        case LT_EXPR: return "<";
+        case GT_EXPR: return ">";
+        case LE_EXPR: return "<=";
+        case GE_EXPR: return ">=";
+        case TRUTH_ANDIF_EXPR: return "&&";
+        case TRUTH_ORIF_EXPR: return "||";
+        case MEMBER_REF: return "->*";
+        case DOTSTAR_EXPR: return ".*";
+        case OFFSET_REF: return ".*";
+        default: return ","; /* FIXME: Not the right default.  */
+        }
+    }
+}
+
+void
+pp_cxx_unary_left_fold_expression (cxx_pretty_printer *pp, tree t)
+{
+  char const* op = get_fold_operator (t);
+  tree expr = PACK_EXPANSION_PATTERN (FOLD_EXPR_PACK (t));
+  pp_cxx_left_paren (pp);
+  pp_cxx_ws_string (pp, "...");
+  pp_cxx_ws_string (pp, op);
+  pp->expression (expr);
+  pp_cxx_right_paren (pp);
+}
+
+void
+pp_cxx_unary_right_fold_expression (cxx_pretty_printer *pp, tree t)
+{
+  char const* op = get_fold_operator (t);
+  tree expr = PACK_EXPANSION_PATTERN (FOLD_EXPR_PACK (t));
+  pp_cxx_left_paren (pp);
+  pp->expression (expr);
+  pp_space (pp);
+  pp_cxx_ws_string (pp, op);
+  pp_cxx_ws_string (pp, "...");
+  pp_cxx_right_paren (pp);
+}
+
+void
+pp_cxx_binary_fold_expression (cxx_pretty_printer *pp, tree t)
+{
+  char const* op = get_fold_operator (t);
+  tree t1 = TREE_OPERAND (t, 1);
+  tree t2 = TREE_OPERAND (t, 2);
+  if (t1 == FOLD_EXPR_PACK (t))
+    t1 = PACK_EXPANSION_PATTERN (t1);
+  else
+    t2 = PACK_EXPANSION_PATTERN (t2);
+  pp_cxx_left_paren (pp);
+  pp->expression (t1);
+  pp_cxx_ws_string (pp, op);
+  pp_cxx_ws_string (pp, "...");
+  pp_cxx_ws_string (pp, op);
+  pp->expression (t2);
+  pp_cxx_right_paren (pp);
+}
+
 void
 pp_cxx_trait_expression (cxx_pretty_printer *pp, tree t)
 {
@@ -2618,6 +2736,7 @@ pp_cxx_compound_requirement (cxx_pretty_printer *pp, tree t)
       pp_cxx_ws_string (pp, "->");
       pp->type_id (type);
     }
+  pp_cxx_semicolon (pp);
 }
 
 /* nested requirement:
@@ -2633,74 +2752,94 @@ pp_cxx_nested_requirement (cxx_pretty_printer *pp, tree t)
 void
 pp_cxx_predicate_constraint (cxx_pretty_printer *pp, tree t)
 {
-  pp_string (pp, "predicate");
-  pp_left_paren (pp);
   pp->expression (TREE_OPERAND (t, 0));
-  pp_right_paren (pp);
+}
+
+void
+pp_cxx_check_constraint (cxx_pretty_printer *pp, tree t)
+{
+  tree decl = CHECK_CONSTR_CONCEPT (t);
+  tree tmpl = DECL_TI_TEMPLATE (decl);
+  tree args = CHECK_CONSTR_ARGS (t);
+  tree id = build_nt (TEMPLATE_ID_EXPR, tmpl, args);
+
+  if (TREE_CODE (decl) == VAR_DECL)
+    pp->expression (id);
+  else if (TREE_CODE (decl) == FUNCTION_DECL)
+    {
+      tree call = build_vl_exp (CALL_EXPR, 2);
+      TREE_OPERAND (call, 0) = integer_two_node;
+      TREE_OPERAND (call, 1) = id;
+      pp->expression (call);
+    }
+  else
+    gcc_unreachable ();
 }
 
 void
 pp_cxx_expression_constraint (cxx_pretty_printer *pp, tree t)
 {
-  pp_string (pp, "valid_expr");
-  pp_left_paren (pp);
+  pp_string (pp, "<valid-expression ");
+  pp_cxx_left_paren (pp);
   pp->expression (TREE_OPERAND (t, 0));
-  pp_right_paren (pp);
+  pp_cxx_right_paren (pp);
+  pp_string (pp, ">");
 }
 
 void
 pp_cxx_type_constraint (cxx_pretty_printer *pp, tree t)
 {
-  pp_string (pp, "valid_type");
-  pp_left_paren (pp);
+  pp_string (pp, "<valid-type ");
   pp->type_id (TREE_OPERAND (t, 0));
-  pp_right_paren (pp);
+  pp_string (pp, ">");
 }
 
 void
 pp_cxx_implicit_conversion_constraint (cxx_pretty_printer *pp, tree t)
 {
-  pp_string (pp, "convertible");
-  pp_left_paren (pp);
+  pp_string (pp, "<implicitly-conversion ");
+  pp_cxx_left_paren (pp);
   pp->expression (ICONV_CONSTR_EXPR (t));
-  pp_cxx_separate_with (pp, ',');
-  pp->expression (ICONV_CONSTR_TYPE (t));
-  pp_right_paren (pp);
+  pp_cxx_right_paren (pp);
+  pp_cxx_ws_string (pp, "to");
+  pp->type_id (ICONV_CONSTR_TYPE (t));
+  pp_string (pp, ">");
 }
 
 void
 pp_cxx_argument_deduction_constraint (cxx_pretty_printer *pp, tree t)
 {
-  pp_string (pp, "deducible");
-  pp_left_paren (pp);
+  pp_string (pp, "<argument-deduction ");
+  pp_cxx_left_paren (pp);
   pp->expression (DEDUCT_CONSTR_EXPR (t));
-  pp_cxx_separate_with (pp, ',');
+  pp_cxx_right_paren (pp);
+  pp_cxx_ws_string (pp, "as");
   pp->expression (DEDUCT_CONSTR_PATTERN (t));
-  pp_right_paren (pp);
+  pp_string (pp, ">");
 }
 
 void
 pp_cxx_exception_constraint (cxx_pretty_printer *pp, tree t)
 {
   pp_cxx_ws_string (pp, "noexcept");
-  pp_left_paren (pp);
+  pp_cxx_whitespace (pp);
+  pp_cxx_left_paren (pp);
   pp->expression (TREE_OPERAND (t, 0));
-  pp_right_paren (pp);
+  pp_cxx_right_paren (pp);
 }
 
 void
 pp_cxx_parameterized_constraint (cxx_pretty_printer *pp, tree t)
 {
   pp_left_paren (pp);
-  pp_string (pp, "forall");
+  pp_string (pp, "<requires ");
   if (tree parms = PARM_CONSTR_PARMS (t))
     {
-      if (parms)
        pp_cxx_parameter_declaration_clause (pp, parms);
       pp_cxx_whitespace (pp);
     }
   pp_cxx_constraint (pp, PARM_CONSTR_OPERAND (t));
-  pp_right_paren (pp);
+  pp_string (pp, ">");
 }
 
 void
@@ -2731,6 +2870,10 @@ pp_cxx_constraint (cxx_pretty_printer *pp, tree t)
       pp_cxx_predicate_constraint (pp, t);
       break;
 
+    case CHECK_CONSTR:
+      pp_cxx_check_constraint (pp, t);
+      break;
+
     case EXPR_CONSTR:
       pp_cxx_expression_constraint (pp, t);
       break;
@@ -2763,6 +2906,10 @@ pp_cxx_constraint (cxx_pretty_printer *pp, tree t)
       pp_cxx_disjunction (pp, t);
       break;
 
+    case EXPR_PACK_EXPANSION:
+      pp->expression (TREE_OPERAND (t, 0));
+      break;
+
     default:
       gcc_unreachable ();
     }
index aea92a4..07870d1 100644 (file)
@@ -5897,8 +5897,10 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
            }
        }
 
-      warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
-              type);
+      if (complain & tf_warning)
+       warning (OPT_Wmissing_braces,
+                "missing braces around initializer for %qT",
+                type);
     }
 
   /* Dispatch to specialized routines.  */
@@ -7917,7 +7919,7 @@ grokfndecl (tree ctype,
 
       /* Adjust the required expression into a constraint. */
       if (decl_reqs)
-        decl_reqs = make_predicate_constraint (decl_reqs);
+        decl_reqs = normalize_expression (decl_reqs);
 
       tree ci = build_constraints (tmpl_reqs, decl_reqs);
       set_constraints (decl, ci);
index 7d70f89..c20eee2 100644 (file)
@@ -961,7 +961,12 @@ dump_simple_decl (cxx_pretty_printer *pp, tree t, tree type, int flags)
     {
       if (VAR_P (t)
          && DECL_DECLARED_CONSTEXPR_P (t))
-       pp_cxx_ws_string (pp, "constexpr");
+            {
+              if (DECL_DECLARED_CONCEPT_P (t))
+                pp_cxx_ws_string (pp, "concept");
+              else
+               pp_cxx_ws_string (pp, "constexpr");
+            }
       dump_type_prefix (pp, type, flags & ~TFF_UNQUALIFIED_NAME);
       pp_maybe_space (pp);
     }
@@ -1334,16 +1339,19 @@ dump_template_decl (cxx_pretty_printer *pp, tree t, int flags)
          if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
            pp_cxx_ws_string (pp, "...");
        }
+
+      /* Only print the requirements if we're also printing
+         the template header.  */
+      if (flag_concepts)
+       if (tree ci = get_constraints (t))
+         if (check_constraint_info (ci))
+           if (tree reqs = CI_TEMPLATE_REQS (ci))
+             {
+               pp_cxx_requires_clause (pp, reqs);
+               pp_cxx_whitespace (pp);
+             }
     }
 
-  if (flag_concepts)
-    if (tree ci = get_constraints (t))
-      if (check_constraint_info (ci))
-        if (tree reqs = CI_TEMPLATE_REQS (ci))
-         {
-           pp_cxx_requires_clause (pp, reqs);
-           pp_cxx_whitespace (pp);
-         }
 
   if (DECL_CLASS_TEMPLATE_P (t))
     dump_type (pp, TREE_TYPE (t),
@@ -1530,7 +1538,12 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags)
        pp_cxx_ws_string (pp, "virtual");
 
       if (DECL_DECLARED_CONSTEXPR_P (t))
-       pp_cxx_ws_string (pp, "constexpr");
+        {
+          if (DECL_DECLARED_CONCEPT_P (t))
+            pp_cxx_ws_string (pp, "concept");
+          else
+           pp_cxx_ws_string (pp, "constexpr");
+       }
     }
 
   /* Print the return type?  */
@@ -2661,6 +2674,10 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags)
       break;
 
     case EXPR_PACK_EXPANSION:
+    case UNARY_LEFT_FOLD_EXPR:
+    case UNARY_RIGHT_FOLD_EXPR:
+    case BINARY_LEFT_FOLD_EXPR:
+    case BINARY_RIGHT_FOLD_EXPR:
     case TYPEID_EXPR:
     case MEMBER_REF:
     case DOTSTAR_EXPR:
@@ -2733,6 +2750,7 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags)
       break;
 
     case PRED_CONSTR:
+    case CHECK_CONSTR:
     case EXPR_CONSTR:
     case TYPE_CONSTR:
     case ICONV_CONSTR:
index 5e2393b..460b26a 100644 (file)
@@ -1816,6 +1816,19 @@ expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags,
       return;
     }
 
+  /* List-initialization from {} becomes value-initialization for non-aggregate
+     classes with default constructors.  Handle this here when we're
+     initializing a base, so protected access works.  */
+  if (exp != true_exp && init && TREE_CODE (init) == TREE_LIST)
+    {
+      tree elt = TREE_VALUE (init);
+      if (DIRECT_LIST_INIT_P (elt)
+         && CONSTRUCTOR_ELTS (elt) == 0
+         && CLASSTYPE_NON_AGGREGATE (type)
+         && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
+       init = void_type_node;
+    }
+
   /* If an explicit -- but empty -- initializer list was present,
      that's value-initialization.  */
   if (init == void_type_node)
@@ -2072,8 +2085,13 @@ constant_value_1 (tree decl, bool strict_p, bool return_aggregate_cst_ok_p)
          && TREE_CODE (init) == TREE_LIST
          && TREE_CHAIN (init) == NULL_TREE)
        init = TREE_VALUE (init);
-      /* Instantiate a non-dependent initializer.  */
-      init = instantiate_non_dependent_or_null (init);
+      /* Instantiate a non-dependent initializer for user variables.  We
+        mustn't do this for the temporary for an array compound literal;
+        trying to instatiate the initializer will keep creating new
+        temporaries until we crash.  Probably it's not useful to do it for
+        other artificial variables, either.  */
+      if (!DECL_ARTIFICIAL (decl))
+       init = instantiate_non_dependent_or_null (init);
       if (!init
          || !TREE_TYPE (init)
          || !TREE_CONSTANT (init)
index 539a01a..7a5220c 100644 (file)
@@ -485,6 +485,8 @@ add_capture (tree lambda, tree id, tree orig_init, bool by_reference_p,
   else
     {
       type = lambda_capture_field_type (initializer, explicit_init_p);
+      if (type == error_mark_node)
+       return error_mark_node;
       if (by_reference_p)
        {
          type = build_reference_type (type);
@@ -903,6 +905,8 @@ maybe_add_lambda_conv_op (tree type)
   tree optype = TREE_TYPE (callop);
   tree fn_result = TREE_TYPE (optype);
 
+  tree thisarg = build_nop (TREE_TYPE (DECL_ARGUMENTS (callop)),
+                           null_pointer_node);
   if (generic_lambda_p)
     {
       /* Prepare the dependent member call for the static member function
@@ -910,7 +914,8 @@ maybe_add_lambda_conv_op (tree type)
         return expression for a deduced return call op to allow for simple
         implementation of the conversion operator.  */
 
-      tree instance = build_nop (type, null_pointer_node);
+      tree instance = cp_build_indirect_ref (thisarg, RO_NULL,
+                                            tf_warning_or_error);
       tree objfn = build_min (COMPONENT_REF, NULL_TREE,
                              instance, DECL_NAME (callop), NULL_TREE);
       int nargs = list_length (DECL_ARGUMENTS (callop)) - 1;
@@ -922,9 +927,7 @@ maybe_add_lambda_conv_op (tree type)
   else
     {
       direct_argvec = make_tree_vector ();
-      direct_argvec->quick_push (build1 (NOP_EXPR,
-                                        TREE_TYPE (DECL_ARGUMENTS (callop)),
-                                        null_pointer_node));
+      direct_argvec->quick_push (thisarg);
     }
 
   /* Copy CALLOP's argument list (as per 'copy_list') as FN_ARGS in order to
index c12c381..b86e740 100644 (file)
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
+#include "timevar.h"
 #include "hash-set.h"
 #include "machmode.h"
 #include "vec.h"
@@ -50,19 +51,52 @@ namespace {
 
 // Helper algorithms
 
-// Increment iter distance(first, last) times.
-template<typename I1, typename I2, typename I3>
-  I1 next_by_distance (I1 iter, I2 first, I3 last)
-  {
-    for ( ; first != last; ++first, ++iter)
-      ;
-    return iter;
-  }
+template<typename I>
+inline I
+next (I iter)
+{
+  return ++iter;
+}
+
+template<typename I, typename P>
+inline bool
+any_p (I first, I last, P pred)
+{
+  while (first != last)
+    {
+      if (pred(*first))
+        return true;
+      ++first;
+    }
+  return false;
+}
+
+bool prove_implication (tree, tree);
 
 /*---------------------------------------------------------------------------
                            Proof state
 ---------------------------------------------------------------------------*/
 
+struct term_entry
+{
+  tree t;
+};
+
+/* Hashing function and equality for constraint entries.  */
+
+struct term_hasher : ggc_ptr_hash<term_entry>
+{
+  static hashval_t hash (term_entry *e)
+  {
+    return iterative_hash_template_arg (e->t, 0);
+  }
+
+  static bool equal (term_entry *e1, term_entry *e2)
+  {
+    return cp_tree_equal (e1->t, e2->t);
+  }
+};
+
 /* A term list is a list of atomic constraints. It is used
    to maintain the lists of assumptions and conclusions in a
    proof goal.
@@ -70,109 +104,122 @@ template<typename I1, typename I2, typename I3>
    Each term list maintains an iterator that refers to the current
    term. This can be used by various tactics to support iteration
    and stateful manipulation of the list. */
-struct term_list : std::list<tree>
+struct term_list
 {
-  term_list ();
-  term_list (const term_list &x);
-  term_list& operator= (const term_list &x);
-
-  tree       current_term ()       { return *current; }
-  const_tree current_term () const { return *current; }
+  typedef std::list<tree>::iterator iterator;
 
+  term_list ();
+  term_list (tree);
 
-  void insert (tree t);
-  tree erase ();
+  bool includes (tree);
+  iterator insert (iterator, tree);
+  iterator push_back (tree);
+  iterator erase (iterator);
+  iterator replace (iterator, tree);
+  iterator replace (iterator, tree, tree);
 
-  void start ();
-  void next ();
-  bool done() const;
+  iterator begin() { return seq.begin(); }
+  iterator end() { return seq.end(); }
 
-  iterator current;
+  std::list<tree>         seq;
+  hash_table<term_hasher> tab;
 };
 
 inline
 term_list::term_list ()
-  : std::list<tree> (), current (end ())
-{ }
+  : seq(), tab (11)
+{
+}
 
-inline
-term_list::term_list (const term_list &x)
-  : std::list<tree> (x)
-  , current (next_by_distance (begin (), x.begin (), x.current))
-{ }
+/* Initialize a term list with an initial term. */
 
-inline term_list&
-term_list::operator= (const term_list &x)
+inline
+term_list::term_list (tree t)
+  : seq (), tab (11)
 {
-  std::list<tree>::operator=(x);
-  current = next_by_distance (begin (), x.begin (), x.current);
-  return *this;
+  push_back (t);
 }
 
-/* Try saving the term T into the list of terms. If
-   T is already in the list of terms, then no action is
-   performed. Otherwise, insert T before the current
-   position, making this term current.
+/* Returns true if T is the in the tree. */
 
-   Note that not inserting terms is an optimization
-   that corresponds to the structural rule of
-   contraction.
-
-   NOTE: With the contraction rule, this data structure
-   would be more efficiently represented as an ordered set
-   or hash set.  */
-void
-term_list::insert (tree t)
+inline bool
+term_list::includes (tree t)
 {
-  /* Search the current term list. If there is already
-     a matching term, do not add the new one.  */
-  for (iterator i = begin(); i != end(); ++i)
-    if (cp_tree_equal (*i, t))
-      return;
+  term_entry ent = {t};
+  return tab.find (&ent);
+}
 
-  current = std::list<tree>::insert (current, t);
+/* Append a term to the list. */
+inline term_list::iterator
+term_list::push_back (tree t)
+{
+  return insert (end(), t);
 }
 
-/* Remove the current term from the list, repositioning to
-   the term following the removed term. Note that the new
-   position could be past the end of the list.
+/* Insert a new (unseen) term T into the list before the proposition
+   indicated by ITER. Returns the iterator to the newly inserted
+   element.  */
 
-   The removed term is returned. */
-inline tree
-term_list::erase ()
+term_list::iterator
+term_list::insert (iterator iter, tree t)
 {
-  tree t = *current;
-  current = std::list<tree>::erase (current);
-  return t;
+  gcc_assert (!includes (t));
+  iter = seq.insert (iter, t);
+  term_entry ent = {t};
+  term_entry** slot = tab.find_slot (&ent, INSERT);
+  term_entry* ptr = ggc_alloc<term_entry> ();
+  *ptr = ent;
+  *slot = ptr;
+  return iter;
 }
 
-/* Initialize the current term to the first in the list. */
-inline void
-term_list::start ()
+/* Remove an existing term from the list. Returns an iterator referring
+   to the element after the removed term.  This may be end().  */
+
+term_list::iterator
+term_list::erase (iterator iter)
 {
-  current = begin ();
+  gcc_assert (includes (*iter));
+  term_entry ent = {*iter};
+  tab.remove_elt (&ent);
+  iter = seq.erase (iter);
+  return iter;
 }
 
-/* Advance to the next term in the list. */
-inline void
-term_list::next ()
+/* Replace the given term with that specified. If the term has
+   been previously seen, do not insert the term. Returns the
+   first iterator past the current term.  */
+
+term_list::iterator
+term_list::replace (iterator iter, tree t)
 {
-  ++current;
+  iter = erase (iter);
+  if (!includes (t))
+    insert (iter, t);
+  return iter;
 }
 
-/* Returns true when the current position is past the end. */
-inline bool
-term_list::done () const
+
+/* Replace the term at the given position by the supplied T1
+   followed by t2. This is used in certain logical operators to
+   load a list of assumptions or conclusions.  */
+
+term_list::iterator
+term_list::replace (iterator iter, tree t1, tree t2)
 {
-  return current == end ();
+  iter = erase (iter);
+  if (!includes (t1))
+    insert (iter, t1);
+  if (!includes (t2))
+    insert (iter, t2);
+  return iter;
 }
 
-
 /* A goal (or subgoal) models a sequent of the form
    'A |- C' where A and C are lists of assumptions and
    conclusions written as propositions in the constraint
-   language (i.e., lists of trees).
-*/
+   language (i.e., lists of trees). */
+
 struct proof_goal
 {
   term_list assumptions;
@@ -182,27 +229,27 @@ struct proof_goal
 /* A proof state owns a list of goals and tracks the
    current sub-goal. The class also provides facilities
    for managing subgoals and constructing term lists. */
+
 struct proof_state : std::list<proof_goal>
 {
   proof_state ();
 
   iterator branch (iterator i);
+  iterator discharge (iterator i);
 };
 
-/* An alias for proof state iterators. */
-typedef proof_state::iterator goal_iterator;
+/* Initialize the state with a single empty goal, and set that goal
+   as the current subgoal.  */
 
-/* Initialize the state with a single empty goal,
-   and set that goal as the current subgoal. */
 inline
 proof_state::proof_state ()
   : std::list<proof_goal> (1)
 { }
 
 
-/* Branch the current goal by creating a new subgoal,
-   returning a reference to // the new object. This does
-   not update the current goal. */
+/* Branch the current goal by creating a new subgoal, returning a
+   reference to the new object. This does not update the current goal. */
+
 inline proof_state::iterator
 proof_state::branch (iterator i)
 {
@@ -211,278 +258,539 @@ proof_state::branch (iterator i)
   return insert (++i, g);
 }
 
+/* Discharge the current goal, setting it equal to the
+   next non-satisfied goal. */
+
+inline proof_state::iterator
+proof_state::discharge (iterator i)
+{
+  gcc_assert (i != end());
+  return erase (i);
+}
+
+
 /*---------------------------------------------------------------------------
-                           Logical rules
+                        Debugging
 ---------------------------------------------------------------------------*/
 
-/*These functions modify the current state and goal by decomposing
-  logical expressions using the logical rules of sequent calculus for
-  first order logic.
+// void
+// debug (term_list& ts)
+// {
+//   for (term_list::iterator i = ts.begin(); i != ts.end(); ++i)
+//     verbatim ("  # %E", *i);
+// }
+//
+// void
+// debug (proof_goal& g)
+// {
+//   debug (g.assumptions);
+//   verbatim ("       |-");
+//   debug (g.conclusions);
+// }
 
-  Note that in each decomposition rule, the term T has been erased
-  from term list before the specific rule is applied. */
+/*---------------------------------------------------------------------------
+                        Atomicity of constraints
+---------------------------------------------------------------------------*/
 
-/* The left logical rule for conjunction adds both operands
-   to the current set of constraints. */
-void
-left_conjunction (proof_state &, goal_iterator i, tree t)
+/* Returns true if T is not an atomic constraint.  */
+
+bool
+non_atomic_constraint_p (tree t)
 {
-  gcc_assert (TREE_CODE (t) == CONJ_CONSTR);
+  switch (TREE_CODE (t))
+    {
+    case PRED_CONSTR:
+    case EXPR_CONSTR:
+    case TYPE_CONSTR:
+    case ICONV_CONSTR:
+    case DEDUCT_CONSTR:
+    case EXCEPT_CONSTR:
+      /* A pack expansion isn't atomic, but it can't decompose to prove an
+        atom, so it shouldn't cause analyze_atom to return undecided.  */
+    case EXPR_PACK_EXPANSION:
+      return false;
+    case CHECK_CONSTR:
+    case PARM_CONSTR:
+    case CONJ_CONSTR:
+    case DISJ_CONSTR:
+      return true;
+    default:
+      gcc_unreachable ();
+    }
+}
 
-  /* Insert the operands into the current branch. Note that the
-     final order of insertion is left-to-right. */
-  term_list &l = i->assumptions;
-  l.insert (TREE_OPERAND (t, 1));
-  l.insert (TREE_OPERAND (t, 0));
+/* Returns true if any constraints in T are not atomic.  */
+
+bool
+any_non_atomic_constraints_p (term_list& t)
+{
+  return any_p (t.begin(), t.end(), non_atomic_constraint_p);
 }
 
-/* The left logical rule for disjunction creates a new goal,
-   adding the first operand to the original set of
-   constraints and the second operand to the new set
-   of constraints. */
-void
-left_disjunction (proof_state &s, goal_iterator i, tree t)
+/*---------------------------------------------------------------------------
+                           Proof validations
+---------------------------------------------------------------------------*/
+
+enum proof_result
 {
-  gcc_assert (TREE_CODE (t) == DISJ_CONSTR);
+  invalid,
+  valid,
+  undecided
+};
+
+proof_result check_term (term_list&, tree);
 
-  /* Branch the current subgoal. */
-  goal_iterator j = s.branch (i);
-  term_list &l1 = i->assumptions;
-  term_list &l2 = j->assumptions;
 
-  /* Insert operands into the different branches. */
-  l1.insert (TREE_OPERAND (t, 0));
-  l2.insert (TREE_OPERAND (t, 1));
+proof_result
+analyze_atom (term_list& ts, tree t)
+{
+  /* FIXME: Hook into special cases, if any. */
+  /*
+  term_list::iterator iter = ts.begin();
+  term_list::iterator end = ts.end();
+  while (iter != end)
+    {
+      ++iter;
+    }
+  */
+
+  if (non_atomic_constraint_p (t))
+    return undecided;
+  if (any_non_atomic_constraints_p (ts))
+    return undecided;
+  return invalid;
 }
 
-/* The left logical rules for parameterized constraints
-   adds its operand to the current goal. The list of
-   parameters are effectively discarded. */
-void
-left_parameterized_constraint (proof_state &, goal_iterator i, tree t)
+/* Search for a pack expansion in the list of assumptions that would
+   make this expansion valid.  */
+
+proof_result
+analyze_pack (term_list& ts, tree t)
 {
-  gcc_assert (TREE_CODE (t) == PARM_CONSTR);
-  term_list &l = i->assumptions;
-  l.insert (PARM_CONSTR_OPERAND (t));
+  tree c1 = normalize_expression (PACK_EXPANSION_PATTERN (t));
+  term_list::iterator iter = ts.begin();
+  term_list::iterator end = ts.end();
+  while (iter != end)
+    {
+      if (TREE_CODE (*iter) == TREE_CODE (t))
+        {
+          tree c2 = normalize_expression (PACK_EXPANSION_PATTERN (*iter));
+          if (prove_implication (c2, c1))
+            return valid;
+          else
+            return invalid;
+        }
+      ++iter;
+    }
+  return invalid;
 }
 
-/*---------------------------------------------------------------------------
-                           Decomposition
----------------------------------------------------------------------------*/
+/* Search for concept checks in TS that we know subsume T. */
 
-/* The following algorithms decompose expressions into sets of
-   atomic propositions. In terms of the sequent calculus, these
-   functions exercise the logical rules only.
+proof_result
+search_known_subsumptions (term_list& ts, tree t)
+{
+  for (term_list::iterator i = ts.begin(); i != ts.end(); ++i)
+    if (TREE_CODE (*i) == CHECK_CONSTR)
+      {
+        if (bool* b = lookup_subsumption_result (*i, t))
+          return *b ? valid : invalid;
+      }
+  return undecided;
+}
 
-   This is equivalent, for the purpose of determining subsumption,
-   to rewriting a constraint in disjunctive normal form. It also
-   allows the resulting assumptions to be used as declarations
-   for the purpose of separate checking. */
+/* Determine if the terms in TS provide sufficient support for proving
+   the proposition T. If any term in TS is a concept check that is known
+   to subsume T, then the proof is valid. Otherwise, we have to expand T
+   and continue searching for support.  */
 
-/* Apply the left logical rules to the proof state. */
-void
-decompose_left_term (proof_state &s, goal_iterator i)
+proof_result
+analyze_check (term_list& ts, tree t)
+{
+  proof_result r = search_known_subsumptions (ts, t);
+  if (r != undecided)
+    return r;
+
+  tree tmpl = CHECK_CONSTR_CONCEPT (t);
+  tree args = CHECK_CONSTR_ARGS (t);
+  tree c = expand_concept (tmpl, args);
+  return check_term (ts, c);
+}
+
+/* Recursively check constraints of the parameterized constraint. */
+
+proof_result
+analyze_parameterized (term_list& ts, tree t)
+{
+  return check_term (ts, PARM_CONSTR_OPERAND (t));
+}
+
+proof_result
+analyze_conjunction (term_list& ts, tree t)
+{
+  proof_result r = check_term (ts, TREE_OPERAND (t, 0));
+  if (r == invalid || r == undecided)
+    return r;
+  return check_term (ts, TREE_OPERAND (t, 1));
+}
+
+proof_result
+analyze_disjunction (term_list& ts, tree t)
+{
+  proof_result r = check_term (ts, TREE_OPERAND (t, 0));
+  if (r == valid)
+    return r;
+  return check_term (ts, TREE_OPERAND (t, 1));
+}
+
+proof_result
+analyze_term (term_list& ts, tree t)
 {
-  term_list &l = i->assumptions;
-  tree t = l.current_term ();
   switch (TREE_CODE (t))
     {
+    case CHECK_CONSTR:
+      return analyze_check (ts, t);
+
+    case PARM_CONSTR:
+      return analyze_parameterized (ts, t);
+
     case CONJ_CONSTR:
-      left_conjunction (s, i, l.erase ());
-      break;
+      return analyze_conjunction (ts, t);
     case DISJ_CONSTR:
-      left_disjunction (s, i, l.erase ());
-      break;
-    case PARM_CONSTR:
-      left_parameterized_constraint (s, i, l.erase ());
-      break;
+      return analyze_disjunction (ts, t);
+
+    case PRED_CONSTR:
+    case EXPR_CONSTR:
+    case TYPE_CONSTR:
+    case ICONV_CONSTR:
+    case DEDUCT_CONSTR:
+    case EXCEPT_CONSTR:
+      return analyze_atom (ts, t);
+
+    case EXPR_PACK_EXPANSION:
+      return analyze_pack (ts, t);
+
+    case ERROR_MARK:
+      /* Encountering an error anywhere in a constraint invalidates
+         the proof, since the constraint is ill-formed.  */
+      return invalid;
     default:
-      l.next ();
-      break;
+      gcc_unreachable ();
     }
 }
 
-/* Apply the left logical rules of the sequent calculus
-   until the current goal is fully decomposed into atomic
-   constraints. */
-void
-decompose_left_goal (proof_state &s, goal_iterator i)
+/* Check if a single term can be proven from a set of assumptions.
+   If the proof is not valid, then it is incomplete when either
+   the given term is non-atomic or any term in the list of assumptions
+   is not-atomic.  */
+
+proof_result
+check_term (term_list& ts, tree t)
 {
-  term_list& l = i->assumptions;
-  l.start ();
-  while (!l.done ())
-    decompose_left_term (s, i);
+  /* Try the easy way; search for an equivalent term.  */
+  if (ts.includes (t))
+    return valid;
+
+  /* The hard way; actually consider what the term means.  */
+  return analyze_term (ts, t);
 }
 
-/* Apply the left logical rules of the sequent calculus
-   until the antecedents are fully decomposed into atomic
-   constraints. */
-void
-decompose_left (proof_state& s)
+/* Check to see if any term is proven by the assumptions in the
+   proof goal. The proof is valid if the proof of any term is valid.
+   If validity cannot be determined, but any particular
+   check was undecided, then this goal is undecided.  */
+
+proof_result
+check_goal (proof_goal& g)
 {
-  goal_iterator iter = s.begin ();
-  goal_iterator end = s.end ();
-  for ( ; iter != end; ++iter)
-    decompose_left_goal (s, iter);
+  term_list::iterator iter = g.conclusions.begin ();
+  term_list::iterator end = g.conclusions.end ();
+  bool incomplete = false;
+  while (iter != end)
+    {
+      proof_result r = check_term (g.assumptions, *iter);
+      if (r == valid)
+        return r;
+      if (r == undecided)
+        incomplete = true;
+      ++iter;
+    }
+
+    /* Was the proof complete? */
+    if (incomplete)
+      return undecided;
+    else
+      return invalid;
 }
 
-/* Returns a vector of terms from the term list L. */
-tree
-extract_terms (term_list& l)
+/* Check if the the proof is valid. This is the case when all
+   goals can be discharged. If any goal is invalid, then the
+   entire proof is invalid. Otherwise, the proof is undecided.  */
+
+proof_result
+check_proof (proof_state& p)
 {
-  tree result = make_tree_vec (l.size());
-  term_list::iterator iter = l.begin();
-  term_list::iterator end = l.end();
-  for (int n = 0; iter != end; ++iter, ++n)
-    TREE_VEC_ELT (result, n) = *iter;
-  return result;
+  proof_state::iterator iter = p.begin();
+  proof_state::iterator end = p.end();
+  while (iter != end)
+    {
+      proof_result r = check_goal (*iter);
+      if (r == invalid)
+        return r;
+      if (r == valid)
+        iter = p.discharge (iter);
+      else
+        ++iter;
+    }
+
+  /* If all goals are discharged, then the proof is valid.  */
+  if (p.empty())
+    return valid;
+  else
+    return undecided;
 }
 
-/* Extract the assumptions from the proof state S
-   as a vector of vectors of atomic constraints. */
-inline tree
-extract_assumptions (proof_state& s)
+/*---------------------------------------------------------------------------
+                           Left logical rules
+---------------------------------------------------------------------------*/
+
+term_list::iterator
+load_check_assumption (term_list& ts, term_list::iterator i)
 {
-  tree result = make_tree_vec (s.size ());
-  goal_iterator iter = s.begin ();
-  goal_iterator end = s.end ();
-  for (int n = 0; iter != end; ++iter, ++n)
-    TREE_VEC_ELT (result, n) = extract_terms (iter->assumptions);
-  return result;
+  tree decl = CHECK_CONSTR_CONCEPT (*i);
+  tree tmpl = DECL_TI_TEMPLATE (decl);
+  tree args = CHECK_CONSTR_ARGS (*i);
+  return ts.replace(i, expand_concept (tmpl, args));
 }
 
-} // namespace
+term_list::iterator
+load_parameterized_assumption (term_list& ts, term_list::iterator i)
+{
+  return ts.replace(i, PARM_CONSTR_OPERAND(*i));
+}
 
-/* Decompose the required expression T into a constraint set: a
-   vector of vectors containing only atomic propositions. If T is
-   invalid, return an error. */
-tree
-decompose_assumptions (tree t)
+term_list::iterator
+load_conjunction_assumption (term_list& ts, term_list::iterator i)
 {
-  if (!t || t == error_mark_node)
-    return t;
+  tree t1 = TREE_OPERAND (*i, 0);
+  tree t2 = TREE_OPERAND (*i, 1);
+  return ts.replace(i, t1, t2);
+}
 
-  /* Create a proof state, and insert T as the sole assumption. */
-  proof_state s;
-  term_list &l = s.begin ()->assumptions;
-  l.insert (t);
+/* Examine the terms in the list, and apply left-logical rules to move
+   terms into the set of assumptions. */
 
-  /* Decompose the expression into a constraint set, and then
-     extract the terms for the AST. */
-  decompose_left (s);
-  return extract_assumptions (s);
+void
+load_assumptions (proof_goal& g)
+{
+  term_list::iterator iter = g.assumptions.begin();
+  term_list::iterator end = g.assumptions.end();
+  while (iter != end)
+    {
+      switch (TREE_CODE (*iter))
+        {
+        case CHECK_CONSTR:
+          iter = load_check_assumption (g.assumptions, iter);
+          break;
+        case PARM_CONSTR:
+          iter = load_parameterized_assumption (g.assumptions, iter);
+          break;
+        case CONJ_CONSTR:
+          iter = load_conjunction_assumption (g.assumptions, iter);
+          break;
+        default:
+          ++iter;
+          break;
+        }
+    }
 }
 
+/* In each subgoal, load constraints into the assumption set.  */
 
-/*---------------------------------------------------------------------------
-                           Subsumption Rules
----------------------------------------------------------------------------*/
+void
+load_assumptions(proof_state& p)
+{
+  proof_state::iterator iter = p.begin();
+  while (iter != p.end())
+    {
+      load_assumptions (*iter);
+      ++iter;
+    }
+}
 
-namespace {
+void
+explode_disjunction (proof_state& p, proof_state::iterator gi, term_list::iterator ti1)
+{
+  tree t1 = TREE_OPERAND (*ti1, 0);
+  tree t2 = TREE_OPERAND (*ti1, 1);
 
-bool subsumes_constraint (tree, tree);
-bool subsumes_conjunction (tree, tree);
-bool subsumes_disjunction (tree, tree);
-bool subsumes_parameterized_constraint (tree, tree);
-bool subsumes_atomic_constraint (tree, tree);
+  /* Erase the current term from the goal. */
+  proof_goal& g1 = *gi;
+  proof_goal& g2 = *p.branch (gi);
 
-/* Returns true if the assumption A matches the conclusion C. This
-   is generally the case when A and C have the same syntax.
+  /* Get an iterator to the equivalent position in th enew goal. */
+  int n = std::distance (g1.assumptions.begin (), ti1);
+  term_list::iterator ti2 = g2.assumptions.begin ();
+  std::advance (ti2, n);
 
-   NOTE: There will be specialized matching rules to accommodate
-   type equivalence, conversion, inheritance, etc. But this is not
-   in the current concepts draft. */
-inline bool
-match_terms (tree a, tree c)
-{
-  return cp_tree_equal (a, c);
+  /* Replace the disjunction in both branches. */
+  g1.assumptions.replace (ti1, t1);
+  g2.assumptions.replace (ti2, t2);
 }
 
-/* Returns true if the list of assumptions AS subsumes the atomic
-   proposition C. This is the case when we can find a proposition
-  in AS that entails the conclusion C. */
+
+/* Search the assumptions of the goal for the first disjunction. */
+
 bool
-subsumes_atomic_constraint (tree as, tree c)
+explode_goal (proof_state& p, proof_state::iterator gi)
 {
-  for (int i = 0; i < TREE_VEC_LENGTH (as); ++i)
-    if (match_terms (TREE_VEC_ELT (as, i), c))
-      return true;
+  term_list& ts = gi->assumptions;
+  term_list::iterator ti = ts.begin();
+  term_list::iterator end = ts.end();
+  while (ti != end)
+    {
+      if (TREE_CODE (*ti) == DISJ_CONSTR)
+        {
+          explode_disjunction (p, gi, ti);
+          return true;
+        }
+      else ++ti;
+    }
   return false;
 }
 
-/* Returns true when both operands of C are subsumed by the
-   assumptions AS. */
-inline bool
-subsumes_conjunction (tree as, tree c)
+/* Search for the first goal with a disjunction, and then branch
+   creating a clone of that subgoal. */
+
+void
+explode_assumptions (proof_state& p)
 {
-  tree l = TREE_OPERAND (c, 0);
-  tree r = TREE_OPERAND (c, 1);
-  return subsumes_constraint (as, l) && subsumes_constraint (as, r);
+  proof_state::iterator iter = p.begin();
+  proof_state::iterator end = p.end();
+  while (iter != end)
+    {
+      if (explode_goal (p, iter))
+        return;
+      ++iter;
+    }
 }
 
-/* Returns true when either operand of C is subsumed by the
-   assumptions AS. */
-inline bool
-subsumes_disjunction (tree as, tree c)
+
+/*---------------------------------------------------------------------------
+                           Right logical rules
+---------------------------------------------------------------------------*/
+
+term_list::iterator
+load_disjunction_conclusion (term_list& g, term_list::iterator i)
 {
-  tree l = TREE_OPERAND (c, 0);
-  tree r = TREE_OPERAND (c, 1);
-  return subsumes_constraint (as, l) || subsumes_constraint (as, r);
+  tree t1 = TREE_OPERAND (*i, 0);
+  tree t2 = TREE_OPERAND (*i, 1);
+  return g.replace(i, t1, t2);
 }
 
-/* Returns true when the operand of C is subsumed by the
-   assumptions in AS. The parameters are not considered in
-   the subsumption rules. */
-bool
-subsumes_parameterized_constraint (tree as, tree c)
+/* Apply logical rules to the right hand side. This will load the
+   conclusion set with all tpp-level disjunctions.  */
+
+void
+load_conclusions (proof_goal& g)
 {
-  tree t = PARM_CONSTR_OPERAND (c);
-  return subsumes_constraint (as, t);
+  term_list::iterator iter = g.conclusions.begin();
+  term_list::iterator end = g.conclusions.end();
+  while (iter != end)
+    {
+      if (TREE_CODE (*iter) == DISJ_CONSTR)
+        iter = load_disjunction_conclusion (g.conclusions, iter);
+      else
+        ++iter;
+    }
 }
 
+void
+load_conclusions (proof_state& p)
+{
+  proof_state::iterator iter = p.begin();
+  while (iter != p.end())
+    {
+      load_conclusions (*iter);
+      ++iter;
+    }
+}
+
+
+/*---------------------------------------------------------------------------
+                          High-level proof tactics
+---------------------------------------------------------------------------*/
+
+/* Given two constraints A and C, try to derive a proof that
+   A implies C.  */
 
-/* Returns true when the list of assumptions AS subsumes the
-   concluded proposition C. This is a simple recursive descent
-   on C, matching against propositions in the assumption list AS. */
 bool
-subsumes_constraint (tree as, tree c)
+prove_implication (tree a, tree c)
 {
-  switch (TREE_CODE (c))
+  /* Quick accept. */
+  if (cp_tree_equal (a, c))
+    return true;
+
+  /* Build the initial proof state. */
+  proof_state proof;
+  proof_goal& goal = proof.front();
+  goal.assumptions.push_back(a);
+  goal.conclusions.push_back(c);
+
+  /* Perform an initial right-expansion in the off-chance that the right
+     hand side contains disjunctions. */
+  load_conclusions (proof);
+
+  int step_max = 1 << 10;
+  int step_count = 0;              /* FIXME: We shouldn't have this. */
+  std::size_t branch_limit = 1024; /* FIXME: This needs to be configurable. */
+  while (step_count < step_max && proof.size() < branch_limit)
     {
-    case CONJ_CONSTR:
-      return subsumes_conjunction (as, c);
-    case DISJ_CONSTR:
-      return subsumes_disjunction (as, c);
-    case PARM_CONSTR:
-      return subsumes_parameterized_constraint (as, c);
-    default:
-      return subsumes_atomic_constraint (as, c);
+      /* Determine if we can prove that the assumptions entail the
+         conclusions. If so, we're done. */
+      load_assumptions (proof);
+
+      /* Can we solve the proof based on this? */
+      proof_result r = check_proof (proof);
+      if (r != undecided)
+        return r == valid;
+
+      /* If not, then we need to dig into disjunctions.  */
+      explode_assumptions (proof);
+
+      ++step_count;
     }
+
+  if (step_count == step_max)
+    error ("subsumption failed to resolve");
+
+  if (proof.size() == branch_limit)
+    error ("exceeded maximum number of branches");
+
+  return false;
 }
 
-/* Returns true if the LEFT constraints subsume the RIGHT constraints.
-   This is done by checking that the RIGHT requirements follow from
-   each of the LEFT subgoals. */
+/* Returns true if the LEFT constraint subsume the RIGHT constraints.
+   This is done by deriving a proof of the conclusions on the RIGHT
+   from the assumptions on the LEFT assumptions.  */
+
 bool
 subsumes_constraints_nonnull (tree left, tree right)
 {
   gcc_assert (check_constraint_info (left));
   gcc_assert (check_constraint_info (right));
 
-  /* Check that the required expression in RIGHT is subsumed by each
-     subgoal in the assumptions of LEFT. */
-  tree as = CI_ASSUMPTIONS (left);
-  tree c = CI_NORMALIZED_CONSTRAINTS (right);
-  for (int i = 0; i < TREE_VEC_LENGTH (as); ++i)
-    if (!subsumes_constraint (TREE_VEC_ELT (as, i), c))
-      return false;
-  return true;
+  auto_timevar time (TV_CONSTRAINT_SUB);
+  tree a = CI_ASSOCIATED_CONSTRAINTS (left);
+  tree c = CI_ASSOCIATED_CONSTRAINTS (right);
+  return prove_implication (a, c);
 }
 
 } /* namespace */
 
 /* Returns true if the LEFT constraints subsume the RIGHT
-   constraints. */
+   constraints.  */
+
 bool
 subsumes (tree left, tree right)
 {
index 0e44409..ef864e7 100644 (file)
@@ -2774,6 +2774,39 @@ write_expression (tree expr)
       write_type (TREE_TYPE (TREE_OPERAND (expr, 0)));
     }
   else if (TREE_CODE (expr) == SIZEOF_EXPR
+          && ARGUMENT_PACK_P (TREE_OPERAND (expr, 0)))
+    {
+      tree args = ARGUMENT_PACK_ARGS (TREE_OPERAND (expr, 0));
+      int length = TREE_VEC_LENGTH (args);
+      if (abi_warn_or_compat_version_crosses (10))
+       G.need_abi_warning = true;
+      if (abi_version_at_least (10))
+       {
+         /* sP <template-arg>* E # sizeof...(T), size of a captured
+            template parameter pack from an alias template */
+         write_string ("sP");
+         for (int i = 0; i < length; ++i)
+           write_template_arg (TREE_VEC_ELT (args, i));
+         write_char ('E');
+       }
+      else
+       {
+         /* In GCC 5 we represented this sizeof wrong, with the effect
+            that we mangled it as the last element of the pack.  */
+         tree arg = TREE_VEC_ELT (args, length-1);
+         if (TYPE_P (arg))
+           {
+             write_string ("st");
+             write_type (arg);
+           }
+         else
+           {
+             write_string ("sz");
+             write_expression (arg);
+           }
+       }
+    }
+  else if (TREE_CODE (expr) == SIZEOF_EXPR
           && TYPE_P (TREE_OPERAND (expr, 0)))
     {
       write_string ("st");
@@ -3094,6 +3127,29 @@ write_expression (tree expr)
                         "cannot be mangled");
                  continue;
                }
+             else if (FOLD_EXPR_P (expr))
+               {
+                 /* The first 'operand' of a fold-expression is the operator
+                    that it folds over.  */
+                 if (i == 0)
+                   {
+                     int fcode = TREE_INT_CST_LOW (operand);
+                     write_string (operator_name_info[fcode].mangled_name);
+                     continue;
+                   }
+                 else if (code == BINARY_LEFT_FOLD_EXPR)
+                   {
+                     /* The order of operands of the binary left and right
+                        folds is the same, but we want to mangle them in
+                        lexical order, i.e. non-pack first.  */
+                     if (i == 1)
+                       operand = FOLD_EXPR_INIT (expr);
+                     else
+                       operand = FOLD_EXPR_PACK (expr);
+                   }
+                 if (PACK_EXPANSION_P (operand))
+                   operand = PACK_EXPANSION_PATTERN (operand);
+               }
              write_expression (operand);
            }
        }
index aa657fa..5b4f1b0 100644 (file)
@@ -155,3 +155,7 @@ DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1)
 
 /* Variadic templates extension. */
 DEF_SIMPLE_OPERATOR ("...", EXPR_PACK_EXPANSION, "sp", 1)
+DEF_SIMPLE_OPERATOR ("... +", UNARY_LEFT_FOLD_EXPR, "fl", 2)
+DEF_SIMPLE_OPERATOR ("+ ...", UNARY_RIGHT_FOLD_EXPR, "fr", 2)
+DEF_SIMPLE_OPERATOR ("+ ... +", BINARY_LEFT_FOLD_EXPR, "fL", 3)
+DEF_SIMPLE_OPERATOR ("+ ... +", BINARY_RIGHT_FOLD_EXPR, "fR", 3)
index 4849016..df8e743 100644 (file)
@@ -9747,10 +9747,12 @@ cp_parser_lambda_expression (cp_parser* parser)
 
     ok &= cp_parser_lambda_declarator_opt (parser, lambda_expr);
 
+    if (ok && cp_parser_error_occurred (parser))
+      ok = false;
+
     if (ok)
       {
-       if (!cp_parser_error_occurred (parser)
-           && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
+       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
            && cp_parser_start_tentative_firewall (parser))
          start = token;
        cp_parser_lambda_body (parser, lambda_expr);
@@ -11184,11 +11186,17 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl,
                     bool ivdep)
 {
   tree stmt, range_expr;
+  cxx_binding *binding = NULL;
+  tree name = NULL_TREE;
 
   /* Get the range declaration momentarily out of the way so that
      the range expression doesn't clash with it. */
   if (range_decl != error_mark_node)
-    pop_binding (DECL_NAME (range_decl), range_decl);
+    {
+      name = DECL_NAME (range_decl);
+      binding = IDENTIFIER_BINDING (name);
+      IDENTIFIER_BINDING (name) = binding->previous;
+    }
 
   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
     {
@@ -11200,7 +11208,10 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl,
 
   /* Put the range declaration back into scope. */
   if (range_decl != error_mark_node)
-    push_binding (DECL_NAME (range_decl), range_decl, current_binding_level);
+    {
+      binding->previous = IDENTIFIER_BINDING (name);
+      IDENTIFIER_BINDING (name) = binding;
+    }
 
   /* If in template, STMT is converted to a normal for-statement
      at instantiation. If not, it is done just ahead. */
@@ -12434,8 +12445,15 @@ cp_parser_simple_declaration (cp_parser* parser,
       if (token->type == CPP_COMMA)
        /* will be consumed next time around */;
       /* If it's a `;', we are done.  */
-      else if (token->type == CPP_SEMICOLON || maybe_range_for_decl)
+      else if (token->type == CPP_SEMICOLON)
        break;
+      else if (maybe_range_for_decl)
+       {
+         if (declares_class_or_enum && token->type == CPP_COLON)
+           pedwarn (decl_specifiers.locations[ds_type_spec], 0,
+                    "types may not be defined in a for-range-declaration");
+         break;
+       }
       /* Anything else is an error.  */
       else
        {
@@ -14687,10 +14705,13 @@ cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
        cp_parser_require (parser, CPP_GREATER, RT_GREATER);
 
         // If template requirements are present, parse them.
-       tree reqs = get_shorthand_constraints (current_template_parms);
-       if (tree r = cp_parser_requires_clause_opt (parser))
-         reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
-       TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
+       if (flag_concepts)
+          {
+           tree reqs = get_shorthand_constraints (current_template_parms);
+           if (tree r = cp_parser_requires_clause_opt (parser))
+              reqs = conjoin_constraints (reqs, normalize_expression (r));
+           TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
+          }
 
        /* Look for the `class' or 'typename' keywords.  */
        cp_parser_type_parameter_key (parser);
@@ -25682,10 +25703,13 @@ cp_parser_explicit_template_declaration (cp_parser* parser, bool member_p)
   cp_parser_skip_to_end_of_template_parameter_list (parser);
 
   /* Manage template requirements */
-  tree reqs = get_shorthand_constraints (current_template_parms);
-  if (tree r = cp_parser_requires_clause_opt (parser))
-    reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
-  TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
+  if (flag_concepts)
+  {
+    tree reqs = get_shorthand_constraints (current_template_parms);
+    if (tree r = cp_parser_requires_clause_opt (parser))
+      reqs = conjoin_constraints (reqs, normalize_expression (r));
+    TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
+  }
 
   cp_parser_template_declaration_after_parameters (parser, parameter_list,
                                                   member_p);
@@ -25993,6 +26017,7 @@ cp_parser_save_member_function_body (cp_parser* parser,
   cp_token *first;
   cp_token *last;
   tree fn;
+  bool function_try_block = false;
 
   /* Create the FUNCTION_DECL.  */
   fn = grokmethod (decl_specifiers, declarator, attributes);
@@ -26014,9 +26039,43 @@ cp_parser_save_member_function_body (cp_parser* parser,
   /* Save away the tokens that make up the body of the
      function.  */
   first = parser->lexer->next_token;
+
+  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRANSACTION_RELAXED))
+    cp_lexer_consume_token (parser->lexer);
+  else if (cp_lexer_next_token_is_keyword (parser->lexer,
+                                          RID_TRANSACTION_ATOMIC))
+    {
+      cp_lexer_consume_token (parser->lexer);
+      /* Match cp_parser_txn_attribute_opt [[ identifier ]].  */
+      if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE)
+         && cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_SQUARE)
+         && (cp_lexer_nth_token_is (parser->lexer, 3, CPP_NAME)
+             || cp_lexer_nth_token_is (parser->lexer, 3, CPP_KEYWORD))
+         && cp_lexer_nth_token_is (parser->lexer, 4, CPP_CLOSE_SQUARE)
+         && cp_lexer_nth_token_is (parser->lexer, 5, CPP_CLOSE_SQUARE))
+       {
+         cp_lexer_consume_token (parser->lexer);
+         cp_lexer_consume_token (parser->lexer);
+         cp_lexer_consume_token (parser->lexer);
+         cp_lexer_consume_token (parser->lexer);
+         cp_lexer_consume_token (parser->lexer);
+       }
+      else
+       while (cp_next_tokens_can_be_gnu_attribute_p (parser)
+              && cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_PAREN))
+         {
+           cp_lexer_consume_token (parser->lexer);
+           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
+             break;
+         }
+    }
+
   /* Handle function try blocks.  */
   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
-    cp_lexer_consume_token (parser->lexer);
+    {
+      cp_lexer_consume_token (parser->lexer);
+      function_try_block = true;
+    }
   /* We can have braced-init-list mem-initializers before the fn body.  */
   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
     {
@@ -26034,8 +26093,9 @@ cp_parser_save_member_function_body (cp_parser* parser,
     }
   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
   /* Handle function try blocks.  */
-  while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
-    cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
+  if (function_try_block)
+    while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
+      cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
   last = parser->lexer->next_token;
 
   /* Save away the inline definition; we will process it when the
@@ -37809,7 +37869,13 @@ synthesize_implicit_template_parm  (cp_parser *parser, tree constr)
       implicit template scope, and we're trying to synthesize a
       constrained parameter, try to find a previous parameter with
       the same name.  This is the same-type rule for abbreviated
-      function templates.  */
+      function templates.
+
+      NOTE: We can generate implicit parameters when tentatively
+      parsing a nested name specifier, only to reject that parse
+      later. However, matching the same template-id as part of a
+      direct-declarator should generate an identical template
+      parameter, so this rule will merge them. */
   if (parser->implicit_template_scope && constr)
     {
       tree t = parser->implicit_template_parms;
index 166aef2..8fa900c 100644 (file)
@@ -195,7 +195,6 @@ static tree try_class_unification (tree, tree, tree, tree, bool);
 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
                                           tree, tree);
 static bool template_template_parm_bindings_ok_p (tree, tree);
-static int template_args_equal (tree, tree);
 static void tsubst_default_arguments (tree, tsubst_flags_t);
 static tree for_each_template_parm_r (tree *, int *, void *);
 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
@@ -7387,11 +7386,12 @@ coerce_template_parameter_pack (tree parms,
 
   /* Convert the remaining arguments, which will be a part of the
      parameter pack "parm".  */
+  int first_pack_arg = arg_idx;
   for (; arg_idx < nargs; ++arg_idx)
     {
       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
       tree actual_parm = TREE_VALUE (parm);
-      int pack_idx = arg_idx - parm_idx;
+      int pack_idx = arg_idx - first_pack_arg;
 
       if (packed_parms)
         {
@@ -7420,12 +7420,12 @@ coerce_template_parameter_pack (tree parms,
       TREE_VEC_ELT (packed_args, pack_idx) = arg;
     }
 
-  if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
+  if (arg_idx - first_pack_arg < TREE_VEC_LENGTH (packed_args)
       && TREE_VEC_LENGTH (packed_args) > 0)
     {
       if (complain & tf_error)
        error ("wrong number of template arguments (%d, should be %d)",
-              arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
+              arg_idx - first_pack_arg, TREE_VEC_LENGTH (packed_args));
       return error_mark_node;
     }
 
@@ -7838,7 +7838,7 @@ coerce_innermost_template_parms (tree parms,
 
 /* Returns 1 if template args OT and NT are equivalent.  */
 
-static int
+int
 template_args_equal (tree ot, tree nt)
 {
   if (nt == ot)
@@ -8595,7 +8595,9 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
             for parameters in the TYPE_DECL of the alias template
             done earlier.  So be careful while getting the template
             of FOUND.  */
-         found = TREE_CODE (found) == TYPE_DECL
+         found = TREE_CODE (found) == TEMPLATE_DECL
+           ? found
+           : TREE_CODE (found) == TYPE_DECL
            ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
            : CLASSTYPE_TI_TEMPLATE (found);
        }
@@ -8695,7 +8697,7 @@ finish_template_variable (tree var, tsubst_flags_t complain)
     {
       if (complain & tf_error)
        {
-         error ("constraints for %qD not satisfied", templ);
+         error ("use of invalid variable template %qE", var);
          diagnose_constraints (location_of (var), templ, arglist);
        }
       return error_mark_node;
@@ -9086,6 +9088,8 @@ push_tinst_level_loc (tree d, location_t loc)
 
   if (tinst_depth >= max_tinst_depth)
     {
+      /* Tell error.c not to try to instantiate any templates.  */
+      at_eof = 2;
       fatal_error (input_location,
                   "template instantiation depth exceeds maximum of %d"
                    " (use -ftemplate-depth= to increase the maximum)",
@@ -9664,20 +9668,23 @@ tsubst_attributes (tree attributes, tree args,
       }
 
   if (last_dep)
-    for (tree *p = &attributes; *p; p = &TREE_CHAIN (*p))
+    for (tree *p = &attributes; *p; )
       {
        tree t = *p;
        if (ATTR_IS_DEPENDENT (t))
          {
            tree subst = tsubst_attribute (t, NULL, args, complain, in_decl);
-           if (subst == t)
-             continue;
-           *p = subst;
-           do
-             p = &TREE_CHAIN (*p);
-           while (*p);
-           *p = TREE_CHAIN (t);
+           if (subst != t)
+             {
+               *p = subst;
+               do
+                 p = &TREE_CHAIN (*p);
+               while (*p);
+               *p = TREE_CHAIN (t);
+               continue;
+             }
          }
+       p = &TREE_CHAIN (*p);
       }
 
   return attributes;
@@ -10742,6 +10749,12 @@ tsubst_unary_left_fold (tree t, tree args, tsubst_flags_t complain,
   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
   if (pack == error_mark_node)
     return error_mark_node;
+  if (PACK_EXPANSION_P (pack))
+    {
+      tree r = copy_node (t);
+      FOLD_EXPR_PACK (r) = pack;
+      return r;
+    }
   if (TREE_VEC_LENGTH (pack) == 0)
     return expand_empty_fold (t, complain);
   else
@@ -10764,6 +10777,14 @@ tsubst_binary_left_fold (tree t, tree args, tsubst_flags_t complain,
   if (init == error_mark_node)
     return error_mark_node;
 
+  if (PACK_EXPANSION_P (pack))
+    {
+      tree r = copy_node (t);
+      FOLD_EXPR_PACK (r) = pack;
+      FOLD_EXPR_INIT (r) = init;
+      return r;
+    }
+
   tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1);
   TREE_VEC_ELT (vec, 0) = init;
   for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i)
@@ -10805,6 +10826,12 @@ tsubst_unary_right_fold (tree t, tree args, tsubst_flags_t complain,
   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
   if (pack == error_mark_node)
     return error_mark_node;
+  if (PACK_EXPANSION_P (pack))
+    {
+      tree r = copy_node (t);
+      FOLD_EXPR_PACK (r) = pack;
+      return r;
+    }
   if (TREE_VEC_LENGTH (pack) == 0)
     return expand_empty_fold (t, complain);
   else
@@ -10827,6 +10854,14 @@ tsubst_binary_right_fold (tree t, tree args, tsubst_flags_t complain,
   if (init == error_mark_node)
     return error_mark_node;
 
+  if (PACK_EXPANSION_P (pack))
+    {
+      tree r = copy_node (t);
+      FOLD_EXPR_PACK (r) = pack;
+      FOLD_EXPR_INIT (r) = init;
+      return r;
+    }
+
   int n = TREE_VEC_LENGTH (pack);
   tree vec = make_tree_vec (n + 1);
   for (int i = 0; i < n; ++i)
@@ -11089,6 +11124,12 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
       local_specializations = saved_local_specializations;
     }
   
+  /* If the dependent pack arguments were such that we end up with only a
+     single pack expansion again, there's no need to keep it in a TREE_VEC.  */
+  if (len == 1 && TREE_CODE (result) == TREE_VEC
+      && PACK_EXPANSION_P (TREE_VEC_ELT (result, 0)))
+    return TREE_VEC_ELT (result, 0);
+
   return result;
 }
 
@@ -13169,13 +13210,20 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
 
                if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
                  {
-                   tree argvec = tsubst (TYPE_TI_ARGS (t), args,
+                   tree tinfo = TYPE_TEMPLATE_INFO (t);
+                   /* We might need to substitute into the types of non-type
+                      template parameters.  */
+                   tree tmpl = tsubst (TI_TEMPLATE (tinfo), args,
+                                       complain, in_decl);
+                   if (tmpl == error_mark_node)
+                     return error_mark_node;
+                   tree argvec = tsubst (TI_ARGS (tinfo), args,
                                          complain, in_decl);
                    if (argvec == error_mark_node)
                      return error_mark_node;
 
                    TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
-                     = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
+                     = build_template_info (tmpl, argvec);
                  }
              }
            break;
@@ -13696,10 +13744,17 @@ tsubst_baselink (tree baselink, tree object_type,
     if (!object_type)
       object_type = current_class_type;
 
-    if (qualified)
-      baselink = adjust_result_of_qualified_name_lookup (baselink,
-                                                        qualifying_scope,
-                                                        object_type);
+    if (qualified || name == complete_dtor_identifier)
+      {
+       baselink = adjust_result_of_qualified_name_lookup (baselink,
+                                                          qualifying_scope,
+                                                          object_type);
+       if (!qualified)
+         /* We need to call adjust_result_of_qualified_name_lookup in case the
+            destructor names a base class, but we unset BASELINK_QUALIFIED_P
+            so that we still get virtual function binding.  */
+         BASELINK_QUALIFIED_P (baselink) = false;
+      }
     return baselink;
 }
 
@@ -13758,8 +13813,10 @@ tsubst_qualified_id (tree qualified_id, tree args,
     {
       if (is_template)
        expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
-      return build_qualified_name (NULL_TREE, scope, expr,
-                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
+      tree r = build_qualified_name (NULL_TREE, scope, expr,
+                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
+      REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id);
+      return r;
     }
 
   if (!BASELINK_P (name) && !DECL_P (expr))
@@ -13839,6 +13896,9 @@ tsubst_qualified_id (tree qualified_id, tree args,
       && TREE_CODE (expr) != OFFSET_REF)
     expr = convert_from_reference (expr);
 
+  if (REF_PARENTHESIZED_P (qualified_id))
+    expr = force_paren_expr (expr);
+
   return expr;
 }
 
@@ -20125,7 +20185,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict,
       /* An unresolved overload is a nondeduced context.  */
       if (is_overloaded_fn (parm) || type_unknown_p (parm))
        return unify_success (explain_p);
-      gcc_assert (EXPR_P (parm));
+      gcc_assert (EXPR_P (parm) || TREE_CODE (parm) == TRAIT_EXPR);
     expr:
       /* We must be looking at an expression.  This can happen with
         something like:
@@ -21746,7 +21806,10 @@ instantiate_decl (tree d, int defer_ok,
   else
     {
       deleted_p = false;
-      pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
+      if (DECL_CLASS_SCOPE_P (code_pattern))
+       pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
+      else
+       pattern_defined = ! DECL_EXTERNAL (code_pattern);
     }
 
   /* We may be in the middle of deferred access check.  Disable it now.  */
@@ -23626,7 +23689,10 @@ build_non_dependent_expr (tree expr)
   if (0 && flag_checking && cxx_dialect >= cxx11
       /* Don't do this during nsdmi parsing as it can lead to
         unexpected recursive instantiations.  */
-      && !parsing_nsdmi ())
+      && !parsing_nsdmi ()
+      /* Don't do this during concept expansion either and for
+         the same reason.  */
+      && !expanding_concept ())
     fold_non_dependent_expr (expr);
 
   /* Preserve OVERLOADs; the functions must be available to resolve
@@ -23764,7 +23830,7 @@ make_constrained_auto (tree con, tree args)
   else
     expr = build_concept_check (build_overload (tmpl, NULL_TREE), type, args);
 
-  tree constr = make_predicate_constraint (expr);
+  tree constr = normalize_expression (expr);
   PLACEHOLDER_TYPE_CONSTRAINTS (type) = constr;
 
   /* Our canonical type depends on the constraint.  */
@@ -23916,7 +23982,10 @@ do_auto_deduction (tree type, tree init, tree auto_node)
 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.
    The CONTEXT determines the context in which auto deduction is performed
-   and is used to control error diagnostics.  */
+   and is used to control error diagnostics.
+
+   For partial-concept-ids, extra args may be appended to the list of deduced
+   template arguments prior to determining constraint satisfaction.  */
 
 tree
 do_auto_deduction (tree type, tree init, tree auto_node,
@@ -23963,8 +24032,10 @@ do_auto_deduction (tree type, tree init, tree auto_node,
 
   if (AUTO_IS_DECLTYPE (auto_node))
     {
-      bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
-                                  && !REF_PARENTHESIZED_P (init)));
+      bool id = (DECL_P (init)
+                || ((TREE_CODE (init) == COMPONENT_REF
+                     || TREE_CODE (init) == SCOPE_REF)
+                    && !REF_PARENTHESIZED_P (init)));
       targs = make_tree_vec (1);
       TREE_VEC_ELT (targs, 0)
        = finish_decltype_type (init, id, tf_warning_or_error);
@@ -24021,8 +24092,19 @@ do_auto_deduction (tree type, tree init, tree auto_node,
   if (flag_concepts && !processing_template_decl)
     if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (auto_node))
       {
-        /* Use the deduced type to check the associated constraints. */
-        if (!constraints_satisfied_p (constr, targs))
+        /* Use the deduced type to check the associated constraints. If we
+           have a partial-concept-id, rebuild the argument list so that
+           we check using the extra arguments. */
+        gcc_assert (TREE_CODE (constr) == CHECK_CONSTR);
+        tree cargs = CHECK_CONSTR_ARGS (constr);
+        if (TREE_VEC_LENGTH (cargs) > 1)
+          {
+            cargs = copy_node (cargs);
+            TREE_VEC_ELT (cargs, 0) = TREE_VEC_ELT (targs, 0);
+          }
+        else
+          cargs = targs;
+        if (!constraints_satisfied_p (constr, cargs))
           {
             if (complain & tf_warning_or_error)
               {
@@ -24342,24 +24424,15 @@ struct constr_hasher : ggc_ptr_hash<constr_entry>
 
 static GTY (()) hash_table<constr_hasher> *decl_constraints;
 
-/* Returns true iff cinfo contains a valid set of constraints.
-   This is the case when the associated requirements have been
-   successfully decomposed into lists of atomic constraints.
-   That is, when the saved assumptions are not error_mark_node.  */
-
-bool
-valid_constraints_p (tree cinfo)
-{
-  gcc_assert (cinfo);
-  return CI_ASSUMPTIONS (cinfo) != error_mark_node;
-}
-
 /* Returns the template constraints of declaration T. If T is not
    constrained, return NULL_TREE. Note that T must be non-null. */
 
 tree
 get_constraints (tree t)
 {
+  if (!flag_concepts)
+    return NULL_TREE;
+
   gcc_assert (DECL_P (t));
   if (TREE_CODE (t) == TEMPLATE_DECL)
     t = DECL_TEMPLATE_RESULT (t);
@@ -24381,7 +24454,7 @@ set_constraints (tree t, tree ci)
 {
   if (!ci)
     return;
-  gcc_assert (t);
+  gcc_assert (t && flag_concepts);
   if (TREE_CODE (t) == TEMPLATE_DECL)
     t = DECL_TEMPLATE_RESULT (t);
   gcc_assert (!get_constraints (t));
@@ -24407,12 +24480,244 @@ remove_constraints (tree t)
     decl_constraints->clear_slot (slot);
 }
 
+/* Memoized satisfaction results for declarations. This
+   maps the pair (constraint_info, arguments) to the result computed
+   by constraints_satisfied_p.  */
+
+struct GTY((for_user)) constraint_sat_entry
+{
+  tree ci;
+  tree args;
+  tree result;
+};
+
+/* Hashing function and equality for constraint entries. */
+
+struct constraint_sat_hasher : ggc_ptr_hash<constraint_sat_entry>
+{
+  static hashval_t hash (constraint_sat_entry *e)
+  {
+    hashval_t val = iterative_hash_object(e->ci, 0);
+    return iterative_hash_template_arg (e->args, val);
+  }
+
+  static bool equal (constraint_sat_entry *e1, constraint_sat_entry *e2)
+  {
+    return e1->ci == e2->ci && comp_template_args (e1->args, e2->args);
+  }
+};
+
+/* Memoized satisfaction results for concept checks. */
+
+struct GTY((for_user)) concept_spec_entry
+{
+  tree tmpl;
+  tree args;
+  tree result;
+};
+
+/* Hashing function and equality for constraint entries.  */
+
+struct concept_spec_hasher : ggc_ptr_hash<concept_spec_entry>
+{
+  static hashval_t hash (concept_spec_entry *e)
+  {
+    return hash_tmpl_and_args (e->tmpl, e->args);
+  }
+
+  static bool equal (concept_spec_entry *e1, concept_spec_entry *e2)
+  {
+    ++comparing_specializations;
+    bool eq = e1->tmpl == e2->tmpl && comp_template_args (e1->args, e2->args);
+    --comparing_specializations;
+    return eq;
+  }
+};
+
+static GTY (()) hash_table<constraint_sat_hasher> *constraint_memos;
+static GTY (()) hash_table<concept_spec_hasher> *concept_memos;
+
+/* Search for a memoized satisfaction result. Returns one of the
+   truth value nodes if previously memoized, or NULL_TREE otherwise.   */
+
+tree
+lookup_constraint_satisfaction (tree ci, tree args)
+{
+  constraint_sat_entry elt = { ci, args, NULL_TREE };
+  constraint_sat_entry* found = constraint_memos->find (&elt);
+  if (found)
+    return found->result;
+  else
+    return NULL_TREE;
+}
+
+/* Memoize the result of a satisfication test. Returns the saved result.  */
+
+tree
+memoize_constraint_satisfaction (tree ci, tree args, tree result)
+{
+  constraint_sat_entry elt = {ci, args, result};
+  constraint_sat_entry** slot = constraint_memos->find_slot (&elt, INSERT);
+  constraint_sat_entry* entry = ggc_alloc<constraint_sat_entry> ();
+  *entry = elt;
+  *slot = entry;
+  return result;
+}
+
+/* Search for a memoized satisfaction result for a concept. */
+
+tree
+lookup_concept_satisfaction (tree tmpl, tree args)
+{
+  concept_spec_entry elt = { tmpl, args, NULL_TREE };
+  concept_spec_entry* found = concept_memos->find (&elt);
+  if (found)
+    return found->result;
+  else
+    return NULL_TREE;
+}
+
+/* Memoize the result of a concept check. Returns the saved result.  */
+
+tree
+memoize_concept_satisfaction (tree tmpl, tree args, tree result)
+{
+  concept_spec_entry elt = {tmpl, args, result};
+  concept_spec_entry** slot = concept_memos->find_slot (&elt, INSERT);
+  concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
+  *entry = elt;
+  *slot = entry;
+  return result;
+}
+
+static GTY (()) hash_table<concept_spec_hasher> *concept_expansions;
+
+/* Returns a prior concept specialization. This returns the substituted
+   and normalized constraints defined by the concept.  */
+
+tree
+get_concept_expansion (tree tmpl, tree args)
+{
+  concept_spec_entry elt = { tmpl, args, NULL_TREE };
+  concept_spec_entry* found = concept_expansions->find (&elt);
+  if (found)
+    return found->result;
+  else
+    return NULL_TREE;
+}
+
+/* Save a concept expansion for later.  */
+
+tree
+save_concept_expansion (tree tmpl, tree args, tree def)
+{
+  concept_spec_entry elt = {tmpl, args, def};
+  concept_spec_entry** slot = concept_expansions->find_slot (&elt, INSERT);
+  concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
+  *entry = elt;
+  *slot = entry;
+  return def;
+}
+
+static hashval_t
+hash_subsumption_args (tree t1, tree t2)
+{
+  gcc_assert (TREE_CODE (t1) == CHECK_CONSTR);
+  gcc_assert (TREE_CODE (t2) == CHECK_CONSTR);
+  int val = 0;
+  val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t1), val);
+  val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t1), val);
+  val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t2), val);
+  val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t2), val);
+  return val;
+}
+
+/* Compare the constraints of two subsumption entries.  The LEFT1 and
+   LEFT2 arguments comprise the first subsumption pair and the RIGHT1
+   and RIGHT2 arguments comprise the second. These are all CHECK_CONSTRs. */
+
+static bool
+comp_subsumption_args (tree left1, tree left2, tree right1, tree right2)
+{
+  if (CHECK_CONSTR_CONCEPT (left1) == CHECK_CONSTR_CONCEPT (right1))
+    if (CHECK_CONSTR_CONCEPT (left2) == CHECK_CONSTR_CONCEPT (right2))
+      if (comp_template_args (CHECK_CONSTR_ARGS (left1),
+                             CHECK_CONSTR_ARGS (right1)))
+        return comp_template_args (CHECK_CONSTR_ARGS (left2),
+                                  CHECK_CONSTR_ARGS (right2));
+  return false;
+}
+
+/* Key/value pair for learning and memoizing subsumption results. This
+   associates a pair of check constraints (including arguments) with
+   a boolean value indicating the result.  */
+
+struct GTY((for_user)) subsumption_entry
+{
+  tree t1;
+  tree t2;
+  bool result;
+};
+
+/* Hashing function and equality for constraint entries.  */
+
+struct subsumption_hasher : ggc_ptr_hash<subsumption_entry>
+{
+  static hashval_t hash (subsumption_entry *e)
+  {
+    return hash_subsumption_args (e->t1, e->t2);
+  }
+
+  static bool equal (subsumption_entry *e1, subsumption_entry *e2)
+  {
+    ++comparing_specializations;
+    bool eq = comp_subsumption_args(e1->t1, e1->t2, e2->t1, e2->t2);
+    --comparing_specializations;
+    return eq;
+  }
+};
+
+static GTY (()) hash_table<subsumption_hasher> *subsumption_table;
+
+/* Search for a previously cached subsumption result. */
+
+bool*
+lookup_subsumption_result (tree t1, tree t2)
+{
+  subsumption_entry elt = { t1, t2, false };
+  subsumption_entry* found = subsumption_table->find (&elt);
+  if (found)
+    return &found->result;
+  else
+    return 0;
+}
+
+/* Save a subsumption result. */
+
+bool
+save_subsumption_result (tree t1, tree t2, bool result)
+{
+  subsumption_entry elt = {t1, t2, result};
+  subsumption_entry** slot = subsumption_table->find_slot (&elt, INSERT);
+  subsumption_entry* entry = ggc_alloc<subsumption_entry> ();
+  *entry = elt;
+  *slot = entry;
+  return result;
+}
+
 /* Set up the hash table for constraint association. */
 
 void
 init_constraint_processing (void)
 {
+  if (!flag_concepts)
+    return;
+
   decl_constraints = hash_table<constr_hasher>::create_ggc(37);
+  constraint_memos = hash_table<constraint_sat_hasher>::create_ggc(37);
+  concept_memos = hash_table<concept_spec_hasher>::create_ggc(37);
+  concept_expansions = hash_table<concept_spec_hasher>::create_ggc(37);
+  subsumption_table = hash_table<subsumption_hasher>::create_ggc(37);
 }
 
 /* Set up the hash tables for template instantiations.  */
index 8266e83..5726f96 100644 (file)
@@ -260,7 +260,6 @@ cxx_print_xnode (FILE *file, tree node, int indent)
                      indent+4);
         print_node (file, "associated_constr",
                           cinfo->associated_constr, indent+4);
-        print_node_brief (file, "assumptions", cinfo->assumptions, indent+4);
         break;
       }
     case ARGUMENT_PACK_SELECT:
index 503e34b..f916b09 100644 (file)
@@ -947,6 +947,7 @@ accessible_p (tree type, tree decl, bool consider_local_p)
      in default arguments for template parameters), and access
      checking should be performed in the outermost parameter list.  */
   if (processing_template_decl
+      && !expanding_concept ()
       && (!processing_template_parmlist || processing_template_decl > 1))
     return 1;
 
index b6a9cc0..a338c51 100644 (file)
@@ -1647,17 +1647,10 @@ force_paren_expr (tree expr)
       && TREE_CODE (expr) != SCOPE_REF)
     return expr;
 
-  if (TREE_CODE (expr) == COMPONENT_REF)
+  if (TREE_CODE (expr) == COMPONENT_REF
+      || TREE_CODE (expr) == SCOPE_REF)
     REF_PARENTHESIZED_P (expr) = true;
-  else if (type_dependent_expression_p (expr)
-          /* When processing_template_decl, a SCOPE_REF may actually be
-             referring to a non-static data member of the current class, in
-             which case its TREE_TYPE may not be properly cv-qualified (the
-             cv-qualifiers of the implicit *this object haven't yet been taken
-             into account) so we have to delay building a static_cast until
-             instantiation.  */
-          || (processing_template_decl
-              && TREE_CODE (expr) == SCOPE_REF))
+  else if (type_dependent_expression_p (expr))
     expr = build1 (PAREN_EXPR, TREE_TYPE (expr), expr);
   else if (VAR_P (expr) && DECL_HARD_REGISTER (expr))
     /* We can't bind a hard register variable to a reference.  */;
@@ -9224,6 +9217,10 @@ apply_deduced_return_type (tree fco, tree return_type)
   if (TREE_TYPE (result) == return_type)
     return;
 
+  if (!processing_template_decl && !VOID_TYPE_P (return_type)
+      && !complete_type_or_else (return_type, NULL_TREE))
+    return;
+
   /* We already have a DECL_RESULT from start_preparsed_function.
      Now we need to redo the work it and allocate_struct_function
      did to reflect the new type.  */
@@ -9239,8 +9236,6 @@ apply_deduced_return_type (tree fco, tree return_type)
 
   if (!processing_template_decl)
     {
-      if (!VOID_TYPE_P (TREE_TYPE (result)))
-       complete_type_or_else (TREE_TYPE (result), NULL_TREE);
       bool aggr = aggregate_value_p (result, fco);
 #ifdef PCC_STATIC_STRUCT_RETURN
       cfun->returns_pcc_struct = aggr;
index df2981f..5b15e9c 100644 (file)
@@ -3139,6 +3139,11 @@ cp_tree_equal (tree t1, tree t2)
       return cp_tree_equal (CI_ASSOCIATED_CONSTRAINTS (t1),
                             CI_ASSOCIATED_CONSTRAINTS (t2));
 
+    case CHECK_CONSTR:
+      return (CHECK_CONSTR_CONCEPT (t1) == CHECK_CONSTR_CONCEPT (t2)
+              && comp_template_args (CHECK_CONSTR_ARGS (t1),
+                                    CHECK_CONSTR_ARGS (t2)));
+
     case TREE_VEC:
       {
        unsigned ix;
index 24bfed7..e59614b 100644 (file)
@@ -6270,8 +6270,7 @@ build_x_conditional_expr (location_t loc, tree ifexp, tree op1, tree op2,
     }
 
   expr = build_conditional_expr (loc, ifexp, op1, op2, complain);
-  if (processing_template_decl && expr != error_mark_node
-      && TREE_CODE (expr) != VEC_COND_EXPR)
+  if (processing_template_decl && expr != error_mark_node)
     {
       tree min = build_min_non_dep (COND_EXPR, expr,
                                    orig_ifexp, orig_op1, orig_op2);
index 3645571..b6ca13b 100644 (file)
@@ -539,6 +539,7 @@ cxx_incomplete_type_diagnostic (const_tree value, const_tree type,
       break;
 
     case TYPENAME_TYPE:
+    case DECLTYPE_TYPE:
       emit_diagnostic (diag_kind, loc, 0,
                       "invalid use of dependent type %qT", type);
       break;
index 84c028f..2b5fb9e 100644 (file)
@@ -4503,7 +4503,7 @@ supported as cross-compilation target only.
 @c alone is too unspecific and must be avoided.
 @anchor{x-x-solaris2}
 @heading *-*-solaris2*
-Support for Solaris 9 has been removed in GCC 4.10.  Support for Solaris
+Support for Solaris 9 has been removed in GCC 5.  Support for Solaris
 8 has been removed in GCC 4.8.  Support for Solaris 7 has been removed
 in GCC 4.6.
 
@@ -4575,11 +4575,14 @@ features, so better stay with Solaris @command{ld}.  To use the LTO linker
 plugin (@option{-fuse-linker-plugin}) with GNU @command{ld}, GNU
 binutils @emph{must} be configured with @option{--enable-largefile}.
 
-To enable symbol versioning in @samp{libstdc++} with Solaris @command{ld},
+To enable symbol versioning in @samp{libstdc++} with the Solaris linker,
 you need to have any version of GNU @command{c++filt}, which is part of
 GNU binutils.  @samp{libstdc++} symbol versioning will be disabled if no
-appropriate version is found.  Solaris @command{c++filt} from the Solaris Studio
-compilers does @emph{not} work.
+appropriate version is found.  Solaris @command{c++filt} from the Solaris
+Studio compilers does @emph{not} work.
+
+GNU @command{make} version 3.81 or later is required to build libjava
+with the Solaris linker.
 
 Sun bug 4927647 sometimes causes random spurious testsuite failures
 related to missing diagnostic output.  This bug doesn't affect GCC
index f01c15b..1b656a1 100644 (file)
@@ -3126,6 +3126,10 @@ static bool frame_pointer_fb_offset_valid;
 
 static vec<dw_die_ref> base_types;
 
+/* Pointer to vector of DW_TAG_string_type DIEs that need finalization
+   once all arguments are parsed.  */
+static vec<dw_die_ref> *string_types;
+
 /* Flags to represent a set of attribute classes for attributes that represent
    a scalar value (bounds, pointers, ...).  */
 enum dw_scalar_form
@@ -19201,18 +19205,70 @@ gen_array_type_die (tree type, dw_die_ref context_die)
       if (size >= 0)
        add_AT_unsigned (array_die, DW_AT_byte_size, size);
       else if (TYPE_DOMAIN (type) != NULL_TREE
-              && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
-              && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
+              && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE)
        {
          tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
-         dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2, NULL);
+         tree rszdecl = szdecl;
+         HOST_WIDE_INT rsize = 0;
 
          size = int_size_in_bytes (TREE_TYPE (szdecl));
-         if (loc && size > 0)
+         if (!DECL_P (szdecl))
            {
-             add_AT_location_description (array_die, DW_AT_string_length, loc);
-             if (size != DWARF2_ADDR_SIZE)
-               add_AT_unsigned (array_die, DW_AT_byte_size, size);
+             if (TREE_CODE (szdecl) == INDIRECT_REF
+                 && DECL_P (TREE_OPERAND (szdecl, 0)))
+               {
+                 rszdecl = TREE_OPERAND (szdecl, 0);
+                 rsize = int_size_in_bytes (TREE_TYPE (rszdecl));
+                 if (rsize <= 0)
+                   size = 0;
+               }
+             else
+               size = 0;
+           }
+         if (size > 0)
+           {
+             dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2, NULL);
+             if (loc == NULL
+                 && early_dwarf
+                 && current_function_decl
+                 && DECL_CONTEXT (rszdecl) == current_function_decl)
+               {
+                 dw_die_ref ref = lookup_decl_die (rszdecl);
+                 dw_loc_descr_ref l = NULL;
+                 if (ref)
+                   {
+                     l = new_loc_descr (DW_OP_call4, 0, 0);
+                     l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
+                     l->dw_loc_oprnd1.v.val_die_ref.die = ref;
+                     l->dw_loc_oprnd1.v.val_die_ref.external = 0;
+                   }
+                 else if (TREE_CODE (rszdecl) == PARM_DECL
+                          && string_types)
+                   {
+                     l = new_loc_descr (DW_OP_call4, 0, 0);
+                     l->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
+                     l->dw_loc_oprnd1.v.val_decl_ref = rszdecl;
+                     string_types->safe_push (array_die);
+                   }
+                 if (l && rszdecl != szdecl)
+                   {
+                     if (rsize == DWARF2_ADDR_SIZE)
+                       add_loc_descr (&l, new_loc_descr (DW_OP_deref,
+                                                         0, 0));
+                     else
+                       add_loc_descr (&l, new_loc_descr (DW_OP_deref_size,
+                                                         rsize, 0));
+                   }
+                 if (l)
+                   loc = new_loc_list (l, NULL, NULL, NULL);
+               }
+             if (loc)
+               {
+                 add_AT_location_description (array_die, DW_AT_string_length,
+                                              loc);
+                 if (size != DWARF2_ADDR_SIZE)
+                   add_AT_unsigned (array_die, DW_AT_byte_size, size);
+               }
            }
        }
       return;
@@ -19278,6 +19334,37 @@ gen_array_type_die (tree type, dw_die_ref context_die)
     add_pubtype (type, array_die);
 }
 
+/* After all arguments are created, adjust any DW_TAG_string_type
+   DIEs DW_AT_string_length attributes.  */
+
+static void
+adjust_string_types (void)
+{
+  dw_die_ref array_die;
+  unsigned int i;
+  FOR_EACH_VEC_ELT (*string_types, i, array_die)
+    {
+      dw_attr_node *a = get_AT (array_die, DW_AT_string_length);
+      if (a == NULL)
+       continue;
+      dw_loc_descr_ref loc = AT_loc (a);
+      gcc_assert (loc->dw_loc_opc == DW_OP_call4
+                 && loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref);
+      dw_die_ref ref = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
+      if (ref)
+       {
+         loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
+         loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
+         loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
+       }
+      else
+       {
+         remove_AT (array_die, DW_AT_string_length);
+         remove_AT (array_die, DW_AT_byte_size);
+       }
+    }
+}
+
 /* This routine generates DIE for array with hidden descriptor, details
    are filled into *info by a langhook.  */
 
@@ -20675,6 +20762,9 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
       tree generic_decl_parm = generic_decl
                                ? DECL_ARGUMENTS (generic_decl)
                                : NULL;
+      auto_vec<dw_die_ref> string_types_vec;
+      if (string_types == NULL)
+       string_types = &string_types_vec;
 
       /* Now we want to walk the list of parameters of the function and
         emit their relevant DIEs.
@@ -20726,14 +20816,25 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
         void_type_node 2) an unprototyped function declaration (not a
         definition).  This just means that we have no info about the
         parameters at all.  */
-      if (prototype_p (TREE_TYPE (decl)))
+      if (early_dwarf)
        {
-         /* This is the prototyped case, check for....  */
-         if (stdarg_p (TREE_TYPE (decl)))
+         if (prototype_p (TREE_TYPE (decl)))
+           {
+             /* This is the prototyped case, check for....  */
+             if (stdarg_p (TREE_TYPE (decl)))
+               gen_unspecified_parameters_die (decl, subr_die);
+           }
+         else if (DECL_INITIAL (decl) == NULL_TREE)
            gen_unspecified_parameters_die (decl, subr_die);
        }
-      else if (DECL_INITIAL (decl) == NULL_TREE)
-       gen_unspecified_parameters_die (decl, subr_die);
+
+      /* Adjust DW_TAG_string_type DIEs if needed, now that all arguments
+        have DIEs.  */
+      if (string_types == &string_types_vec)
+       {
+         adjust_string_types ();
+         string_types = NULL;
+       }
     }
 
   if (subr_die != old_die)
@@ -26576,6 +26677,175 @@ optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
     }
 }
 
+/* Return NULL if l is a DWARF expression, or first op that is not
+   valid DWARF expression.  */
+
+static dw_loc_descr_ref
+non_dwarf_expression (dw_loc_descr_ref l)
+{
+  while (l)
+    {
+      if (l->dw_loc_opc >= DW_OP_reg0 && l->dw_loc_opc <= DW_OP_reg31)
+       return l;
+      switch (l->dw_loc_opc)
+       {
+       case DW_OP_regx:
+       case DW_OP_implicit_value:
+       case DW_OP_stack_value:
+       case DW_OP_GNU_implicit_pointer:
+       case DW_OP_GNU_parameter_ref:
+       case DW_OP_piece:
+       case DW_OP_bit_piece:
+         return l;
+       default:
+         break;
+       }
+      l = l->dw_loc_next;
+    }
+  return NULL;
+}
+
+/* Return adjusted copy of EXPR:
+   If it is empty DWARF expression, return it.
+   If it is valid non-empty DWARF expression,
+   return copy of EXPR with copy of DEREF appended to it.
+   If it is DWARF expression followed by DW_OP_reg{N,x}, return
+   copy of the DWARF expression with DW_OP_breg{N,x} <0> appended
+   and no DEREF.
+   If it is DWARF expression followed by DW_OP_stack_value, return
+   copy of the DWARF expression without anything appended.
+   Otherwise, return NULL.  */
+
+static dw_loc_descr_ref
+copy_deref_exprloc (dw_loc_descr_ref expr, dw_loc_descr_ref deref)
+{
+  
+  if (expr == NULL)
+    return NULL;
+
+  dw_loc_descr_ref l = non_dwarf_expression (expr);
+  if (l && l->dw_loc_next)
+    return NULL;
+
+  if (l)
+    {
+      if (l->dw_loc_opc >= DW_OP_reg0 && l->dw_loc_opc <= DW_OP_reg31)
+       deref = new_loc_descr ((enum dwarf_location_atom)
+                              (DW_OP_breg0 + (l->dw_loc_opc - DW_OP_reg0)),
+                              0, 0);
+      else
+       switch (l->dw_loc_opc)
+         {
+         case DW_OP_regx:
+           deref = new_loc_descr (DW_OP_bregx,
+                                  l->dw_loc_oprnd1.v.val_unsigned, 0);
+           break;
+         case DW_OP_stack_value:
+           deref = NULL;
+           break;
+         default:
+           return NULL;
+         }
+    }
+  else
+    deref = new_loc_descr (deref->dw_loc_opc,
+                          deref->dw_loc_oprnd1.v.val_int, 0);
+
+  dw_loc_descr_ref ret = NULL, *p = &ret;
+  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 = &(*p)->dw_loc_next;
+      expr = expr->dw_loc_next;
+    }
+  *p = deref;
+  return ret;
+}
+
+/* For DW_AT_string_length attribute with DW_OP_call4 reference to a variable
+   or argument, adjust it if needed and return:
+   -1 if the DW_AT_string_length attribute and DW_AT_byte_size attribute
+      if present should be removed
+   0 keep the attribute as is if the referenced var or argument has
+     only DWARF expression that covers all ranges
+   1 if the attribute has been successfully adjusted.  */
+
+static int
+optimize_string_length (dw_attr_node *a)
+{
+  dw_loc_descr_ref l = AT_loc (a), lv;
+  dw_die_ref die = l->dw_loc_oprnd1.v.val_die_ref.die;
+  dw_attr_node *av = get_AT (die, DW_AT_location);
+  dw_loc_list_ref d;
+  bool non_dwarf_expr = false;
+
+  if (av == NULL)
+    return -1;
+  switch (AT_class (av))
+    {
+    case dw_val_class_loc_list:
+      for (d = AT_loc_list (av); d != NULL; d = d->dw_loc_next)
+       if (d->expr && non_dwarf_expression (d->expr))
+         non_dwarf_expr = true;
+      break;
+    case dw_val_class_loc:
+      lv = AT_loc (av);
+      if (lv == NULL)
+       return -1;
+      if (non_dwarf_expression (lv))
+       non_dwarf_expr = true;
+      break;
+    default:
+      return -1;
+    }
+
+  /* If it is safe to keep DW_OP_call4 in, keep it.  */
+  if (!non_dwarf_expr
+      && (l->dw_loc_next == NULL || AT_class (av) == dw_val_class_loc))
+    return 0;
+
+  /* If not dereferencing the DW_OP_call4 afterwards, we can just
+     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;
+      return 1;
+    }
+
+  dw_loc_list_ref list, *p;
+  switch (AT_class (av))
+    {
+    case dw_val_class_loc_list:
+      p = &list;
+      list = NULL;
+      for (d = AT_loc_list (av); d != NULL; d = d->dw_loc_next)
+       {
+         lv = copy_deref_exprloc (d->expr, l->dw_loc_next);
+         if (lv)
+           {
+             *p = new_loc_list (lv, d->begin, d->end, d->section);
+             p = &(*p)->dw_loc_next;
+           }
+       }
+      if (list == NULL)
+       return -1;
+      a->dw_attr_val.val_class = dw_val_class_loc_list;
+      gen_llsym (list);
+      *AT_loc_list_ptr (a) = list;
+      return 1;
+    case dw_val_class_loc:
+      lv = copy_deref_exprloc (AT_loc (av), l->dw_loc_next);
+      if (lv == NULL)
+       return -1;
+      a->dw_attr_val.v.val_loc = lv;
+      return 1;
+    default:
+      gcc_unreachable ();
+    }
+}
+
 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
    an address in .rodata section if the string literal is emitted there,
    or remove the containing location list or replace DW_AT_const_value
@@ -26590,6 +26860,7 @@ resolve_addr (dw_die_ref die)
   dw_attr_node *a;
   dw_loc_list_ref *curr, *start, loc;
   unsigned ix;
+  bool remove_AT_byte_size = false;
 
   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
     switch (AT_class (a))
@@ -26650,6 +26921,38 @@ resolve_addr (dw_die_ref die)
       case dw_val_class_loc:
        {
          dw_loc_descr_ref l = AT_loc (a);
+         /* Using DW_OP_call4 or DW_OP_call4 DW_OP_deref in
+            DW_AT_string_length is only a rough approximation; unfortunately
+            DW_AT_string_length can't be a reference to a DIE.  DW_OP_call4
+            needs a DWARF expression, while DW_AT_location of the referenced
+            variable or argument might be any location description.  */
+         if (a->dw_attr == DW_AT_string_length
+             && l
+             && l->dw_loc_opc == DW_OP_call4
+             && l->dw_loc_oprnd1.val_class == dw_val_class_die_ref
+             && (l->dw_loc_next == NULL
+                 || (l->dw_loc_next->dw_loc_next == NULL
+                     && (l->dw_loc_next->dw_loc_opc == DW_OP_deref
+                         || l->dw_loc_next->dw_loc_opc != DW_OP_deref_size))))
+           {
+             switch (optimize_string_length (a))
+               {
+               case -1:
+                 remove_AT (die, a->dw_attr);
+                 ix--;
+                 /* For DWARF4 and earlier, if we drop DW_AT_string_length,
+                    we need to drop also DW_AT_byte_size.  */
+                 remove_AT_byte_size = true;
+                 continue;
+               default:
+                 break;
+               case 1:
+                 /* Even if we keep the optimized DW_AT_string_length,
+                    it might have changed AT_class, so process it again.  */
+                 ix--;
+                 continue;
+               }
+           }
          /* For -gdwarf-2 don't attempt to optimize
             DW_AT_data_member_location containing
             DW_OP_plus_uconst - older consumers might
@@ -26734,6 +27037,9 @@ resolve_addr (dw_die_ref die)
        break;
       }
 
+  if (remove_AT_byte_size)
+    remove_AT (die, DW_AT_byte_size);
+
   FOR_EACH_CHILD (die, c, resolve_addr (c));
 }
 \f
index 90d2d58..335ca6b 100644 (file)
@@ -1,3 +1,89 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backport from trunk
+       * frontend-passes.c (create_var):  Set ts.deferred for
+       deferred-length character variables.
+       * dump-parse-tree.c (show_typespec):  Also dump
+       is_c_interop, is_iso_c and deferred flags.
+
+2016-08-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/71906
+       * trans-decl.c (gfc_get_symbol_decl): Call gfc_finish_var_decl
+       for decl's character length before gfc_finish_var_decl on the
+       decl itself.
+
+2016-08-11  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71936
+       * trans-array.c (gfc_array_allocate): When SOURCE= is a function
+       stick with the ref of the object to allocate.
+
+2016-08-11  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/72698
+       * trans-stmt.c (gfc_trans_allocate): Prevent generating code for
+       copy of zero sized string and with it an ICE.
+
+2016-08-08  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/70524
+       * trans-array.c (gfc_trans_dummy_array_bias): Ensure that the
+       location information is correctly set.
+       * trans-decl.c (gfc_trans_deferred_vars): Set the locus of the
+       current construct early.
+
+2016-08-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/71795
+       Backport from trunk
+       * frontend-passes.c (combine_array_constructor):  Don't
+       do anything if the expression is inside an array iterator.
+
+2016-07-28  Steven G. Kargl  <kargl@gcc.gnu.org>
+           Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backported from trunk:
+       PR fortran/71883
+       * frontend-passes.c (gfc_run_passes): Bail out if there are any
+       errors.
+       * error.c (gfc_internal_error): If there are any errors in the
+       buffer, exit with EXIT_FAILURE.
+
+2016-07-22  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backported from trunk:
+       PR fortran/71807
+       * trans-expr.c (gfc_trans_subcomponent_assign): Special casing
+       when allocatable component is set to null() in initializer.
+
+2016-07-22  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/70842
+       * simplify.c (gfc_simplify_len): Only for unlimited polymorphic
+       types replace the expression's _data ref with a _len ref.
+
+2016-07-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71764
+       * trans-expr.c (gfc_trans_structure_assign): Remove assert.
+
+2016-07-13  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71623
+       * trans-stmt.c (gfc_trans_allocate): Add code of pre block of typespec
+       in allocate to parent block.
+
 2016-07-09  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from trunk:
index f507434..8c24074 100644 (file)
@@ -120,6 +120,14 @@ show_typespec (gfc_typespec *ts)
       fprintf (dumpfile, "%d", ts->kind);
       break;
     }
+  if (ts->is_c_interop)
+    fputs (" C_INTEROP", dumpfile);
+
+  if (ts->is_iso_c)
+    fputs (" ISO_C", dumpfile);
+
+  if (ts->deferred)
+    fputs (" DEFERRED", dumpfile);
 
   fputc (')', dumpfile);
 }
index 6cfe019..49ede5a 100644 (file)
@@ -1303,10 +1303,15 @@ gfc_error (const char *gmsgid, ...)
 void
 gfc_internal_error (const char *gmsgid, ...)
 {
+  int e, w;
   va_list argp;
   diagnostic_info diagnostic;
   rich_location rich_loc (line_table, UNKNOWN_LOCATION);
 
+  gfc_get_errors (&w, &e);
+  if (e > 0)
+    exit(EXIT_FAILURE);
+
   va_start (argp, gmsgid);
   diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_ICE);
   report_diagnostic (&diagnostic);
index 8d99393..1655de2 100644 (file)
@@ -125,6 +125,7 @@ gfc_run_passes (gfc_namespace *ns)
   doloop_level = 0;
   doloop_warn (ns);
   doloop_list.release ();
+  int w, e;
 
   if (flag_frontend_optimize)
     {
@@ -136,6 +137,10 @@ gfc_run_passes (gfc_namespace *ns)
       expr_array.release ();
     }
 
+  gfc_get_errors (&w, &e);
+  if (e > 0)
+   return;
+
   if (flag_realloc_lhs)
     realloc_strings (ns);
 }
@@ -611,6 +616,7 @@ create_var (gfc_expr * e, const char *vname)
   gfc_code *n;
   gfc_namespace *ns;
   int i;
+  bool deferred;
 
   if (e->expr_type == EXPR_CONSTANT || is_fe_temp (e))
     return gfc_copy_expr (e);
@@ -661,6 +667,7 @@ create_var (gfc_expr * e, const char *vname)
        }
     }
 
+  deferred = 0;
   if (e->ts.type == BT_CHARACTER && e->rank == 0)
     {
       gfc_expr *length;
@@ -670,7 +677,10 @@ create_var (gfc_expr * e, const char *vname)
       if (length)
        symbol->ts.u.cl->length = length;
       else
-       symbol->attr.allocatable = 1;
+       {
+         symbol->attr.allocatable = 1;
+         deferred = 1;
+       }
     }
 
   symbol->attr.flavor = FL_VARIABLE;
@@ -682,6 +692,7 @@ create_var (gfc_expr * e, const char *vname)
   result = gfc_get_expr ();
   result->expr_type = EXPR_VARIABLE;
   result->ts = e->ts;
+  result->ts.deferred = deferred;
   result->rank = e->rank;
   result->shape = gfc_copy_shape (e->shape, e->rank);
   result->symtree = symtree;
@@ -1255,6 +1266,11 @@ combine_array_constructor (gfc_expr *e)
   if (forall_level > 0)
     return false;
 
+  /* Inside an iterator, things can get hairy; we are likely to create
+     an invalid temporary variable.  */
+  if (iterator_level > 0)
+    return false;
+
   op1 = e->value.op.op1;
   op2 = e->value.op.op2;
 
index a631010..fcf49b7 100644 (file)
@@ -3814,8 +3814,12 @@ gfc_simplify_len (gfc_expr *e, gfc_expr *kind)
     }
   else if (e->expr_type == EXPR_VARIABLE && e->ts.type == BT_CHARACTER
           && e->symtree->n.sym
+          && e->symtree->n.sym->ts.type != BT_DERIVED
           && e->symtree->n.sym->assoc && e->symtree->n.sym->assoc->target
-          && e->symtree->n.sym->assoc->target->ts.type == BT_DERIVED)
+          && e->symtree->n.sym->assoc->target->ts.type == BT_DERIVED
+          && e->symtree->n.sym->assoc->target->symtree->n.sym
+          && UNLIMITED_POLY (e->symtree->n.sym->assoc->target->symtree->n.sym))
+
     /* The expression in assoc->target points to a ref to the _data component
        of the unlimited polymorphic entity.  To get the _len component the last
        _data ref needs to be stripped and a ref to the _len component added.  */
index 6a642ac..0882a3a 100644 (file)
@@ -5421,12 +5421,19 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg,
 
   if (ref->u.ar.type == AR_FULL && expr3 != NULL)
     {
+      gfc_ref *old_ref = ref;
       /* F08:C633: Array shape from expr3.  */
       ref = expr3->ref;
 
       /* Find the last reference in the chain.  */
       if (!retrieve_last_ref (&ref, &prev_ref))
-       return false;
+       {
+         if (expr3->expr_type == EXPR_FUNCTION
+             && gfc_expr_attr (expr3).dimension)
+           ref = old_ref;
+         else
+           return false;
+       }
       alloc_w_e3_arr_spec = true;
     }
 
@@ -6093,7 +6100,12 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc,
       return;
     }
 
+  loc.nextc = NULL;
   gfc_save_backend_locus (&loc);
+  /* loc.nextc is not set by save_backend_locus but the location routines
+     depend on it.  */
+  if (loc.nextc == NULL)
+    loc.nextc = loc.lb->line;
   gfc_set_backend_locus (&sym->declared_at);
 
   /* Descriptor type.  */
index b45e5e9..01756ed 100644 (file)
@@ -1639,26 +1639,23 @@ gfc_get_symbol_decl (gfc_symbol * sym)
          && !(sym->attr.use_assoc && !intrinsic_array_parameter)))
     gfc_defer_symbol_init (sym);
 
+  /* Associate names can use the hidden string length variable
+     of their associated target.  */
+  if (sym->ts.type == BT_CHARACTER
+      && TREE_CODE (length) != INTEGER_CST)
+    {
+      gfc_finish_var_decl (length, sym);
+      gcc_assert (!sym->value);
+    }
+
   gfc_finish_var_decl (decl, sym);
 
   if (sym->ts.type == BT_CHARACTER)
-    {
-      /* Character variables need special handling.  */
-      gfc_allocate_lang_decl (decl);
-
-      /* Associate names can use the hidden string length variable
-        of their associated target.  */
-      if (TREE_CODE (length) != INTEGER_CST)
-       {
-         gfc_finish_var_decl (length, sym);
-         gcc_assert (!sym->value);
-       }
-    }
+    /* Character variables need special handling.  */
+    gfc_allocate_lang_decl (decl);
   else if (sym->attr.subref_array_pointer)
-    {
-      /* We need the span for these beasts.  */
-      gfc_allocate_lang_decl (decl);
-    }
+    /* We need the span for these beasts.  */
+    gfc_allocate_lang_decl (decl);
 
   if (sym->attr.subref_array_pointer)
     {
@@ -4050,6 +4047,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
       else if (proc_sym->as)
        {
          tree result = TREE_VALUE (current_fake_result_decl);
+         gfc_save_backend_locus (&loc);
+         gfc_set_backend_locus (&proc_sym->declared_at);
          gfc_trans_dummy_array_bias (proc_sym, result, block);
 
          /* An automatic character length, pointer array result.  */
@@ -4059,8 +4058,6 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
              tmp = NULL;
              if (proc_sym->ts.deferred)
                {
-                 gfc_save_backend_locus (&loc);
-                 gfc_set_backend_locus (&proc_sym->declared_at);
                  gfc_start_block (&init);
                  tmp = gfc_null_and_pass_deferred_len (proc_sym, &init, &loc);
                  gfc_add_init_cleanup (block, gfc_finish_block (&init), tmp);
@@ -6335,7 +6332,7 @@ gfc_generate_function_code (gfc_namespace * ns)
         function has already called cgraph_create_node, which also created
         the cgraph node for this function.  */
       if (!has_coarray_vars || flag_coarray != GFC_FCOARRAY_LIB)
-       (void) cgraph_node::create (fndecl);
+       (void) cgraph_node::get_create (fndecl);
     }
   else
     cgraph_node::finalize_function (fndecl, true);
index 8f84712..18358a4 100644 (file)
@@ -7200,6 +7200,12 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_expr * expr,
       tmp = gfc_trans_alloc_subarray_assign (tmp, cm, expr);
       gfc_add_expr_to_block (&block, tmp);
     }
+  else if (init && cm->attr.allocatable && expr->expr_type == EXPR_NULL)
+    {
+      /* NULL initialization for allocatable components.  */
+      gfc_add_modify (&block, dest, fold_convert (TREE_TYPE (dest),
+                                                 null_pointer_node));
+    }
   else if (init && (cm->attr.allocatable
           || (cm->ts.type == BT_CLASS && CLASS_DATA (cm)->attr.allocatable
               && expr->ts.type != BT_CLASS)))
@@ -7358,7 +7364,6 @@ gfc_trans_structure_assign (tree dest, gfc_expr * expr, bool init)
     {
       gfc_se se, lse;
 
-      gcc_assert (cm->backend_decl == NULL);
       gfc_init_se (&se, NULL);
       gfc_init_se (&lse, NULL);
       gfc_conv_expr (&se, gfc_constructor_first (expr->value.constructor)->expr);
index 7d3cf8c..727d72f 100644 (file)
@@ -5439,9 +5439,19 @@ gfc_trans_allocate (gfc_code * code)
        }
       gfc_add_block_to_block (&block, &se.pre);
       gfc_add_block_to_block (&post, &se.post);
+
+      /* Special case when string in expr3 is zero.  */
+      if (code->expr3->ts.type == BT_CHARACTER
+         && integer_zerop (se.string_length))
+       {
+         gfc_init_se (&se, NULL);
+         temp_var_needed = false;
+         expr3_len = integer_zero_node;
+         e3_is = E3_MOLD;
+       }
       /* Prevent aliasing, i.e., se.expr may be already a
             variable declaration.  */
-      if (se.expr != NULL_TREE && temp_var_needed)
+      else if (se.expr != NULL_TREE && temp_var_needed)
        {
          tree var, desc;
          tmp = GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr)) || is_coarray ?
@@ -5670,11 +5680,8 @@ gfc_trans_allocate (gfc_code * code)
       gcc_assert (expr3_esize);
       expr3_esize = fold_convert (sizetype, expr3_esize);
       if (e3_is == E3_MOLD)
-       {
-         /* The expr3 is no longer valid after this point.  */
-         expr3 = NULL_TREE;
-         e3_is = E3_UNSET;
-       }
+       /* The expr3 is no longer valid after this point.  */
+       expr3 = NULL_TREE;
     }
   else if (code->ext.alloc.ts.type != BT_UNKNOWN)
     {
@@ -5694,9 +5701,11 @@ gfc_trans_allocate (gfc_code * code)
          tmp = gfc_get_char_type (code->ext.alloc.ts.kind);
          tmp = TYPE_SIZE_UNIT (tmp);
          tmp = fold_convert (TREE_TYPE (se_sz.expr), tmp);
+         gfc_add_block_to_block (&block, &se_sz.pre);
          expr3_esize = fold_build2_loc (input_location, MULT_EXPR,
                                         TREE_TYPE (se_sz.expr),
                                         tmp, se_sz.expr);
+         expr3_esize = gfc_evaluate_now (expr3_esize, &block);
        }
     }
 
@@ -5895,6 +5904,7 @@ gfc_trans_allocate (gfc_code * code)
                 source= or mold= expression.  */
              gfc_init_se (&se_sz, NULL);
              gfc_conv_expr (&se_sz, code->ext.alloc.ts.u.cl->length);
+             gfc_add_block_to_block (&block, &se_sz.pre);
              gfc_add_modify (&block, al_len,
                              fold_convert (TREE_TYPE (al_len),
                                            se_sz.expr));
@@ -5979,11 +5989,19 @@ gfc_trans_allocate (gfc_code * code)
                 specified by a type spec for deferred length character
                 arrays or unlimited polymorphic objects without a
                 source= or mold= expression.  */
-             gfc_init_se (&se_sz, NULL);
-             gfc_conv_expr (&se_sz, code->ext.alloc.ts.u.cl->length);
-             gfc_add_modify (&block, al_len,
-                             fold_convert (TREE_TYPE (al_len),
-                                           se_sz.expr));
+             if (expr3_esize == NULL_TREE || code->ext.alloc.ts.kind != 1)
+               {
+                 gfc_init_se (&se_sz, NULL);
+                 gfc_conv_expr (&se_sz, code->ext.alloc.ts.u.cl->length);
+                 gfc_add_block_to_block (&block, &se_sz.pre);
+                 gfc_add_modify (&block, al_len,
+                                 fold_convert (TREE_TYPE (al_len),
+                                               se_sz.expr));
+               }
+             else
+               gfc_add_modify (&block, al_len,
+                               fold_convert (TREE_TYPE (al_len),
+                                             expr3_esize));
            }
          else
            /* No length information needed, because type to allocate
@@ -5992,7 +6010,7 @@ gfc_trans_allocate (gfc_code * code)
                            fold_convert (TREE_TYPE (al_len),
                                          integer_zero_node));
        }
-      if (code->expr3 && !code->expr3->mold)
+      if (code->expr3 && !code->expr3->mold && e3_is != E3_MOLD)
        {
          /* Initialization via SOURCE block (or static default initializer).
             Classes need some special handling, so catch them first.  */
index 4836442..0f042b0 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -5387,8 +5387,9 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
                        if (files_differ)
 #endif
                          {
-                           temp_filename = save_string (temp_filename,
-                                                        temp_filename_length + 1);
+                           temp_filename
+                             = save_string (temp_filename,
+                                            temp_filename_length - 1);
                            obstack_grow (&obstack, temp_filename,
                                                    temp_filename_length);
                            arg_going = 1;
index fa98f2c..7a6395c 100644 (file)
@@ -795,22 +795,21 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
            {
              tree src_base, dest_base, fn;
              HOST_WIDE_INT src_offset = 0, dest_offset = 0;
-             HOST_WIDE_INT size = -1;
-             HOST_WIDE_INT maxsize = -1;
-             bool reverse;
+             HOST_WIDE_INT maxsize;
 
              srcvar = TREE_OPERAND (src, 0);
-             src_base = get_ref_base_and_extent (srcvar, &src_offset,
-                                                 &size, &maxsize, &reverse);
+             src_base = get_addr_base_and_unit_offset (srcvar, &src_offset);
+             if (src_base == NULL)
+               src_base = srcvar;
              destvar = TREE_OPERAND (dest, 0);
-             dest_base = get_ref_base_and_extent (destvar, &dest_offset,
-                                                  &size, &maxsize, &reverse);
+             dest_base = get_addr_base_and_unit_offset (destvar,
+                                                        &dest_offset);
+             if (dest_base == NULL)
+               dest_base = destvar;
              if (tree_fits_uhwi_p (len))
                maxsize = tree_to_uhwi (len);
              else
                maxsize = -1;
-             src_offset /= BITS_PER_UNIT;
-             dest_offset /= BITS_PER_UNIT;
              if (SSA_VAR_P (src_base)
                  && SSA_VAR_P (dest_base))
                {
index 656c8fb..7857a5e 100644 (file)
@@ -5894,6 +5894,45 @@ omp_add_variable (struct gimplify_omp_ctx *ctx, tree decl, unsigned int flags)
     n->value |= flags;
   else
     splay_tree_insert (ctx->variables, (splay_tree_key)decl, flags);
+
+  /* For reductions clauses in OpenACC loop directives, by default create a
+     copy clause on the enclosing parallel construct for carrying back the
+     results.  */
+  if (ctx->region_type == ORT_ACC && (flags & GOVD_REDUCTION))
+    {
+      struct gimplify_omp_ctx *outer_ctx = ctx->outer_context;
+      while (outer_ctx)
+       {
+         n = splay_tree_lookup (outer_ctx->variables, (splay_tree_key)decl);
+         if (n != NULL)
+           {
+             /* Ignore local variables and explicitly declared clauses.  */
+             if (n->value & (GOVD_LOCAL | GOVD_EXPLICIT))
+               break;
+             else if (outer_ctx->region_type == ORT_ACC_KERNELS)
+               {
+                 /* According to the OpenACC spec, such a reduction variable
+                    should already have a copy map on a kernels construct,
+                    verify that here.  */
+                 gcc_assert (!(n->value & GOVD_FIRSTPRIVATE)
+                             && (n->value & GOVD_MAP));
+               }
+             else if (outer_ctx->region_type == ORT_ACC_PARALLEL)
+               {
+                 /* Remove firstprivate and make it a copy map.  */
+                 n->value &= ~GOVD_FIRSTPRIVATE;
+                 n->value |= GOVD_MAP;
+               }
+           }
+         else if (outer_ctx->region_type == ORT_ACC_PARALLEL)
+           {
+             splay_tree_insert (outer_ctx->variables, (splay_tree_key)decl,
+                                GOVD_MAP | GOVD_SEEN);
+             break;
+           }
+         outer_ctx = outer_ctx->outer_context;
+       }
+    }
 }
 
 /* Notice a threadprivate variable DECL used in OMP context CTX.
index 1c834b9..eabd8f3 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 824e5a9..04b4549 100644 (file)
@@ -2977,6 +2977,18 @@ compute_inline_parameters (struct cgraph_node *node, bool early)
          node->local.can_change_signature = !e;
        }
     }
+
+  /* Functions called by instrumentation thunk can't change signature
+     because instrumentation thunk modification is not supported.  */
+  if (node->local.can_change_signature)
+    for (e = node->callers; e; e = e->next_caller)
+      if (e->caller->thunk.thunk_p
+         && e->caller->thunk.add_pointer_bounds_args)
+       {
+         node->local.can_change_signature = false;
+         break;
+       }
+
   estimate_function_body_sizes (node, early);
 
   for (e = node->callees; e; e = e->next_callee)
index 56f3344..f7ef6aa 100644 (file)
@@ -1544,6 +1544,11 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
   if (!maybe_in_construction && !maybe_derived_type)
     return false;
 
+  /* If we are in fact not looking at any object object or the instance is
+     some placement new into a random load, give up straight away.  */
+  if (TREE_CODE (instance) == MEM_REF)
+    return false;
+
   /* We need to obtain refernce to virtual table pointer.  It is better
      to look it up in the code rather than build our own.  This require bit
      of pattern matching, but we end up verifying that what we found is
@@ -1664,7 +1669,6 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
   tci.offset = instance_offset;
   tci.instance = instance;
   tci.vtbl_ptr_ref = instance_ref;
-  gcc_assert (TREE_CODE (instance) != MEM_REF);
   tci.known_current_type = NULL_TREE;
   tci.known_current_offset = 0;
   tci.otr_type = otr_type;
index f02ec47..92fc9ab 100644 (file)
@@ -3767,7 +3767,7 @@ ipa_modify_formal_parameters (tree fndecl, ipa_parm_adjustment_vec adjustments)
              if (is_gimple_reg_type (ptype))
                {
                  unsigned malign = GET_MODE_ALIGNMENT (TYPE_MODE (ptype));
-                 if (TYPE_ALIGN (ptype) < malign)
+                 if (TYPE_ALIGN (ptype) != malign)
                    ptype = build_aligned_type (ptype, malign);
                }
            }
index 37aa185..caa770e 100644 (file)
@@ -2251,7 +2251,7 @@ mark_loops_for_removal (void)
             );
       }
   qsort (sorted_loops, n, sizeof (ira_loop_tree_node_t), loop_compare_func);
-  for (i = 0; n - i + 1 > IRA_MAX_LOOPS_NUM; i++)
+  for (i = 0; i < n - IRA_MAX_LOOPS_NUM; i++)
     {
       sorted_loops[i]->to_remove_p = true;
       if (internal_flag_ira_verbose > 1 && ira_dump_file != NULL)
index c7d3ba1..41d1244 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR java/70839
index 7529ea5..dd93c9d 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 5f809bc..152230c 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 108bd03..b1b2984 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 66149ca..30393bb 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 5f6dcb1..ec2a64e 100644 (file)
@@ -13352,9 +13352,15 @@ expand_omp_target (struct omp_region *region)
       make_edge (else_bb, new_bb, EDGE_FALLTHRU);
 
       device = tmp_var;
+      gsi = gsi_last_bb (new_bb);
+    }
+  else
+    {
+      gsi = gsi_last_bb (new_bb);
+      device = force_gimple_operand_gsi (&gsi, device, true, NULL_TREE,
+                                        true, GSI_SAME_STMT);
     }
 
-  gsi = gsi_last_bb (new_bb);
   t = gimple_omp_target_data_arg (entry_stmt);
   if (t == NULL)
     {
index 7380984..f877912 100644 (file)
@@ -1,3 +1,15 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-19  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.pot: Regenerate.
+
+2016-07-28  Joseph Myers  <joseph@codesourcery.com>
+
+       * sv.po: Update.
+
 2016-06-06  Joseph Myers  <joseph@codesourcery.com>
 
        * fr.po: Update.
index 9175313..31d0515 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2016-04-21 15:24+0000\n"
+"POT-Creation-Date: 2016-08-19 21:03+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"
@@ -18,19 +18,19 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: cfgrtl.c:2654
+#: cfgrtl.c:2656
 msgid "flow control insn inside a basic block"
 msgstr ""
 
-#: cfgrtl.c:2886
+#: cfgrtl.c:2888
 msgid "wrong insn in the fallthru edge"
 msgstr ""
 
-#: cfgrtl.c:2943
+#: cfgrtl.c:2945
 msgid "insn outside basic block"
 msgstr ""
 
-#: cfgrtl.c:2950
+#: cfgrtl.c:2952
 msgid "return not followed by barrier"
 msgstr ""
 
@@ -88,54 +88,54 @@ msgstr ""
 msgid "const/copy propagation disabled"
 msgstr ""
 
-#: diagnostic.c:212
+#: diagnostic.c:210
 #, c-format
 msgid "%s: all warnings being treated as errors"
 msgstr ""
 
-#: diagnostic.c:217
+#: diagnostic.c:215
 #, c-format
 msgid "%s: some warnings being treated as errors"
 msgstr ""
 
-#: diagnostic.c:292 input.c:169 c-family/c-opts.c:1310 cp/error.c:1193
-#: fortran/cpp.c:576 fortran/error.c:998 fortran/error.c:1018
+#: diagnostic.c:290 input.c:169 c-family/c-opts.c:1310 cp/error.c:1196
+#: fortran/cpp.c:576 fortran/error.c:996 fortran/error.c:1016
 msgid "<built-in>"
 msgstr ""
 
-#: diagnostic.c:451
+#: diagnostic.c:449
 #, c-format
 msgid "compilation terminated due to -Wfatal-errors.\n"
 msgstr ""
 
-#: diagnostic.c:462
+#: diagnostic.c:460
 #, c-format
 msgid "compilation terminated due to -fmax-errors=%u.\n"
 msgstr ""
 
-#: diagnostic.c:483
+#: diagnostic.c:481
 #, c-format
 msgid ""
 "Please submit a full bug report,\n"
 "with preprocessed source if appropriate.\n"
 msgstr ""
 
-#: diagnostic.c:489
+#: diagnostic.c:487
 #, c-format
 msgid "See %s for instructions.\n"
 msgstr ""
 
-#: diagnostic.c:498
+#: diagnostic.c:496
 #, c-format
 msgid "compilation terminated.\n"
 msgstr ""
 
-#: diagnostic.c:787
+#: diagnostic.c:785
 #, c-format
 msgid "%s:%d: confused by earlier errors, bailing out\n"
 msgstr ""
 
-#: diagnostic.c:1311
+#: diagnostic.c:1309
 #, c-format
 msgid "Internal compiler error: Error reporting routines re-entered.\n"
 msgstr ""
@@ -493,82 +493,82 @@ msgid ""
 " other options on to these processes the -W<letter> options must be used.\n"
 msgstr ""
 
-#: gcc.c:5876
+#: gcc.c:5877
 #, c-format
 msgid "Processing spec (%s), which is '%s'\n"
 msgstr ""
 
-#: gcc.c:6580
+#: gcc.c:6581
 #, c-format
 msgid "Target: %s\n"
 msgstr ""
 
-#: gcc.c:6581
+#: gcc.c:6582
 #, c-format
 msgid "Configured with: %s\n"
 msgstr ""
 
-#: gcc.c:6595
+#: gcc.c:6596
 #, c-format
 msgid "Thread model: %s\n"
 msgstr ""
 
-#: gcc.c:6606
+#: gcc.c:6607
 #, c-format
 msgid "gcc version %s %s\n"
 msgstr ""
 
-#: gcc.c:6609
+#: gcc.c:6610
 #, c-format
 msgid "gcc driver version %s %sexecuting gcc version %s\n"
 msgstr ""
 
-#: gcc.c:6682 gcc.c:6894
+#: gcc.c:6683 gcc.c:6895
 #, c-format
 msgid ""
 "The bug is not reproducible, so it is likely a hardware or OS problem.\n"
 msgstr ""
 
-#: gcc.c:6818
+#: gcc.c:6819
 #, c-format
 msgid ""
 "Preprocessed source stored into %s file, please attach this to your "
 "bugreport.\n"
 msgstr ""
 
-#: gcc.c:7757
+#: gcc.c:7761
 #, c-format
 msgid "install: %s%s\n"
 msgstr ""
 
-#: gcc.c:7760
+#: gcc.c:7764
 #, c-format
 msgid "programs: %s\n"
 msgstr ""
 
-#: gcc.c:7762
+#: gcc.c:7766
 #, c-format
 msgid "libraries: %s\n"
 msgstr ""
 
-#: gcc.c:7879
+#: gcc.c:7883
 #, c-format
 msgid ""
 "\n"
 "For bug reporting instructions, please see:\n"
 msgstr ""
 
-#: gcc.c:7895 gcov-tool.c:525
+#: gcc.c:7899 gcov-tool.c:525
 #, c-format
 msgid "%s %s%s\n"
 msgstr ""
 
-#: gcc.c:7898 gcov-tool.c:527 gcov.c:504 fortran/gfortranspec.c:280
+#: gcc.c:7902 gcov-tool.c:527 gcov.c:504 fortran/gfortranspec.c:280
 #: java/jcf-dump.c:1229
 msgid "(C)"
 msgstr ""
 
-#: gcc.c:7899 fortran/gfortranspec.c:281 java/jcf-dump.c:1230
+#: gcc.c:7903 fortran/gfortranspec.c:281 java/jcf-dump.c:1230
 #, c-format
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
@@ -576,7 +576,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: gcc.c:8204
+#: gcc.c:8208
 #, c-format
 msgid ""
 "\n"
@@ -585,14 +585,14 @@ msgid ""
 "\n"
 msgstr ""
 
-#: gcc.c:8205
+#: gcc.c:8209
 #, c-format
 msgid ""
 "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n"
 "\n"
 msgstr ""
 
-#: gcc.c:9497
+#: gcc.c:9501
 #, c-format
 msgid ""
 "Assembler options\n"
@@ -600,7 +600,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: gcc.c:9498
+#: gcc.c:9502
 #, c-format
 msgid ""
 "Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n"
@@ -1077,7 +1077,7 @@ msgstr ""
 msgid "GCSE disabled"
 msgstr ""
 
-#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9766
+#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9773
 #, gcc-internal-format
 msgid "function returns address of local variable"
 msgstr ""
@@ -1141,25 +1141,25 @@ msgstr ""
 msgid "At top level:"
 msgstr ""
 
-#: langhooks.c:393 cp/error.c:3299
+#: langhooks.c:393 cp/error.c:3315
 #, c-format
 msgid "In member function %qs"
 msgstr ""
 
-#: langhooks.c:397 cp/error.c:3302
+#: langhooks.c:397 cp/error.c:3318
 #, c-format
 msgid "In function %qs"
 msgstr ""
 
-#: langhooks.c:448 cp/error.c:3252
+#: langhooks.c:448 cp/error.c:3268
 msgid "    inlined from %qs at %r%s:%d:%d%R"
 msgstr ""
 
-#: langhooks.c:453 cp/error.c:3257
+#: langhooks.c:453 cp/error.c:3273
 msgid "    inlined from %qs at %r%s:%d%R"
 msgstr ""
 
-#: langhooks.c:459 cp/error.c:3263
+#: langhooks.c:459 cp/error.c:3279
 #, c-format
 msgid "    inlined from %qs"
 msgstr ""
@@ -1356,49 +1356,49 @@ msgstr ""
 msgid "collect: relinking\n"
 msgstr ""
 
-#: toplev.c:331
+#: toplev.c:329
 #, c-format
 msgid "unrecoverable error"
 msgstr ""
 
-#: toplev.c:640
+#: toplev.c:638
 #, c-format
 msgid ""
 "%s%s%s %sversion %s (%s)\n"
 "%s\tcompiled by GNU C version %s, "
 msgstr ""
 
-#: toplev.c:642
+#: toplev.c:640
 #, c-format
 msgid "%s%s%s %sversion %s (%s) compiled by CC, "
 msgstr ""
 
-#: toplev.c:646
+#: toplev.c:644
 #, c-format
 msgid "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
 msgstr ""
 
-#: toplev.c:648
+#: toplev.c:646
 #, c-format
 msgid "%s%swarning: %s header version %s differs from library version %s.\n"
 msgstr ""
 
-#: toplev.c:650
+#: toplev.c:648
 #, c-format
 msgid ""
 "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
 msgstr ""
 
-#: toplev.c:824
+#: toplev.c:822
 msgid "options passed: "
 msgstr ""
 
-#: toplev.c:852
+#: toplev.c:850
 msgid "options enabled: "
 msgstr ""
 
-#: tree-diagnostic.c:295 c/c-decl.c:5203 c/c-typeck.c:6813 cp/error.c:684
-#: cp/error.c:992 c-family/c-pretty-print.c:408
+#: tree-diagnostic.c:295 c/c-decl.c:5203 c/c-typeck.c:6818 cp/error.c:682
+#: cp/error.c:995 c-family/c-pretty-print.c:408
 #, gcc-internal-format
 msgid "<anonymous>"
 msgstr ""
@@ -2929,8 +2929,8 @@ msgstr ""
 msgid "<command-line>"
 msgstr ""
 
-#: config/aarch64/aarch64.c:4451 config/arm/arm.c:21954 config/arm/arm.c:21967
-#: config/arm/arm.c:21992 config/nios2/nios2.c:2642
+#: config/aarch64/aarch64.c:4451 config/arm/arm.c:21959 config/arm/arm.c:21972
+#: config/arm/arm.c:21997 config/nios2/nios2.c:2642
 #, c-format
 msgid "Unsupported operand for code '%c'"
 msgstr ""
@@ -2949,7 +2949,7 @@ msgstr ""
 msgid "incompatible floating point / vector register operand for '%%%c'"
 msgstr ""
 
-#: config/aarch64/aarch64.c:4627 config/arm/arm.c:22499
+#: config/aarch64/aarch64.c:4627 config/arm/arm.c:22504
 #, c-format
 msgid "missing operand"
 msgstr ""
@@ -2970,7 +2970,7 @@ msgid "invalid operand prefix '%%%c'"
 msgstr ""
 
 #: config/alpha/alpha.c:5102 config/i386/i386.c:17140
-#: config/rs6000/rs6000.c:20285 config/sparc/sparc.c:8649
+#: config/rs6000/rs6000.c:21150 config/sparc/sparc.c:8749
 #, c-format
 msgid "'%%&' used without any local dynamic TLS references"
 msgstr ""
@@ -2986,18 +2986,18 @@ msgid "invalid %%r value"
 msgstr ""
 
 #: config/alpha/alpha.c:5200 config/ia64/ia64.c:5436
-#: config/rs6000/rs6000.c:19965 config/xtensa/xtensa.c:2357
+#: config/rs6000/rs6000.c:20830 config/xtensa/xtensa.c:2357
 #, c-format
 msgid "invalid %%R value"
 msgstr ""
 
-#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:19885
+#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:20750
 #: config/xtensa/xtensa.c:2324
 #, c-format
 msgid "invalid %%N value"
 msgstr ""
 
-#: config/alpha/alpha.c:5214 config/rs6000/rs6000.c:19913
+#: config/alpha/alpha.c:5214 config/rs6000/rs6000.c:20778
 #, c-format
 msgid "invalid %%P value"
 msgstr ""
@@ -3028,7 +3028,7 @@ msgid "invalid %%U value"
 msgstr ""
 
 #: config/alpha/alpha.c:5300 config/alpha/alpha.c:5311
-#: config/rs6000/rs6000.c:19973
+#: config/rs6000/rs6000.c:20838
 #, c-format
 msgid "invalid %%s value"
 msgstr ""
@@ -3038,7 +3038,7 @@ msgstr ""
 msgid "invalid %%C value"
 msgstr ""
 
-#: config/alpha/alpha.c:5359 config/rs6000/rs6000.c:19749
+#: config/alpha/alpha.c:5359 config/rs6000/rs6000.c:20614
 #, c-format
 msgid "invalid %%E value"
 msgstr ""
@@ -3049,7 +3049,7 @@ msgid "unknown relocation unspec"
 msgstr ""
 
 #: config/alpha/alpha.c:5393 config/cr16/cr16.c:1531
-#: config/rs6000/rs6000.c:20290 config/spu/spu.c:1446
+#: config/rs6000/rs6000.c:21155 config/spu/spu.c:1446
 #, c-format
 msgid "invalid %%xn code"
 msgstr ""
@@ -3102,7 +3102,7 @@ msgstr ""
 #. Unknown flag.
 #. Undocumented flag.
 #: config/arc/arc.c:3312 config/epiphany/epiphany.c:1286
-#: config/m32r/m32r.c:2226 config/nds32/nds32.c:2291 config/sparc/sparc.c:8832
+#: config/m32r/m32r.c:2226 config/nds32/nds32.c:2291 config/sparc/sparc.c:8932
 #, c-format
 msgid "invalid operand output code"
 msgstr ""
@@ -3112,29 +3112,29 @@ msgstr ""
 msgid "invalid UNSPEC as operand: %d"
 msgstr ""
 
-#: config/arm/arm.c:19021 config/arm/arm.c:19046 config/arm/arm.c:19056
-#: config/arm/arm.c:19065 config/arm/arm.c:19073
+#: config/arm/arm.c:19018 config/arm/arm.c:19043 config/arm/arm.c:19053
+#: config/arm/arm.c:19062 config/arm/arm.c:19070
 #, c-format
 msgid "invalid shift operand"
 msgstr ""
 
-#: config/arm/arm.c:21830 config/arm/arm.c:21848
+#: config/arm/arm.c:21835 config/arm/arm.c:21853
 #, c-format
 msgid "predicated Thumb instruction"
 msgstr ""
 
-#: config/arm/arm.c:21836
+#: config/arm/arm.c:21841
 #, c-format
 msgid "predicated instruction in conditional sequence"
 msgstr ""
 
-#: config/arm/arm.c:22069 config/arm/arm.c:22091 config/arm/arm.c:22101
-#: config/arm/arm.c:22111 config/arm/arm.c:22121 config/arm/arm.c:22160
-#: config/arm/arm.c:22178 config/arm/arm.c:22203 config/arm/arm.c:22218
-#: config/arm/arm.c:22245 config/arm/arm.c:22252 config/arm/arm.c:22270
-#: config/arm/arm.c:22277 config/arm/arm.c:22285 config/arm/arm.c:22306
-#: config/arm/arm.c:22313 config/arm/arm.c:22446 config/arm/arm.c:22453
-#: config/arm/arm.c:22480 config/arm/arm.c:22487 config/bfin/bfin.c:1436
+#: config/arm/arm.c:22074 config/arm/arm.c:22096 config/arm/arm.c:22106
+#: config/arm/arm.c:22116 config/arm/arm.c:22126 config/arm/arm.c:22165
+#: config/arm/arm.c:22183 config/arm/arm.c:22208 config/arm/arm.c:22223
+#: config/arm/arm.c:22250 config/arm/arm.c:22257 config/arm/arm.c:22275
+#: config/arm/arm.c:22282 config/arm/arm.c:22290 config/arm/arm.c:22311
+#: config/arm/arm.c:22318 config/arm/arm.c:22451 config/arm/arm.c:22458
+#: config/arm/arm.c:22485 config/arm/arm.c:22492 config/bfin/bfin.c:1436
 #: config/bfin/bfin.c:1443 config/bfin/bfin.c:1450 config/bfin/bfin.c:1457
 #: config/bfin/bfin.c:1466 config/bfin/bfin.c:1473 config/bfin/bfin.c:1480
 #: config/bfin/bfin.c:1487
@@ -3142,89 +3142,89 @@ msgstr ""
 msgid "invalid operand for code '%c'"
 msgstr ""
 
-#: config/arm/arm.c:22173
+#: config/arm/arm.c:22178
 #, c-format
 msgid "instruction never executed"
 msgstr ""
 
 #. Former Maverick support, removed after GCC-4.7.
-#: config/arm/arm.c:22194
+#: config/arm/arm.c:22199
 #, c-format
 msgid "obsolete Maverick format code '%c'"
 msgstr ""
 
-#: config/arm/arm.c:23613
+#: config/arm/arm.c:23618
 msgid "function parameters cannot have __fp16 type"
 msgstr ""
 
-#: config/arm/arm.c:23623
+#: config/arm/arm.c:23628
 msgid "functions cannot return __fp16 type"
 msgstr ""
 
-#: config/avr/avr.c:2127
+#: config/avr/avr.c:2124
 #, c-format
 msgid "address operand requires constraint for X, Y, or Z register"
 msgstr ""
 
-#: config/avr/avr.c:2285
+#: config/avr/avr.c:2282
 msgid "operands to %T/%t must be reg + const_int:"
 msgstr ""
 
-#: config/avr/avr.c:2335 config/avr/avr.c:2402
+#: config/avr/avr.c:2332 config/avr/avr.c:2399
 msgid "bad address, not an I/O address:"
 msgstr ""
 
-#: config/avr/avr.c:2344
+#: config/avr/avr.c:2341
 msgid "bad address, not a constant:"
 msgstr ""
 
-#: config/avr/avr.c:2362 config/avr/avr.c:2369
+#: config/avr/avr.c:2359 config/avr/avr.c:2366
 msgid "bad address, not (reg+disp):"
 msgstr ""
 
-#: config/avr/avr.c:2376
+#: config/avr/avr.c:2373
 msgid "bad address, not post_inc or pre_dec:"
 msgstr ""
 
-#: config/avr/avr.c:2388
+#: config/avr/avr.c:2385
 msgid "internal compiler error.  Bad address:"
 msgstr ""
 
-#: config/avr/avr.c:2421
+#: config/avr/avr.c:2418
 #, c-format
 msgid "Unsupported code '%c' for fixed-point:"
 msgstr ""
 
-#: config/avr/avr.c:2429
+#: config/avr/avr.c:2426
 msgid "internal compiler error.  Unknown mode:"
 msgstr ""
 
-#: config/avr/avr.c:3422 config/avr/avr.c:4352 config/avr/avr.c:4801
+#: config/avr/avr.c:3419 config/avr/avr.c:4349 config/avr/avr.c:4798
 msgid "invalid insn:"
 msgstr ""
 
-#: config/avr/avr.c:3476 config/avr/avr.c:3581 config/avr/avr.c:3639
-#: config/avr/avr.c:3685 config/avr/avr.c:3704 config/avr/avr.c:3896
-#: config/avr/avr.c:4204 config/avr/avr.c:4488 config/avr/avr.c:4694
-#: config/avr/avr.c:4858 config/avr/avr.c:4952 config/avr/avr.c:5148
+#: config/avr/avr.c:3473 config/avr/avr.c:3578 config/avr/avr.c:3636
+#: config/avr/avr.c:3682 config/avr/avr.c:3701 config/avr/avr.c:3893
+#: config/avr/avr.c:4201 config/avr/avr.c:4485 config/avr/avr.c:4691
+#: config/avr/avr.c:4855 config/avr/avr.c:4949 config/avr/avr.c:5145
 msgid "incorrect insn:"
 msgstr ""
 
-#: config/avr/avr.c:3720 config/avr/avr.c:3995 config/avr/avr.c:4275
-#: config/avr/avr.c:4560 config/avr/avr.c:4740 config/avr/avr.c:5008
-#: config/avr/avr.c:5206
+#: config/avr/avr.c:3717 config/avr/avr.c:3992 config/avr/avr.c:4272
+#: config/avr/avr.c:4557 config/avr/avr.c:4737 config/avr/avr.c:5005
+#: config/avr/avr.c:5203
 msgid "unknown move insn:"
 msgstr ""
 
-#: config/avr/avr.c:5637
+#: config/avr/avr.c:5634
 msgid "bad shift insn:"
 msgstr ""
 
-#: config/avr/avr.c:5745 config/avr/avr.c:6226 config/avr/avr.c:6641
+#: config/avr/avr.c:5742 config/avr/avr.c:6223 config/avr/avr.c:6638
 msgid "internal compiler error.  Incorrect shift:"
 msgstr ""
 
-#: config/avr/avr.c:7978
+#: config/avr/avr.c:7975
 msgid "unsupported fixed-point conversion"
 msgstr ""
 
@@ -3254,8 +3254,8 @@ msgid "invalid const_double operand"
 msgstr ""
 
 #: config/cris/cris.c:612 config/ft32/ft32.c:104 config/moxie/moxie.c:103
-#: final.c:3407 final.c:3409 fold-const.c:277 gcc.c:5211 gcc.c:5225
-#: loop-iv.c:3043 loop-iv.c:3052 rtl-error.c:101 toplev.c:335
+#: final.c:3407 final.c:3409 fold-const.c:271 gcc.c:5211 gcc.c:5225
+#: loop-iv.c:3043 loop-iv.c:3052 rtl-error.c:101 toplev.c:333
 #: tree-ssa-loop-niter.c:2328 tree-vrp.c:7480 cp/typeck.c:6065 java/expr.c:382
 #: lto/lto-object.c:184 lto/lto-object.c:281 lto/lto-object.c:338
 #: lto/lto-object.c:362
@@ -3533,7 +3533,7 @@ msgstr ""
 msgid "invalid constraints for operand"
 msgstr ""
 
-#: config/i386/i386.c:27726
+#: config/i386/i386.c:27754
 msgid "unknown insn mode"
 msgstr ""
 
@@ -3578,7 +3578,7 @@ msgstr ""
 msgid "invalid %%P operand"
 msgstr ""
 
-#: config/iq2000/iq2000.c:3143 config/rs6000/rs6000.c:19903
+#: config/iq2000/iq2000.c:3143 config/rs6000/rs6000.c:20768
 #, c-format
 msgid "invalid %%p value"
 msgstr ""
@@ -3641,8 +3641,7 @@ msgstr ""
 msgid "post-increment address is not a register"
 msgstr ""
 
-#: config/m32r/m32r.c:2328 config/m32r/m32r.c:2343
-#: config/rs6000/rs6000.c:31278
+#: config/m32r/m32r.c:2328 config/m32r/m32r.c:2343 config/rs6000/rs6000.c:32640
 msgid "bad address"
 msgstr ""
 
@@ -3767,277 +3766,277 @@ msgstr ""
 msgid "Try running '%s' in the shell to raise its limit.\n"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3922
+#: config/rs6000/rs6000.c:3959
 msgid "-maltivec=le not allowed for big-endian targets"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3934
+#: config/rs6000/rs6000.c:3971
 msgid "-mvsx requires hardware floating point"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3942
+#: config/rs6000/rs6000.c:3979
 msgid "-mvsx and -mpaired are incompatible"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3944
+#: config/rs6000/rs6000.c:3981
 msgid "-mvsx needs indexed addressing"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3949
+#: config/rs6000/rs6000.c:3986
 msgid "-mvsx and -mno-altivec are incompatible"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3951
+#: config/rs6000/rs6000.c:3988
 msgid "-mno-altivec disables vsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4091
+#: config/rs6000/rs6000.c:4129
 msgid "-mquad-memory requires 64-bit mode"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4094
+#: config/rs6000/rs6000.c:4132
 msgid "-mquad-memory-atomic requires 64-bit mode"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4106
+#: config/rs6000/rs6000.c:4144
 msgid "-mquad-memory is not available in little endian mode"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4174
+#: config/rs6000/rs6000.c:4212
 msgid "-mtoc-fusion requires 64-bit"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4181
+#: config/rs6000/rs6000.c:4219
 msgid "-mtoc-fusion requires medium/large code model"
 msgstr ""
 
-#: config/rs6000/rs6000.c:9505
+#: config/rs6000/rs6000.c:9919
 msgid "bad move"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19546
+#: config/rs6000/rs6000.c:20411
 msgid "Bad 128-bit move"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19737
+#: config/rs6000/rs6000.c:20602
 #, c-format
 msgid "invalid %%e value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19758
+#: config/rs6000/rs6000.c:20623
 #, c-format
 msgid "invalid %%f value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19767
+#: config/rs6000/rs6000.c:20632
 #, c-format
 msgid "invalid %%F value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19776
+#: config/rs6000/rs6000.c:20641
 #, c-format
 msgid "invalid %%G value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19811
+#: config/rs6000/rs6000.c:20676
 #, c-format
 msgid "invalid %%j code"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19821
+#: config/rs6000/rs6000.c:20686
 #, c-format
 msgid "invalid %%J code"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19831
+#: config/rs6000/rs6000.c:20696
 #, c-format
 msgid "invalid %%k value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19846 config/xtensa/xtensa.c:2343
+#: config/rs6000/rs6000.c:20711 config/xtensa/xtensa.c:2343
 #, c-format
 msgid "invalid %%K value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19893
+#: config/rs6000/rs6000.c:20758
 #, c-format
 msgid "invalid %%O value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19940
+#: config/rs6000/rs6000.c:20805
 #, c-format
 msgid "invalid %%q value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:19993
+#: config/rs6000/rs6000.c:20858
 #, c-format
 msgid "invalid %%T value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20005
+#: config/rs6000/rs6000.c:20870
 #, c-format
 msgid "invalid %%u value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20019 config/xtensa/xtensa.c:2313
+#: config/rs6000/rs6000.c:20884 config/xtensa/xtensa.c:2313
 #, c-format
 msgid "invalid %%v value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20086 config/xtensa/xtensa.c:2364
+#: config/rs6000/rs6000.c:20951 config/xtensa/xtensa.c:2364
 #, c-format
 msgid "invalid %%x value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20234
+#: config/rs6000/rs6000.c:21099
 #, c-format
 msgid "invalid %%y value, try using the 'Z' constraint"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20912
+#: config/rs6000/rs6000.c:21814
 msgid "__float128 and __ibm128 cannot be used in the same expression"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20918
+#: config/rs6000/rs6000.c:21820
 msgid "__ibm128 and long double cannot be used in the same expression"
 msgstr ""
 
-#: config/rs6000/rs6000.c:20924
+#: config/rs6000/rs6000.c:21826
 msgid "__float128 and long double cannot be used in the same expression"
 msgstr ""
 
-#: config/rs6000/rs6000.c:34329
+#: config/rs6000/rs6000.c:35706
 msgid "AltiVec argument passed to unprototyped function"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36027
+#: config/rs6000/rs6000.c:37429
 msgid "Could not generate addis value for fusion"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36099
+#: config/rs6000/rs6000.c:37501
 msgid "Unable to generate load/store offset for fusion"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36203
+#: config/rs6000/rs6000.c:37605
 msgid "Bad GPR fusion"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36421
+#: config/rs6000/rs6000.c:37823
 msgid "emit_fusion_p9_load, bad reg #1"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36458
+#: config/rs6000/rs6000.c:37860
 msgid "emit_fusion_p9_load, bad reg #2"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36461
+#: config/rs6000/rs6000.c:37863
 msgid "emit_fusion_p9_load not MEM"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36499
+#: config/rs6000/rs6000.c:37901
 msgid "emit_fusion_p9_store, bad reg #1"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36536
+#: config/rs6000/rs6000.c:37938
 msgid "emit_fusion_p9_store, bad reg #2"
 msgstr ""
 
-#: config/rs6000/rs6000.c:36539
+#: config/rs6000/rs6000.c:37941
 msgid "emit_fusion_p9_store not MEM"
 msgstr ""
 
-#: config/s390/s390.c:7147
+#: config/s390/s390.c:7168
 #, c-format
 msgid "symbolic memory references are only supported on z10 or later"
 msgstr ""
 
-#: config/s390/s390.c:7158
+#: config/s390/s390.c:7179
 #, c-format
 msgid "cannot decompose address"
 msgstr ""
 
-#: config/s390/s390.c:7227
+#: config/s390/s390.c:7248
 #, c-format
 msgid "invalid comparison operator for 'E' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7250
+#: config/s390/s390.c:7271
 #, c-format
 msgid "invalid reference for 'J' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7268
+#: config/s390/s390.c:7289
 #, c-format
 msgid "invalid address for 'O' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7290
+#: config/s390/s390.c:7311
 #, c-format
 msgid "invalid address for 'R' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7308
+#: config/s390/s390.c:7329
 #, c-format
 msgid "memory reference expected for 'S' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7318
+#: config/s390/s390.c:7339
 #, c-format
 msgid "invalid address for 'S' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7339
+#: config/s390/s390.c:7360
 #, c-format
 msgid "register or memory expression expected for 'N' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7350
+#: config/s390/s390.c:7371
 #, c-format
 msgid "register or memory expression expected for 'M' output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7435 config/s390/s390.c:7456
+#: config/s390/s390.c:7456 config/s390/s390.c:7477
 #, c-format
 msgid "invalid constant for output modifier '%c'"
 msgstr ""
 
-#: config/s390/s390.c:7453
+#: config/s390/s390.c:7474
 #, c-format
 msgid "invalid constant - try using an output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7494
+#: config/s390/s390.c:7515
 #, c-format
 msgid "invalid constant vector for output modifier '%c'"
 msgstr ""
 
-#: config/s390/s390.c:7501
+#: config/s390/s390.c:7522
 #, c-format
 msgid "invalid expression - try using an output modifier"
 msgstr ""
 
-#: config/s390/s390.c:7504
+#: config/s390/s390.c:7525
 #, c-format
 msgid "invalid expression for output modifier '%c'"
 msgstr ""
 
-#: config/s390/s390.c:11356
+#: config/s390/s390.c:11377
 msgid "Vector argument passed to unprototyped function"
 msgstr ""
 
-#: config/s390/s390.c:15023
+#: config/s390/s390.c:15036
 msgid "types differ in signess"
 msgstr ""
 
-#: config/s390/s390.c:15033
+#: config/s390/s390.c:15046
 msgid "binary operator does not support two vector bool operands"
 msgstr ""
 
-#: config/s390/s390.c:15036
+#: config/s390/s390.c:15049
 msgid "binary operator does not support vector bool operand"
 msgstr ""
 
-#: config/s390/s390.c:15044
+#: config/s390/s390.c:15057
 msgid ""
 "binary operator does not support mixing vector bool with floating point "
 "vector operands"
@@ -4065,43 +4064,43 @@ msgstr ""
 msgid "created and used with different endianness"
 msgstr ""
 
-#: config/sparc/sparc.c:8658 config/sparc/sparc.c:8664
+#: config/sparc/sparc.c:8758 config/sparc/sparc.c:8764
 #, c-format
 msgid "invalid %%Y operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8734
+#: config/sparc/sparc.c:8834
 #, c-format
 msgid "invalid %%A operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8744
+#: config/sparc/sparc.c:8844
 #, c-format
 msgid "invalid %%B operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8773 config/tilegx/tilegx.c:5095
+#: config/sparc/sparc.c:8873 config/tilegx/tilegx.c:5095
 #: config/tilepro/tilepro.c:4510
 #, c-format
 msgid "invalid %%C operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8790 config/tilegx/tilegx.c:5128
+#: config/sparc/sparc.c:8890 config/tilegx/tilegx.c:5128
 #, c-format
 msgid "invalid %%D operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8806
+#: config/sparc/sparc.c:8906
 #, c-format
 msgid "invalid %%f operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8818
+#: config/sparc/sparc.c:8918
 #, c-format
 msgid "invalid %%s operand"
 msgstr ""
 
-#: config/sparc/sparc.c:8863
+#: config/sparc/sparc.c:8963
 #, c-format
 msgid "floating-point constant not a valid immediate operand"
 msgstr ""
@@ -4238,23 +4237,23 @@ msgstr ""
 msgid "illegal operand detected"
 msgstr ""
 
-#: config/visium/visium.c:3195
+#: config/visium/visium.c:3255
 msgid "illegal operand "
 msgstr ""
 
-#: config/visium/visium.c:3246
+#: config/visium/visium.c:3306
 msgid "illegal operand address (1)"
 msgstr ""
 
-#: config/visium/visium.c:3253
+#: config/visium/visium.c:3313
 msgid "illegal operand address (2)"
 msgstr ""
 
-#: config/visium/visium.c:3268
+#: config/visium/visium.c:3328
 msgid "illegal operand address (3)"
 msgstr ""
 
-#: config/visium/visium.c:3276
+#: config/visium/visium.c:3336
 msgid "illegal operand address (4)"
 msgstr ""
 
@@ -4290,11 +4289,11 @@ msgstr ""
 msgid "address offset not a constant"
 msgstr ""
 
-#: c/c-objc-common.c:162
+#: c/c-objc-common.c:160
 msgid "aka"
 msgstr ""
 
-#: c/c-objc-common.c:189
+#: c/c-objc-common.c:187
 msgid "({anonymous})"
 msgstr ""
 
@@ -4302,9 +4301,9 @@ msgstr ""
 #: c/c-parser.c:5286 c/c-parser.c:5670 c/c-parser.c:5839 c/c-parser.c:5870
 #: c/c-parser.c:6085 c/c-parser.c:8825 c/c-parser.c:8860 c/c-parser.c:8891
 #: c/c-parser.c:8938 c/c-parser.c:9119 c/c-parser.c:9899 c/c-parser.c:9969
-#: c/c-parser.c:10012 c/c-parser.c:14509 c/c-parser.c:14533 c/c-parser.c:14551
-#: c/c-parser.c:14764 c/c-parser.c:14807 c/c-parser.c:2950 c/c-parser.c:9112
-#: cp/parser.c:26313 cp/parser.c:26886
+#: c/c-parser.c:10012 c/c-parser.c:14492 c/c-parser.c:14516 c/c-parser.c:14534
+#: c/c-parser.c:14747 c/c-parser.c:14790 c/c-parser.c:2950 c/c-parser.c:9112
+#: cp/parser.c:26388 cp/parser.c:26961
 #, gcc-internal-format
 msgid "expected %<;%>"
 msgstr ""
@@ -4315,22 +4314,22 @@ msgstr ""
 #: c/c-parser.c:5545 c/c-parser.c:5755 c/c-parser.c:6021 c/c-parser.c:6144
 #: c/c-parser.c:7203 c/c-parser.c:7628 c/c-parser.c:7669 c/c-parser.c:7802
 #: c/c-parser.c:7996 c/c-parser.c:8013 c/c-parser.c:8039 c/c-parser.c:9410
-#: c/c-parser.c:9482 c/c-parser.c:10515 c/c-parser.c:10716 c/c-parser.c:10855
-#: c/c-parser.c:10910 c/c-parser.c:11007 c/c-parser.c:11187 c/c-parser.c:11231
-#: c/c-parser.c:11275 c/c-parser.c:11319 c/c-parser.c:11363 c/c-parser.c:11408
-#: c/c-parser.c:11443 c/c-parser.c:11511 c/c-parser.c:11760 c/c-parser.c:11906
-#: c/c-parser.c:12032 c/c-parser.c:12183 c/c-parser.c:12286 c/c-parser.c:12329
-#: c/c-parser.c:12376 c/c-parser.c:12420 c/c-parser.c:12486 c/c-parser.c:12522
-#: c/c-parser.c:12649 c/c-parser.c:12731 c/c-parser.c:12839 c/c-parser.c:12874
-#: c/c-parser.c:12922 c/c-parser.c:12980 c/c-parser.c:14711 c/c-parser.c:16655
-#: c/c-parser.c:16865 c/c-parser.c:17306 c/c-parser.c:17364 c/c-parser.c:17790
-#: c/c-parser.c:10986 cp/parser.c:24098 cp/parser.c:26889
+#: c/c-parser.c:9482 c/c-parser.c:10515 c/c-parser.c:10699 c/c-parser.c:10838
+#: c/c-parser.c:10893 c/c-parser.c:10990 c/c-parser.c:11170 c/c-parser.c:11214
+#: c/c-parser.c:11258 c/c-parser.c:11302 c/c-parser.c:11346 c/c-parser.c:11391
+#: c/c-parser.c:11426 c/c-parser.c:11494 c/c-parser.c:11743 c/c-parser.c:11889
+#: c/c-parser.c:12015 c/c-parser.c:12166 c/c-parser.c:12269 c/c-parser.c:12312
+#: c/c-parser.c:12359 c/c-parser.c:12403 c/c-parser.c:12469 c/c-parser.c:12505
+#: c/c-parser.c:12632 c/c-parser.c:12714 c/c-parser.c:12822 c/c-parser.c:12857
+#: c/c-parser.c:12905 c/c-parser.c:12963 c/c-parser.c:14694 c/c-parser.c:16640
+#: c/c-parser.c:16850 c/c-parser.c:17291 c/c-parser.c:17349 c/c-parser.c:17775
+#: c/c-parser.c:10969 cp/parser.c:24120 cp/parser.c:26964
 #, gcc-internal-format
 msgid "expected %<(%>"
 msgstr ""
 
 #: c/c-parser.c:2192 c/c-parser.c:7230 c/c-parser.c:7636 c/c-parser.c:7677
-#: c/c-parser.c:7813 cp/parser.c:26311 cp/parser.c:26904
+#: c/c-parser.c:7813 cp/parser.c:26386 cp/parser.c:26979
 #, gcc-internal-format
 msgid "expected %<,%>"
 msgstr ""
@@ -4345,27 +4344,27 @@ msgstr ""
 #: c/c-parser.c:7828 c/c-parser.c:8005 c/c-parser.c:8030 c/c-parser.c:8054
 #: c/c-parser.c:8277 c/c-parser.c:8668 c/c-parser.c:9204 c/c-parser.c:9225
 #: c/c-parser.c:9433 c/c-parser.c:9488 c/c-parser.c:9871 c/c-parser.c:10552
-#: c/c-parser.c:10719 c/c-parser.c:10858 c/c-parser.c:10944 c/c-parser.c:11088
-#: c/c-parser.c:11194 c/c-parser.c:11238 c/c-parser.c:11282 c/c-parser.c:11326
-#: c/c-parser.c:11370 c/c-parser.c:11414 c/c-parser.c:11471 c/c-parser.c:11478
-#: c/c-parser.c:11518 c/c-parser.c:11673 c/c-parser.c:11731 c/c-parser.c:11780
-#: c/c-parser.c:11852 c/c-parser.c:12004 c/c-parser.c:12129 c/c-parser.c:12190
-#: c/c-parser.c:12293 c/c-parser.c:12336 c/c-parser.c:12401 c/c-parser.c:12443
-#: c/c-parser.c:12473 c/c-parser.c:12501 c/c-parser.c:12537 c/c-parser.c:12679
-#: c/c-parser.c:12697 c/c-parser.c:12703 c/c-parser.c:12787 c/c-parser.c:12798
-#: c/c-parser.c:12818 c/c-parser.c:12828 c/c-parser.c:12845 c/c-parser.c:12881
-#: c/c-parser.c:12893 c/c-parser.c:12941 c/c-parser.c:12949 c/c-parser.c:12984
-#: c/c-parser.c:14593 c/c-parser.c:14772 c/c-parser.c:14818 c/c-parser.c:16844
-#: c/c-parser.c:16921 c/c-parser.c:17342 c/c-parser.c:17426 c/c-parser.c:17799
-#: cp/parser.c:24130 cp/parser.c:26934
+#: c/c-parser.c:10702 c/c-parser.c:10841 c/c-parser.c:10927 c/c-parser.c:11071
+#: c/c-parser.c:11177 c/c-parser.c:11221 c/c-parser.c:11265 c/c-parser.c:11309
+#: c/c-parser.c:11353 c/c-parser.c:11397 c/c-parser.c:11454 c/c-parser.c:11461
+#: c/c-parser.c:11501 c/c-parser.c:11656 c/c-parser.c:11714 c/c-parser.c:11763
+#: c/c-parser.c:11835 c/c-parser.c:11987 c/c-parser.c:12112 c/c-parser.c:12173
+#: c/c-parser.c:12276 c/c-parser.c:12319 c/c-parser.c:12384 c/c-parser.c:12426
+#: c/c-parser.c:12456 c/c-parser.c:12484 c/c-parser.c:12520 c/c-parser.c:12662
+#: c/c-parser.c:12680 c/c-parser.c:12686 c/c-parser.c:12770 c/c-parser.c:12781
+#: c/c-parser.c:12801 c/c-parser.c:12811 c/c-parser.c:12828 c/c-parser.c:12864
+#: c/c-parser.c:12876 c/c-parser.c:12924 c/c-parser.c:12932 c/c-parser.c:12967
+#: c/c-parser.c:14576 c/c-parser.c:14755 c/c-parser.c:14801 c/c-parser.c:16829
+#: c/c-parser.c:16906 c/c-parser.c:17327 c/c-parser.c:17411 c/c-parser.c:17784
+#: cp/parser.c:24152 cp/parser.c:27009
 #, gcc-internal-format
 msgid "expected %<)%>"
 msgstr ""
 
 #: c/c-parser.c:3583 c/c-parser.c:4514 c/c-parser.c:4550 c/c-parser.c:6136
-#: c/c-parser.c:7744 c/c-parser.c:8102 c/c-parser.c:8251 c/c-parser.c:10654
-#: c/c-parser.c:17702 c/c-parser.c:17704 c/c-parser.c:18043 cp/parser.c:7024
-#: cp/parser.c:26898
+#: c/c-parser.c:7744 c/c-parser.c:8102 c/c-parser.c:8251 c/c-parser.c:10656
+#: c/c-parser.c:17687 c/c-parser.c:17689 c/c-parser.c:18028 cp/parser.c:7024
+#: cp/parser.c:26973
 #, gcc-internal-format
 msgid "expected %<]%>"
 msgstr ""
@@ -4374,22 +4373,22 @@ msgstr ""
 msgid "expected %<;%>, %<,%> or %<)%>"
 msgstr ""
 
-#: c/c-parser.c:4372 c/c-parser.c:14534 cp/parser.c:26892 cp/parser.c:28814
+#: c/c-parser.c:4372 c/c-parser.c:14517 cp/parser.c:26967 cp/parser.c:28889
 #, gcc-internal-format
 msgid "expected %<}%>"
 msgstr ""
 
-#: c/c-parser.c:4684 c/c-parser.c:9453 c/c-parser.c:15252 c/c-parser.c:2768
-#: c/c-parser.c:2971 c/c-parser.c:9007 cp/parser.c:17140 cp/parser.c:26895
+#: c/c-parser.c:4684 c/c-parser.c:9453 c/c-parser.c:15237 c/c-parser.c:2768
+#: c/c-parser.c:2971 c/c-parser.c:9007 cp/parser.c:17162 cp/parser.c:26970
 #, gcc-internal-format
 msgid "expected %<{%>"
 msgstr ""
 
 #: c/c-parser.c:4917 c/c-parser.c:4926 c/c-parser.c:6043 c/c-parser.c:6385
 #: c/c-parser.c:7278 c/c-parser.c:9218 c/c-parser.c:9601 c/c-parser.c:9662
-#: c/c-parser.c:10641 c/c-parser.c:11457 c/c-parser.c:11591 c/c-parser.c:11963
-#: c/c-parser.c:12055 c/c-parser.c:12683 c/c-parser.c:16712 c/c-parser.c:16768
-#: c/c-parser.c:11080 cp/parser.c:26928 cp/parser.c:28025 cp/parser.c:30699
+#: c/c-parser.c:10643 c/c-parser.c:11440 c/c-parser.c:11574 c/c-parser.c:11946
+#: c/c-parser.c:12038 c/c-parser.c:12666 c/c-parser.c:16697 c/c-parser.c:16753
+#: c/c-parser.c:11063 cp/parser.c:27003 cp/parser.c:28100 cp/parser.c:30758
 #, gcc-internal-format
 msgid "expected %<:%>"
 msgstr ""
@@ -4410,7 +4409,7 @@ msgstr ""
 msgid "Cilk array notation cannot be used as a condition for while statement"
 msgstr ""
 
-#: c/c-parser.c:5656 cp/parser.c:26822
+#: c/c-parser.c:5656 cp/parser.c:26897
 #, gcc-internal-format
 msgid "expected %<while%>"
 msgstr ""
@@ -4428,47 +4427,47 @@ msgstr ""
 msgid "expected %<.%>"
 msgstr ""
 
-#: c/c-parser.c:8678 c/c-parser.c:8710 c/c-parser.c:8950 cp/parser.c:28599
-#: cp/parser.c:28673
+#: c/c-parser.c:8678 c/c-parser.c:8710 c/c-parser.c:8950 cp/parser.c:28674
+#: cp/parser.c:28748
 #, gcc-internal-format
 msgid "expected %<@end%>"
 msgstr ""
 
-#: c/c-parser.c:9367 cp/parser.c:26913
+#: c/c-parser.c:9367 cp/parser.c:26988
 #, gcc-internal-format
 msgid "expected %<>%>"
 msgstr ""
 
-#: c/c-parser.c:12133 c/c-parser.c:12897 cp/parser.c:26937
+#: c/c-parser.c:12116 c/c-parser.c:12880 cp/parser.c:27012
 #, gcc-internal-format
 msgid "expected %<,%> or %<)%>"
 msgstr ""
 
-#: c/c-parser.c:14246 c/c-parser.c:14290 c/c-parser.c:14518 c/c-parser.c:14753
-#: c/c-parser.c:16906 c/c-parser.c:17528 c/c-parser.c:4573 cp/parser.c:26916
+#: c/c-parser.c:14229 c/c-parser.c:14273 c/c-parser.c:14501 c/c-parser.c:14736
+#: c/c-parser.c:16891 c/c-parser.c:17513 c/c-parser.c:4573 cp/parser.c:26991
 #, gcc-internal-format
 msgid "expected %<=%>"
 msgstr ""
 
-#: c/c-parser.c:15295 c/c-parser.c:15285 cp/parser.c:34071
+#: c/c-parser.c:15280 c/c-parser.c:15270 cp/parser.c:34132
 #, gcc-internal-format
 msgid "expected %<#pragma omp section%> or %<}%>"
 msgstr ""
 
-#: c/c-parser.c:17690 c/c-parser.c:10600 cp/parser.c:26901 cp/parser.c:29954
+#: c/c-parser.c:17675 c/c-parser.c:10602 cp/parser.c:26976 cp/parser.c:30031
 #, gcc-internal-format
 msgid "expected %<[%>"
 msgstr ""
 
-#: c/c-typeck.c:7400
+#: c/c-typeck.c:7405
 msgid "(anonymous)"
 msgstr ""
 
-#: cp/call.c:9453
+#: cp/call.c:9464
 msgid "candidate 1:"
 msgstr ""
 
-#: cp/call.c:9454
+#: cp/call.c:9465
 msgid "candidate 2:"
 msgstr ""
 
@@ -4480,217 +4479,217 @@ msgstr ""
 msgid "candidate is: %+#D"
 msgstr ""
 
-#: cp/error.c:319
+#: cp/error.c:317
 msgid "<missing>"
 msgstr ""
 
-#: cp/error.c:419
+#: cp/error.c:417
 msgid "<brace-enclosed initializer list>"
 msgstr ""
 
-#: cp/error.c:421
+#: cp/error.c:419
 msgid "<unresolved overloaded function type>"
 msgstr ""
 
-#: cp/error.c:583
+#: cp/error.c:581
 msgid "<type error>"
 msgstr ""
 
-#: cp/error.c:686
+#: cp/error.c:684
 #, c-format
 msgid "<anonymous %s>"
 msgstr ""
 
 #. A lambda's "type" is essentially its signature.
-#: cp/error.c:691
+#: cp/error.c:689
 msgid "<lambda"
 msgstr ""
 
-#: cp/error.c:821
+#: cp/error.c:819
 msgid "<typeprefixerror>"
 msgstr ""
 
-#: cp/error.c:950
+#: cp/error.c:948
 #, c-format
 msgid "(static initializers for %s)"
 msgstr ""
 
-#: cp/error.c:952
+#: cp/error.c:950
 #, c-format
 msgid "(static destructors for %s)"
 msgstr ""
 
-#: cp/error.c:1060
+#: cp/error.c:1063
 msgid "vtable for "
 msgstr ""
 
-#: cp/error.c:1084
+#: cp/error.c:1087
 msgid "<return value> "
 msgstr ""
 
-#: cp/error.c:1099
+#: cp/error.c:1102
 msgid "{anonymous}"
 msgstr ""
 
-#: cp/error.c:1101
+#: cp/error.c:1104
 msgid "(anonymous namespace)"
 msgstr ""
 
-#: cp/error.c:1217
+#: cp/error.c:1220
 msgid "<template arguments error>"
 msgstr ""
 
-#: cp/error.c:1239
+#: cp/error.c:1242
 msgid "<enumerator>"
 msgstr ""
 
-#: cp/error.c:1279
+#: cp/error.c:1282
 msgid "<declaration error>"
 msgstr ""
 
-#: cp/error.c:1808 cp/error.c:1828
+#: cp/error.c:1819 cp/error.c:1839
 msgid "<template parameter error>"
 msgstr ""
 
-#: cp/error.c:1958
+#: cp/error.c:1969
 msgid "<statement>"
 msgstr ""
 
-#: cp/error.c:1985 cp/error.c:3027 c-family/c-pretty-print.c:2182
+#: cp/error.c:1996 cp/error.c:3043 c-family/c-pretty-print.c:2182
 #, gcc-internal-format
 msgid "<unknown>"
 msgstr ""
 
 #. While waiting for caret diagnostics, avoid printing
 #. __cxa_allocate_exception, __cxa_throw, and the like.
-#: cp/error.c:2003
+#: cp/error.c:2014
 msgid "<throw-expression>"
 msgstr ""
 
-#: cp/error.c:2104
+#: cp/error.c:2115
 msgid "<ubsan routine call>"
 msgstr ""
 
-#: cp/error.c:2561
+#: cp/error.c:2572
 msgid "<unparsed>"
 msgstr ""
 
-#: cp/error.c:2708
+#: cp/error.c:2723
 msgid "<lambda>"
 msgstr ""
 
-#: cp/error.c:2750
+#: cp/error.c:2766
 msgid "*this"
 msgstr ""
 
-#: cp/error.c:2760
+#: cp/error.c:2776
 msgid "<expression error>"
 msgstr ""
 
-#: cp/error.c:2775
+#: cp/error.c:2791
 msgid "<unknown operator>"
 msgstr ""
 
-#: cp/error.c:3071
+#: cp/error.c:3087
 msgid "{unknown}"
 msgstr ""
 
-#: cp/error.c:3183
+#: cp/error.c:3199
 msgid "At global scope:"
 msgstr ""
 
-#: cp/error.c:3289
+#: cp/error.c:3305
 #, c-format
 msgid "In static member function %qs"
 msgstr ""
 
-#: cp/error.c:3291
+#: cp/error.c:3307
 #, c-format
 msgid "In copy constructor %qs"
 msgstr ""
 
-#: cp/error.c:3293
+#: cp/error.c:3309
 #, c-format
 msgid "In constructor %qs"
 msgstr ""
 
-#: cp/error.c:3295
+#: cp/error.c:3311
 #, c-format
 msgid "In destructor %qs"
 msgstr ""
 
-#: cp/error.c:3297
+#: cp/error.c:3313
 msgid "In lambda function"
 msgstr ""
 
-#: cp/error.c:3317
+#: cp/error.c:3333
 #, c-format
 msgid "%s: In substitution of %qS:\n"
 msgstr ""
 
-#: cp/error.c:3318
+#: cp/error.c:3334
 msgid "%s: In instantiation of %q#D:\n"
 msgstr ""
 
-#: cp/error.c:3343
+#: cp/error.c:3359
 msgid "%r%s:%d:%d:%R   "
 msgstr ""
 
-#: cp/error.c:3346
+#: cp/error.c:3362
 msgid "%r%s:%d:%R   "
 msgstr ""
 
-#: cp/error.c:3354
+#: cp/error.c:3370
 #, c-format
 msgid "recursively required by substitution of %qS\n"
 msgstr ""
 
-#: cp/error.c:3355
+#: cp/error.c:3371
 #, c-format
 msgid "required by substitution of %qS\n"
 msgstr ""
 
-#: cp/error.c:3360
+#: cp/error.c:3376
 msgid "recursively required from %q#D\n"
 msgstr ""
 
-#: cp/error.c:3361
+#: cp/error.c:3377
 msgid "required from %q#D\n"
 msgstr ""
 
-#: cp/error.c:3368
+#: cp/error.c:3384
 msgid "recursively required from here\n"
 msgstr ""
 
-#: cp/error.c:3369
+#: cp/error.c:3385
 msgid "required from here\n"
 msgstr ""
 
-#: cp/error.c:3421
+#: cp/error.c:3437
 msgid ""
 "%r%s:%d:%d:%R   [ skipping %d instantiation contexts, use -ftemplate-"
 "backtrace-limit=0 to disable ]\n"
 msgstr ""
 
-#: cp/error.c:3427
+#: cp/error.c:3443
 msgid ""
 "%r%s:%d:%R   [ skipping %d instantiation contexts, use -ftemplate-backtrace-"
 "limit=0 to disable ]\n"
 msgstr ""
 
-#: cp/error.c:3481
+#: cp/error.c:3497
 msgid "%r%s:%d:%d:%R   in constexpr expansion of %qs"
 msgstr ""
 
-#: cp/error.c:3485
+#: cp/error.c:3501
 msgid "%r%s:%d:%R   in constexpr expansion of %qs"
 msgstr ""
 
-#: cp/pt.c:1947 cp/semantics.c:5220
+#: cp/pt.c:1945 cp/semantics.c:5217
 msgid "candidates are:"
 msgstr ""
 
-#: cp/pt.c:21038
+#: cp/pt.c:21086
 msgid "candidate is:"
 msgid_plural "candidates are:"
 msgstr[0] ""
@@ -4736,27 +4735,27 @@ msgstr ""
 msgid "source type is not polymorphic"
 msgstr ""
 
-#: cp/typeck.c:5820 c/c-typeck.c:4093
+#: cp/typeck.c:5820 c/c-typeck.c:4098
 #, gcc-internal-format
 msgid "wrong type argument to unary minus"
 msgstr ""
 
-#: cp/typeck.c:5821 c/c-typeck.c:4080
+#: cp/typeck.c:5821 c/c-typeck.c:4085
 #, gcc-internal-format
 msgid "wrong type argument to unary plus"
 msgstr ""
 
-#: cp/typeck.c:5848 c/c-typeck.c:4119
+#: cp/typeck.c:5848 c/c-typeck.c:4124
 #, gcc-internal-format
 msgid "wrong type argument to bit-complement"
 msgstr ""
 
-#: cp/typeck.c:5855 c/c-typeck.c:4127
+#: cp/typeck.c:5855 c/c-typeck.c:4132
 #, gcc-internal-format
 msgid "wrong type argument to abs"
 msgstr ""
 
-#: cp/typeck.c:5867 c/c-typeck.c:4139
+#: cp/typeck.c:5867 c/c-typeck.c:4144
 #, gcc-internal-format
 msgid "wrong type argument to conjugation"
 msgstr ""
@@ -4828,23 +4827,23 @@ msgstr ""
 msgid "arguments '%s' and '%s' for intrinsic '%s'"
 msgstr ""
 
-#: fortran/error.c:873
+#: fortran/error.c:871
 msgid "Fortran 2008 obsolescent feature:"
 msgstr ""
 
-#: fortran/error.c:882
+#: fortran/error.c:880
 msgid "GNU Extension:"
 msgstr ""
 
-#: fortran/error.c:885
+#: fortran/error.c:883
 msgid "Legacy Extension:"
 msgstr ""
 
-#: fortran/error.c:888
+#: fortran/error.c:886
 msgid "Obsolescent feature:"
 msgstr ""
 
-#: fortran/error.c:891
+#: fortran/error.c:889
 msgid "Deleted feature:"
 msgstr ""
 
@@ -4872,7 +4871,7 @@ msgstr ""
 msgid "Driving:"
 msgstr ""
 
-#: fortran/interface.c:2941 fortran/intrinsic.c:3994
+#: fortran/interface.c:3048 fortran/intrinsic.c:3994
 msgid "actual argument to INTENT = OUT/INOUT"
 msgstr ""
 
@@ -4986,7 +4985,7 @@ msgstr ""
 msgid "Expected integer"
 msgstr ""
 
-#: fortran/module.c:1559 fortran/module.c:2546
+#: fortran/module.c:1559 fortran/module.c:2547
 msgid "Expected string"
 msgstr ""
 
@@ -4998,67 +4997,67 @@ msgstr ""
 msgid "Expected attribute bit name"
 msgstr ""
 
-#: fortran/module.c:3150
+#: fortran/module.c:3151
 msgid "Expected integer string"
 msgstr ""
 
-#: fortran/module.c:3154
+#: fortran/module.c:3155
 msgid "Error converting integer"
 msgstr ""
 
-#: fortran/module.c:3176
+#: fortran/module.c:3177
 msgid "Expected real string"
 msgstr ""
 
-#: fortran/module.c:3400
+#: fortran/module.c:3401
 msgid "Expected expression type"
 msgstr ""
 
-#: fortran/module.c:3480
+#: fortran/module.c:3481
 msgid "Bad operator"
 msgstr ""
 
-#: fortran/module.c:3595
+#: fortran/module.c:3596
 msgid "Bad type in constant expression"
 msgstr ""
 
-#: fortran/module.c:6939
+#: fortran/module.c:6946
 msgid "Unexpected end of module"
 msgstr ""
 
-#: fortran/parse.c:1592
+#: fortran/parse.c:1671
 msgid "arithmetic IF"
 msgstr ""
 
-#: fortran/parse.c:1601
+#: fortran/parse.c:1680
 msgid "attribute declaration"
 msgstr ""
 
-#: fortran/parse.c:1637
+#: fortran/parse.c:1716
 msgid "data declaration"
 msgstr ""
 
-#: fortran/parse.c:1646
+#: fortran/parse.c:1734
 msgid "derived type declaration"
 msgstr ""
 
-#: fortran/parse.c:1749
+#: fortran/parse.c:1846
 msgid "block IF"
 msgstr ""
 
-#: fortran/parse.c:1758
+#: fortran/parse.c:1855
 msgid "implied END DO"
 msgstr ""
 
-#: fortran/parse.c:1852 fortran/resolve.c:10531
+#: fortran/parse.c:1949 fortran/resolve.c:10537
 msgid "assignment"
 msgstr ""
 
-#: fortran/parse.c:1855 fortran/resolve.c:10582 fortran/resolve.c:10585
+#: fortran/parse.c:1952 fortran/resolve.c:10588 fortran/resolve.c:10591
 msgid "pointer assignment"
 msgstr ""
 
-#: fortran/parse.c:1873
+#: fortran/parse.c:1970
 msgid "simple IF"
 msgstr ""
 
@@ -5070,189 +5069,189 @@ msgstr ""
 msgid "internal function"
 msgstr ""
 
-#: fortran/resolve.c:2151 fortran/resolve.c:2345
+#: fortran/resolve.c:2157 fortran/resolve.c:2351
 msgid "elemental procedure"
 msgstr ""
 
-#: fortran/resolve.c:2248
+#: fortran/resolve.c:2254
 msgid "allocatable argument"
 msgstr ""
 
-#: fortran/resolve.c:2253
+#: fortran/resolve.c:2259
 msgid "asynchronous argument"
 msgstr ""
 
-#: fortran/resolve.c:2258
+#: fortran/resolve.c:2264
 msgid "optional argument"
 msgstr ""
 
-#: fortran/resolve.c:2263
+#: fortran/resolve.c:2269
 msgid "pointer argument"
 msgstr ""
 
-#: fortran/resolve.c:2268
+#: fortran/resolve.c:2274
 msgid "target argument"
 msgstr ""
 
-#: fortran/resolve.c:2273
+#: fortran/resolve.c:2279
 msgid "value argument"
 msgstr ""
 
-#: fortran/resolve.c:2278
+#: fortran/resolve.c:2284
 msgid "volatile argument"
 msgstr ""
 
-#: fortran/resolve.c:2283
+#: fortran/resolve.c:2289
 msgid "assumed-shape argument"
 msgstr ""
 
-#: fortran/resolve.c:2288
+#: fortran/resolve.c:2294
 msgid "assumed-rank argument"
 msgstr ""
 
-#: fortran/resolve.c:2293
+#: fortran/resolve.c:2299
 msgid "coarray argument"
 msgstr ""
 
-#: fortran/resolve.c:2298
+#: fortran/resolve.c:2304
 msgid "parametrized derived type argument"
 msgstr ""
 
-#: fortran/resolve.c:2303
+#: fortran/resolve.c:2309
 msgid "polymorphic argument"
 msgstr ""
 
-#: fortran/resolve.c:2308
+#: fortran/resolve.c:2314
 msgid "NO_ARG_CHECK attribute"
 msgstr ""
 
 #. As assumed-type is unlimited polymorphic (cf. above).
 #. See also TS 29113, Note 6.1.
-#: fortran/resolve.c:2315
+#: fortran/resolve.c:2321
 msgid "assumed-type argument"
 msgstr ""
 
-#: fortran/resolve.c:2326
+#: fortran/resolve.c:2332
 msgid "array result"
 msgstr ""
 
-#: fortran/resolve.c:2331
+#: fortran/resolve.c:2337
 msgid "pointer or allocatable result"
 msgstr ""
 
-#: fortran/resolve.c:2338
+#: fortran/resolve.c:2344
 msgid "result with non-constant character length"
 msgstr ""
 
-#: fortran/resolve.c:2350
+#: fortran/resolve.c:2356
 msgid "bind(c) procedure"
 msgstr ""
 
-#: fortran/resolve.c:3552
+#: fortran/resolve.c:3558
 #, c-format
 msgid "Invalid context for NULL() pointer at %%L"
 msgstr ""
 
-#: fortran/resolve.c:3568
+#: fortran/resolve.c:3574
 #, c-format
 msgid "Operand of unary numeric operator %%<%s%%> at %%L is %s"
 msgstr ""
 
-#: fortran/resolve.c:3584
+#: fortran/resolve.c:3590
 #, c-format
 msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"
 msgstr ""
 
-#: fortran/resolve.c:3599
+#: fortran/resolve.c:3605
 #, c-format
 msgid "Operands of string concatenation operator at %%L are %s/%s"
 msgstr ""
 
-#: fortran/resolve.c:3618
+#: fortran/resolve.c:3624
 #, c-format
 msgid "Operands of logical operator %%<%s%%> at %%L are %s/%s"
 msgstr ""
 
-#: fortran/resolve.c:3632
+#: fortran/resolve.c:3638
 #, c-format
 msgid "Operand of .not. operator at %%L is %s"
 msgstr ""
 
-#: fortran/resolve.c:3646
+#: fortran/resolve.c:3652
 msgid "COMPLEX quantities cannot be compared at %L"
 msgstr ""
 
-#: fortran/resolve.c:3697
+#: fortran/resolve.c:3703
 #, c-format
 msgid "Logicals at %%L must be compared with %s instead of %s"
 msgstr ""
 
-#: fortran/resolve.c:3703
+#: fortran/resolve.c:3709
 #, c-format
 msgid "Operands of comparison operator %%<%s%%> at %%L are %s/%s"
 msgstr ""
 
-#: fortran/resolve.c:3711
+#: fortran/resolve.c:3717
 #, c-format
 msgid "Unknown operator %%<%s%%> at %%L"
 msgstr ""
 
-#: fortran/resolve.c:3714
+#: fortran/resolve.c:3720
 #, c-format
 msgid "Operand of user operator %%<%s%%> at %%L is %s"
 msgstr ""
 
-#: fortran/resolve.c:3718
+#: fortran/resolve.c:3724
 #, c-format
 msgid "Operands of user operator %%<%s%%> at %%L are %s/%s"
 msgstr ""
 
-#: fortran/resolve.c:3806
+#: fortran/resolve.c:3812
 #, c-format
 msgid "Inconsistent ranks for operator at %%L and %%L"
 msgstr ""
 
-#: fortran/resolve.c:6470
+#: fortran/resolve.c:6476
 msgid "Loop variable"
 msgstr ""
 
-#: fortran/resolve.c:6474
+#: fortran/resolve.c:6480
 msgid "iterator variable"
 msgstr ""
 
-#: fortran/resolve.c:6478
+#: fortran/resolve.c:6484
 msgid "Start expression in DO loop"
 msgstr ""
 
-#: fortran/resolve.c:6482
+#: fortran/resolve.c:6488
 msgid "End expression in DO loop"
 msgstr ""
 
-#: fortran/resolve.c:6486
+#: fortran/resolve.c:6492
 msgid "Step expression in DO loop"
 msgstr ""
 
-#: fortran/resolve.c:6743 fortran/resolve.c:6746
+#: fortran/resolve.c:6749 fortran/resolve.c:6752
 msgid "DEALLOCATE object"
 msgstr ""
 
-#: fortran/resolve.c:7113 fortran/resolve.c:7116
+#: fortran/resolve.c:7119 fortran/resolve.c:7122
 msgid "ALLOCATE object"
 msgstr ""
 
-#: fortran/resolve.c:7345 fortran/resolve.c:8792
+#: fortran/resolve.c:7351 fortran/resolve.c:8798
 msgid "STAT variable"
 msgstr ""
 
-#: fortran/resolve.c:7389 fortran/resolve.c:8804
+#: fortran/resolve.c:7395 fortran/resolve.c:8810
 msgid "ERRMSG variable"
 msgstr ""
 
-#: fortran/resolve.c:8634
+#: fortran/resolve.c:8640
 msgid "item in READ"
 msgstr ""
 
-#: fortran/resolve.c:8816
+#: fortran/resolve.c:8822
 msgid "ACQUIRED_LOCK variable"
 msgstr ""
 
@@ -5261,30 +5260,30 @@ msgstr ""
 msgid "Different CHARACTER lengths (%ld/%ld) in array constructor"
 msgstr ""
 
-#: fortran/trans-array.c:5484
+#: fortran/trans-array.c:5491
 msgid "Integer overflow when calculating the amount of memory to allocate"
 msgstr ""
 
-#: fortran/trans-decl.c:5490
+#: fortran/trans-decl.c:5503
 #, c-format
 msgid ""
 "Actual string length does not match the declared one for dummy argument "
 "'%s' (%ld/%ld)"
 msgstr ""
 
-#: fortran/trans-decl.c:5498
+#: fortran/trans-decl.c:5511
 #, c-format
 msgid ""
 "Actual string length is shorter than the declared one for dummy argument "
 "'%s' (%ld/%ld)"
 msgstr ""
 
-#: fortran/trans-expr.c:8140
+#: fortran/trans-expr.c:8170
 #, c-format
 msgid "Target of rank remapping is too small (%ld < %ld)"
 msgstr ""
 
-#: fortran/trans-expr.c:9345
+#: fortran/trans-expr.c:9375
 msgid "Assignment of scalar to unallocated array"
 msgstr ""
 
@@ -5565,7 +5564,7 @@ msgstr ""
 msgid "%s: Failed to close output file %s\n"
 msgstr ""
 
-#: objc/objc-act.c:6179 cp/cxx-pretty-print.c:156
+#: objc/objc-act.c:6179 cp/cxx-pretty-print.c:159
 #, gcc-internal-format
 msgid "<unnamed>"
 msgstr ""
@@ -5602,185 +5601,143 @@ msgstr ""
 msgid "-E or -x required when input is from standard input"
 msgstr ""
 
-#: config/nios2/elf.h:44
-msgid "You need a C startup file for -msys-crt0="
-msgstr ""
-
-#: config/sol2.h:181
-msgid "-fvtable-verify is not supported in this configuration"
-msgstr ""
-
-#: config/sol2.h:268 config/sol2.h:273
-msgid "does not support multilib"
-msgstr ""
-
-#: config/sol2.h:365
-msgid "-pie is not supported in this configuration"
-msgstr ""
-
-#: config/darwin.h:251
+#: config/darwin.h:252
 msgid "-current_version only allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:253
+#: config/darwin.h:254
 msgid "-install_name only allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:258
+#: config/darwin.h:259
 msgid "-bundle not allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:259
+#: config/darwin.h:260
 msgid "-bundle_loader not allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:260
+#: config/darwin.h:261
 msgid "-client_name not allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:265
+#: config/darwin.h:266
 msgid "-force_flat_namespace not allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:267
+#: config/darwin.h:268
 msgid "-keep_private_externs not allowed with -dynamiclib"
 msgstr ""
 
-#: config/darwin.h:268
+#: config/darwin.h:269
 msgid "-private_bundle not allowed with -dynamiclib"
 msgstr ""
 
-#: config/sparc/linux64.h:149 config/sparc/linux64.h:156
-#: config/sparc/netbsd-elf.h:108 config/sparc/netbsd-elf.h:117
-#: config/sparc/sol2.h:219 config/sparc/sol2.h:225
-msgid "may not use both -m32 and -m64"
-msgstr ""
-
-#: config/s390/tpf.h:110
-msgid "static is not supported on TPF-OS"
+#: config/dragonfly.h:76 config/alpha/freebsd.h:33 config/i386/freebsd.h:82
+#: config/i386/freebsd64.h:35 config/ia64/freebsd.h:26
+#: config/rs6000/sysv4.h:731 config/sparc/freebsd.h:45
+msgid "consider using '-pg' instead of '-p' with gprof(1)"
 msgstr ""
 
-#: config/i386/mingw-w64.h:87 config/i386/mingw32.h:117
-#: config/i386/cygwin-w64.h:64 config/i386/cygwin.h:130
-msgid "shared and mdll are not compatible"
+#: config/lynx.h:69
+msgid "cannot use mthreads and mlegacy-threads together"
 msgstr ""
 
-#: config/alpha/freebsd.h:33 config/rs6000/sysv4.h:731 config/dragonfly.h:76
-#: config/ia64/freebsd.h:26 config/i386/freebsd.h:82
-#: config/i386/freebsd64.h:35 config/sparc/freebsd.h:45
-msgid "consider using '-pg' instead of '-p' with gprof(1)"
+#: config/lynx.h:94
+msgid "cannot use mshared and static together"
 msgstr ""
 
-#: objc/lang-specs.h:30 objc/lang-specs.h:41
-msgid "GNU Objective C no longer supports traditional compilation"
+#: config/sol2.h:181
+msgid "-fvtable-verify is not supported in this configuration"
 msgstr ""
 
-#: objc/lang-specs.h:55
-msgid ""
-"objc-cpp-output is deprecated; please use objective-c-cpp-output instead"
+#: config/sol2.h:268 config/sol2.h:273
+msgid "does not support multilib"
 msgstr ""
 
-#: config/tilegx/tilegx.h:546 config/tilegx/tilegx.h:551 config/arm/arm.h:102
-msgid "-mbig-endian and -mlittle-endian may not be used together"
+#: config/sol2.h:365
+msgid "-pie is not supported in this configuration"
 msgstr ""
 
-#: config/moxie/moxiebox.h:43
-msgid "this target is little-endian"
+#: config/vxworks.h:70
+msgid "-Xbind-now and -Xbind-lazy are incompatible"
 msgstr ""
 
-#: ada/gcc-interface/lang-specs.h:34
-msgid "-c or -S required for Ada"
+#: config/arc/arc.h:142 config/mips/mips.h:1358
+msgid "may not use both -EB and -EL"
 msgstr ""
 
-#: ada/gcc-interface/lang-specs.h:52
-msgid "-c required for gnat2why"
+#: config/arm/arm.h:100
+msgid "-mfloat-abi=soft and -mfloat-abi=hard may not be used together"
 msgstr ""
 
-#: ada/gcc-interface/lang-specs.h:65
-msgid "-c required for gnat2scil"
+#: config/arm/arm.h:102 config/tilegx/tilegx.h:546 config/tilegx/tilegx.h:551
+msgid "-mbig-endian and -mlittle-endian may not be used together"
 msgstr ""
 
-#: config/pa/pa-hpux10.h:102 config/pa/pa-hpux10.h:105
-#: config/pa/pa-hpux10.h:113 config/pa/pa-hpux10.h:116
-#: config/pa/pa-hpux11.h:134 config/pa/pa-hpux11.h:137
-#: config/pa/pa64-hpux.h:29 config/pa/pa64-hpux.h:32 config/pa/pa64-hpux.h:41
-#: config/pa/pa64-hpux.h:44
-msgid "warning: consider linking with '-static' as system libraries with"
+#: config/arm/freebsd.h:49
+msgid "consider using `-pg' instead of `-p' with gprof (1) "
 msgstr ""
 
-#: config/pa/pa-hpux10.h:103 config/pa/pa-hpux10.h:106
-#: config/pa/pa-hpux10.h:114 config/pa/pa-hpux10.h:117
-#: config/pa/pa-hpux11.h:135 config/pa/pa-hpux11.h:138
-#: config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33 config/pa/pa64-hpux.h:42
-#: config/pa/pa64-hpux.h:45
-msgid "  profiling support are only provided in archive format"
+#: config/avr/specs.h:68
+msgid "shared is not supported"
 msgstr ""
 
-#: config/vxworks.h:70
-msgid "-Xbind-now and -Xbind-lazy are incompatible"
+#: config/bfin/elf.h:55
+msgid "no processor type specified for linking"
 msgstr ""
 
 #: config/cris/cris.h:184
 msgid "do not specify both -march=... and -mcpu=..."
 msgstr ""
 
-#: config/arc/arc.h:142 config/mips/mips.h:1358
-msgid "may not use both -EB and -EL"
-msgstr ""
-
-#: objcp/lang-specs.h:58
-msgid ""
-"objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead"
-msgstr ""
-
-#: config/rs6000/darwin.h:95
-msgid " conflicting code gen style switches are used"
+#: config/i386/cygwin-w64.h:64 config/i386/cygwin.h:130
+#: config/i386/mingw-w64.h:87 config/i386/mingw32.h:117
+msgid "shared and mdll are not compatible"
 msgstr ""
 
-#: fortran/lang-specs.h:54 fortran/lang-specs.h:68
-msgid "gfortran does not support -E without -cpp"
+#: config/mcore/mcore.h:53
+msgid "the m210 does not have little endian support"
 msgstr ""
 
-#: config/sh/sh.h:375 config/sh/sh.h:378
-msgid "SH2a does not support little-endian"
+#: config/mips/r3900.h:37
+msgid "-mhard-float not supported"
 msgstr ""
 
-#: config/avr/specs.h:68
-msgid "shared is not supported"
+#: config/mips/r3900.h:39
+msgid "-msingle-float and -msoft-float cannot both be specified"
 msgstr ""
 
-#: config/arm/arm.h:100
-msgid "-mfloat-abi=soft and -mfloat-abi=hard may not be used together"
+#: config/moxie/moxiebox.h:43
+msgid "this target is little-endian"
 msgstr ""
 
-#: config/vax/netbsd-elf.h:51
-msgid "the -shared option is not currently supported for VAX ELF"
+#: config/nios2/elf.h:44
+msgid "You need a C startup file for -msys-crt0="
 msgstr ""
 
-#: config/mips/r3900.h:37
-msgid "-mhard-float not supported"
+#: config/pa/pa-hpux10.h:102 config/pa/pa-hpux10.h:105
+#: config/pa/pa-hpux10.h:113 config/pa/pa-hpux10.h:116
+#: config/pa/pa-hpux11.h:134 config/pa/pa-hpux11.h:137 config/pa/pa64-hpux.h:29
+#: config/pa/pa64-hpux.h:32 config/pa/pa64-hpux.h:41 config/pa/pa64-hpux.h:44
+msgid "warning: consider linking with '-static' as system libraries with"
 msgstr ""
 
-#: config/mips/r3900.h:39
-msgid "-msingle-float and -msoft-float cannot both be specified"
+#: config/pa/pa-hpux10.h:103 config/pa/pa-hpux10.h:106
+#: config/pa/pa-hpux10.h:114 config/pa/pa-hpux10.h:117
+#: config/pa/pa-hpux11.h:135 config/pa/pa-hpux11.h:138 config/pa/pa64-hpux.h:30
+#: config/pa/pa64-hpux.h:33 config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
+msgid "  profiling support are only provided in archive format"
 msgstr ""
 
-#: config/vax/vax.h:46 config/vax/vax.h:47
-msgid "profiling not supported with -mg"
+#: config/rs6000/darwin.h:95
+msgid " conflicting code gen style switches are used"
 msgstr ""
 
 #: config/rs6000/freebsd64.h:171
 msgid "consider using `-pg' instead of `-p' with gprof(1)"
 msgstr ""
 
-#: config/lynx.h:69
-msgid "cannot use mthreads and mlegacy-threads together"
-msgstr ""
-
-#: config/lynx.h:94
-msgid "cannot use mshared and static together"
-msgstr ""
-
 #: config/rx/rx.h:80
 msgid "-mas100-syntax is incompatible with -gdwarf"
 msgstr ""
@@ -5793,12 +5750,42 @@ msgstr ""
 msgid "rx200 cpu does not have FPU hardware"
 msgstr ""
 
-#: config/arm/freebsd.h:49
-msgid "consider using `-pg' instead of `-p' with gprof (1) "
+#: config/s390/tpf.h:110
+msgid "static is not supported on TPF-OS"
 msgstr ""
 
-#: config/bfin/elf.h:55
-msgid "no processor type specified for linking"
+#: config/sh/sh.h:375 config/sh/sh.h:378
+msgid "SH2a does not support little-endian"
+msgstr ""
+
+#: config/sparc/linux64.h:149 config/sparc/linux64.h:156
+#: config/sparc/netbsd-elf.h:108 config/sparc/netbsd-elf.h:117
+#: config/sparc/sol2.h:228 config/sparc/sol2.h:234
+msgid "may not use both -m32 and -m64"
+msgstr ""
+
+#: config/vax/netbsd-elf.h:51
+msgid "the -shared option is not currently supported for VAX ELF"
+msgstr ""
+
+#: config/vax/vax.h:46 config/vax/vax.h:47
+msgid "profiling not supported with -mg"
+msgstr ""
+
+#: ada/gcc-interface/lang-specs.h:34
+msgid "-c or -S required for Ada"
+msgstr ""
+
+#: ada/gcc-interface/lang-specs.h:52
+msgid "-c required for gnat2why"
+msgstr ""
+
+#: ada/gcc-interface/lang-specs.h:65
+msgid "-c required for gnat2scil"
+msgstr ""
+
+#: fortran/lang-specs.h:54 fortran/lang-specs.h:68
+msgid "gfortran does not support -E without -cpp"
 msgstr ""
 
 #: java/lang-specs.h:32
@@ -5813,8 +5800,18 @@ msgstr ""
 msgid "-femit-class-file should used along with -fsyntax-only"
 msgstr ""
 
-#: config/mcore/mcore.h:53
-msgid "the m210 does not have little endian support"
+#: objc/lang-specs.h:30 objc/lang-specs.h:41
+msgid "GNU Objective C no longer supports traditional compilation"
+msgstr ""
+
+#: objc/lang-specs.h:55
+msgid ""
+"objc-cpp-output is deprecated; please use objective-c-cpp-output instead"
+msgstr ""
+
+#: objcp/lang-specs.h:58
+msgid ""
+"objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead"
 msgstr ""
 
 #: fortran/lang.opt:146
@@ -5992,244 +5989,251 @@ msgid "Treat lines with 'D' in column one as comments."
 msgstr ""
 
 #: fortran/lang.opt:421
-msgid "Set the default double precision kind to an 8 byte wide type."
+msgid "Enable all DEC language extensions."
 msgstr ""
 
 #: fortran/lang.opt:425
-msgid "Set the default integer kind to an 8 byte wide type."
+msgid "Enable support for DEC STRUCTURE/RECORD."
 msgstr ""
 
 #: fortran/lang.opt:429
-msgid "Set the default real kind to an 8 byte wide type."
+msgid "Set the default double precision kind to an 8 byte wide type."
 msgstr ""
 
 #: fortran/lang.opt:433
+msgid "Set the default integer kind to an 8 byte wide type."
+msgstr ""
+
+#: fortran/lang.opt:437
+msgid "Set the default real kind to an 8 byte wide type."
+msgstr ""
+
+#: fortran/lang.opt:441
 msgid "Allow dollar signs in entity names."
 msgstr ""
 
-#: fortran/lang.opt:437 config/alpha/alpha.opt:31 common.opt:732
-#: common.opt:920 common.opt:924 common.opt:928 common.opt:932 common.opt:1421
-#: common.opt:1570 common.opt:1574 common.opt:1800 common.opt:1946
-#: common.opt:2598
+#: fortran/lang.opt:445 config/alpha/alpha.opt:31 common.opt:732 common.opt:920
+#: common.opt:924 common.opt:928 common.opt:932 common.opt:1421 common.opt:1570
+#: common.opt:1574 common.opt:1800 common.opt:1946 common.opt:2598
 msgid "Does nothing. Preserved for backward compatibility."
 msgstr ""
 
-#: fortran/lang.opt:441
+#: fortran/lang.opt:449
 msgid "Display the code tree after parsing."
 msgstr ""
 
-#: fortran/lang.opt:445
+#: fortran/lang.opt:453
 msgid "Display the code tree after front end optimization."
 msgstr ""
 
-#: fortran/lang.opt:449
+#: fortran/lang.opt:457
 msgid "Display the code tree after parsing; deprecated option."
 msgstr ""
 
-#: fortran/lang.opt:453
+#: fortran/lang.opt:461
 msgid ""
 "Specify that an external BLAS library should be used for matmul calls on "
 "large-size arrays."
 msgstr ""
 
-#: fortran/lang.opt:457
+#: fortran/lang.opt:465
 msgid "Use f2c calling convention."
 msgstr ""
 
-#: fortran/lang.opt:461
+#: fortran/lang.opt:469
 msgid "Assume that the source file is fixed form."
 msgstr ""
 
-#: fortran/lang.opt:465
+#: fortran/lang.opt:473
 msgid "Interpret any INTEGER(4) as an INTEGER(8)."
 msgstr ""
 
-#: fortran/lang.opt:469 fortran/lang.opt:473
+#: fortran/lang.opt:477 fortran/lang.opt:481
 msgid "Specify where to find the compiled intrinsic modules."
 msgstr ""
 
-#: fortran/lang.opt:477
+#: fortran/lang.opt:485
 msgid "Allow arbitrary character line width in fixed mode."
 msgstr ""
 
-#: fortran/lang.opt:481
+#: fortran/lang.opt:489
 msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode."
 msgstr ""
 
-#: fortran/lang.opt:485
+#: fortran/lang.opt:493
 msgid "-ffpe-trap=[...]\tStop on following floating point exceptions."
 msgstr ""
 
-#: fortran/lang.opt:489
+#: fortran/lang.opt:497
 msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions."
 msgstr ""
 
-#: fortran/lang.opt:493
+#: fortran/lang.opt:501
 msgid "Assume that the source file is free form."
 msgstr ""
 
-#: fortran/lang.opt:497
+#: fortran/lang.opt:505
 msgid "Allow arbitrary character line width in free mode."
 msgstr ""
 
-#: fortran/lang.opt:501
+#: fortran/lang.opt:509
 msgid "-ffree-line-length-<n>\tUse n as character line width in free mode."
 msgstr ""
 
-#: fortran/lang.opt:505
+#: fortran/lang.opt:513
 msgid "Enable front end optimization."
 msgstr ""
 
-#: fortran/lang.opt:509
+#: fortran/lang.opt:517
 msgid ""
 "Specify that no implicit typing is allowed, unless overridden by explicit "
 "IMPLICIT statements."
 msgstr ""
 
-#: fortran/lang.opt:513
+#: fortran/lang.opt:521
 msgid ""
 "-finit-character=<n>\tInitialize local character variables to ASCII value n."
 msgstr ""
 
-#: fortran/lang.opt:517
+#: fortran/lang.opt:525
 msgid "-finit-integer=<n>\tInitialize local integer variables to n."
 msgstr ""
 
-#: fortran/lang.opt:521
+#: fortran/lang.opt:529
 msgid "Initialize local variables to zero (from g77)."
 msgstr ""
 
-#: fortran/lang.opt:525
+#: fortran/lang.opt:533
 msgid "-finit-logical=<true|false>\tInitialize local logical variables."
 msgstr ""
 
-#: fortran/lang.opt:529
+#: fortran/lang.opt:537
 msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables."
 msgstr ""
 
-#: fortran/lang.opt:532
+#: fortran/lang.opt:540
 #, c-format
 msgid "Unrecognized option to floating-point init value: %qs"
 msgstr ""
 
-#: fortran/lang.opt:551
+#: fortran/lang.opt:559
 msgid ""
 "-finline-matmul-limit=<n>\tSpecify the size of the largest matrix for which "
 "matmul will be inlined."
 msgstr ""
 
-#: fortran/lang.opt:555
+#: fortran/lang.opt:563
 msgid ""
 "-fmax-array-constructor=<n>\tMaximum number of objects in an array "
 "constructor."
 msgstr ""
 
-#: fortran/lang.opt:559
+#: fortran/lang.opt:567
 msgid "-fmax-identifier-length=<n>\tMaximum identifier length."
 msgstr ""
 
-#: fortran/lang.opt:563
+#: fortran/lang.opt:571
 msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords."
 msgstr ""
 
-#: fortran/lang.opt:567
+#: fortran/lang.opt:575
 msgid ""
 "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be "
 "put on the stack."
 msgstr ""
 
-#: fortran/lang.opt:571
+#: fortran/lang.opt:579
 msgid "Put all local arrays on stack."
 msgstr ""
 
-#: fortran/lang.opt:575
+#: fortran/lang.opt:583
 msgid "Set default accessibility of module entities to PRIVATE."
 msgstr ""
 
-#: fortran/lang.opt:595
+#: fortran/lang.opt:603
 msgid "Try to lay out derived types as compactly as possible."
 msgstr ""
 
-#: fortran/lang.opt:603
+#: fortran/lang.opt:611
 msgid "Protect parentheses in expressions."
 msgstr ""
 
-#: fortran/lang.opt:607
+#: fortran/lang.opt:615
 msgid "Enable range checking during compilation."
 msgstr ""
 
-#: fortran/lang.opt:611
+#: fortran/lang.opt:619
 msgid "Interpret any REAL(4) as a REAL(8)."
 msgstr ""
 
-#: fortran/lang.opt:615
+#: fortran/lang.opt:623
 msgid "Interpret any REAL(4) as a REAL(10)."
 msgstr ""
 
-#: fortran/lang.opt:619
+#: fortran/lang.opt:627
 msgid "Interpret any REAL(4) as a REAL(16)."
 msgstr ""
 
-#: fortran/lang.opt:623
+#: fortran/lang.opt:631
 msgid "Interpret any REAL(8) as a REAL(4)."
 msgstr ""
 
-#: fortran/lang.opt:627
+#: fortran/lang.opt:635
 msgid "Interpret any REAL(8) as a REAL(10)."
 msgstr ""
 
-#: fortran/lang.opt:631
+#: fortran/lang.opt:639
 msgid "Interpret any REAL(8) as a REAL(16)."
 msgstr ""
 
-#: fortran/lang.opt:635
+#: fortran/lang.opt:643
 msgid "Reallocate the LHS in assignments."
 msgstr ""
 
-#: fortran/lang.opt:639
+#: fortran/lang.opt:647
 msgid "Use a 4-byte record marker for unformatted files."
 msgstr ""
 
-#: fortran/lang.opt:643
+#: fortran/lang.opt:651
 msgid "Use an 8-byte record marker for unformatted files."
 msgstr ""
 
-#: fortran/lang.opt:647
+#: fortran/lang.opt:655
 msgid "Allocate local variables on the stack to allow indirect recursion."
 msgstr ""
 
-#: fortran/lang.opt:651
+#: fortran/lang.opt:659
 msgid "Copy array sections into a contiguous block on procedure entry."
 msgstr ""
 
-#: fortran/lang.opt:655
+#: fortran/lang.opt:663
 msgid ""
 "-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be "
 "used."
 msgstr ""
 
-#: fortran/lang.opt:658
+#: fortran/lang.opt:666
 #, c-format
 msgid "Unrecognized option: %qs"
 msgstr ""
 
-#: fortran/lang.opt:671
+#: fortran/lang.opt:679
 msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed."
 msgstr ""
 
-#: fortran/lang.opt:675
+#: fortran/lang.opt:683
 msgid "Append a second underscore if the name already contains an underscore."
 msgstr ""
 
-#: fortran/lang.opt:683
+#: fortran/lang.opt:691
 msgid "Apply negative sign to zero values."
 msgstr ""
 
-#: fortran/lang.opt:687
+#: fortran/lang.opt:695
 msgid "Append underscores to externally visible names."
 msgstr ""
 
-#: fortran/lang.opt:691 c-family/c.opt:1155 c-family/c.opt:1179
+#: fortran/lang.opt:699 c-family/c.opt:1155 c-family/c.opt:1179
 #: c-family/c.opt:1409 config/pa/pa.opt:42 config/pa/pa.opt:66
 #: config/sh/sh.opt:213 common.opt:1074 common.opt:1301 common.opt:1653
 #: common.opt:1999 common.opt:2035 common.opt:2124 common.opt:2128
@@ -6238,31 +6242,31 @@ msgstr ""
 msgid "Does nothing.  Preserved for backward compatibility."
 msgstr ""
 
-#: fortran/lang.opt:731
+#: fortran/lang.opt:739
 msgid "Statically link the GNU Fortran helper library (libgfortran)."
 msgstr ""
 
-#: fortran/lang.opt:735
+#: fortran/lang.opt:743
 msgid "Conform to the ISO Fortran 2003 standard."
 msgstr ""
 
-#: fortran/lang.opt:739
+#: fortran/lang.opt:747
 msgid "Conform to the ISO Fortran 2008 standard."
 msgstr ""
 
-#: fortran/lang.opt:743
+#: fortran/lang.opt:751
 msgid "Conform to the ISO Fortran 2008 standard including TS 29113."
 msgstr ""
 
-#: fortran/lang.opt:747
+#: fortran/lang.opt:755
 msgid "Conform to the ISO Fortran 95 standard."
 msgstr ""
 
-#: fortran/lang.opt:751
+#: fortran/lang.opt:759
 msgid "Conform to nothing in particular."
 msgstr ""
 
-#: fortran/lang.opt:755
+#: fortran/lang.opt:763
 msgid "Accept extensions to support legacy code."
 msgstr ""
 
@@ -8566,7 +8570,7 @@ msgid "Specify bit size of immediate TLS offsets."
 msgstr ""
 
 #: config/ia64/ia64.opt:122 config/spu/spu.opt:84 config/i386/i386.opt:504
-#: config/s390/s390.opt:170 config/sparc/sparc.opt:126
+#: config/s390/s390.opt:170 config/sparc/sparc.opt:130
 #: config/visium/visium.opt:49
 msgid "Schedule code for given CPU."
 msgstr ""
@@ -8808,8 +8812,7 @@ msgstr ""
 msgid "target the software simulator."
 msgstr ""
 
-#: config/ft32/ft32.opt:27 config/s390/s390.opt:201
-#: config/rs6000/rs6000.opt:474 config/mips/mips.opt:385
+#: config/ft32/ft32.opt:27 config/s390/s390.opt:201 config/mips/mips.opt:385
 msgid "Use LRA instead of reload."
 msgstr ""
 
@@ -10460,74 +10463,78 @@ msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions."
 msgstr ""
 
 #: config/sparc/sparc.opt:78
-msgid "Use UltraSPARC Compare-and-Branch extensions."
+msgid "Use UltraSPARC Visual Instruction Set version 4.0 extensions."
 msgstr ""
 
 #: config/sparc/sparc.opt:82
-msgid "Use UltraSPARC Fused Multiply-Add extensions."
+msgid "Use UltraSPARC Compare-and-Branch extensions."
 msgstr ""
 
 #: config/sparc/sparc.opt:86
-msgid "Use UltraSPARC Population-Count instruction."
+msgid "Use UltraSPARC Fused Multiply-Add extensions."
 msgstr ""
 
 #: config/sparc/sparc.opt:90
-msgid "Pointers are 64-bit."
+msgid "Use UltraSPARC Population-Count instruction."
 msgstr ""
 
 #: config/sparc/sparc.opt:94
-msgid "Pointers are 32-bit."
+msgid "Pointers are 64-bit."
 msgstr ""
 
 #: config/sparc/sparc.opt:98
-msgid "Use 64-bit ABI."
+msgid "Pointers are 32-bit."
 msgstr ""
 
 #: config/sparc/sparc.opt:102
-msgid "Use 32-bit ABI."
+msgid "Use 64-bit ABI."
 msgstr ""
 
 #: config/sparc/sparc.opt:106
-msgid "Use stack bias."
+msgid "Use 32-bit ABI."
 msgstr ""
 
 #: config/sparc/sparc.opt:110
-msgid "Use structs on stronger alignment for double-word copies."
+msgid "Use stack bias."
 msgstr ""
 
 #: config/sparc/sparc.opt:114
-msgid "Optimize tail call instructions in assembler and linker."
+msgid "Use structs on stronger alignment for double-word copies."
 msgstr ""
 
 #: config/sparc/sparc.opt:118
+msgid "Optimize tail call instructions in assembler and linker."
+msgstr ""
+
+#: config/sparc/sparc.opt:122
 msgid "Do not generate code that can only run in supervisor mode (default)."
 msgstr ""
 
-#: config/sparc/sparc.opt:122 config/visium/visium.opt:45
+#: config/sparc/sparc.opt:126 config/visium/visium.opt:45
 msgid "Use features of and schedule code for given CPU."
 msgstr ""
 
-#: config/sparc/sparc.opt:199
+#: config/sparc/sparc.opt:206
 msgid "Use given SPARC-V9 code model."
 msgstr ""
 
-#: config/sparc/sparc.opt:203
+#: config/sparc/sparc.opt:210
 msgid "Enable debug output."
 msgstr ""
 
-#: config/sparc/sparc.opt:207
+#: config/sparc/sparc.opt:214
 msgid "Enable strict 32-bit psABI struct return checking."
 msgstr ""
 
-#: config/sparc/sparc.opt:211
+#: config/sparc/sparc.opt:218
 msgid "Enable workaround for single erratum of AT697F processor"
 msgstr ""
 
-#: config/sparc/sparc.opt:216
+#: config/sparc/sparc.opt:223
 msgid "Enable workarounds for the errata of the UT699 processor."
 msgstr ""
 
-#: config/sparc/sparc.opt:245
+#: config/sparc/sparc.opt:252
 msgid "Specify the memory model in effect for the program."
 msgstr ""
 
@@ -10843,6 +10850,10 @@ msgstr ""
 msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)."
 msgstr ""
 
+#: config/rs6000/rs6000.opt:474
+msgid "Enable Local Register Allocation."
+msgstr ""
+
 #: config/rs6000/rs6000.opt:478
 msgid "Determine which dependences between insns are considered costly."
 msgstr ""
@@ -10959,32 +10970,50 @@ msgstr ""
 msgid "Fuse certain operations together for better performance on power9."
 msgstr ""
 
-#: config/rs6000/rs6000.opt:610 config/rs6000/rs6000.opt:614
-msgid "Use/do not use vector and scalar instructions added in ISA 3.0."
+#: config/rs6000/rs6000.opt:610
+msgid "Use/do not use certain scalar instructions added in ISA 3.0."
+msgstr ""
+
+#: config/rs6000/rs6000.opt:614
+msgid "Use/do not use vector instructions added in ISA 3.0."
 msgstr ""
 
 #: config/rs6000/rs6000.opt:618
-msgid "Use/do not use the new min/max instructions defined in ISA 3.0."
+msgid ""
+"Use/do not use scalar register+offset memory instructions added in ISA 3.0."
 msgstr ""
 
 #: config/rs6000/rs6000.opt:622
 msgid ""
-"Fuse medium/large code model toc references with the memory instruction."
+"Use/do not use vector register+offset memory instructions added in ISA 3.0."
 msgstr ""
 
 #: config/rs6000/rs6000.opt:626
-msgid "Generate the integer modulo instructions."
+msgid "Use/do not use register+offset memory instructions added in ISA 3.0."
 msgstr ""
 
 #: config/rs6000/rs6000.opt:630
-msgid "Enable/disable IEEE 128-bit floating point via the __float128 keyword."
+msgid "Use/do not use the new min/max instructions defined in ISA 3.0."
 msgstr ""
 
 #: config/rs6000/rs6000.opt:634
-msgid "Enable/disable using IEEE 128-bit floating point instructions."
+msgid ""
+"Fuse medium/large code model toc references with the memory instruction."
 msgstr ""
 
 #: config/rs6000/rs6000.opt:638
+msgid "Generate the integer modulo instructions."
+msgstr ""
+
+#: config/rs6000/rs6000.opt:642
+msgid "Enable/disable IEEE 128-bit floating point via the __float128 keyword."
+msgstr ""
+
+#: config/rs6000/rs6000.opt:646
+msgid "Enable/disable using IEEE 128-bit floating point instructions."
+msgstr ""
+
+#: config/rs6000/rs6000.opt:650
 msgid "Enable/disable default conversions between __float128 & long double."
 msgstr ""
 
@@ -15611,8 +15640,8 @@ msgstr ""
 msgid "expected boolean type"
 msgstr ""
 
-#: go/gofrontend/expressions.cc:4015 c/c-parser.c:12595 c/c-parser.c:12602
-#: cp/parser.c:31676 cp/parser.c:31683
+#: go/gofrontend/expressions.cc:4015 c/c-parser.c:12578 c/c-parser.c:12585
+#: cp/parser.c:31735 cp/parser.c:31742
 #, gcc-internal-format
 msgid "expected integer"
 msgstr ""
@@ -16058,42 +16087,42 @@ msgstr ""
 msgid "type attributes ignored after type is already defined"
 msgstr ""
 
-#: auto-profile.c:348
+#: auto-profile.c:345
 #, gcc-internal-format
 msgid "Offset exceeds 16 bytes."
 msgstr ""
 
-#: auto-profile.c:825
+#: auto-profile.c:822
 #, gcc-internal-format
 msgid "Not expected TAG."
 msgstr ""
 
-#: auto-profile.c:890
+#: auto-profile.c:887
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot open profile file %s."
 msgstr ""
 
-#: auto-profile.c:893
+#: auto-profile.c:890
 #, gcc-internal-format
 msgid "AutoFDO profile magic number does not mathch."
 msgstr ""
 
-#: auto-profile.c:898
+#: auto-profile.c:895
 #, gcc-internal-format, gfc-internal-format
 msgid "AutoFDO profile version %u does match %u."
 msgstr ""
 
-#: auto-profile.c:907
+#: auto-profile.c:904
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot read string table from %s."
 msgstr ""
 
-#: auto-profile.c:912
+#: auto-profile.c:909
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot read function profile from %s."
 msgstr ""
 
-#: auto-profile.c:919
+#: auto-profile.c:916
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot read working set from %s."
 msgstr ""
@@ -16311,12 +16340,12 @@ msgstr ""
 msgid "%Kattempt to free a non-heap object"
 msgstr ""
 
-#: calls.c:2491
+#: calls.c:2501
 #, gcc-internal-format
 msgid "function call has aggregate value"
 msgstr ""
 
-#: calls.c:3187
+#: calls.c:3197
 #, gcc-internal-format
 msgid "passing too large argument on stack"
 msgstr ""
@@ -16715,426 +16744,426 @@ msgstr ""
 msgid "%d exits recorded for loop %d (having %d exits)"
 msgstr ""
 
-#: cfgrtl.c:2326
+#: cfgrtl.c:2328
 #, gcc-internal-format, gfc-internal-format
 msgid "non-cold basic block %d dominated by a block in the cold partition (%d)"
 msgstr ""
 
-#: cfgrtl.c:2403
+#: cfgrtl.c:2405
 #, gcc-internal-format, gfc-internal-format
 msgid "multiple hot/cold transitions found (bb %i)"
 msgstr ""
 
-#: cfgrtl.c:2411
+#: cfgrtl.c:2413
 #, gcc-internal-format
 msgid "partition found but function partition flag not set"
 msgstr ""
 
-#: cfgrtl.c:2449
+#: cfgrtl.c:2451
 #, gcc-internal-format, gfc-internal-format
 msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
 msgstr ""
 
-#: cfgrtl.c:2470
+#: cfgrtl.c:2472
 #, gcc-internal-format
 msgid "EDGE_CROSSING incorrectly set across same section"
 msgstr ""
 
-#: cfgrtl.c:2475
+#: cfgrtl.c:2477
 #, gcc-internal-format, gfc-internal-format
 msgid "fallthru edge crosses section boundary in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2481
+#: cfgrtl.c:2483
 #, gcc-internal-format, gfc-internal-format
 msgid "EH edge crosses section boundary in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2487
+#: cfgrtl.c:2489
 #, gcc-internal-format, gfc-internal-format
 msgid "No region crossing jump at section boundary in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2494
+#: cfgrtl.c:2496
 #, gcc-internal-format
 msgid "EDGE_CROSSING missing across section boundary"
 msgstr ""
 
-#: cfgrtl.c:2524
+#: cfgrtl.c:2526
 #, gcc-internal-format, gfc-internal-format
 msgid "Region crossing jump across same section in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2531
+#: cfgrtl.c:2533
 #, gcc-internal-format, gfc-internal-format
 msgid "missing REG_EH_REGION note at the end of bb %i"
 msgstr ""
 
-#: cfgrtl.c:2536
+#: cfgrtl.c:2538
 #, gcc-internal-format, gfc-internal-format
 msgid "too many exception handling edges in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2544
+#: cfgrtl.c:2546
 #, gcc-internal-format, gfc-internal-format
 msgid "too many outgoing branch edges from bb %i"
 msgstr ""
 
-#: cfgrtl.c:2549
+#: cfgrtl.c:2551
 #, gcc-internal-format, gfc-internal-format
 msgid "fallthru edge after unconditional jump in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2554
+#: cfgrtl.c:2556
 #, gcc-internal-format, gfc-internal-format
 msgid "wrong number of branch edges after unconditional jump in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2561
+#: cfgrtl.c:2563
 #, gcc-internal-format, gfc-internal-format
 msgid "wrong amount of branch edges after conditional jump in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2567
+#: cfgrtl.c:2569
 #, gcc-internal-format, gfc-internal-format
 msgid "abnormal call edges for non-call insn in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2572
+#: cfgrtl.c:2574
 #, gcc-internal-format, gfc-internal-format
 msgid "sibcall edges for non-call insn in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2582
+#: cfgrtl.c:2584
 #, gcc-internal-format, gfc-internal-format
 msgid "abnormal edges for no purpose in bb %i"
 msgstr ""
 
-#: cfgrtl.c:2620 cfgrtl.c:2630
+#: cfgrtl.c:2622 cfgrtl.c:2632
 #, gcc-internal-format, gfc-internal-format
 msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
 msgstr ""
 
-#: cfgrtl.c:2643
+#: cfgrtl.c:2645
 #, gcc-internal-format, gfc-internal-format
 msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
 msgstr ""
 
-#: cfgrtl.c:2653
+#: cfgrtl.c:2655
 #, gcc-internal-format, gfc-internal-format
 msgid "in basic block %d:"
 msgstr ""
 
-#: cfgrtl.c:2679
+#: cfgrtl.c:2681
 #, gcc-internal-format, gfc-internal-format
 msgid "BB_RTL flag not set for block %d"
 msgstr ""
 
-#: cfgrtl.c:2686
+#: cfgrtl.c:2688
 #, gcc-internal-format, gfc-internal-format
 msgid "insn %d basic block pointer is %d, should be %d"
 msgstr ""
 
-#: cfgrtl.c:2697
+#: cfgrtl.c:2699
 #, gcc-internal-format, gfc-internal-format
 msgid "insn %d in header of bb %d has non-NULL basic block"
 msgstr ""
 
-#: cfgrtl.c:2705
+#: cfgrtl.c:2707
 #, gcc-internal-format, gfc-internal-format
 msgid "insn %d in footer of bb %d has non-NULL basic block"
 msgstr ""
 
-#: cfgrtl.c:2778 cfgrtl.c:2826
+#: cfgrtl.c:2780 cfgrtl.c:2828
 #, gcc-internal-format, gfc-internal-format
 msgid "insn %d outside of basic blocks has non-NULL bb field"
 msgstr ""
 
-#: cfgrtl.c:2786
+#: cfgrtl.c:2788
 #, gcc-internal-format, gfc-internal-format
 msgid "end insn %d for block %d not found in the insn stream"
 msgstr ""
 
-#: cfgrtl.c:2799
+#: cfgrtl.c:2801
 #, gcc-internal-format, gfc-internal-format
 msgid "insn %d is in multiple basic blocks (%d and %d)"
 msgstr ""
 
-#: cfgrtl.c:2811
+#: cfgrtl.c:2813
 #, gcc-internal-format, gfc-internal-format
 msgid "head insn %d for block %d not found in the insn stream"
 msgstr ""
 
-#: cfgrtl.c:2859
+#: cfgrtl.c:2861
 #, gcc-internal-format, gfc-internal-format
 msgid "missing barrier after block %i"
 msgstr ""
 
-#: cfgrtl.c:2875
+#: cfgrtl.c:2877
 #, gcc-internal-format, gfc-internal-format
 msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
 msgstr ""
 
-#: cfgrtl.c:2884
+#: cfgrtl.c:2886
 #, gcc-internal-format, gfc-internal-format
 msgid "verify_flow_info: Incorrect fallthru %i->%i"
 msgstr ""
 
-#: cfgrtl.c:2920
+#: cfgrtl.c:2922
 #, gcc-internal-format
 msgid "basic blocks not laid down consecutively"
 msgstr ""
 
-#: cfgrtl.c:2958
+#: cfgrtl.c:2960
 #, gcc-internal-format, gfc-internal-format
 msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
 msgstr ""
 
-#: cgraph.c:2728
+#: cgraph.c:2739
 #, gcc-internal-format
 msgid "caller edge count is negative"
 msgstr ""
 
-#: cgraph.c:2733
+#: cgraph.c:2744
 #, gcc-internal-format
 msgid "caller edge frequency is negative"
 msgstr ""
 
-#: cgraph.c:2738
+#: cgraph.c:2749
 #, gcc-internal-format
 msgid "caller edge frequency is too large"
 msgstr ""
 
-#: cgraph.c:2822
+#: cgraph.c:2833
 #, gcc-internal-format, gfc-internal-format
 msgid "aux field set for edge %s->%s"
 msgstr ""
 
-#: cgraph.c:2829
+#: cgraph.c:2840
 #, gcc-internal-format
 msgid "execution count is negative"
 msgstr ""
 
-#: cgraph.c:2834
+#: cgraph.c:2845
 #, gcc-internal-format
 msgid "inline clone in same comdat group list"
 msgstr ""
 
-#: cgraph.c:2839
+#: cgraph.c:2850
 #, gcc-internal-format
 msgid "local symbols must be defined"
 msgstr ""
 
-#: cgraph.c:2844
+#: cgraph.c:2855
 #, gcc-internal-format
 msgid "externally visible inline clone"
 msgstr ""
 
-#: cgraph.c:2849
+#: cgraph.c:2860
 #, gcc-internal-format
 msgid "inline clone with address taken"
 msgstr ""
 
-#: cgraph.c:2854
+#: cgraph.c:2865
 #, gcc-internal-format
 msgid "inline clone is forced to output"
 msgstr ""
 
-#: cgraph.c:2861
+#: cgraph.c:2872
 #, gcc-internal-format, gfc-internal-format
 msgid "aux field set for indirect edge from %s"
 msgstr ""
 
-#: cgraph.c:2868
+#: cgraph.c:2879
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "An indirect edge from %s is not marked as indirect or has associated "
 "indirect_info, the corresponding statement is: "
 msgstr ""
 
-#: cgraph.c:2883
+#: cgraph.c:2894
 #, gcc-internal-format, gfc-internal-format
 msgid "comdat-local function called by %s outside its comdat"
 msgstr ""
 
-#: cgraph.c:2893
+#: cgraph.c:2904
 #, gcc-internal-format
 msgid "inlined_to pointer is wrong"
 msgstr ""
 
-#: cgraph.c:2898
+#: cgraph.c:2909
 #, gcc-internal-format
 msgid "multiple inline callers"
 msgstr ""
 
-#: cgraph.c:2905
+#: cgraph.c:2916
 #, gcc-internal-format
 msgid "inlined_to pointer set for noninline callers"
 msgstr ""
 
-#: cgraph.c:2924
+#: cgraph.c:2935
 #, gcc-internal-format, gfc-internal-format
 msgid "caller edge frequency %i does not match BB frequency %i"
 msgstr ""
 
-#: cgraph.c:2942
+#: cgraph.c:2953
 #, gcc-internal-format, gfc-internal-format
 msgid "indirect call frequency %i does not match BB frequency %i"
 msgstr ""
 
-#: cgraph.c:2951
+#: cgraph.c:2962
 #, gcc-internal-format
 msgid "inlined_to pointer is set but no predecessors found"
 msgstr ""
 
-#: cgraph.c:2956
+#: cgraph.c:2967
 #, gcc-internal-format
 msgid "inlined_to pointer refers to itself"
 msgstr ""
 
-#: cgraph.c:2968
+#: cgraph.c:2979
 #, gcc-internal-format
 msgid "cgraph_node has wrong clone_of"
 msgstr ""
 
-#: cgraph.c:2980
+#: cgraph.c:2991
 #, gcc-internal-format
 msgid "cgraph_node has wrong clone list"
 msgstr ""
 
-#: cgraph.c:2986
+#: cgraph.c:2997
 #, gcc-internal-format
 msgid "cgraph_node is in clone list but it is not clone"
 msgstr ""
 
-#: cgraph.c:2991
+#: cgraph.c:3002
 #, gcc-internal-format
 msgid "cgraph_node has wrong prev_clone pointer"
 msgstr ""
 
-#: cgraph.c:2996
+#: cgraph.c:3007
 #, gcc-internal-format
 msgid "double linked list of clones corrupted"
 msgstr ""
 
-#: cgraph.c:3008
+#: cgraph.c:3019
 #, gcc-internal-format
 msgid "Alias has call edges"
 msgstr ""
 
-#: cgraph.c:3016
+#: cgraph.c:3027
 #, gcc-internal-format
 msgid "Alias has non-alias reference"
 msgstr ""
 
-#: cgraph.c:3021
+#: cgraph.c:3032
 #, gcc-internal-format
 msgid "Alias has more than one alias reference"
 msgstr ""
 
-#: cgraph.c:3028
+#: cgraph.c:3039
 #, gcc-internal-format
 msgid "Analyzed alias has no reference"
 msgstr ""
 
-#: cgraph.c:3037
+#: cgraph.c:3048
 #, gcc-internal-format
 msgid "Instrumentation clone does not reference original node"
 msgstr ""
 
-#: cgraph.c:3044
+#: cgraph.c:3055
 #, gcc-internal-format
 msgid "Not instrumented node has non-NULL original declaration"
 msgstr ""
 
-#: cgraph.c:3054
+#: cgraph.c:3065
 #, gcc-internal-format
 msgid "Instrumented node has wrong original declaration"
 msgstr ""
 
-#: cgraph.c:3072
+#: cgraph.c:3083
 #, gcc-internal-format
 msgid "Node has more than one chkp reference"
 msgstr ""
 
-#: cgraph.c:3077
+#: cgraph.c:3088
 #, gcc-internal-format
 msgid "Wrong node is referenced with chkp reference"
 msgstr ""
 
-#: cgraph.c:3085
+#: cgraph.c:3096
 #, gcc-internal-format
 msgid "Analyzed node has no reference to instrumented version"
 msgstr ""
 
-#: cgraph.c:3099
+#: cgraph.c:3110
 #, gcc-internal-format
 msgid "Alias chain for instrumented node is broken"
 msgstr ""
 
-#: cgraph.c:3108
+#: cgraph.c:3119
 #, gcc-internal-format
 msgid "No edge out of thunk node"
 msgstr ""
 
-#: cgraph.c:3113
+#: cgraph.c:3124
 #, gcc-internal-format
 msgid "More than one edge out of thunk node"
 msgstr ""
 
-#: cgraph.c:3118
+#: cgraph.c:3129
 #, gcc-internal-format
 msgid "Thunk is not supposed to have body"
 msgstr ""
 
-#: cgraph.c:3124
+#: cgraph.c:3135
 #, gcc-internal-format
 msgid "Instrumentation thunk has wrong edge callee"
 msgstr ""
 
-#: cgraph.c:3160
+#: cgraph.c:3171
 #, gcc-internal-format
 msgid "shared call_stmt:"
 msgstr ""
 
-#: cgraph.c:3168
+#: cgraph.c:3179
 #, gcc-internal-format
 msgid "edge points to wrong declaration:"
 msgstr ""
 
-#: cgraph.c:3177
+#: cgraph.c:3188
 #, gcc-internal-format
 msgid ""
 "an indirect edge with unknown callee corresponding to a call_stmt with a "
 "known declaration:"
 msgstr ""
 
-#: cgraph.c:3187
+#: cgraph.c:3198
 #, gcc-internal-format
 msgid "missing callgraph edge for call stmt:"
 msgstr ""
 
-#: cgraph.c:3197
+#: cgraph.c:3208
 #, gcc-internal-format
 msgid "reference to dead statement"
 msgstr ""
 
-#: cgraph.c:3210
+#: cgraph.c:3221
 #, gcc-internal-format, gfc-internal-format
 msgid "edge %s->%s has no corresponding call_stmt"
 msgstr ""
 
-#: cgraph.c:3222
+#: cgraph.c:3233
 #, gcc-internal-format, gfc-internal-format
 msgid "an indirect edge from %s has no corresponding call_stmt"
 msgstr ""
 
-#: cgraph.c:3233
+#: cgraph.c:3244
 #, gcc-internal-format
 msgid "verify_cgraph_node failed"
 msgstr ""
 
-#: cgraph.c:3332 varpool.c:304
+#: cgraph.c:3343 varpool.c:304
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: section %s is missing"
 msgstr ""
@@ -17165,12 +17194,12 @@ msgid "%<weakref%> attribute ignored because variable is initialized"
 msgstr ""
 
 #. include_self=
-#: cgraphunit.c:936 c/c-decl.c:10760
+#: cgraphunit.c:936 c/c-decl.c:10762
 #, gcc-internal-format
 msgid "%q+F used but never defined"
 msgstr ""
 
-#: cgraphunit.c:938 c/c-decl.c:10769 cp/decl.c:918
+#: cgraphunit.c:938 c/c-decl.c:10771 cp/decl.c:918
 #, gcc-internal-format
 msgid "%q+F declared %<static%> but never defined"
 msgstr ""
@@ -17265,12 +17294,12 @@ msgstr ""
 msgid "cannot find '%s'"
 msgstr ""
 
-#: collect-utils.c:183 collect2.c:2361 collect2.c:2560 gcc.c:3060 gcc.c:6729
+#: collect-utils.c:183 collect2.c:2361 collect2.c:2560 gcc.c:3060 gcc.c:6730
 #, gcc-internal-format
 msgid "pex_init failed: %m"
 msgstr ""
 
-#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8345
+#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8349
 #, gcc-internal-format
 msgid "%s: %m"
 msgstr ""
@@ -17280,7 +17309,7 @@ msgstr ""
 msgid "COLLECT_LTO_WRAPPER must be set"
 msgstr ""
 
-#: collect2.c:966 gcc.c:7255 lto-wrapper.c:1479
+#: collect2.c:966 gcc.c:7256 lto-wrapper.c:1479
 #: config/i386/intelmic-mkoffload.c:554 config/nvptx/mkoffload.c:403
 #, gcc-internal-format
 msgid "atexit failed"
@@ -17538,7 +17567,7 @@ msgstr ""
 msgid "global constructors not supported on this target"
 msgstr ""
 
-#: diagnostic.c:1329
+#: diagnostic.c:1327
 #, gcc-internal-format, gfc-internal-format
 msgid "in %s, at %s:%d"
 msgstr ""
@@ -17580,12 +17609,12 @@ msgid ""
 "cfi_personality directive"
 msgstr ""
 
-#: dwarf2out.c:12431
+#: dwarf2out.c:12435
 #, gcc-internal-format, gfc-internal-format
 msgid "non-delegitimized UNSPEC %s (%d) found in variable location"
 msgstr ""
 
-#: dwarf2out.c:25296
+#: dwarf2out.c:25399
 #, gcc-internal-format
 msgid "-feliminate-dwarf2-dups is broken for C++, ignoring"
 msgstr ""
@@ -17717,7 +17746,7 @@ msgstr ""
 msgid "the frame size of %wd bytes is larger than %wd bytes"
 msgstr ""
 
-#: final.c:4589 toplev.c:1374 tree-cfgcleanup.c:1122
+#: final.c:4589 toplev.c:1372 tree-cfgcleanup.c:1122
 #, gcc-internal-format
 msgid "could not open final insn dump file %qs: %m"
 msgstr ""
@@ -17732,52 +17761,52 @@ msgstr ""
 msgid "large fixed-point constant implicitly truncated to fixed-point type"
 msgstr ""
 
-#: fold-const.c:3943 fold-const.c:3953
+#: fold-const.c:3945 fold-const.c:3955
 #, gcc-internal-format, gfc-internal-format
 msgid "comparison is always %d due to width of bit-field"
 msgstr ""
 
-#: fold-const.c:5316 tree-ssa-reassoc.c:2144
+#: fold-const.c:5321 tree-ssa-reassoc.c:2144
 #, gcc-internal-format
 msgid "assuming signed overflow does not occur when simplifying range test"
 msgstr ""
 
-#: fold-const.c:5765 fold-const.c:5779
+#: fold-const.c:5770 fold-const.c:5784
 #, gcc-internal-format, gfc-internal-format
 msgid "comparison is always %d"
 msgstr ""
 
-#: fold-const.c:5914
+#: fold-const.c:5921
 #, gcc-internal-format
 msgid "%<or%> of unmatched not-equal tests is always 1"
 msgstr ""
 
-#: fold-const.c:5919
+#: fold-const.c:5926
 #, gcc-internal-format
 msgid "%<and%> of mutually exclusive equal-tests is always 0"
 msgstr ""
 
-#: fold-const.c:8267
+#: fold-const.c:8277
 #, gcc-internal-format
 msgid ""
 "assuming signed overflow does not occur when reducing constant in comparison"
 msgstr ""
 
-#: fold-const.c:8437
+#: fold-const.c:8447
 #, gcc-internal-format
 msgid ""
 "assuming signed overflow does not occur when changing X +- C1 cmp C2 to X "
 "cmp C2 -+ C1"
 msgstr ""
 
-#: fold-const.c:8708
+#: fold-const.c:8719
 #, gcc-internal-format
 msgid ""
 "assuming signed overflow does not occur when combining constants around a "
 "comparison"
 msgstr ""
 
-#: fold-const.c:12274
+#: fold-const.c:12289
 #, gcc-internal-format
 msgid "fold check: original tree changed by fold"
 msgstr ""
@@ -17792,17 +17821,17 @@ msgstr ""
 msgid "impossible constraint in %<asm%>"
 msgstr ""
 
-#: function.c:4376
+#: function.c:4379
 #, gcc-internal-format
 msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>"
 msgstr ""
 
-#: function.c:4397
+#: function.c:4400
 #, gcc-internal-format
 msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>"
 msgstr ""
 
-#: function.c:5042
+#: function.c:5045
 #, gcc-internal-format
 msgid "function returns an aggregate"
 msgstr ""
@@ -17867,7 +17896,7 @@ msgstr ""
 msgid "%s (program %s)"
 msgstr ""
 
-#: gcc.c:3585 opts-common.c:1158 opts-common.c:1182 opts-global.c:136
+#: gcc.c:3585 opts-common.c:1164 opts-common.c:1188 opts-global.c:136
 #, gcc-internal-format
 msgid "unrecognized command line option %qs"
 msgstr ""
@@ -17882,7 +17911,7 @@ msgstr ""
 msgid "%qs is an unknown -save-temps option"
 msgstr ""
 
-#: gcc.c:4414 toplev.c:893
+#: gcc.c:4414 toplev.c:891
 #, gcc-internal-format
 msgid "input file %qs is the same as output file"
 msgstr ""
@@ -17937,12 +17966,12 @@ msgstr ""
 msgid "spec %qs has invalid %<%%0%c%>"
 msgstr ""
 
-#: gcc.c:5619
+#: gcc.c:5620
 #, gcc-internal-format
 msgid "spec %qs has invalid %<%%W%c%>"
 msgstr ""
 
-#: gcc.c:5642
+#: gcc.c:5643
 #, gcc-internal-format
 msgid "spec %qs has invalid %<%%x%c%>"
 msgstr ""
@@ -17950,218 +17979,218 @@ 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.c:5853
+#: gcc.c:5854
 #, gcc-internal-format
 msgid "spec failure: %<%%*%> has not been initialized by pattern match"
 msgstr ""
 
-#: gcc.c:5896
+#: gcc.c:5897
 #, gcc-internal-format
 msgid "spec failure: unrecognized spec option %qc"
 msgstr ""
 
-#: gcc.c:5958
+#: gcc.c:5959
 #, gcc-internal-format
 msgid "unknown spec function %qs"
 msgstr ""
 
-#: gcc.c:5988
+#: gcc.c:5989
 #, gcc-internal-format
 msgid "error in args to spec function %qs"
 msgstr ""
 
-#: gcc.c:6042
+#: gcc.c:6043
 #, gcc-internal-format
 msgid "malformed spec function name"
 msgstr ""
 
 #. )
-#: gcc.c:6045
+#: gcc.c:6046
 #, gcc-internal-format
 msgid "no arguments for spec function"
 msgstr ""
 
-#: gcc.c:6064
+#: gcc.c:6065
 #, gcc-internal-format
 msgid "malformed spec function arguments"
 msgstr ""
 
-#: gcc.c:6338
+#: gcc.c:6339
 #, gcc-internal-format
 msgid "braced spec %qs is invalid at %qc"
 msgstr ""
 
-#: gcc.c:6433
+#: gcc.c:6434
 #, gcc-internal-format
 msgid "braced spec body %qs is invalid"
 msgstr ""
 
-#: gcc.c:7039
+#: gcc.c:7040
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: could not determine length of compare-debug file %s"
 msgstr ""
 
-#: gcc.c:7050
+#: gcc.c:7051
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: -fcompare-debug failure (length)"
 msgstr ""
 
-#: gcc.c:7060 gcc.c:7101
+#: gcc.c:7061 gcc.c:7102
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: could not open compare-debug file %s"
 msgstr ""
 
-#: gcc.c:7080 gcc.c:7117
+#: gcc.c:7081 gcc.c:7118
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: -fcompare-debug failure"
 msgstr ""
 
-#: gcc.c:7425
+#: gcc.c:7426
 #, gcc-internal-format
 msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC"
 msgstr ""
 
-#: gcc.c:7449
+#: gcc.c:7450
 #, gcc-internal-format
 msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
 msgstr ""
 
-#: gcc.c:7740
+#: gcc.c:7744
 #, gcc-internal-format
 msgid "unrecognized command line option %<-%s%>; did you mean %<-%s%>?"
 msgstr ""
 
-#: gcc.c:7744
+#: gcc.c:7748
 #, gcc-internal-format
 msgid "unrecognized command line option %<-%s%>"
 msgstr ""
 
-#: gcc.c:7870
+#: gcc.c:7874
 #, gcc-internal-format
 msgid "not configured with sysroot headers suffix"
 msgstr ""
 
-#: gcc.c:7931
+#: gcc.c:7935
 #, gcc-internal-format
 msgid "no input files"
 msgstr ""
 
-#: gcc.c:7982
+#: gcc.c:7986
 #, gcc-internal-format
 msgid "cannot specify -o with -c, -S or -E with multiple files"
 msgstr ""
 
-#: gcc.c:8023
+#: gcc.c:8027
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: %s compiler not installed on this system"
 msgstr ""
 
-#: gcc.c:8047
+#: gcc.c:8051
 #, gcc-internal-format
 msgid "recompiling with -fcompare-debug"
 msgstr ""
 
-#: gcc.c:8063
+#: gcc.c:8067
 #, gcc-internal-format
 msgid "during -fcompare-debug recompilation"
 msgstr ""
 
-#: gcc.c:8072
+#: gcc.c:8076
 #, gcc-internal-format
 msgid "comparing final insns dumps"
 msgstr ""
 
-#: gcc.c:8189
+#: gcc.c:8193
 #, gcc-internal-format, gfc-internal-format
 msgid "-fuse-linker-plugin, but %s not found"
 msgstr ""
 
-#: gcc.c:8222
+#: gcc.c:8226
 #, gcc-internal-format, gfc-internal-format
 msgid "%s: linker input file unused because linking not done"
 msgstr ""
 
-#: gcc.c:8274
+#: gcc.c:8278
 #, gcc-internal-format, gfc-internal-format
 msgid "language %s not recognized"
 msgstr ""
 
-#: gcc.c:8513
+#: gcc.c:8517
 #, gcc-internal-format
 msgid "multilib spec %qs is invalid"
 msgstr ""
 
-#: gcc.c:8715
+#: gcc.c:8719
 #, gcc-internal-format
 msgid "multilib exclusions %qs is invalid"
 msgstr ""
 
-#: gcc.c:8779
+#: gcc.c:8783
 #, gcc-internal-format
 msgid "multilib select %qs %qs is invalid"
 msgstr ""
 
-#: gcc.c:8941
+#: gcc.c:8945
 #, gcc-internal-format
 msgid "multilib select %qs is invalid"
 msgstr ""
 
-#: gcc.c:8981
+#: gcc.c:8985
 #, gcc-internal-format
 msgid "multilib exclusion %qs is invalid"
 msgstr ""
 
-#: gcc.c:9196
+#: gcc.c:9200
 #, gcc-internal-format
 msgid "environment variable %qs not defined"
 msgstr ""
 
-#: gcc.c:9335 gcc.c:9340
+#: gcc.c:9339 gcc.c:9344
 #, gcc-internal-format
 msgid "invalid version number %qs"
 msgstr ""
 
-#: gcc.c:9383
+#: gcc.c:9387
 #, gcc-internal-format, gfc-internal-format
 msgid "too few arguments to %%:version-compare"
 msgstr ""
 
-#: gcc.c:9389
+#: gcc.c:9393
 #, gcc-internal-format, gfc-internal-format
 msgid "too many arguments to %%:version-compare"
 msgstr ""
 
-#: gcc.c:9431
+#: gcc.c:9435
 #, gcc-internal-format
 msgid "unknown operator %qs in %%:version-compare"
 msgstr ""
 
-#: gcc.c:9555
+#: gcc.c:9559
 #, gcc-internal-format, gfc-internal-format
 msgid "too many arguments to %%:compare-debug-dump-opt"
 msgstr ""
 
-#: gcc.c:9628
+#: gcc.c:9632
 #, gcc-internal-format, gfc-internal-format
 msgid "too many arguments to %%:compare-debug-self-opt"
 msgstr ""
 
-#: gcc.c:9664
+#: gcc.c:9668
 #, gcc-internal-format, gfc-internal-format
 msgid "too few arguments to %%:compare-debug-auxbase-opt"
 msgstr ""
 
-#: gcc.c:9668
+#: gcc.c:9672
 #, gcc-internal-format, gfc-internal-format
 msgid "too many arguments to %%:compare-debug-auxbase-opt"
 msgstr ""
 
-#: gcc.c:9675
+#: gcc.c:9679
 #, gcc-internal-format, gfc-internal-format
 msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk"
 msgstr ""
 
-#: gcc.c:9749
+#: gcc.c:9753
 #, gcc-internal-format, gfc-internal-format
 msgid "too few arguments to %%:replace-extension"
 msgstr ""
@@ -18291,9 +18320,9 @@ msgid "can%'t write PCH file"
 msgstr ""
 
 #: gimple-ssa-isolate-paths.c:290 gimple-ssa-isolate-paths.c:447 tree.c:12589
-#: tree.c:12626 c/c-typeck.c:2847 c/c-typeck.c:2931 c/c-typeck.c:9673
-#: c/c-typeck.c:9690 cp/call.c:6152 cp/constexpr.c:757 cp/constexpr.c:1944
-#: cp/decl2.c:5114 cp/pt.c:7578 cp/semantics.c:1763 cp/typeck.c:1640
+#: tree.c:12626 c/c-typeck.c:2847 c/c-typeck.c:2931 c/c-typeck.c:9680
+#: c/c-typeck.c:9697 cp/call.c:6161 cp/constexpr.c:762 cp/constexpr.c:1969
+#: cp/decl2.c:5112 cp/pt.c:7593 cp/semantics.c:1756 cp/typeck.c:1640
 #: cp/typeck.c:1833 cp/typeck.c:3660
 #, gcc-internal-format
 msgid "declared here"
@@ -18344,209 +18373,209 @@ msgstr ""
 msgid "memory input %d is not directly addressable"
 msgstr ""
 
-#: gimplify.c:5917
+#: gimplify.c:5956
 #, gcc-internal-format
 msgid "threadprivate variable %qE used in target region"
 msgstr ""
 
-#: gimplify.c:5919
+#: gimplify.c:5958
 #, gcc-internal-format
 msgid "enclosing target region"
 msgstr ""
 
-#: gimplify.c:5931
+#: gimplify.c:5970
 #, gcc-internal-format
 msgid "threadprivate variable %qE used in untied task"
 msgstr ""
 
-#: gimplify.c:5933
+#: gimplify.c:5972
 #, gcc-internal-format
 msgid "enclosing task"
 msgstr ""
 
-#: gimplify.c:5995
+#: gimplify.c:6034
 #, gcc-internal-format
 msgid "%qE not specified in enclosing %s"
 msgstr ""
 
-#: gimplify.c:5997
+#: gimplify.c:6036
 #, gcc-internal-format, gfc-internal-format
 msgid "enclosing %s"
 msgstr ""
 
-#: gimplify.c:6107
+#: gimplify.c:6146
 #, gcc-internal-format
 msgid "%qE not specified in enclosing OpenACC %qs construct"
 msgstr ""
 
-#: gimplify.c:6109
+#: gimplify.c:6148
 #, gcc-internal-format
 msgid "enclosing OpenACC %qs construct"
 msgstr ""
 
-#: gimplify.c:6160
+#: gimplify.c:6199
 #, gcc-internal-format
 msgid "%qE with %<link%> clause used in %<routine%> function"
 msgstr ""
 
-#: gimplify.c:6168
+#: gimplify.c:6207
 #, gcc-internal-format
 msgid "%qE requires a %<declare%> directive for use in a %<routine%> function"
 msgstr ""
 
-#: gimplify.c:6244 gimplify.c:6848
+#: gimplify.c:6283 gimplify.c:6887
 #, gcc-internal-format
 msgid "variable %qE declared in enclosing %<host_data%> region"
 msgstr ""
 
-#: gimplify.c:6262
+#: gimplify.c:6301
 #, gcc-internal-format
 msgid "%qD referenced in target region does not have a mappable type"
 msgstr ""
 
-#: gimplify.c:6380 gimplify.c:6412
+#: gimplify.c:6419 gimplify.c:6451
 #, gcc-internal-format
 msgid "iteration variable %qE is predetermined linear"
 msgstr ""
 
-#: gimplify.c:6383
+#: gimplify.c:6422
 #, gcc-internal-format
 msgid "iteration variable %qE should be private"
 msgstr ""
 
-#: gimplify.c:6397
+#: gimplify.c:6436
 #, gcc-internal-format
 msgid "iteration variable %qE should not be firstprivate"
 msgstr ""
 
-#: gimplify.c:6400
+#: gimplify.c:6439
 #, gcc-internal-format
 msgid "iteration variable %qE should not be reduction"
 msgstr ""
 
-#: gimplify.c:6403
+#: gimplify.c:6442
 #, gcc-internal-format
 msgid "iteration variable %qE should not be linear"
 msgstr ""
 
-#: gimplify.c:6406
+#: gimplify.c:6445
 #, gcc-internal-format
 msgid "iteration variable %qE should not be lastprivate"
 msgstr ""
 
-#: gimplify.c:6409
+#: gimplify.c:6448
 #, gcc-internal-format
 msgid "iteration variable %qE should not be private"
 msgstr ""
 
-#: gimplify.c:6722
+#: gimplify.c:6761
 #, gcc-internal-format
 msgid ""
 "%<linear%> clause for variable other than loop iterator specified on "
 "construct combined with %<distribute%>"
 msgstr ""
 
-#: gimplify.c:6917
+#: gimplify.c:6963
 #, gcc-internal-format
 msgid "mapping field %qE of variable length structure"
 msgstr ""
 
-#: gimplify.c:7093
+#: gimplify.c:7175
 #, gcc-internal-format
 msgid "%qE appears more than once in map clauses"
 msgstr ""
 
-#: gimplify.c:7385
+#: gimplify.c:7467
 #, gcc-internal-format
 msgid ""
 "copyprivate variable %qE is not threadprivate or private in outer context"
 msgstr ""
 
-#: gimplify.c:7405
+#: gimplify.c:7487
 #, gcc-internal-format
 msgid "%s variable %qE is private in outer context"
 msgstr ""
 
-#: gimplify.c:7431
+#: gimplify.c:7513
 #, gcc-internal-format
 msgid "expected %qs %<if%> clause modifier rather than %qs"
 msgstr ""
 
-#: gimplify.c:7933
+#: gimplify.c:8015
 #, gcc-internal-format
 msgid ""
 "same variable used in %<firstprivate%> and %<lastprivate%> clauses on "
 "%<distribute%> construct"
 msgstr ""
 
-#: gimplify.c:8015
+#: gimplify.c:8097
 #, gcc-internal-format
 msgid ""
 "incompatible data clause with reduction on %qE; promoting to present_or_copy"
 msgstr ""
 
-#: gimplify.c:8159
+#: gimplify.c:8241
 #, gcc-internal-format
 msgid "invalid private reduction on %qE"
 msgstr ""
 
-#: gimplify.c:9948 omp-low.c:3622
+#: gimplify.c:10047 omp-low.c:3616
 #, gcc-internal-format
 msgid ""
 "%<ordered%> construct with %<depend%> clause must be closely nested inside a "
 "loop with %<ordered%> clause with a parameter"
 msgstr ""
 
-#: gimplify.c:9966
+#: gimplify.c:10065
 #, gcc-internal-format
 msgid "variable %qE is not an iteration of outermost loop %d, expected %qE"
 msgstr ""
 
-#: gimplify.c:9979
+#: gimplify.c:10078
 #, gcc-internal-format
 msgid ""
 "number of variables in %<depend(sink)%> clause does not match number of "
 "iteration variables"
 msgstr ""
 
-#: gimplify.c:9992
+#: gimplify.c:10091
 #, gcc-internal-format
 msgid "more than one %<depend(source)%> clause on an %<ordered%> construct"
 msgstr ""
 
-#: gimplify.c:10003
+#: gimplify.c:10102
 #, gcc-internal-format
 msgid ""
 "%<depend(source)%> clause specified together with %<depend(sink:)%> clauses "
 "on the same construct"
 msgstr ""
 
-#: gimplify.c:10931
+#: gimplify.c:11030
 #, gcc-internal-format
 msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>"
 msgstr ""
 
-#: gimplify.c:11227
+#: gimplify.c:11326
 #, gcc-internal-format
 msgid "gimplification failed"
 msgstr ""
 
-#: gimplify.c:11697 c-family/c-common.c:5731 c-family/c-common.c:5804
+#: gimplify.c:11796 c-family/c-common.c:5731 c-family/c-common.c:5804
 #, gcc-internal-format
 msgid "first argument to %<va_arg%> not of type %<va_list%>"
 msgstr ""
 
-#: gimplify.c:11717
+#: gimplify.c:11816
 #, gcc-internal-format
 msgid "%qT is promoted to %qT when passed through %<...%>"
 msgstr ""
 
-#: gimplify.c:11722
+#: gimplify.c:11821
 #, gcc-internal-format
 msgid "(so you should pass %qT not %qT to %<va_arg%>)"
 msgstr ""
 
-#: gimplify.c:11729
+#: gimplify.c:11828
 #, gcc-internal-format
 msgid "if this code is reached, the program will abort"
 msgstr ""
@@ -18561,7 +18590,7 @@ msgstr ""
 msgid "could not open Go dump file %qs: %m"
 msgstr ""
 
-#: graph.c:55 toplev.c:1491 java/jcf-parse.c:1751 java/jcf-parse.c:1890
+#: graph.c:55 toplev.c:1489 java/jcf-parse.c:1751 java/jcf-parse.c:1890
 #: objc/objc-act.c:461
 #, gcc-internal-format
 msgid "can%'t open %s: %m"
@@ -18577,28 +18606,28 @@ msgstr ""
 msgid "Support for HSA does not implement immediate 16 bit FPU operands"
 msgstr ""
 
-#: hsa-gen.c:1195
+#: hsa-gen.c:1206
 #, gcc-internal-format
 msgid "HSA SSA name defined by instruction that is supposed to be using it"
 msgstr ""
 
-#: hsa-gen.c:1199 hsa-gen.c:1212
+#: hsa-gen.c:1210 hsa-gen.c:1223
 #, gcc-internal-format
 msgid "HSA SSA verification failed"
 msgstr ""
 
-#: hsa-gen.c:1208
+#: hsa-gen.c:1219
 #, gcc-internal-format
 msgid ""
 "HSA SSA name not among operands of instruction that is supposed to use it"
 msgstr ""
 
-#: hsa-gen.c:1468
+#: hsa-gen.c:1479
 #, gcc-internal-format
 msgid "HSA instruction uses a register but is not among recorded register uses"
 msgstr ""
 
-#: hsa-gen.c:1472
+#: hsa-gen.c:1483
 #, gcc-internal-format
 msgid "HSA instruction verification failed"
 msgstr ""
@@ -18628,7 +18657,7 @@ msgstr ""
 msgid "token %u has y-location == %u"
 msgstr ""
 
-#: ipa-chkp.c:661
+#: ipa-chkp.c:667
 #, gcc-internal-format
 msgid "function cannot be instrumented"
 msgstr ""
@@ -19017,7 +19046,7 @@ msgstr[1] ""
 msgid "could not emit HSAIL for function %s: function cannot be cloned"
 msgstr ""
 
-#: ipa-inline-analysis.c:4305
+#: ipa-inline-analysis.c:4346
 #, gcc-internal-format
 msgid "ipa inline summary is missing in input file"
 msgstr ""
@@ -19286,117 +19315,112 @@ msgstr ""
 msgid "attribute(target_clones(\"default\")) is not valid for current target"
 msgstr ""
 
-#: omp-low.c:2204 omp-low.c:2372
-#, gcc-internal-format
-msgid "Clause not supported yet"
-msgstr ""
-
-#: omp-low.c:2971 omp-low.c:19383
+#: omp-low.c:2965 omp-low.c:19388
 #, gcc-internal-format
 msgid "%<seq%> overrides other OpenACC loop specifiers"
 msgstr ""
 
-#: omp-low.c:2974
+#: omp-low.c:2968
 #, gcc-internal-format
 msgid "%<auto%> conflicts with other OpenACC loop specifiers"
 msgstr ""
 
-#: omp-low.c:2978
+#: omp-low.c:2972
 #, gcc-internal-format
 msgid "inner loop uses same OpenACC parallelism as containing loop"
 msgstr ""
 
-#: omp-low.c:3025
+#: omp-low.c:3019
 #, gcc-internal-format
 msgid "argument not permitted on %qs clause in OpenACC %<parallel%>"
 msgstr ""
 
-#: omp-low.c:3251
+#: omp-low.c:3245
 #, gcc-internal-format
 msgid "non-OpenACC construct inside of OpenACC routine"
 msgstr ""
 
-#: omp-low.c:3260
+#: omp-low.c:3254
 #, gcc-internal-format
 msgid "non-OpenACC construct inside of OpenACC region"
 msgstr ""
 
-#: omp-low.c:3285
+#: omp-low.c:3279
 #, gcc-internal-format
 msgid ""
 "%<ordered simd threads%> must be closely nested inside of %<for simd%> region"
 msgstr ""
 
-#: omp-low.c:3293
+#: omp-low.c:3287
 #, gcc-internal-format
 msgid ""
 "OpenMP constructs other than %<#pragma omp ordered simd%> may not be nested "
 "inside %<simd%> region"
 msgstr ""
 
-#: omp-low.c:3305
+#: omp-low.c:3299
 #, gcc-internal-format
 msgid ""
 "only %<distribute%> or %<parallel%> regions are allowed to be strictly "
 "nested inside %<teams%> region"
 msgstr ""
 
-#: omp-low.c:3322
+#: omp-low.c:3316
 #, gcc-internal-format
 msgid ""
 "%<distribute%> region must be strictly nested inside %<teams%> construct"
 msgstr ""
 
-#: omp-low.c:3363
+#: omp-low.c:3357
 #, gcc-internal-format
 msgid ""
 "OpenACC loop directive must be associated with an OpenACC compute region"
 msgstr ""
 
-#: omp-low.c:3385
+#: omp-low.c:3379
 #, gcc-internal-format
 msgid "orphaned %qs construct"
 msgstr ""
 
-#: omp-low.c:3414
+#: omp-low.c:3408
 #, gcc-internal-format
 msgid "%<#pragma omp cancel for%> inside %<nowait%> for construct"
 msgstr ""
 
-#: omp-low.c:3419
+#: omp-low.c:3413
 #, gcc-internal-format
 msgid "%<#pragma omp cancel for%> inside %<ordered%> for construct"
 msgstr ""
 
-#: omp-low.c:3439 omp-low.c:3452
+#: omp-low.c:3433 omp-low.c:3446
 #, gcc-internal-format
 msgid "%<#pragma omp cancel sections%> inside %<nowait%> sections construct"
 msgstr ""
 
-#: omp-low.c:3478
+#: omp-low.c:3472
 #, gcc-internal-format
 msgid ""
 "%<%s taskgroup%> construct not closely nested inside of %<taskgroup%> region"
 msgstr ""
 
-#: omp-low.c:3492
+#: omp-low.c:3486
 #, gcc-internal-format
 msgid "invalid arguments"
 msgstr ""
 
-#: omp-low.c:3498
+#: omp-low.c:3492
 #, gcc-internal-format
 msgid "%<%s %s%> construct not closely nested inside of %qs"
 msgstr ""
 
-#: omp-low.c:3526
+#: omp-low.c:3520
 #, gcc-internal-format
 msgid ""
 "barrier region may not be closely nested inside of work-sharing, %<critical"
 "%>, %<ordered%>, %<master%>, explicit %<task%> or %<taskloop%> region"
 msgstr ""
 
-#: omp-low.c:3533
+#: omp-low.c:3527
 #, gcc-internal-format
 msgid ""
 "work-sharing region may not be closely nested inside of work-sharing, "
@@ -19404,161 +19428,161 @@ msgid ""
 "region"
 msgstr ""
 
-#: omp-low.c:3562
+#: omp-low.c:3556
 #, gcc-internal-format
 msgid ""
 "%<master%> region may not be closely nested inside of work-sharing, explicit "
 "%<task%> or %<taskloop%> region"
 msgstr ""
 
-#: omp-low.c:3586 omp-low.c:3725
+#: omp-low.c:3580 omp-low.c:3719
 #, gcc-internal-format
 msgid "%<depend(%s)%> is only allowed in %<omp ordered%>"
 msgstr ""
 
-#: omp-low.c:3614
+#: omp-low.c:3608
 #, gcc-internal-format
 msgid ""
 "%<ordered%> construct with %<depend%> clause must be closely nested inside "
 "an %<ordered%> loop"
 msgstr ""
 
-#: omp-low.c:3631
+#: omp-low.c:3625
 #, gcc-internal-format
 msgid "invalid depend kind in omp %<ordered%> %<depend%>"
 msgstr ""
 
-#: omp-low.c:3646
+#: omp-low.c:3640
 #, gcc-internal-format
 msgid "%<ordered%> %<simd%> must be closely nested inside %<simd%> region"
 msgstr ""
 
-#: omp-low.c:3659
+#: omp-low.c:3653
 #, gcc-internal-format
 msgid ""
 "%<ordered%> region may not be closely nested inside of %<critical%>, "
 "%<ordered%>, explicit %<task%> or %<taskloop%> region"
 msgstr ""
 
-#: omp-low.c:3670 omp-low.c:3683
+#: omp-low.c:3664 omp-low.c:3677
 #, gcc-internal-format
 msgid ""
 "%<ordered%> region must be closely nested inside a loop region with an "
 "%<ordered%> clause"
 msgstr ""
 
-#: omp-low.c:3700
+#: omp-low.c:3694
 #, gcc-internal-format
 msgid ""
 "%<critical%> region may not be nested inside a %<critical%> region with the "
 "same name"
 msgstr ""
 
-#: omp-low.c:3712
+#: omp-low.c:3706
 #, gcc-internal-format
 msgid "%<teams%> construct not closely nested inside of %<target%> construct"
 msgstr ""
 
-#: omp-low.c:3733
+#: omp-low.c:3727
 #, gcc-internal-format
 msgid ""
 "OpenACC region inside of OpenACC routine, nested parallelism not supported "
 "yet"
 msgstr ""
 
-#: omp-low.c:3746
+#: omp-low.c:3740
 #, gcc-internal-format
 msgid "OpenACC construct inside of non-OpenACC region"
 msgstr ""
 
-#: omp-low.c:3791
+#: omp-low.c:3785
 #, gcc-internal-format
 msgid "%s %qs construct inside of %s %qs region"
 msgstr ""
 
-#: omp-low.c:3804 omp-low.c:3811
+#: omp-low.c:3798 omp-low.c:3805
 #, gcc-internal-format
 msgid "%qs construct inside of %qs region"
 msgstr ""
 
-#: omp-low.c:3923
+#: omp-low.c:3917
 #, gcc-internal-format
 msgid "setjmp/longjmp inside simd construct"
 msgstr ""
 
-#: omp-low.c:8006
+#: omp-low.c:8002
 #, gcc-internal-format
 msgid "%<depend(sink)%> clause waiting for lexically later iteration"
 msgstr ""
 
-#: omp-low.c:8093
+#: omp-low.c:8089
 #, gcc-internal-format
 msgid "%<depend(sink)%> refers to iteration never in the iteration space"
 msgstr ""
 
-#: omp-low.c:12633
+#: omp-low.c:12629
 #, gcc-internal-format
 msgid "multiple loop axes specified for routine"
 msgstr ""
 
-#: omp-low.c:14645
+#: omp-low.c:14650
 #, gcc-internal-format
 msgid ""
 "ignoring sink clause with offset that is not a multiple of the loop step"
 msgstr ""
 
-#: omp-low.c:14668
+#: omp-low.c:14673
 #, gcc-internal-format
 msgid "first offset must be in opposite direction of loop iterations"
 msgstr ""
 
-#: omp-low.c:18011
+#: omp-low.c:18016
 #, gcc-internal-format, gfc-internal-format
 msgid "invalid exit from %s structured block"
 msgstr ""
 
-#: omp-low.c:18013 omp-low.c:18018
+#: omp-low.c:18018 omp-low.c:18023
 #, gcc-internal-format, gfc-internal-format
 msgid "invalid entry to %s structured block"
 msgstr ""
 
 #. Otherwise, be vague and lazy, but efficient.
-#: omp-low.c:18022
+#: omp-low.c:18027
 #, gcc-internal-format, gfc-internal-format
 msgid "invalid branch to/from %s structured block"
 msgstr ""
 
-#: omp-low.c:18823
+#: omp-low.c:18828
 #, gcc-internal-format, gfc-internal-format
 msgid "-fopenacc-dim operand is malformed at '%s'"
 msgstr ""
 
-#: omp-low.c:19410
+#: omp-low.c:19415
 #, gcc-internal-format, gfc-internal-format
 msgid "%s uses same OpenACC parallelism as containing loop"
 msgstr ""
 
-#: omp-low.c:19412 omp-low.c:19441
+#: omp-low.c:19417 omp-low.c:19446
 #, gcc-internal-format
 msgid "containing loop here"
 msgstr ""
 
-#: omp-low.c:19416
+#: omp-low.c:19421
 #, gcc-internal-format, gfc-internal-format
 msgid "%s uses OpenACC parallelism disallowed by containing routine"
 msgstr ""
 
-#: omp-low.c:19421
+#: omp-low.c:19426
 #, gcc-internal-format
 msgid "routine %qD declared here"
 msgstr ""
 
-#: omp-low.c:19434
+#: omp-low.c:19439
 #, gcc-internal-format
 msgid "incorrectly nested OpenACC loop parallelism"
 msgstr ""
 
-#: omp-low.c:19498
+#: omp-low.c:19503
 #, gcc-internal-format
 msgid "insufficient partitioning available to parallelize loop"
 msgstr ""
@@ -19578,27 +19602,27 @@ msgstr ""
 msgid "indirect jumps are not available on this target"
 msgstr ""
 
-#: opts-common.c:1079
+#: opts-common.c:1085
 #, gcc-internal-format
 msgid "command line option %qs is not supported by this configuration"
 msgstr ""
 
-#: opts-common.c:1089
+#: opts-common.c:1095
 #, gcc-internal-format
 msgid "missing argument to %qs"
 msgstr ""
 
-#: opts-common.c:1095
+#: opts-common.c:1101
 #, gcc-internal-format
 msgid "argument to %qs should be a non-negative integer"
 msgstr ""
 
-#: opts-common.c:1110
+#: opts-common.c:1116
 #, gcc-internal-format
 msgid "unrecognized argument in option %qs"
 msgstr ""
 
-#: opts-common.c:1128
+#: opts-common.c:1134
 #, gcc-internal-format
 msgid "valid arguments to %qs are: %s"
 msgstr ""
@@ -20133,7 +20157,7 @@ msgstr ""
 msgid "register of %qD used for multiple global register variables"
 msgstr ""
 
-#: reginfo.c:777 config/rs6000/rs6000.c:27665
+#: reginfo.c:777 config/rs6000/rs6000.c:28752
 #, gcc-internal-format
 msgid "conflicts with %qD"
 msgstr ""
@@ -20294,62 +20318,62 @@ msgstr ""
 msgid "undefined named operand %qs"
 msgstr ""
 
-#: stor-layout.c:767
+#: stor-layout.c:753
 #, gcc-internal-format
 msgid "size of %q+D is %d bytes"
 msgstr ""
 
-#: stor-layout.c:769
+#: stor-layout.c:755
 #, gcc-internal-format
 msgid "size of %q+D is larger than %wd bytes"
 msgstr ""
 
-#: stor-layout.c:1207
+#: stor-layout.c:1193
 #, gcc-internal-format
 msgid "packed attribute causes inefficient alignment for %q+D"
 msgstr ""
 
-#: stor-layout.c:1211
+#: stor-layout.c:1197
 #, gcc-internal-format
 msgid "packed attribute is unnecessary for %q+D"
 msgstr ""
 
-#: stor-layout.c:1228
+#: stor-layout.c:1214
 #, gcc-internal-format
 msgid "padding struct to align %q+D"
 msgstr ""
 
-#: stor-layout.c:1289
+#: stor-layout.c:1275
 #, gcc-internal-format
 msgid "offset of packed bit-field %qD has changed in GCC 4.4"
 msgstr ""
 
-#: stor-layout.c:1598
+#: stor-layout.c:1584
 #, gcc-internal-format
 msgid "padding struct size to alignment boundary"
 msgstr ""
 
-#: stor-layout.c:1626
+#: stor-layout.c:1612
 #, gcc-internal-format
 msgid "packed attribute causes inefficient alignment for %qE"
 msgstr ""
 
-#: stor-layout.c:1630
+#: stor-layout.c:1616
 #, gcc-internal-format
 msgid "packed attribute is unnecessary for %qE"
 msgstr ""
 
-#: stor-layout.c:1636
+#: stor-layout.c:1622
 #, gcc-internal-format
 msgid "packed attribute causes inefficient alignment"
 msgstr ""
 
-#: stor-layout.c:1638
+#: stor-layout.c:1624
 #, gcc-internal-format
 msgid "packed attribute is unnecessary"
 msgstr ""
 
-#: stor-layout.c:2369
+#: stor-layout.c:2347
 #, gcc-internal-format
 msgid "alignment of array elements is greater than element size"
 msgstr ""
@@ -20568,47 +20592,47 @@ msgstr ""
 msgid "ld returned %d exit status"
 msgstr ""
 
-#: toplev.c:897
+#: toplev.c:895
 #, gcc-internal-format
 msgid "can%'t open %qs for writing: %m"
 msgstr ""
 
-#: toplev.c:919
+#: toplev.c:917
 #, gcc-internal-format
 msgid "-frecord-gcc-switches is not supported by the current target"
 msgstr ""
 
-#: toplev.c:968
+#: toplev.c:966
 #, gcc-internal-format
 msgid "stack usage computation not supported for this target"
 msgstr ""
 
-#: toplev.c:1037
+#: toplev.c:1035
 #, gcc-internal-format
 msgid "stack usage might be unbounded"
 msgstr ""
 
-#: toplev.c:1042
+#: toplev.c:1040
 #, gcc-internal-format
 msgid "stack usage might be %wd bytes"
 msgstr ""
 
-#: toplev.c:1045
+#: toplev.c:1043
 #, gcc-internal-format
 msgid "stack usage is %wd bytes"
 msgstr ""
 
-#: toplev.c:1061
+#: toplev.c:1059
 #, gcc-internal-format
 msgid "can%'t open %s for writing: %m"
 msgstr ""
 
-#: toplev.c:1231
+#: toplev.c:1229
 #, gcc-internal-format
 msgid "this target does not support %qs"
 msgstr ""
 
-#: toplev.c:1257
+#: toplev.c:1255
 #, gcc-internal-format
 msgid ""
 "Graphite loop optimizations cannot be used (isl is not available)(-"
@@ -20617,115 +20641,115 @@ msgid ""
 "linear)"
 msgstr ""
 
-#: toplev.c:1268
+#: toplev.c:1266
 #, gcc-internal-format
 msgid "-fcheck-pointer-bounds is not supported for this target"
 msgstr ""
 
-#: toplev.c:1275
+#: toplev.c:1273
 #, gcc-internal-format
 msgid "-fcheck-pointer-bounds is not supported with Address Sanitizer"
 msgstr ""
 
-#: toplev.c:1290
+#: toplev.c:1288
 #, gcc-internal-format
 msgid "%<-fabi-version=1%> is no longer supported"
 msgstr ""
 
-#: toplev.c:1318
+#: toplev.c:1316
 #, gcc-internal-format
 msgid "instruction scheduling not supported on this target machine"
 msgstr ""
 
-#: toplev.c:1322
+#: toplev.c:1320
 #, gcc-internal-format
 msgid "this target machine does not have delayed branches"
 msgstr ""
 
-#: toplev.c:1336
+#: toplev.c:1334
 #, gcc-internal-format, gfc-internal-format
 msgid "-f%sleading-underscore not supported on this target machine"
 msgstr ""
 
-#: toplev.c:1381
+#: toplev.c:1379
 #, gcc-internal-format
 msgid "could not close zeroed insn dump file %qs: %m"
 msgstr ""
 
-#: toplev.c:1418
+#: toplev.c:1416
 #, gcc-internal-format
 msgid "target system does not support the %qs debug format"
 msgstr ""
 
-#: toplev.c:1431
+#: toplev.c:1429
 #, gcc-internal-format
 msgid "variable tracking requested, but useless unless producing debug info"
 msgstr ""
 
-#: toplev.c:1435
+#: toplev.c:1433
 #, gcc-internal-format
 msgid "variable tracking requested, but not supported by this debug format"
 msgstr ""
 
-#: toplev.c:1473
+#: toplev.c:1471
 #, gcc-internal-format
 msgid "var-tracking-assignments changes selective scheduling"
 msgstr ""
 
-#: toplev.c:1499
+#: toplev.c:1497
 #, gcc-internal-format
 msgid "-ffunction-sections not supported for this target"
 msgstr ""
 
-#: toplev.c:1505
+#: toplev.c:1503
 #, gcc-internal-format
 msgid "-fdata-sections not supported for this target"
 msgstr ""
 
-#: toplev.c:1513
+#: toplev.c:1511
 #, gcc-internal-format
 msgid "-fprefetch-loop-arrays not supported for this target"
 msgstr ""
 
-#: toplev.c:1519
+#: toplev.c:1517
 #, gcc-internal-format
 msgid ""
 "-fprefetch-loop-arrays not supported for this target (try -march switches)"
 msgstr ""
 
-#: toplev.c:1529
+#: toplev.c:1527
 #, gcc-internal-format
 msgid "-fprefetch-loop-arrays is not supported with -Os"
 msgstr ""
 
-#: toplev.c:1541
+#: toplev.c:1539
 #, gcc-internal-format
 msgid "-fassociative-math disabled; other options take precedence"
 msgstr ""
 
-#: toplev.c:1559
+#: toplev.c:1557
 #, gcc-internal-format
 msgid "-fstack-protector not supported for this target"
 msgstr ""
 
-#: toplev.c:1571
+#: toplev.c:1569
 #, gcc-internal-format
 msgid ""
 "-fsanitize=address and -fsanitize=kernel-address are not supported for this "
 "target"
 msgstr ""
 
-#: toplev.c:1580
+#: toplev.c:1578
 #, gcc-internal-format
 msgid "-fsanitize=address not supported for this target"
 msgstr ""
 
-#: toplev.c:1898
+#: toplev.c:1896
 #, gcc-internal-format
 msgid "error writing to %s: %m"
 msgstr ""
 
-#: toplev.c:1900 java/jcf-parse.c:1770
+#: toplev.c:1898 java/jcf-parse.c:1770
 #, gcc-internal-format
 msgid "error closing %s: %m"
 msgstr ""
@@ -21208,7 +21232,7 @@ msgid ""
 "the same number of elements as the result"
 msgstr ""
 
-#: tree-cfg.c:4007 c/c-typeck.c:4970
+#: tree-cfg.c:4007 c/c-typeck.c:4975
 #, gcc-internal-format
 msgid "type mismatch in conditional expression"
 msgstr ""
@@ -21556,42 +21580,42 @@ msgstr ""
 msgid "memory access check always fail"
 msgstr ""
 
-#: tree-chkp.c:1982
+#: tree-chkp.c:1993
 #, gcc-internal-format, gfc-internal-format
 msgid "-fcheck-pointer-bounds requires '%s' name for internal usage"
 msgstr ""
 
-#: tree-chkp.c:2760
+#: tree-chkp.c:2771
 #, gcc-internal-format, gfc-internal-format
 msgid "pointer bounds were lost due to unexpected expression %s"
 msgstr ""
 
-#: tree-chkp.c:2848
+#: tree-chkp.c:2859
 #, gcc-internal-format, gfc-internal-format
 msgid "chkp_get_bounds_by_definition: Unexpected var of type %s"
 msgstr ""
 
-#: tree-chkp.c:2891
+#: tree-chkp.c:2902
 #, gcc-internal-format, gfc-internal-format
 msgid "chkp_get_bounds_by_definition: Unexpected GIMPLE code %s"
 msgstr ""
 
-#: tree-chkp.c:3514
+#: tree-chkp.c:3525
 #, gcc-internal-format, gfc-internal-format
 msgid "chkp_make_addressed_object_bounds: Unexpected tree code %s"
 msgstr ""
 
-#: tree-chkp.c:3666
+#: tree-chkp.c:3678
 #, gcc-internal-format, gfc-internal-format
 msgid "chkp_find_bounds: Unexpected tree code %s"
 msgstr ""
 
-#: tree-chkp.c:3677
+#: tree-chkp.c:3689
 #, gcc-internal-format
 msgid "chkp_find_bounds: Cannot find bounds for pointer"
 msgstr ""
 
-#: tree-chkp.c:3793
+#: tree-chkp.c:3805
 #, gcc-internal-format, gfc-internal-format
 msgid "chkp_walk_pointer_assignments: unexpected RHS type: %s"
 msgstr ""
@@ -21804,27 +21828,27 @@ msgstr ""
 msgid "stmt volatile flag not up-to-date"
 msgstr ""
 
-#: tree-ssa-uninit.c:169 varasm.c:328
+#: tree-ssa-uninit.c:192 varasm.c:328
 #, gcc-internal-format
 msgid "%qD was declared here"
 msgstr ""
 
-#: tree-ssa-uninit.c:201
+#: tree-ssa-uninit.c:224
 #, gcc-internal-format
 msgid "%qD is used uninitialized in this function"
 msgstr ""
 
-#: tree-ssa-uninit.c:206 tree-ssa-uninit.c:2367
+#: tree-ssa-uninit.c:229 tree-ssa-uninit.c:2390
 #, gcc-internal-format
 msgid "%qD may be used uninitialized in this function"
 msgstr ""
 
-#: tree-ssa-uninit.c:237
+#: tree-ssa-uninit.c:260
 #, gcc-internal-format
 msgid "%qE is used uninitialized in this function"
 msgstr ""
 
-#: tree-ssa-uninit.c:242
+#: tree-ssa-uninit.c:265
 #, gcc-internal-format
 msgid "%qE may be used uninitialized in this function"
 msgstr ""
@@ -21986,7 +22010,7 @@ msgstr ""
 msgid "vector shuffling operation will be expanded piecewise"
 msgstr ""
 
-#: tree-vect-loop.c:3379
+#: tree-vect-loop.c:3383
 #, gcc-internal-format
 msgid "vectorization did not happen for a simd loop"
 msgstr ""
@@ -22100,10 +22124,11 @@ msgstr ""
 #: c-family/c-common.c:9280 c-family/c-common.c:9303 c-family/c-common.c:9342
 #: c-family/c-common.c:9424 c-family/c-common.c:9467 c-family/c-common.c:9604
 #: config/darwin.c:2021 config/arm/arm.c:6488 config/arm/arm.c:6516
-#: config/arm/arm.c:6533 config/avr/avr.c:8971 config/h8300/h8300.c:5477
-#: config/h8300/h8300.c:5501 config/i386/i386.c:6862 config/i386/i386.c:44531
-#: config/ia64/ia64.c:756 config/rs6000/rs6000.c:31055 config/spu/spu.c:3738
-#: ada/gcc-interface/utils.c:5986 ada/gcc-interface/utils.c:6012
+#: config/arm/arm.c:6533 config/avr/avr.c:8968 config/h8300/h8300.c:5477
+#: config/h8300/h8300.c:5501 config/i386/i386.c:6862 config/i386/i386.c:44609
+#: config/ia64/ia64.c:756 config/rs6000/rs6000.c:32417 config/spu/spu.c:3738
+#: ada/gcc-interface/utils.c:6004 ada/gcc-interface/utils.c:6021
+#: ada/gcc-interface/utils.c:6037 ada/gcc-interface/utils.c:6063
 #: lto/lto-lang.c:243
 #, gcc-internal-format
 msgid "%qE attribute ignored"
@@ -22785,8 +22810,8 @@ msgid ""
 "required to support"
 msgstr ""
 
-#: c-family/c-common.c:1126 c-family/c-common.c:1138 cp/constexpr.c:1598
-#: cp/constexpr.c:3482
+#: c-family/c-common.c:1126 c-family/c-common.c:1138 cp/constexpr.c:1619
+#: cp/constexpr.c:3520
 #, gcc-internal-format
 msgid "overflow in constant expression"
 msgstr ""
@@ -23188,12 +23213,12 @@ msgid ""
 "%<true%>"
 msgstr ""
 
-#: c-family/c-common.c:4589 cp/semantics.c:660 cp/typeck.c:8448
+#: c-family/c-common.c:4589 cp/semantics.c:660 cp/typeck.c:8447
 #, gcc-internal-format
 msgid "suggest parentheses around assignment used as truth value"
 msgstr ""
 
-#: c-family/c-common.c:4668 c/c-decl.c:4126 c/c-typeck.c:13527
+#: c-family/c-common.c:4668 c/c-decl.c:4126 c/c-typeck.c:13534
 #, gcc-internal-format
 msgid "invalid use of %<restrict%>"
 msgstr ""
@@ -23319,6 +23344,7 @@ msgid "%qE attribute ignored for field of type %qT"
 msgstr ""
 
 #: c-family/c-common.c:6684 c-family/c-common.c:6712 c-family/c-common.c:6808
+#: ada/gcc-interface/utils.c:5995
 #, gcc-internal-format
 msgid "%qE attribute ignored due to conflict with attribute %qs"
 msgstr ""
@@ -23623,7 +23649,7 @@ msgstr ""
 msgid "assume_aligned parameter not integer constant"
 msgstr ""
 
-#: c-family/c-common.c:8508 c/c-parser.c:16459
+#: c-family/c-common.c:8508 c/c-parser.c:16444
 #, gcc-internal-format
 msgid ""
 "%<__simd__%> attribute cannot be used in the same function marked as a Cilk "
@@ -23657,7 +23683,7 @@ msgstr ""
 msgid "type was previously declared %qE"
 msgstr ""
 
-#: c-family/c-common.c:8777 cp/class.c:4625
+#: c-family/c-common.c:8777 cp/class.c:4626
 #, gcc-internal-format
 msgid ""
 "%<transaction_safe_dynamic%> may only be specified for a virtual function"
@@ -23693,12 +23719,12 @@ msgstr ""
 msgid "invalid vector type for attribute %qE"
 msgstr ""
 
-#: c-family/c-common.c:9007 ada/gcc-interface/utils.c:3766
+#: c-family/c-common.c:9007 ada/gcc-interface/utils.c:3772
 #, gcc-internal-format
 msgid "vector size not an integral multiple of component size"
 msgstr ""
 
-#: c-family/c-common.c:9013 ada/gcc-interface/utils.c:3773
+#: c-family/c-common.c:9013 ada/gcc-interface/utils.c:3779
 #, gcc-internal-format
 msgid "zero vector size"
 msgstr ""
@@ -23708,23 +23734,23 @@ msgstr ""
 msgid "number of components of the vector not a power of two"
 msgstr ""
 
-#: c-family/c-common.c:9049 ada/gcc-interface/utils.c:5846
+#: c-family/c-common.c:9049 ada/gcc-interface/utils.c:5852
 #, gcc-internal-format
 msgid "nonnull attribute without arguments on a non-prototype"
 msgstr ""
 
-#: c-family/c-common.c:9068 ada/gcc-interface/utils.c:5860
+#: c-family/c-common.c:9068 ada/gcc-interface/utils.c:5866
 #, gcc-internal-format, gfc-internal-format
 msgid "nonnull argument has invalid operand number (argument %lu)"
 msgstr ""
 
-#: c-family/c-common.c:9090 ada/gcc-interface/utils.c:5882
+#: c-family/c-common.c:9090 ada/gcc-interface/utils.c:5888
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "nonnull argument with out-of-range operand number (argument %lu, operand %lu)"
 msgstr ""
 
-#: c-family/c-common.c:9098 ada/gcc-interface/utils.c:5891
+#: c-family/c-common.c:9098 ada/gcc-interface/utils.c:5897
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "nonnull argument references non-pointer operand (argument %lu, operand %lu)"
@@ -23765,12 +23791,12 @@ msgstr ""
 msgid "%qE attribute only applies to variadic functions"
 msgstr ""
 
-#: c-family/c-common.c:9382 ada/gcc-interface/utils.c:5933
+#: c-family/c-common.c:9382 ada/gcc-interface/utils.c:5939
 #, gcc-internal-format
 msgid "requested position is not an integer constant"
 msgstr ""
 
-#: c-family/c-common.c:9390 ada/gcc-interface/utils.c:5940
+#: c-family/c-common.c:9390 ada/gcc-interface/utils.c:5946
 #, gcc-internal-format
 msgid "requested position is less than zero"
 msgstr ""
@@ -23995,17 +24021,17 @@ msgstr ""
 msgid "function %qD used as %<asm%> output"
 msgstr ""
 
-#: c-family/c-common.c:10454 c/c-typeck.c:4566
+#: c-family/c-common.c:10454 c/c-typeck.c:4571
 #, gcc-internal-format
 msgid "assignment of read-only location %qE"
 msgstr ""
 
-#: c-family/c-common.c:10455 c/c-typeck.c:4569
+#: c-family/c-common.c:10455 c/c-typeck.c:4574
 #, gcc-internal-format
 msgid "increment of read-only location %qE"
 msgstr ""
 
-#: c-family/c-common.c:10456 c/c-typeck.c:4572
+#: c-family/c-common.c:10456 c/c-typeck.c:4577
 #, gcc-internal-format
 msgid "decrement of read-only location %qE"
 msgstr ""
@@ -24070,7 +24096,7 @@ msgstr ""
 msgid "invalid type argument of implicit conversion (have %qT)"
 msgstr ""
 
-#: c-family/c-common.c:10666 cp/init.c:2782 cp/init.c:2801
+#: c-family/c-common.c:10666 cp/init.c:2801 cp/init.c:2820
 #, gcc-internal-format
 msgid "size of array is too large"
 msgstr ""
@@ -24234,7 +24260,7 @@ msgstr ""
 msgid "division by zero"
 msgstr ""
 
-#: c-family/c-common.c:11799 c/c-typeck.c:11041 c/c-typeck.c:11198
+#: c-family/c-common.c:11799 c/c-typeck.c:11048 c/c-typeck.c:11205
 #: cp/typeck.c:4820
 #, gcc-internal-format
 msgid "comparison between types %qT and %qT"
@@ -24291,7 +24317,7 @@ msgid "index value is out of bound"
 msgstr ""
 
 #: c-family/c-common.c:12539 c-family/c-common.c:12587
-#: c-family/c-common.c:12602 cp/call.c:4692 cp/call.c:4699
+#: c-family/c-common.c:12602 cp/call.c:4701 cp/call.c:4708
 #, gcc-internal-format
 msgid "conversion of scalar %qT to vector %qT involves truncation"
 msgstr ""
@@ -24785,7 +24811,7 @@ msgstr ""
 msgid "%<#pragma omp atomic capture%> uses two different variables for memory"
 msgstr ""
 
-#: c-family/c-omp.c:480 cp/semantics.c:8077
+#: c-family/c-omp.c:480 cp/semantics.c:8081
 #, gcc-internal-format
 msgid "invalid type for iteration variable %qE"
 msgstr ""
@@ -24795,22 +24821,22 @@ msgstr ""
 msgid "%qE is not initialized"
 msgstr ""
 
-#: c-family/c-omp.c:514 cp/semantics.c:7965
+#: c-family/c-omp.c:514 cp/semantics.c:7969
 #, gcc-internal-format
 msgid "missing controlling predicate"
 msgstr ""
 
-#: c-family/c-omp.c:599 cp/semantics.c:7629
+#: c-family/c-omp.c:599 cp/semantics.c:7633
 #, gcc-internal-format
 msgid "invalid controlling predicate"
 msgstr ""
 
-#: c-family/c-omp.c:606 cp/semantics.c:7971
+#: c-family/c-omp.c:606 cp/semantics.c:7975
 #, gcc-internal-format
 msgid "missing increment expression"
 msgstr ""
 
-#: c-family/c-omp.c:670 cp/semantics.c:7744
+#: c-family/c-omp.c:670 cp/semantics.c:7748
 #, gcc-internal-format
 msgid "invalid increment expression"
 msgstr ""
@@ -24830,12 +24856,12 @@ msgstr ""
 msgid "increment expression refers to iteration variable %qD"
 msgstr ""
 
-#: c-family/c-omp.c:1300
+#: c-family/c-omp.c:1317
 #, gcc-internal-format
 msgid "expected %<parallel%> or %<target%> %<if%> clause modifier"
 msgstr ""
 
-#: c-family/c-omp.c:1398 c-family/c-omp.c:1413
+#: c-family/c-omp.c:1427 c-family/c-omp.c:1442
 #, gcc-internal-format
 msgid "%qD is not an function argument"
 msgstr ""
@@ -25352,7 +25378,7 @@ msgstr ""
 msgid "<erroneous-expression>"
 msgstr ""
 
-#: c-family/c-pretty-print.c:1245 cp/cxx-pretty-print.c:137
+#: c-family/c-pretty-print.c:1245 cp/cxx-pretty-print.c:140
 #, gcc-internal-format
 msgid "<return-value>"
 msgstr ""
@@ -25509,7 +25535,7 @@ msgid ""
 "128, 256, or 512"
 msgstr ""
 
-#: common/config/rs6000/rs6000-common.c:172 config/sparc/sparc.c:1320
+#: common/config/rs6000/rs6000-common.c:172 config/sparc/sparc.c:1350
 #, gcc-internal-format, gfc-internal-format
 msgid "unknown -mdebug-%s switch"
 msgstr ""
@@ -25827,7 +25853,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:452
+#: config/darwin.h:453
 #, gcc-internal-format
 msgid "alias definitions not supported in Mach-O; ignored"
 msgstr ""
@@ -25838,17 +25864,17 @@ msgstr ""
 msgid "profiler support for VxWorks"
 msgstr ""
 
-#: config/aarch64/aarch64-builtins.c:1003 config/arm/arm-builtins.c:2122
+#: config/aarch64/aarch64-builtins.c:1016 config/arm/arm-builtins.c:2122
 #, gcc-internal-format
 msgid "%Kargument %d must be a constant immediate"
 msgstr ""
 
-#: config/aarch64/aarch64-builtins.c:1074 config/arm/arm-builtins.c:2241
+#: config/aarch64/aarch64-builtins.c:1087 config/arm/arm-builtins.c:2241
 #, gcc-internal-format
 msgid "%Klane index must be a constant immediate"
 msgstr ""
 
-#: config/aarch64/aarch64-builtins.c:1077
+#: config/aarch64/aarch64-builtins.c:1090
 #, gcc-internal-format
 msgid "%Ktotal size and element size must be a non-zero constant immediate"
 msgstr ""
@@ -26013,12 +26039,12 @@ msgstr ""
 msgid "malformed target %s list %qs"
 msgstr ""
 
-#: config/aarch64/aarch64.c:10816
+#: config/aarch64/aarch64.c:10813
 #, gcc-internal-format
 msgid "%Klane %wd out of range %wd - %wd"
 msgstr ""
 
-#: config/aarch64/aarch64.c:10818
+#: config/aarch64/aarch64.c:10815
 #, gcc-internal-format
 msgid "lane %wd out of range %wd - %wd"
 msgstr ""
@@ -26666,15 +26692,15 @@ msgstr ""
 msgid "Thumb-1 hard-float VFP ABI"
 msgstr ""
 
-#: config/arm/arm.c:6456 config/arm/arm.c:6474 config/avr/avr.c:8991
-#: config/avr/avr.c:9007 config/bfin/bfin.c:4672 config/bfin/bfin.c:4733
+#: config/arm/arm.c:6456 config/arm/arm.c:6474 config/avr/avr.c:8988
+#: config/avr/avr.c:9004 config/bfin/bfin.c:4672 config/bfin/bfin.c:4733
 #: config/bfin/bfin.c:4762 config/epiphany/epiphany.c:472
 #: config/h8300/h8300.c:5453 config/i386/i386.c:6817 config/i386/i386.c:12002
-#: config/i386/i386.c:44435 config/i386/i386.c:44485 config/i386/i386.c:44555
+#: config/i386/i386.c:44513 config/i386/i386.c:44563 config/i386/i386.c:44633
 #: config/m68k/m68k.c:748 config/mcore/mcore.c:3052 config/mep/mep.c:3884
-#: config/mep/mep.c:3898 config/mep/mep.c:3972 config/nvptx/nvptx.c:3793
-#: config/rl78/rl78.c:756 config/rs6000/rs6000.c:30981 config/rx/rx.c:2695
-#: config/rx/rx.c:2721 config/s390/s390.c:1046 config/sh/sh.c:9780
+#: config/mep/mep.c:3898 config/mep/mep.c:3972 config/nvptx/nvptx.c:3794
+#: config/rl78/rl78.c:756 config/rs6000/rs6000.c:32343 config/rx/rx.c:2695
+#: config/rx/rx.c:2721 config/s390/s390.c:1061 config/sh/sh.c:9780
 #: config/sh/sh.c:9798 config/sh/sh.c:9827 config/sh/sh.c:9909
 #: config/sh/sh.c:9932 config/spu/spu.c:3680 config/stormy16/stormy16.c:2211
 #: config/v850/v850.c:2082 config/visium/visium.c:699
@@ -26692,48 +26718,48 @@ msgstr ""
 msgid "%s %wd out of range %wd - %wd"
 msgstr ""
 
-#: config/arm/arm.c:23600
+#: config/arm/arm.c:23605
 #, gcc-internal-format
 msgid "unable to compute real location of stacked parameter"
 msgstr ""
 
-#: config/arm/arm.c:24211
+#: config/arm/arm.c:24216
 #, gcc-internal-format
 msgid "Unexpected thumb1 far jump"
 msgstr ""
 
-#: config/arm/arm.c:24478
+#: config/arm/arm.c:24483
 #, gcc-internal-format
 msgid "no low registers available for popping high registers"
 msgstr ""
 
-#: config/arm/arm.c:24722
+#: config/arm/arm.c:24731
 #, gcc-internal-format
 msgid "interrupt Service Routines cannot be coded in Thumb mode"
 msgstr ""
 
-#: config/arm/arm.c:24947
+#: config/arm/arm.c:24956
 #, gcc-internal-format
 msgid "-fstack-check=specific for Thumb-1"
 msgstr ""
 
-#: config/arm/arm.c:30008 config/i386/i386.c:6041 config/s390/s390.c:14519
+#: config/arm/arm.c:30017 config/i386/i386.c:6041 config/s390/s390.c:14532
 #, gcc-internal-format
 msgid "attribute %<target%> argument not a string"
 msgstr ""
 
-#: config/arm/arm.c:30031
+#: config/arm/arm.c:30040
 #, gcc-internal-format, gfc-internal-format
 msgid "invalid fpu for attribute(target(\"%s\"))"
 msgstr ""
 
-#: config/arm/arm.c:30037 config/i386/i386.c:6107 config/i386/i386.c:6154
-#: config/s390/s390.c:14585 config/s390/s390.c:14635 config/s390/s390.c:14652
+#: config/arm/arm.c:30046 config/i386/i386.c:6107 config/i386/i386.c:6154
+#: config/s390/s390.c:14598 config/s390/s390.c:14648 config/s390/s390.c:14665
 #, gcc-internal-format, gfc-internal-format
 msgid "attribute(target(\"%s\")) is unknown"
 msgstr ""
 
-#: config/arm/freebsd.h:126
+#: config/arm/freebsd.h:129
 #, gcc-internal-format
 msgid "target OS does not support unaligned accesses"
 msgstr ""
@@ -26787,199 +26813,199 @@ msgstr ""
 #. happen as options are provided by device-specs.  It could be a
 #. typo in a device-specs or calling the compiler proper directly
 #. with -mmcu=<device>.
-#: config/avr/avr.c:369
+#: config/avr/avr.c:366
 #, gcc-internal-format
 msgid "unknown core architecture %qs specified with %qs"
 msgstr ""
 
-#: config/avr/avr.c:435 config/mep/mep.c:354 config/visium/visium.c:383
+#: config/avr/avr.c:432 config/mep/mep.c:354 config/visium/visium.c:383
 #, gcc-internal-format
 msgid "-fpic is not supported"
 msgstr ""
 
-#: config/avr/avr.c:437 config/mep/mep.c:356 config/visium/visium.c:385
+#: config/avr/avr.c:434 config/mep/mep.c:356 config/visium/visium.c:385
 #, gcc-internal-format
 msgid "-fPIC is not supported"
 msgstr ""
 
-#: config/avr/avr.c:439
+#: config/avr/avr.c:436
 #, gcc-internal-format
 msgid "-fpie is not supported"
 msgstr ""
 
-#: config/avr/avr.c:441
+#: config/avr/avr.c:438
 #, gcc-internal-format
 msgid "-fPIE is not supported"
 msgstr ""
 
-#: config/avr/avr.c:713
+#: config/avr/avr.c:710
 #, gcc-internal-format
 msgid "function attributes %qs, %qs and %qs are mutually exclusive"
 msgstr ""
 
-#: config/avr/avr.c:720
+#: config/avr/avr.c:717
 #, gcc-internal-format
 msgid "function attributes %qs and %qs have no effect on %qs function"
 msgstr ""
 
-#: config/avr/avr.c:747
+#: config/avr/avr.c:744
 #, gcc-internal-format
 msgid "%qs function cannot have arguments"
 msgstr ""
 
-#: config/avr/avr.c:750
+#: config/avr/avr.c:747
 #, gcc-internal-format
 msgid "%qs function cannot return a value"
 msgstr ""
 
-#: config/avr/avr.c:757
+#: config/avr/avr.c:754
 #, gcc-internal-format
 msgid "%qs appears to be a misspelled %s handler"
 msgstr ""
 
-#: config/avr/avr.c:984
+#: config/avr/avr.c:981
 #, gcc-internal-format
 msgid "%<builtin_return_address%> contains only 2 bytes of address"
 msgstr ""
 
-#: config/avr/avr.c:2208
+#: config/avr/avr.c:2205
 #, gcc-internal-format
 msgid "pointer offset from symbol maybe incorrect"
 msgstr ""
 
-#: config/avr/avr.c:2347
+#: config/avr/avr.c:2344
 #, gcc-internal-format
 msgid "accessing data memory with program memory address"
 msgstr ""
 
-#: config/avr/avr.c:2408
+#: config/avr/avr.c:2405
 #, gcc-internal-format
 msgid "accessing program memory with data memory address"
 msgstr ""
 
-#: config/avr/avr.c:2853
+#: config/avr/avr.c:2850
 #, gcc-internal-format, gfc-internal-format
 msgid "fixed register %s used to pass parameter to function"
 msgstr ""
 
-#: config/avr/avr.c:3124
+#: config/avr/avr.c:3121
 #, gcc-internal-format
 msgid "writing to address space %qs not supported"
 msgstr ""
 
-#: config/avr/avr.c:9024 config/bfin/bfin.c:4794 config/i386/winnt.c:58
+#: config/avr/avr.c:9021 config/bfin/bfin.c:4794 config/i386/winnt.c:58
 #: config/mep/mep.c:3788 config/mep/mep.c:3926
 #, gcc-internal-format
 msgid "%qE attribute only applies to variables"
 msgstr ""
 
-#: config/avr/avr.c:9035 config/mep/mep.c:3936
+#: config/avr/avr.c:9032 config/mep/mep.c:3936
 #, gcc-internal-format
 msgid "%qE attribute allows only an integer constant argument"
 msgstr ""
 
-#: config/avr/avr.c:9045
+#: config/avr/avr.c:9042
 #, gcc-internal-format
 msgid "%qE attribute address out of range"
 msgstr ""
 
-#: config/avr/avr.c:9058
+#: config/avr/avr.c:9055
 #, gcc-internal-format
 msgid "both %s and %qE attribute provide address"
 msgstr ""
 
-#: config/avr/avr.c:9068
+#: config/avr/avr.c:9065
 #, gcc-internal-format
 msgid "%qE attribute on non-volatile variable"
 msgstr ""
 
-#: config/avr/avr.c:9272
+#: config/avr/avr.c:9269
 #, gcc-internal-format
 msgid "%qT uses address space %qs beyond flash of %d KiB"
 msgstr ""
 
-#: config/avr/avr.c:9275
+#: config/avr/avr.c:9272
 #, gcc-internal-format
 msgid "%s %q+D uses address space %qs beyond flash of %d KiB"
 msgstr ""
 
-#: config/avr/avr.c:9281
+#: config/avr/avr.c:9278
 #, gcc-internal-format
 msgid "pointer targeting address space %qs must be const in %qT"
 msgstr ""
 
-#: config/avr/avr.c:9284
+#: config/avr/avr.c:9281
 #, gcc-internal-format
 msgid "pointer targeting address space %qs must be const in %s %q+D"
 msgstr ""
 
-#: config/avr/avr.c:9322
+#: config/avr/avr.c:9319
 #, gcc-internal-format
 msgid "variable %q+D located in address space %qs beyond flash of %d KiB"
 msgstr ""
 
-#: config/avr/avr.c:9327
+#: config/avr/avr.c:9324
 #, gcc-internal-format
 msgid ""
 "variable %q+D located in address space %qs which is not supported for "
 "architecture %qs"
 msgstr ""
 
-#: config/avr/avr.c:9343
+#: config/avr/avr.c:9340
 #, gcc-internal-format
 msgid ""
 "variable %q+D must be const in order to be put into read-only section by "
 "means of %qs"
 msgstr ""
 
-#: config/avr/avr.c:9383
+#: config/avr/avr.c:9380
 #, gcc-internal-format
 msgid "static IO declaration for %q+D needs an address"
 msgstr ""
 
-#: config/avr/avr.c:9415
+#: config/avr/avr.c:9412
 #, gcc-internal-format
 msgid "IO definition for %q+D needs an address"
 msgstr ""
 
-#: config/avr/avr.c:9599
+#: config/avr/avr.c:9519
 #, gcc-internal-format
 msgid "only uninitialized variables can be placed in the .noinit section"
 msgstr ""
 
-#: config/avr/avr.c:9640
+#: config/avr/avr.c:9560
 #, gcc-internal-format
 msgid "uninitialized variable %q+D put into program memory area"
 msgstr ""
 
-#: config/avr/avr.c:9750
+#: config/avr/avr.c:9672
 #, gcc-internal-format
 msgid "architecture %qs supported for assembler only"
 msgstr ""
 
-#: config/avr/avr.c:12269
+#: config/avr/avr.c:12191
 #, gcc-internal-format
 msgid "conversion from address space %qs to address space %qs"
 msgstr ""
 
-#: config/avr/avr.c:13325
+#: config/avr/avr.c:13247
 #, gcc-internal-format, gfc-internal-format
 msgid "%s expects a compile time integer constant"
 msgstr ""
 
-#: config/avr/avr.c:13339
+#: config/avr/avr.c:13261
 #, gcc-internal-format, gfc-internal-format
 msgid "%s expects a compile time long integer constant as first argument"
 msgstr ""
 
-#: config/avr/avr.c:13367
+#: config/avr/avr.c:13289
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "rounding to %d bits has no effect for fixed-point value with %d fractional "
 "bits"
 msgstr ""
 
-#: config/avr/avr.c:13376
+#: config/avr/avr.c:13298
 #, gcc-internal-format
 msgid "rounding result will always be 0"
 msgstr ""
@@ -27584,7 +27610,7 @@ msgstr ""
 msgid "-mno-fentry isn%'t compatible with SEH"
 msgstr ""
 
-#: config/i386/i386.c:5528 config/rs6000/rs6000.c:4845
+#: config/i386/i386.c:5528 config/rs6000/rs6000.c:4932
 #, gcc-internal-format, gfc-internal-format
 msgid "unknown option for -mrecip=%s"
 msgstr ""
@@ -27604,7 +27630,7 @@ msgstr ""
 msgid "regparam and thiscall attributes are not compatible"
 msgstr ""
 
-#: config/i386/i386.c:6842 config/i386/i386.c:44455
+#: config/i386/i386.c:6842 config/i386/i386.c:44533
 #, gcc-internal-format
 msgid "%qE attribute requires an integer constant argument"
 msgstr ""
@@ -27807,248 +27833,248 @@ msgstr ""
 msgid "non-integer operand used with operand code 'z'"
 msgstr ""
 
-#: config/i386/i386.c:36396
+#: config/i386/i386.c:36446
 #, gcc-internal-format
 msgid "No dispatcher found for the versioning attributes"
 msgstr ""
 
-#: config/i386/i386.c:36446
+#: config/i386/i386.c:36496
 #, gcc-internal-format, gfc-internal-format
 msgid "No dispatcher found for %s"
 msgstr ""
 
-#: config/i386/i386.c:36456
+#: config/i386/i386.c:36506
 #, gcc-internal-format, gfc-internal-format
 msgid "No dispatcher found for the versioning attributes : %s"
 msgstr ""
 
-#: config/i386/i386.c:36704
+#: config/i386/i386.c:36754
 #, gcc-internal-format
 msgid ""
 "Function versions cannot be marked as gnu_inline, bodies have to be generated"
 msgstr ""
 
-#: config/i386/i386.c:36709 config/i386/i386.c:37137
+#: config/i386/i386.c:36759 config/i386/i386.c:37187
 #, gcc-internal-format
 msgid "Virtual function multiversioning not supported"
 msgstr ""
 
-#: config/i386/i386.c:36772
+#: config/i386/i386.c:36822
 #, gcc-internal-format
 msgid "missing %<target%> attribute for multi-versioned %D"
 msgstr ""
 
-#: config/i386/i386.c:36775
+#: config/i386/i386.c:36825
 #, gcc-internal-format
 msgid "previous declaration of %D"
 msgstr ""
 
-#: config/i386/i386.c:36994
+#: config/i386/i386.c:37044
 #, gcc-internal-format
 msgid "multiversioning needs ifunc which is not supported on this target"
 msgstr ""
 
-#: config/i386/i386.c:37380
+#: config/i386/i386.c:37430
 #, gcc-internal-format
 msgid "Parameter to builtin must be a string constant or literal"
 msgstr ""
 
-#: config/i386/i386.c:37405 config/i386/i386.c:37455
+#: config/i386/i386.c:37455 config/i386/i386.c:37505
 #, gcc-internal-format, gfc-internal-format
 msgid "Parameter to builtin not valid: %s"
 msgstr ""
 
-#: config/i386/i386.c:37866 config/i386/i386.c:39217
+#: config/i386/i386.c:37916 config/i386/i386.c:39271
 #, gcc-internal-format
 msgid "the last argument must be a 2-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:38261
+#: config/i386/i386.c:38311
 #, gcc-internal-format
 msgid "the fifth argument must be an 8-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:38356
+#: config/i386/i386.c:38406
 #, gcc-internal-format
 msgid "the third argument must be an 8-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39148
+#: config/i386/i386.c:39202
 #, gcc-internal-format
 msgid "the last argument must be an 1-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39163
+#: config/i386/i386.c:39217
 #, gcc-internal-format
 msgid "the last argument must be a 3-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39196
+#: config/i386/i386.c:39250
 #, gcc-internal-format
 msgid "the last argument must be a 4-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39236
+#: config/i386/i386.c:39290
 #, gcc-internal-format
 msgid "the last argument must be a 1-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39249
+#: config/i386/i386.c:39303
 #, gcc-internal-format
 msgid "the last argument must be a 5-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39259
+#: config/i386/i386.c:39313
 #, gcc-internal-format
 msgid "the next to last argument must be an 8-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39263 config/i386/i386.c:40027
+#: config/i386/i386.c:39317 config/i386/i386.c:40083
 #, gcc-internal-format
 msgid "the last argument must be an 8-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39430
+#: config/i386/i386.c:39485
 #, gcc-internal-format
 msgid "the third argument must be comparison constant"
 msgstr ""
 
-#: config/i386/i386.c:39435
+#: config/i386/i386.c:39490
 #, gcc-internal-format
 msgid "incorrect comparison mode"
 msgstr ""
 
-#: config/i386/i386.c:39441 config/i386/i386.c:39642
+#: config/i386/i386.c:39496 config/i386/i386.c:39697
 #, gcc-internal-format
 msgid "incorrect rounding operand"
 msgstr ""
 
-#: config/i386/i386.c:39624
+#: config/i386/i386.c:39679
 #, gcc-internal-format
 msgid "the immediate argument must be a 4-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39630
+#: config/i386/i386.c:39685
 #, gcc-internal-format
 msgid "the immediate argument must be a 5-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:39633
+#: config/i386/i386.c:39688
 #, gcc-internal-format
 msgid "the immediate argument must be an 8-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:40025
+#: config/i386/i386.c:40081
 #, gcc-internal-format
 msgid "the last argument must be a 32-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:40107 config/rs6000/rs6000.c:13967
+#: config/i386/i386.c:40163 config/rs6000/rs6000.c:14475
 #, gcc-internal-format
 msgid "selector must be an integer constant in the range 0..%wi"
 msgstr ""
 
-#: config/i386/i386.c:40301
+#: config/i386/i386.c:40357
 #, gcc-internal-format
 msgid "%qE needs unknown isa option"
 msgstr ""
 
-#: config/i386/i386.c:40305
+#: config/i386/i386.c:40361
 #, gcc-internal-format
 msgid "%qE needs isa option %s"
 msgstr ""
 
-#: config/i386/i386.c:41067
+#: config/i386/i386.c:41123
 #, gcc-internal-format
 msgid "last argument must be an immediate"
 msgstr ""
 
-#: config/i386/i386.c:41676 config/i386/i386.c:41858
+#: config/i386/i386.c:41732 config/i386/i386.c:41914
 #, gcc-internal-format
 msgid "the last argument must be scale 1, 2, 4, 8"
 msgstr ""
 
-#: config/i386/i386.c:41911
+#: config/i386/i386.c:41967
 #, gcc-internal-format
 msgid "the forth argument must be scale 1, 2, 4, 8"
 msgstr ""
 
-#: config/i386/i386.c:41917
+#: config/i386/i386.c:41973
 #, gcc-internal-format
 msgid "incorrect hint operand"
 msgstr ""
 
-#: config/i386/i386.c:41936
+#: config/i386/i386.c:41992
 #, gcc-internal-format
 msgid "the xabort's argument must be an 8-bit immediate"
 msgstr ""
 
-#: config/i386/i386.c:44442
+#: config/i386/i386.c:44520
 #, gcc-internal-format
 msgid "%qE attribute only available for 32-bit"
 msgstr ""
 
-#: config/i386/i386.c:44463
+#: config/i386/i386.c:44541
 #, gcc-internal-format
 msgid "argument to %qE attribute is neither zero, nor one"
 msgstr ""
 
-#: config/i386/i386.c:44496 config/i386/i386.c:44505
+#: config/i386/i386.c:44574 config/i386/i386.c:44583
 #, gcc-internal-format
 msgid "ms_abi and sysv_abi attributes are not compatible"
 msgstr ""
 
-#: config/i386/i386.c:44541 config/rs6000/rs6000.c:31064
+#: config/i386/i386.c:44619 config/rs6000/rs6000.c:32426
 #, gcc-internal-format
 msgid "%qE incompatible attribute ignored"
 msgstr ""
 
-#: config/i386/i386.c:47478
+#: config/i386/i386.c:47556
 #, gcc-internal-format
 msgid "alternatives not allowed in asm flag output"
 msgstr ""
 
-#: config/i386/i386.c:47542
+#: config/i386/i386.c:47620
 #, gcc-internal-format
 msgid "unknown asm flag output %qs"
 msgstr ""
 
-#: config/i386/i386.c:47571
+#: config/i386/i386.c:47649
 #, gcc-internal-format
 msgid "invalid type for asm flag output"
 msgstr ""
 
-#: config/i386/i386.c:53731
+#: config/i386/i386.c:53809
 #, gcc-internal-format
 msgid "Unknown architecture specific memory model"
 msgstr ""
 
-#: config/i386/i386.c:53738
+#: config/i386/i386.c:53816
 #, gcc-internal-format
 msgid "HLE_ACQUIRE not used with ACQUIRE or stronger memory model"
 msgstr ""
 
-#: config/i386/i386.c:53744
+#: config/i386/i386.c:53822
 #, gcc-internal-format
 msgid "HLE_RELEASE not used with RELEASE or stronger memory model"
 msgstr ""
 
-#: config/i386/i386.c:53768 config/i386/i386.c:53889
+#: config/i386/i386.c:53846 config/i386/i386.c:53967
 #, gcc-internal-format, gfc-internal-format
 msgid "unsupported simdlen %d"
 msgstr ""
 
-#: config/i386/i386.c:53787
+#: config/i386/i386.c:53865
 #, gcc-internal-format
 msgid "unsupported return type %qT for simd\n"
 msgstr ""
 
-#: config/i386/i386.c:53809
+#: config/i386/i386.c:53887
 #, gcc-internal-format
 msgid "unsupported argument type %qT for simd\n"
 msgstr ""
 
-#: config/i386/i386.c:54136
+#: config/i386/i386.c:54214
 #, gcc-internal-format
 msgid ""
 "Pointer Checker requires MPX support on this target. Use -mmpx options to "
@@ -28282,7 +28308,7 @@ msgstr ""
 msgid "interrupt_thread is available only on fido"
 msgstr ""
 
-#: config/m68k/m68k.c:1096 config/rs6000/rs6000.c:24299
+#: config/m68k/m68k.c:1096 config/rs6000/rs6000.c:25350
 #, gcc-internal-format
 msgid "stack limit expression is not supported"
 msgstr ""
@@ -28521,7 +28547,7 @@ msgstr ""
 msgid "argument %d of %qE must be a multiple of %d"
 msgstr ""
 
-#: config/mep/mep.c:6144 c/c-typeck.c:6625
+#: config/mep/mep.c:6144 c/c-typeck.c:6630
 #, gcc-internal-format
 msgid "incompatible type for argument %d of %qE"
 msgstr ""
@@ -29263,22 +29289,22 @@ msgstr ""
 msgid "cannot open intermediate ptx file"
 msgstr ""
 
-#: config/nvptx/nvptx.c:1545
+#: config/nvptx/nvptx.c:1546
 #, gcc-internal-format
 msgid "cannot emit unaligned pointers in ptx assembly"
 msgstr ""
 
-#: config/nvptx/nvptx.c:3798
+#: config/nvptx/nvptx.c:3799
 #, gcc-internal-format
 msgid "%qE attribute requires a void return type"
 msgstr ""
 
-#: config/nvptx/nvptx.c:4142
+#: config/nvptx/nvptx.c:4143
 #, gcc-internal-format, gfc-internal-format
 msgid "using vector_length (%d), ignoring %d"
 msgstr ""
 
-#: config/nvptx/nvptx.c:4153
+#: config/nvptx/nvptx.c:4154
 #, gcc-internal-format, gfc-internal-format
 msgid "using num_workers (%d), ignoring %d"
 msgstr ""
@@ -29303,7 +29329,7 @@ msgstr ""
 msgid "-g option disabled"
 msgstr ""
 
-#: config/pa/pa.c:8699
+#: config/pa/pa.c:8718
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "alignment (%u) for %s exceeds maximum alignment for global common data.  "
@@ -29415,597 +29441,622 @@ msgstr ""
 msgid "junk at end of #pragma longcall"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4512
+#: config/rs6000/rs6000-c.c:4746
 #, gcc-internal-format
 msgid ""
 "vec_lvsl is deprecated for little endian; use assignment for unaligned loads "
 "and stores"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4515
+#: config/rs6000/rs6000-c.c:4749
 #, gcc-internal-format
 msgid ""
 "vec_lvsr is deprecated for little endian; use assignment for unaligned loads "
 "and stores"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4531
+#: config/rs6000/rs6000-c.c:4765
 #, gcc-internal-format, gfc-internal-format
 msgid "%s only accepts %d arguments"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4536
+#: config/rs6000/rs6000-c.c:4770
 #, gcc-internal-format, gfc-internal-format
 msgid "%s only accepts 1 argument"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4541
+#: config/rs6000/rs6000-c.c:4775
 #, gcc-internal-format, gfc-internal-format
 msgid "%s only accepts 2 arguments"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4607
+#: config/rs6000/rs6000-c.c:4841
 #, gcc-internal-format
 msgid "vec_extract only accepts 2 arguments"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4709
+#: config/rs6000/rs6000-c.c:4943
 #, gcc-internal-format
 msgid "vec_insert only accepts 3 arguments"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4841
+#: config/rs6000/rs6000-c.c:5075
 #, gcc-internal-format
 msgid "passing arg %d of %qE discards qualifiers frompointer target type"
 msgstr ""
 
-#: config/rs6000/rs6000-c.c:4885
+#: config/rs6000/rs6000-c.c:5119
 #, gcc-internal-format
 msgid "invalid parameter combination for AltiVec intrinsic"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3465
+#: config/rs6000/rs6000.c:3512
 #, gcc-internal-format
 msgid "-mrecip requires -ffinite-math or -ffast-math"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3467
+#: config/rs6000/rs6000.c:3514
 #, gcc-internal-format
 msgid "-mrecip requires -fno-trapping-math or -ffast-math"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3469
+#: config/rs6000/rs6000.c:3516
 #, gcc-internal-format
 msgid "-mrecip requires -freciprocal-math or -ffast-math"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3569
+#: config/rs6000/rs6000.c:3616
 #, gcc-internal-format
 msgid "-m64 requires PowerPC64 architecture, enabling"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3682
+#: config/rs6000/rs6000.c:3734
 #, gcc-internal-format
 msgid ""
 "-malign-power is not supported for 64-bit Darwin; it is incompatible with "
 "the installed C and C++ libraries"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3844
+#: config/rs6000/rs6000.c:3881
 #, gcc-internal-format
 msgid "not configured for SPE ABI"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3849
+#: config/rs6000/rs6000.c:3886
 #, gcc-internal-format
 msgid "not configured for SPE instruction set"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3855
+#: config/rs6000/rs6000.c:3892
 #, gcc-internal-format
 msgid "target attribute or pragma changes SPE ABI"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3862
+#: config/rs6000/rs6000.c:3899
 #, gcc-internal-format
 msgid "AltiVec not supported in this target"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3864 config/rs6000/rs6000.c:3869
+#: config/rs6000/rs6000.c:3901 config/rs6000/rs6000.c:3906
 #, gcc-internal-format
 msgid "SPE not supported in this target"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3897
+#: config/rs6000/rs6000.c:3934
 #, gcc-internal-format
 msgid "-mmultiple is not supported on little endian systems"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3904
+#: config/rs6000/rs6000.c:3941
 #, gcc-internal-format
 msgid "-mstring is not supported on little endian systems"
 msgstr ""
 
-#: config/rs6000/rs6000.c:3999
+#: config/rs6000/rs6000.c:4037
 #, gcc-internal-format
 msgid "-mcrypto requires -maltivec"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4006
+#: config/rs6000/rs6000.c:4044
 #, gcc-internal-format
 msgid "-mdirect-move requires -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4013
+#: config/rs6000/rs6000.c:4051
 #, gcc-internal-format
 msgid "-mpower8-vector requires -maltivec"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4020
+#: config/rs6000/rs6000.c:4058
 #, gcc-internal-format
 msgid "-mpower8-vector requires -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4027
+#: config/rs6000/rs6000.c:4065
 #, gcc-internal-format
 msgid "-mvsx-timode requires -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4034
+#: config/rs6000/rs6000.c:4072
 #, gcc-internal-format
 msgid "-mhard-dfp requires -mhard-float"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4075
+#: config/rs6000/rs6000.c:4113
 #, gcc-internal-format
 msgid "-mupper-regs-df requires -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4082
+#: config/rs6000/rs6000.c:4120
 #, gcc-internal-format
 msgid "-mupper-regs-sf requires -mpower8-vector"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4131
+#: config/rs6000/rs6000.c:4169
 #, gcc-internal-format
 msgid "-mpower8-fusion-sign requires -mpower8-fusion"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4134
+#: config/rs6000/rs6000.c:4172
 #, gcc-internal-format
 msgid "-mtoc-fusion requires -mpower8-fusion"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4147
+#: config/rs6000/rs6000.c:4185
 #, gcc-internal-format
 msgid "-mpower9-fusion requires -mpower8-fusion"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4195
+#: config/rs6000/rs6000.c:4233
+#, gcc-internal-format
+msgid "-mpower9-vector requires -mpower8-vector"
+msgstr ""
+
+#: config/rs6000/rs6000.c:4260
 #, gcc-internal-format
 msgid "-mpower9-dform requires -mpower9-vector"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4202
+#: config/rs6000/rs6000.c:4268
 #, gcc-internal-format
 msgid "-mpower9-dform requires -mupper-regs-df"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4209
+#: config/rs6000/rs6000.c:4275
 #, gcc-internal-format
 msgid "-mpower9-dform requires -mupper-regs-sf"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4217
+#: config/rs6000/rs6000.c:4291
 #, gcc-internal-format
-msgid "-mpower9-vector requires -mpower8-vector"
+msgid "-mvsx-timode might need -mlra"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4232
+#: config/rs6000/rs6000.c:4316
 #, gcc-internal-format
 msgid "-mallow-movmisalign requires -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4247
+#: config/rs6000/rs6000.c:4331
 #, gcc-internal-format
 msgid "-mefficient-unaligned-vsx requires -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4255
+#: config/rs6000/rs6000.c:4339
 #, gcc-internal-format
 msgid "-mefficient-unaligned-vsx requires -mallow-movmisalign"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4265
+#: config/rs6000/rs6000.c:4349
 #, gcc-internal-format
 msgid "-mfloat128 requires VSX support"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4279
+#: config/rs6000/rs6000.c:4371
 #, gcc-internal-format
 msgid "-mfloat128-hardware requires full ISA 3.0 support"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4346
+#: config/rs6000/rs6000.c:4434
 #, gcc-internal-format, gfc-internal-format
 msgid "unknown vectorization library ABI type (%s) for -mveclibabi= switch"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4358
+#: config/rs6000/rs6000.c:4446
 #, gcc-internal-format
 msgid "target attribute or pragma changes long double size"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4381 config/rs6000/rs6000.c:4396
+#: config/rs6000/rs6000.c:4469 config/rs6000/rs6000.c:4484
 #, gcc-internal-format
 msgid "target attribute or pragma changes AltiVec ABI"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4409
+#: config/rs6000/rs6000.c:4497
 #, gcc-internal-format
 msgid "target attribute or pragma changes darwin64 ABI"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4475
+#: config/rs6000/rs6000.c:4563
 #, gcc-internal-format
 msgid "target attribute or pragma changes single precision floating point"
 msgstr ""
 
-#: config/rs6000/rs6000.c:4478
+#: config/rs6000/rs6000.c:4566
 #, gcc-internal-format
 msgid "target attribute or pragma changes double precision floating point"
 msgstr ""
 
-#: config/rs6000/rs6000.c:6738
+#: config/rs6000/rs6000.c:7010
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "the layout of aggregates containing vectors with %d-byte alignment has "
 "changed in GCC 5"
 msgstr ""
 
-#: config/rs6000/rs6000.c:9844
+#: config/rs6000/rs6000.c:10258
 #, gcc-internal-format
 msgid ""
 "GCC vector returned by reference: non-standard ABI extension with no "
 "compatibility guarantee"
 msgstr ""
 
-#: config/rs6000/rs6000.c:9997
+#: config/rs6000/rs6000.c:10411
 #, gcc-internal-format
 msgid ""
 "cannot return value in vector register because altivec instructions are "
 "disabled, use -maltivec to enable them"
 msgstr ""
 
-#: config/rs6000/rs6000.c:10167
+#: config/rs6000/rs6000.c:10611
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "the ABI of passing aggregates with %d-byte alignment has changed in GCC 5"
 msgstr ""
 
-#: config/rs6000/rs6000.c:10429
+#: config/rs6000/rs6000.c:10873
 #, gcc-internal-format
 msgid ""
 "cannot pass argument in vector register because altivec instructions are "
 "disabled, use -maltivec to enable them"
 msgstr ""
 
-#: config/rs6000/rs6000.c:11289
+#: config/rs6000/rs6000.c:11725
 #, gcc-internal-format
 msgid "the ABI of passing homogeneous float aggregates has changed in GCC 5"
 msgstr ""
 
-#: config/rs6000/rs6000.c:11464
+#: config/rs6000/rs6000.c:11900
 #, gcc-internal-format
 msgid ""
 "GCC vector passed by reference: non-standard ABI extension with no "
 "compatibility guarantee"
 msgstr ""
 
-#: config/rs6000/rs6000.c:12252
+#: config/rs6000/rs6000.c:12684
 #, gcc-internal-format, gfc-internal-format
 msgid "internal error: builtin function %s already processed"
 msgstr ""
 
-#: config/rs6000/rs6000.c:12694
+#: config/rs6000/rs6000.c:13182
 #, gcc-internal-format
 msgid "argument 1 must be an 8-bit field value"
 msgstr ""
 
-#: config/rs6000/rs6000.c:12741
+#: config/rs6000/rs6000.c:13229
 #, gcc-internal-format
 msgid "argument 1 must be a 5-bit signed literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:12844 config/rs6000/rs6000.c:14430
+#: config/rs6000/rs6000.c:13332 config/rs6000/rs6000.c:15019
 #, gcc-internal-format
 msgid "argument 2 must be a 5-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:12883
+#: config/rs6000/rs6000.c:13350
+#, gcc-internal-format
+msgid "argument 1 must be a 6-bit unsigned literal"
+msgstr ""
+
+#: config/rs6000/rs6000.c:13389
 #, gcc-internal-format
 msgid "argument 1 of __builtin_altivec_predicate must be a constant"
 msgstr ""
 
-#: config/rs6000/rs6000.c:12935
+#: config/rs6000/rs6000.c:13441
 #, gcc-internal-format
 msgid "argument 1 of __builtin_altivec_predicate is out of range"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13309
+#: config/rs6000/rs6000.c:13815
 #, gcc-internal-format, gfc-internal-format
 msgid "builtin %s is only valid in 64-bit mode"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13358
+#: config/rs6000/rs6000.c:13864
 #, gcc-internal-format, gfc-internal-format
 msgid "argument %d must be an unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13360
+#: config/rs6000/rs6000.c:13866
 #, gcc-internal-format, gfc-internal-format
 msgid "argument %d is an unsigned literal that is out of range"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13498
+#: config/rs6000/rs6000.c:14004
 #, gcc-internal-format, gfc-internal-format
 msgid "builtin %s only accepts a string argument"
 msgstr ""
 
 #. Invalid CPU argument.
-#: config/rs6000/rs6000.c:13517
+#: config/rs6000/rs6000.c:14023
 #, gcc-internal-format, gfc-internal-format
 msgid "cpu %s is an invalid argument to builtin %s"
 msgstr ""
 
 #. Invalid HWCAP argument.
-#: config/rs6000/rs6000.c:13545
+#: config/rs6000/rs6000.c:14051
 #, gcc-internal-format, gfc-internal-format
 msgid "hwcap %s is an invalid argument to builtin %s"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13618
+#: config/rs6000/rs6000.c:14124
 #, gcc-internal-format
 msgid "argument 3 must be a 4-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13636
+#: config/rs6000/rs6000.c:14142
 #, gcc-internal-format
 msgid "argument 3 must be a 2-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13656
+#: config/rs6000/rs6000.c:14162
 #, gcc-internal-format
 msgid "argument 3 must be a 1-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13668
+#: config/rs6000/rs6000.c:14174
 #, gcc-internal-format
 msgid "argument 1 must be 0 or 2"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13680
+#: config/rs6000/rs6000.c:14186
 #, gcc-internal-format
 msgid "argument 1 must be a 1-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13694
+#: config/rs6000/rs6000.c:14200
 #, gcc-internal-format
 msgid "argument 2 must be a 6-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13706
+#: config/rs6000/rs6000.c:14212
 #, gcc-internal-format
 msgid "argument 2 must be 0 or 1"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13713
+#: config/rs6000/rs6000.c:14219
 #, gcc-internal-format
 msgid "argument 3 must be in the range 0..15"
 msgstr ""
 
-#: config/rs6000/rs6000.c:13900
+#: config/rs6000/rs6000.c:14408
 #, gcc-internal-format
 msgid "argument to %qs must be a 2-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14053
+#: config/rs6000/rs6000.c:14561
 #, gcc-internal-format
 msgid "unresolved overload for Altivec builtin %qF"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14183
+#: config/rs6000/rs6000.c:14732
 #, gcc-internal-format
 msgid "argument to dss must be a 2-bit unsigned literal"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14550
+#: config/rs6000/rs6000.c:15139
 #, gcc-internal-format
 msgid "argument 1 of __builtin_paired_predicate must be a constant"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14597
+#: config/rs6000/rs6000.c:15186
 #, gcc-internal-format
 msgid "argument 1 of __builtin_paired_predicate is out of range"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14622
+#: config/rs6000/rs6000.c:15211
 #, gcc-internal-format
 msgid "argument 1 of __builtin_spe_predicate must be a constant"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14694
+#: config/rs6000/rs6000.c:15283
 #, gcc-internal-format
 msgid "argument 1 of __builtin_spe_predicate is out of range"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14776
+#: config/rs6000/rs6000.c:15365
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s is only valid for the cell processor"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14778
+#: config/rs6000/rs6000.c:15367
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mvsx option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14780
+#: config/rs6000/rs6000.c:15369
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mhtm option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14782
+#: config/rs6000/rs6000.c:15371
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -maltivec option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14784
+#: config/rs6000/rs6000.c:15373
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mpaired option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14786
+#: config/rs6000/rs6000.c:15375
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mspe option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14789
+#: config/rs6000/rs6000.c:15378
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mhard-dfp and -mpower8-vector options"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14792
+#: config/rs6000/rs6000.c:15381
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mhard-dfp option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14794
+#: config/rs6000/rs6000.c:15383
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mpower8-vector option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14797
+#: config/rs6000/rs6000.c:15385
+#, gcc-internal-format, gfc-internal-format
+msgid "Builtin function %s requires the -mpower9-vector option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:15388
+#, gcc-internal-format, gfc-internal-format
+msgid "Builtin function %s requires the -mpower9-misc and -m64 options"
+msgstr ""
+
+#: config/rs6000/rs6000.c:15391
+#, gcc-internal-format, gfc-internal-format
+msgid "Builtin function %s requires the -mpower9-misc option"
+msgstr ""
+
+#: config/rs6000/rs6000.c:15394
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Builtin function %s requires the -mhard-float and -mlong-double-128 options"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14800
+#: config/rs6000/rs6000.c:15397
 #, gcc-internal-format, gfc-internal-format
 msgid "Builtin function %s requires the -mhard-float option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:14802
+#: config/rs6000/rs6000.c:15399
 #, gcc-internal-format, gfc-internal-format
-msgid "Builtin function %s is not supported with the current options"
+msgid "Builtin function %s requires the -mfloat128 option"
 msgstr ""
 
-#: config/rs6000/rs6000.c:16356
+#: config/rs6000/rs6000.c:15401
 #, gcc-internal-format, gfc-internal-format
-msgid "internal error: builtin function %s had no type"
+msgid "Builtin function %s is not supported with the current options"
 msgstr ""
 
-#: config/rs6000/rs6000.c:16364
+#: config/rs6000/rs6000.c:17064
 #, gcc-internal-format, gfc-internal-format
 msgid "internal error: builtin function %s had an unexpected return type %s"
 msgstr ""
 
-#: config/rs6000/rs6000.c:16381
+#: config/rs6000/rs6000.c:17081
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "internal error: builtin function %s, argument %d had unexpected argument "
 "type %s"
 msgstr ""
 
-#: config/rs6000/rs6000.c:24269
+#: config/rs6000/rs6000.c:25320
 #, gcc-internal-format
 msgid "stack frame too large"
 msgstr ""
 
-#: config/rs6000/rs6000.c:27663
+#: config/rs6000/rs6000.c:28750
 #, gcc-internal-format
 msgid "-fsplit-stack uses register r29"
 msgstr ""
 
-#: config/rs6000/rs6000.c:27671
+#: config/rs6000/rs6000.c:28758
 #, gcc-internal-format
 msgid "Stack frame larger than 2G is not supported for -fsplit-stack"
 msgstr ""
 
-#: config/rs6000/rs6000.c:28669
+#: config/rs6000/rs6000.c:29761
 #, gcc-internal-format
 msgid "no profiling of 64-bit code for this ABI"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30751
+#: config/rs6000/rs6000.c:32113
 #, gcc-internal-format
 msgid ""
 "You cannot take the address of a nested function if you use the -mno-"
 "pointers-to-nested-functions option."
 msgstr ""
 
-#: config/rs6000/rs6000.c:30833
+#: config/rs6000/rs6000.c:32195
 #, gcc-internal-format
 msgid "use of %<long double%> in AltiVec types is invalid"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30835
+#: config/rs6000/rs6000.c:32197
 #, gcc-internal-format
 msgid "use of boolean types in AltiVec types is invalid"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30837
+#: config/rs6000/rs6000.c:32199
 #, gcc-internal-format
 msgid "use of %<complex%> in AltiVec types is invalid"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30839
+#: config/rs6000/rs6000.c:32201
 #, gcc-internal-format
 msgid "use of decimal floating point types in AltiVec types is invalid"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30845
+#: config/rs6000/rs6000.c:32207
 #, gcc-internal-format
 msgid ""
 "use of %<long%> in AltiVec types is invalid for 64-bit code without -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30848
+#: config/rs6000/rs6000.c:32210
 #, gcc-internal-format
 msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30853
+#: config/rs6000/rs6000.c:32215
 #, gcc-internal-format
 msgid "use of %<long long%> in AltiVec types is invalid without -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:30856
+#: config/rs6000/rs6000.c:32218
 #, gcc-internal-format
 msgid "use of %<double%> in AltiVec types is invalid without -mvsx"
 msgstr ""
 
-#: config/rs6000/rs6000.c:34364
+#: config/rs6000/rs6000.c:35741
 #, gcc-internal-format, gfc-internal-format
 msgid "emitting microcode insn %s\t[%s] #%d"
 msgstr ""
 
-#: config/rs6000/rs6000.c:34368
+#: config/rs6000/rs6000.c:35745
 #, gcc-internal-format, gfc-internal-format
 msgid "emitting conditional microcode insn %s\t[%s] #%d"
 msgstr ""
 
-#: config/rs6000/rs6000.c:34668
+#: config/rs6000/rs6000.c:36050
 #, gcc-internal-format, gfc-internal-format
 msgid "invalid cpu \"%s\" for %s\"%s\"%s"
 msgstr ""
 
-#: config/rs6000/rs6000.c:34671
+#: config/rs6000/rs6000.c:36053
 #, gcc-internal-format, gfc-internal-format
 msgid "%s\"%s\"%s is not allowed"
 msgstr ""
 
-#: config/rs6000/rs6000.c:34673
+#: config/rs6000/rs6000.c:36055
 #, gcc-internal-format, gfc-internal-format
 msgid "%s\"%s\"%s is invalid"
 msgstr ""
@@ -30351,36 +30402,36 @@ msgstr ""
 msgid "bad builtin icode"
 msgstr ""
 
-#: config/s390/s390.c:891
+#: config/s390/s390.c:892
 #, gcc-internal-format
 msgid "constant value required for builtin %qF argument %d"
 msgstr ""
 
-#: config/s390/s390.c:968
+#: config/s390/s390.c:983
 #, gcc-internal-format
 msgid "Invalid argument %d for builtin %qF"
 msgstr ""
 
-#: config/s390/s390.c:1069
+#: config/s390/s390.c:1084
 #, gcc-internal-format
 msgid ""
 "requested %qE attribute is not a comma separated pair of non-negative "
 "integer constants or too large (max. %d)"
 msgstr ""
 
-#: config/s390/s390.c:9641
+#: config/s390/s390.c:9662
 #, gcc-internal-format
 msgid "total size of local variables exceeds architecture limit"
 msgstr ""
 
-#: config/s390/s390.c:10747
+#: config/s390/s390.c:10768
 #, gcc-internal-format
 msgid ""
 "frame size of function %qs is %wd bytes exceeding user provided stack limit "
 "of %d bytes.  An unconditional trap is added."
 msgstr ""
 
-#: config/s390/s390.c:10763
+#: config/s390/s390.c:10784
 #, gcc-internal-format
 msgid ""
 "frame size of function %qs is %wd bytes which is more than half the stack "
@@ -30388,105 +30439,105 @@ msgid ""
 "function."
 msgstr ""
 
-#: config/s390/s390.c:10791
+#: config/s390/s390.c:10812
 #, gcc-internal-format
 msgid "frame size of %qs is %wd bytes"
 msgstr ""
 
-#: config/s390/s390.c:10795
+#: config/s390/s390.c:10816
 #, gcc-internal-format
 msgid "%qs uses dynamic stack allocation"
 msgstr ""
 
-#: config/s390/s390.c:11173
+#: config/s390/s390.c:11194
 #, gcc-internal-format
 msgid "CPUs older than z900 are not supported for -fsplit-stack"
 msgstr ""
 
-#: config/s390/s390.c:14172
+#: config/s390/s390.c:14185
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "%sarch=%s%s is deprecated and will be removed in future releases; use at "
 "least %sarch=z900%s"
 msgstr ""
 
-#: config/s390/s390.c:14184
+#: config/s390/s390.c:14197
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "%stune=%s%s is deprecated and will be removed in future releases; use at "
 "least %stune=z900%s"
 msgstr ""
 
-#: config/s390/s390.c:14196
+#: config/s390/s390.c:14209
 #, gcc-internal-format, gfc-internal-format
 msgid "z/Architecture mode not supported on %s"
 msgstr ""
 
-#: config/s390/s390.c:14199
+#: config/s390/s390.c:14212
 #, gcc-internal-format
 msgid "64-bit ABI not supported in ESA/390 mode"
 msgstr ""
 
-#: config/s390/s390.c:14216
+#: config/s390/s390.c:14229
 #, gcc-internal-format, gfc-internal-format
 msgid "hardware vector support not available on %s"
 msgstr ""
 
-#: config/s390/s390.c:14219
+#: config/s390/s390.c:14232
 #, gcc-internal-format
 msgid "hardware vector support not available with -msoft-float"
 msgstr ""
 
-#: config/s390/s390.c:14247
+#: config/s390/s390.c:14260
 #, gcc-internal-format, gfc-internal-format
 msgid "hardware decimal floating point instructions not available on %s"
 msgstr ""
 
-#: config/s390/s390.c:14251
+#: config/s390/s390.c:14264
 #, gcc-internal-format
 msgid ""
 "hardware decimal floating point instructions not available in ESA/390 mode"
 msgstr ""
 
-#: config/s390/s390.c:14263
+#: config/s390/s390.c:14276
 #, gcc-internal-format
 msgid "-mhard-dfp can%'t be used in conjunction with -msoft-float"
 msgstr ""
 
-#: config/s390/s390.c:14271
+#: config/s390/s390.c:14284
 #, gcc-internal-format
 msgid ""
 "-mbackchain -mpacked-stack -mhard-float are not supported in combination"
 msgstr ""
 
-#: config/s390/s390.c:14277
+#: config/s390/s390.c:14290
 #, gcc-internal-format
 msgid "stack size must be greater than the stack guard value"
 msgstr ""
 
-#: config/s390/s390.c:14279
+#: config/s390/s390.c:14292
 #, gcc-internal-format
 msgid "stack size must not be greater than 64k"
 msgstr ""
 
-#: config/s390/s390.c:14282
+#: config/s390/s390.c:14295
 #, gcc-internal-format
 msgid "-mstack-guard implies use of -mstack-size"
 msgstr ""
 
 #. argument is not a plain number
-#: config/s390/s390.c:14376
+#: config/s390/s390.c:14389
 #, gcc-internal-format
 msgid "arguments to %qs should be non-negative integers"
 msgstr ""
 
-#: config/s390/s390.c:14383
+#: config/s390/s390.c:14396
 #, gcc-internal-format
 msgid "argument to %qs is too large (max. %d)"
 msgstr ""
 
 #. Value is not allowed for the target attribute.
-#: config/s390/s390.c:14591
+#: config/s390/s390.c:14604
 #, gcc-internal-format
 msgid "Value %qs is not supported by attribute %<target%>"
 msgstr ""
@@ -30566,27 +30617,27 @@ msgstr ""
 msgid "-mrelax is only supported for RTP PIC"
 msgstr ""
 
-#: config/sparc/sparc.c:1342
+#: config/sparc/sparc.c:1372
 #, gcc-internal-format, gfc-internal-format
 msgid "%s is not supported by this configuration"
 msgstr ""
 
-#: config/sparc/sparc.c:1349
+#: config/sparc/sparc.c:1379
 #, gcc-internal-format
 msgid "-mlong-double-64 not allowed with -m64"
 msgstr ""
 
-#: config/sparc/sparc.c:1369
+#: config/sparc/sparc.c:1399
 #, gcc-internal-format, gfc-internal-format
 msgid "bad value (%s) for -mcmodel= switch"
 msgstr ""
 
-#: config/sparc/sparc.c:1374
+#: config/sparc/sparc.c:1404
 #, gcc-internal-format
 msgid "-mcmodel= is not supported on 32 bit systems"
 msgstr ""
 
-#: config/sparc/sparc.c:1381
+#: config/sparc/sparc.c:1411
 #, gcc-internal-format
 msgid "-fcall-saved-REG is not supported for out registers"
 msgstr ""
@@ -30922,53 +30973,53 @@ msgstr ""
 msgid "subprogram %q+F not marked Inline"
 msgstr ""
 
-#: ada/gcc-interface/trans.c:6241
+#: ada/gcc-interface/trans.c:6248
 #, gcc-internal-format
 msgid "out-of-bounds access may be optimized away"
 msgstr ""
 
-#: ada/gcc-interface/trans.c:6243
+#: ada/gcc-interface/trans.c:6250
 #, gcc-internal-format
 msgid "containing loop"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:3757
+#: ada/gcc-interface/utils.c:3763
 #, gcc-internal-format
 msgid "invalid element type for attribute %qs"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:3781
+#: ada/gcc-interface/utils.c:3787
 #, gcc-internal-format
 msgid "number of components of vector not a power of two"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:5795 ada/gcc-interface/utils.c:5969
-#: ada/gcc-interface/utils.c:6031
+#: ada/gcc-interface/utils.c:5801 ada/gcc-interface/utils.c:5975
+#: ada/gcc-interface/utils.c:6082
 #, gcc-internal-format
 msgid "%qs attribute ignored"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:5912
+#: ada/gcc-interface/utils.c:5918
 #, gcc-internal-format
 msgid "%qs attribute requires prototypes with named arguments"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:5921
+#: ada/gcc-interface/utils.c:5927
 #, gcc-internal-format
 msgid "%qs attribute only applies to variadic functions"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:5991
+#: ada/gcc-interface/utils.c:6042
 #, gcc-internal-format
 msgid "%qE attribute has no effect"
 msgstr ""
 
-#: ada/gcc-interface/utils.c:6115
+#: ada/gcc-interface/utils.c:6166
 #, gcc-internal-format
 msgid "attribute %qs applies to array types only"
 msgstr ""
 
-#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:7795
+#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:7806
 #: cp/cp-array-notation.c:250
 #, gcc-internal-format
 msgid "Invalid builtin arguments"
@@ -30981,8 +31032,7 @@ msgid ""
 "dimension greater than 1"
 msgstr ""
 
-#: c/c-array-notation.c:718 c/c-array-notation.c:724
-#: cp/cp-array-notation.c:606
+#: c/c-array-notation.c:718 c/c-array-notation.c:724 cp/cp-array-notation.c:606
 #, gcc-internal-format
 msgid "%qE cannot be scalar when %qE is not"
 msgstr ""
@@ -31027,8 +31077,8 @@ msgstr ""
 #. an unprototyped function, it is compile-time undefined;
 #. making it a constraint in that case was rejected in
 #. DR#252.
-#: c/c-convert.c:98 c/c-typeck.c:2116 c/c-typeck.c:6132 c/c-typeck.c:11648
-#: cp/typeck.c:1956 cp/typeck.c:7558 cp/typeck.c:8285
+#: c/c-convert.c:98 c/c-typeck.c:2116 c/c-typeck.c:6137 c/c-typeck.c:11655
+#: cp/typeck.c:1956 cp/typeck.c:7557 cp/typeck.c:8284
 #, gcc-internal-format
 msgid "void value not ignored as it ought to be"
 msgstr ""
@@ -31088,7 +31138,7 @@ msgstr ""
 msgid "type of array %q+D completed incompatibly with implicit initialization"
 msgstr ""
 
-#: c/c-decl.c:1559 c/c-decl.c:6391 c/c-decl.c:7263 c/c-decl.c:8002
+#: c/c-decl.c:1559 c/c-decl.c:6391 c/c-decl.c:7265 c/c-decl.c:8004
 #, gcc-internal-format
 msgid "originally defined here"
 msgstr ""
@@ -31365,7 +31415,7 @@ msgid ""
 "appears in"
 msgstr ""
 
-#: c/c-decl.c:3503 cp/decl.c:2951
+#: c/c-decl.c:3503 cp/decl.c:2959
 #, gcc-internal-format
 msgid "label %qE referenced outside of any function"
 msgstr ""
@@ -31385,8 +31435,8 @@ msgstr ""
 msgid "label %qD defined here"
 msgstr ""
 
-#: c/c-decl.c:3544 c/c-decl.c:3815 c/c-typeck.c:7879 cp/class.c:1438
-#: cp/class.c:3303 cp/decl.c:3787 cp/friend.c:340 cp/friend.c:349
+#: c/c-decl.c:3544 c/c-decl.c:3815 c/c-typeck.c:7884 cp/class.c:1438
+#: cp/class.c:3303 cp/decl.c:3795 cp/friend.c:340 cp/friend.c:349
 #: cp/parser.c:3146 cp/parser.c:3227 cp/parser.c:3255 cp/parser.c:5994
 #, gcc-internal-format
 msgid "%qD declared here"
@@ -31402,7 +31452,7 @@ msgstr ""
 msgid "duplicate label declaration %qE"
 msgstr ""
 
-#: c/c-decl.c:3717 cp/decl.c:3329
+#: c/c-decl.c:3717 cp/decl.c:3337
 #, gcc-internal-format
 msgid "duplicate label %qD"
 msgstr ""
@@ -31518,7 +31568,7 @@ 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.c:4349 c/c-decl.c:6831
+#: c/c-decl.c:4349 c/c-decl.c:6833
 #, gcc-internal-format
 msgid "%<[*]%> not allowed in other than function prototype scope"
 msgstr ""
@@ -31553,7 +31603,7 @@ msgstr ""
 #. of VLAs themselves count as VLAs, it does not make
 #. sense to permit them to be initialized given that
 #. ordinary VLAs may not be initialized.
-#: c/c-decl.c:4524 c/c-decl.c:4539 c/c-typeck.c:7186
+#: c/c-decl.c:4524 c/c-decl.c:4539 c/c-typeck.c:7191
 #, gcc-internal-format
 msgid "variable-sized object may not be initialized"
 msgstr ""
@@ -31773,7 +31823,7 @@ msgstr ""
 msgid "storage class specified for unnamed parameter"
 msgstr ""
 
-#: c/c-decl.c:5621 cp/decl.c:9939
+#: c/c-decl.c:5621 cp/decl.c:9953
 #, gcc-internal-format
 msgid "storage class specified for typename"
 msgstr ""
@@ -31836,7 +31886,7 @@ msgstr ""
 msgid "declaration of type name as array of functions"
 msgstr ""
 
-#: c/c-decl.c:5774 c/c-decl.c:7757
+#: c/c-decl.c:5774 c/c-decl.c:7759
 #, gcc-internal-format
 msgid "invalid use of structure with flexible array member"
 msgstr ""
@@ -31926,18 +31976,18 @@ msgstr ""
 msgid "function definition has qualified void return type"
 msgstr ""
 
-#: c/c-decl.c:6144 cp/decl.c:10069
+#: c/c-decl.c:6144 cp/decl.c:10083
 #, gcc-internal-format
 msgid "type qualifiers ignored on function return type"
 msgstr ""
 
 #: c/c-decl.c:6173 c/c-decl.c:6357 c/c-decl.c:6411 c/c-decl.c:6495
-#: c/c-decl.c:6611 c/c-parser.c:2586
+#: c/c-decl.c:6613 c/c-parser.c:2586
 #, gcc-internal-format
 msgid "%<_Atomic%>-qualified function type"
 msgstr ""
 
-#: c/c-decl.c:6179 c/c-decl.c:6363 c/c-decl.c:6500 c/c-decl.c:6616
+#: c/c-decl.c:6179 c/c-decl.c:6363 c/c-decl.c:6500 c/c-decl.c:6618
 #, gcc-internal-format
 msgid "ISO C forbids qualified function types"
 msgstr ""
@@ -32053,7 +32103,7 @@ msgstr ""
 msgid "a member of a structure or union cannot have a variably modified type"
 msgstr ""
 
-#: c/c-decl.c:6445 cp/decl.c:9144
+#: c/c-decl.c:6445 cp/decl.c:9158
 #, gcc-internal-format
 msgid "variable or field %qE declared void"
 msgstr ""
@@ -32088,422 +32138,422 @@ msgstr ""
 msgid "unnamed field has incomplete type"
 msgstr ""
 
-#: c/c-decl.c:6582 c/c-decl.c:6593 c/c-decl.c:6596
+#: c/c-decl.c:6584 c/c-decl.c:6595 c/c-decl.c:6598
 #, gcc-internal-format
 msgid "invalid storage class for function %qE"
 msgstr ""
 
-#: c/c-decl.c:6653
+#: c/c-decl.c:6655
 #, gcc-internal-format
 msgid "cannot inline function %<main%>"
 msgstr ""
 
-#: c/c-decl.c:6655
+#: c/c-decl.c:6657
 #, gcc-internal-format
 msgid "%<main%> declared %<_Noreturn%>"
 msgstr ""
 
-#: c/c-decl.c:6666
+#: c/c-decl.c:6668
 #, gcc-internal-format
 msgid "ISO C99 does not support %<_Noreturn%>"
 msgstr ""
 
-#: c/c-decl.c:6669
+#: c/c-decl.c:6671
 #, gcc-internal-format
 msgid "ISO C90 does not support %<_Noreturn%>"
 msgstr ""
 
-#: c/c-decl.c:6698
+#: c/c-decl.c:6700
 #, gcc-internal-format
 msgid "variable previously declared %<static%> redeclared %<extern%>"
 msgstr ""
 
-#: c/c-decl.c:6708
+#: c/c-decl.c:6710
 #, gcc-internal-format
 msgid "variable %q+D declared %<inline%>"
 msgstr ""
 
-#: c/c-decl.c:6710
+#: c/c-decl.c:6712
 #, gcc-internal-format
 msgid "variable %q+D declared %<_Noreturn%>"
 msgstr ""
 
-#: c/c-decl.c:6745
+#: c/c-decl.c:6747
 #, gcc-internal-format
 msgid "non-nested function with variably modified type"
 msgstr ""
 
-#: c/c-decl.c:6747
+#: c/c-decl.c:6749
 #, gcc-internal-format
 msgid "object with variably modified type must have no linkage"
 msgstr ""
 
-#: c/c-decl.c:6837 c/c-decl.c:8442
+#: c/c-decl.c:6839 c/c-decl.c:8444
 #, gcc-internal-format
 msgid "function declaration isn%'t a prototype"
 msgstr ""
 
-#: c/c-decl.c:6846
+#: c/c-decl.c:6848
 #, gcc-internal-format
 msgid "parameter names (without types) in function declaration"
 msgstr ""
 
-#: c/c-decl.c:6884
+#: c/c-decl.c:6886
 #, gcc-internal-format
 msgid "parameter %u (%q+D) has incomplete type"
 msgstr ""
 
-#: c/c-decl.c:6888
+#: c/c-decl.c:6890
 #, gcc-internal-format, gfc-internal-format
 msgid "parameter %u has incomplete type"
 msgstr ""
 
-#: c/c-decl.c:6899
+#: c/c-decl.c:6901
 #, gcc-internal-format
 msgid "parameter %u (%q+D) has void type"
 msgstr ""
 
-#: c/c-decl.c:6903
+#: c/c-decl.c:6905
 #, gcc-internal-format, gfc-internal-format
 msgid "parameter %u has void type"
 msgstr ""
 
-#: c/c-decl.c:6986
+#: c/c-decl.c:6988
 #, gcc-internal-format
 msgid "%<void%> as only parameter may not be qualified"
 msgstr ""
 
-#: c/c-decl.c:6990 c/c-decl.c:7026
+#: c/c-decl.c:6992 c/c-decl.c:7028
 #, gcc-internal-format
 msgid "%<void%> must be the only parameter"
 msgstr ""
 
-#: c/c-decl.c:7020
+#: c/c-decl.c:7022
 #, gcc-internal-format
 msgid "parameter %q+D has just a forward declaration"
 msgstr ""
 
-#: c/c-decl.c:7066
+#: c/c-decl.c:7068
 #, gcc-internal-format
 msgid ""
 "%<%s %E%> declared inside parameter list will not be visible outside of this "
 "definition or declaration"
 msgstr ""
 
-#: c/c-decl.c:7072
+#: c/c-decl.c:7074
 #, 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.c:7174
+#: c/c-decl.c:7176
 #, gcc-internal-format
 msgid "enum type defined here"
 msgstr ""
 
-#: c/c-decl.c:7180
+#: c/c-decl.c:7182
 #, gcc-internal-format
 msgid "struct defined here"
 msgstr ""
 
-#: c/c-decl.c:7186
+#: c/c-decl.c:7188
 #, gcc-internal-format
 msgid "union defined here"
 msgstr ""
 
-#: c/c-decl.c:7259
+#: c/c-decl.c:7261
 #, gcc-internal-format
 msgid "redefinition of %<union %E%>"
 msgstr ""
 
-#: c/c-decl.c:7261
+#: c/c-decl.c:7263
 #, gcc-internal-format
 msgid "redefinition of %<struct %E%>"
 msgstr ""
 
-#: c/c-decl.c:7270
+#: c/c-decl.c:7272
 #, gcc-internal-format
 msgid "nested redefinition of %<union %E%>"
 msgstr ""
 
-#: c/c-decl.c:7272
+#: c/c-decl.c:7274
 #, gcc-internal-format
 msgid "nested redefinition of %<struct %E%>"
 msgstr ""
 
-#: c/c-decl.c:7305 c/c-decl.c:8021
+#: c/c-decl.c:7307 c/c-decl.c:8023
 #, gcc-internal-format
 msgid "defining type in %qs expression is invalid in C++"
 msgstr ""
 
-#: c/c-decl.c:7373 cp/decl.c:4608
+#: c/c-decl.c:7375 cp/decl.c:4616
 #, gcc-internal-format
 msgid "declaration does not declare anything"
 msgstr ""
 
-#: c/c-decl.c:7378
+#: c/c-decl.c:7380
 #, gcc-internal-format
 msgid "ISO C99 doesn%'t support unnamed structs/unions"
 msgstr ""
 
-#: c/c-decl.c:7381
+#: c/c-decl.c:7383
 #, gcc-internal-format
 msgid "ISO C90 doesn%'t support unnamed structs/unions"
 msgstr ""
 
-#: c/c-decl.c:7472 c/c-decl.c:7490 c/c-decl.c:7551
+#: c/c-decl.c:7474 c/c-decl.c:7492 c/c-decl.c:7553
 #, gcc-internal-format
 msgid "duplicate member %q+D"
 msgstr ""
 
-#: c/c-decl.c:7577
+#: c/c-decl.c:7579
 #, gcc-internal-format
 msgid "empty struct has size 0 in C, size 1 in C++"
 msgstr ""
 
-#: c/c-decl.c:7580
+#: c/c-decl.c:7582
 #, gcc-internal-format
 msgid "empty union has size 0 in C, size 1 in C++"
 msgstr ""
 
-#: c/c-decl.c:7666
+#: c/c-decl.c:7668
 #, gcc-internal-format
 msgid "union has no named members"
 msgstr ""
 
-#: c/c-decl.c:7668
+#: c/c-decl.c:7670
 #, gcc-internal-format
 msgid "union has no members"
 msgstr ""
 
-#: c/c-decl.c:7673
+#: c/c-decl.c:7675
 #, gcc-internal-format
 msgid "struct has no named members"
 msgstr ""
 
-#: c/c-decl.c:7675
+#: c/c-decl.c:7677
 #, gcc-internal-format
 msgid "struct has no members"
 msgstr ""
 
-#: c/c-decl.c:7737 cp/decl.c:11018
+#: c/c-decl.c:7739 cp/decl.c:11032
 #, gcc-internal-format
 msgid "flexible array member in union"
 msgstr ""
 
-#: c/c-decl.c:7743
+#: c/c-decl.c:7745
 #, gcc-internal-format
 msgid "flexible array member not at end of struct"
 msgstr ""
 
-#: c/c-decl.c:7749
+#: c/c-decl.c:7751
 #, gcc-internal-format
 msgid "flexible array member in otherwise empty struct"
 msgstr ""
 
-#: c/c-decl.c:7779
+#: c/c-decl.c:7781
 #, gcc-internal-format
 msgid "type %qT is too large"
 msgstr ""
 
-#: c/c-decl.c:7902
+#: c/c-decl.c:7904
 #, gcc-internal-format
 msgid "union cannot be made transparent"
 msgstr ""
 
-#: c/c-decl.c:7993
+#: c/c-decl.c:7995
 #, gcc-internal-format
 msgid "nested redefinition of %<enum %E%>"
 msgstr ""
 
 #. This enum is a named one that has been declared already.
-#: c/c-decl.c:8000
+#: c/c-decl.c:8002
 #, gcc-internal-format
 msgid "redeclaration of %<enum %E%>"
 msgstr ""
 
-#: c/c-decl.c:8079
+#: c/c-decl.c:8081 cp/decl.c:13403
 #, gcc-internal-format
 msgid "specified mode too small for enumeral values"
 msgstr ""
 
-#: c/c-decl.c:8094
+#: c/c-decl.c:8096
 #, gcc-internal-format
 msgid "enumeration values exceed range of largest integer"
 msgstr ""
 
-#: c/c-decl.c:8208 c/c-decl.c:8224
+#: c/c-decl.c:8210 c/c-decl.c:8226
 #, gcc-internal-format
 msgid "enumerator value for %qE is not an integer constant"
 msgstr ""
 
-#: c/c-decl.c:8219
+#: c/c-decl.c:8221
 #, gcc-internal-format
 msgid "enumerator value for %qE is not an integer constant expression"
 msgstr ""
 
-#: c/c-decl.c:8243
+#: c/c-decl.c:8245
 #, gcc-internal-format
 msgid "overflow in enumeration values"
 msgstr ""
 
-#: c/c-decl.c:8251
+#: c/c-decl.c:8253
 #, gcc-internal-format
 msgid "ISO C restricts enumerator values to range of %<int%>"
 msgstr ""
 
-#: c/c-decl.c:8337 cp/decl.c:4910 cp/decl.c:13873
+#: c/c-decl.c:8339 cp/decl.c:4918 cp/decl.c:13899
 #, gcc-internal-format
 msgid "inline function %qD given attribute noinline"
 msgstr ""
 
-#: c/c-decl.c:8355
+#: c/c-decl.c:8357
 #, gcc-internal-format
 msgid "return type is an incomplete type"
 msgstr ""
 
-#: c/c-decl.c:8366
+#: c/c-decl.c:8368
 #, gcc-internal-format
 msgid "return type defaults to %<int%>"
 msgstr ""
 
-#: c/c-decl.c:8392
+#: c/c-decl.c:8394
 #, gcc-internal-format
 msgid "%q+D defined as variadic function without prototype"
 msgstr ""
 
-#: c/c-decl.c:8451
+#: c/c-decl.c:8453
 #, gcc-internal-format
 msgid "no previous prototype for %qD"
 msgstr ""
 
-#: c/c-decl.c:8460
+#: c/c-decl.c:8462
 #, gcc-internal-format
 msgid "%qD was used with no prototype before its definition"
 msgstr ""
 
-#: c/c-decl.c:8468 cp/decl.c:14016
+#: c/c-decl.c:8470 cp/decl.c:14042
 #, gcc-internal-format
 msgid "no previous declaration for %qD"
 msgstr ""
 
-#: c/c-decl.c:8478
+#: c/c-decl.c:8480
 #, gcc-internal-format
 msgid "%qD was used with no declaration before its definition"
 msgstr ""
 
-#: c/c-decl.c:8497
+#: c/c-decl.c:8499
 #, gcc-internal-format
 msgid "return type of %qD is not %<int%>"
 msgstr ""
 
-#: c/c-decl.c:8499
+#: c/c-decl.c:8501
 #, gcc-internal-format
 msgid "%<_Atomic%>-qualified return type of %qD"
 msgstr ""
 
-#: c/c-decl.c:8506
+#: c/c-decl.c:8508
 #, gcc-internal-format
 msgid "%qD is normally a non-static function"
 msgstr ""
 
-#: c/c-decl.c:8543
+#: c/c-decl.c:8545
 #, gcc-internal-format
 msgid "old-style parameter declarations in prototyped function definition"
 msgstr ""
 
-#: c/c-decl.c:8558
+#: c/c-decl.c:8560
 #, gcc-internal-format
 msgid "traditional C rejects ISO C style function definitions"
 msgstr ""
 
-#: c/c-decl.c:8574
+#: c/c-decl.c:8576
 #, gcc-internal-format
 msgid "parameter name omitted"
 msgstr ""
 
-#: c/c-decl.c:8611
+#: c/c-decl.c:8613
 #, gcc-internal-format
 msgid "old-style function definition"
 msgstr ""
 
-#: c/c-decl.c:8620
+#: c/c-decl.c:8622
 #, gcc-internal-format
 msgid "parameter name missing from parameter list"
 msgstr ""
 
-#: c/c-decl.c:8635
+#: c/c-decl.c:8637
 #, gcc-internal-format
 msgid "%qD declared as a non-parameter"
 msgstr ""
 
-#: c/c-decl.c:8641
+#: c/c-decl.c:8643
 #, gcc-internal-format
 msgid "multiple parameters named %qD"
 msgstr ""
 
-#: c/c-decl.c:8650
+#: c/c-decl.c:8652
 #, gcc-internal-format
 msgid "parameter %qD declared with void type"
 msgstr ""
 
-#: c/c-decl.c:8679 c/c-decl.c:8684
+#: c/c-decl.c:8681 c/c-decl.c:8686
 #, gcc-internal-format
 msgid "type of %qD defaults to %<int%>"
 msgstr ""
 
-#: c/c-decl.c:8704
+#: c/c-decl.c:8706
 #, gcc-internal-format
 msgid "parameter %qD has incomplete type"
 msgstr ""
 
-#: c/c-decl.c:8711
+#: c/c-decl.c:8713
 #, gcc-internal-format
 msgid "declaration for parameter %qD but no such parameter"
 msgstr ""
 
-#: c/c-decl.c:8761
+#: c/c-decl.c:8763
 #, gcc-internal-format
 msgid "number of arguments doesn%'t match built-in prototype"
 msgstr ""
 
-#: c/c-decl.c:8772
+#: c/c-decl.c:8774
 #, gcc-internal-format
 msgid "number of arguments doesn%'t match prototype"
 msgstr ""
 
-#: c/c-decl.c:8775 c/c-decl.c:8822 c/c-decl.c:8836
+#: c/c-decl.c:8777 c/c-decl.c:8824 c/c-decl.c:8838
 #, gcc-internal-format
 msgid "prototype declaration"
 msgstr ""
 
-#: c/c-decl.c:8814
+#: c/c-decl.c:8816
 #, gcc-internal-format
 msgid "promoted argument %qD doesn%'t match built-in prototype"
 msgstr ""
 
-#: c/c-decl.c:8819
+#: c/c-decl.c:8821
 #, gcc-internal-format
 msgid "promoted argument %qD doesn%'t match prototype"
 msgstr ""
 
-#: c/c-decl.c:8829
+#: c/c-decl.c:8831
 #, gcc-internal-format
 msgid "argument %qD doesn%'t match built-in prototype"
 msgstr ""
 
-#: c/c-decl.c:8834
+#: c/c-decl.c:8836
 #, gcc-internal-format
 msgid "argument %qD doesn%'t match prototype"
 msgstr ""
 
-#: c/c-decl.c:9091 cp/decl.c:14770
+#: c/c-decl.c:9093 cp/decl.c:14796
 #, gcc-internal-format
 msgid "no return statement in function returning non-void"
 msgstr ""
 
-#: c/c-decl.c:9111 cp/decl.c:14802
+#: c/c-decl.c:9113 cp/decl.c:14828
 #, gcc-internal-format
 msgid "parameter %qD set but not used"
 msgstr ""
@@ -32511,228 +32561,228 @@ msgstr ""
 #. If we get here, declarations have been used in a for loop without
 #. the C99 for loop scope.  This doesn't make much sense, so don't
 #. allow it.
-#: c/c-decl.c:9205
+#: c/c-decl.c:9207
 #, gcc-internal-format
 msgid "%<for%> loop initial declarations are only allowed in C99 or C11 mode"
 msgstr ""
 
-#: c/c-decl.c:9210
+#: c/c-decl.c:9212
 #, gcc-internal-format
 msgid ""
 "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code"
 msgstr ""
 
-#: c/c-decl.c:9245
+#: c/c-decl.c:9247
 #, gcc-internal-format
 msgid "declaration of static variable %qD in %<for%> loop initial declaration"
 msgstr ""
 
-#: c/c-decl.c:9249
+#: c/c-decl.c:9251
 #, gcc-internal-format
 msgid ""
 "declaration of %<extern%> variable %qD in %<for%> loop initial declaration"
 msgstr ""
 
-#: c/c-decl.c:9256
+#: c/c-decl.c:9258
 #, gcc-internal-format
 msgid "%<struct %E%> declared in %<for%> loop initial declaration"
 msgstr ""
 
-#: c/c-decl.c:9261
+#: c/c-decl.c:9263
 #, gcc-internal-format
 msgid "%<union %E%> declared in %<for%> loop initial declaration"
 msgstr ""
 
-#: c/c-decl.c:9265
+#: c/c-decl.c:9267
 #, gcc-internal-format
 msgid "%<enum %E%> declared in %<for%> loop initial declaration"
 msgstr ""
 
-#: c/c-decl.c:9269
+#: c/c-decl.c:9271
 #, gcc-internal-format
 msgid "declaration of non-variable %qD in %<for%> loop initial declaration"
 msgstr ""
 
-#: c/c-decl.c:9517
+#: c/c-decl.c:9519
 #, gcc-internal-format
 msgid "incompatible address space qualifiers %qs and %qs"
 msgstr ""
 
-#: c/c-decl.c:9567 c/c-decl.c:9924 c/c-decl.c:10414
+#: c/c-decl.c:9569 c/c-decl.c:9926 c/c-decl.c:10416
 #, gcc-internal-format
 msgid "duplicate %qE"
 msgstr ""
 
-#: c/c-decl.c:9593 c/c-decl.c:9936 c/c-decl.c:10257
+#: c/c-decl.c:9595 c/c-decl.c:9938 c/c-decl.c:10259
 #, gcc-internal-format
 msgid "two or more data types in declaration specifiers"
 msgstr ""
 
-#: c/c-decl.c:9605 cp/parser.c:26733
+#: c/c-decl.c:9607 cp/parser.c:26808
 #, gcc-internal-format
 msgid "%<long long long%> is too long for GCC"
 msgstr ""
 
-#: c/c-decl.c:9618
+#: c/c-decl.c:9620
 #, gcc-internal-format
 msgid "ISO C90 does not support %<long long%>"
 msgstr ""
 
-#: c/c-decl.c:9815 c/c-parser.c:7943
+#: c/c-decl.c:9817 c/c-parser.c:7943
 #, gcc-internal-format
 msgid "ISO C90 does not support complex types"
 msgstr ""
 
-#: c/c-decl.c:9861
+#: c/c-decl.c:9863
 #, gcc-internal-format
 msgid "ISO C does not support saturating types"
 msgstr ""
 
-#: c/c-decl.c:9979
+#: c/c-decl.c:9981
 #, gcc-internal-format
 msgid "ISO C does not support %<__int%d%> types"
 msgstr ""
 
-#: c/c-decl.c:9999
+#: c/c-decl.c:10001
 #, gcc-internal-format
 msgid "%<__int%d%> is not supported on this target"
 msgstr ""
 
-#: c/c-decl.c:10041
+#: c/c-decl.c:10043
 #, gcc-internal-format
 msgid "ISO C90 does not support boolean types"
 msgstr ""
 
-#: c/c-decl.c:10215
+#: c/c-decl.c:10217
 #, gcc-internal-format
 msgid "ISO C does not support decimal floating point"
 msgstr ""
 
-#: c/c-decl.c:10238 c/c-decl.c:10504 c/c-parser.c:7446
+#: c/c-decl.c:10240 c/c-decl.c:10506 c/c-parser.c:7446
 #, gcc-internal-format
 msgid "fixed-point types not supported for this target"
 msgstr ""
 
-#: c/c-decl.c:10240
+#: c/c-decl.c:10242
 #, gcc-internal-format
 msgid "ISO C does not support fixed-point types"
 msgstr ""
 
-#: c/c-decl.c:10275
+#: c/c-decl.c:10277
 #, gcc-internal-format
 msgid "C++ lookup of %qD would return a field, not a type"
 msgstr ""
 
-#: c/c-decl.c:10288
+#: c/c-decl.c:10290
 #, gcc-internal-format
 msgid "%qE fails to be a typedef or built in type"
 msgstr ""
 
-#: c/c-decl.c:10336
+#: c/c-decl.c:10338
 #, gcc-internal-format
 msgid "%qE is not at beginning of declaration"
 msgstr ""
 
-#: c/c-decl.c:10357
+#: c/c-decl.c:10359
 #, gcc-internal-format
 msgid "%qE used with %<auto%>"
 msgstr ""
 
-#: c/c-decl.c:10359
+#: c/c-decl.c:10361
 #, gcc-internal-format
 msgid "%qE used with %<register%>"
 msgstr ""
 
-#: c/c-decl.c:10361
+#: c/c-decl.c:10363
 #, gcc-internal-format
 msgid "%qE used with %<typedef%>"
 msgstr ""
 
-#: c/c-decl.c:10375 c/c-parser.c:7023
+#: c/c-decl.c:10377 c/c-parser.c:7023
 #, gcc-internal-format
 msgid "ISO C99 does not support %qE"
 msgstr ""
 
-#: c/c-decl.c:10378 c/c-parser.c:7026
+#: c/c-decl.c:10380 c/c-parser.c:7026
 #, gcc-internal-format
 msgid "ISO C90 does not support %qE"
 msgstr ""
 
-#: c/c-decl.c:10390
+#: c/c-decl.c:10392
 #, gcc-internal-format
 msgid "%<__thread%> before %<extern%>"
 msgstr ""
 
-#: c/c-decl.c:10399
+#: c/c-decl.c:10401
 #, gcc-internal-format
 msgid "%<__thread%> before %<static%>"
 msgstr ""
 
-#: c/c-decl.c:10412
+#: c/c-decl.c:10414
 #, gcc-internal-format
 msgid "duplicate %<_Thread_local%> or %<__thread%>"
 msgstr ""
 
-#: c/c-decl.c:10420
+#: c/c-decl.c:10422
 #, gcc-internal-format
 msgid "multiple storage classes in declaration specifiers"
 msgstr ""
 
-#: c/c-decl.c:10428
+#: c/c-decl.c:10430
 #, gcc-internal-format
 msgid "%qs used with %qE"
 msgstr ""
 
-#: c/c-decl.c:10501
+#: c/c-decl.c:10503
 #, gcc-internal-format
 msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>"
 msgstr ""
 
-#: c/c-decl.c:10516
+#: c/c-decl.c:10518
 #, gcc-internal-format
 msgid "ISO C does not support plain %<complex%> meaning %<double complex%>"
 msgstr ""
 
-#: c/c-decl.c:10567 c/c-decl.c:10580 c/c-decl.c:10606
+#: c/c-decl.c:10569 c/c-decl.c:10582 c/c-decl.c:10608
 #, gcc-internal-format
 msgid "ISO C does not support complex integer types"
 msgstr ""
 
-#: c/c-decl.c:11004 cp/semantics.c:5300
+#: c/c-decl.c:11006 cp/semantics.c:5297
 #, 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.c:11008 cp/semantics.c:5304
+#: c/c-decl.c:11010 cp/semantics.c:5301
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare reduction%> initializer refers to variable %qD which "
 "is not %<omp_priv%> nor %<omp_orig%>"
 msgstr ""
 
-#: c/c-fold.c:319 c/c-typeck.c:10981 cp/typeck.c:4465
+#: c/c-fold.c:319 c/c-typeck.c:10988 cp/typeck.c:4465
 #, gcc-internal-format
 msgid "left shift of negative value"
 msgstr ""
 
-#: c/c-fold.c:331 c/c-typeck.c:10990 cp/typeck.c:4473
+#: c/c-fold.c:331 c/c-typeck.c:10997 cp/typeck.c:4473
 #, gcc-internal-format
 msgid "left shift count is negative"
 msgstr ""
 
-#: c/c-fold.c:332 c/c-typeck.c:10929 cp/typeck.c:4419
+#: c/c-fold.c:332 c/c-typeck.c:10936 cp/typeck.c:4419
 #, gcc-internal-format
 msgid "right shift count is negative"
 msgstr ""
 
-#: c/c-fold.c:338 c/c-typeck.c:10997 cp/typeck.c:4481
+#: c/c-fold.c:338 c/c-typeck.c:11004 cp/typeck.c:4481
 #, gcc-internal-format
 msgid "left shift count >= width of type"
 msgstr ""
 
-#: c/c-fold.c:339 c/c-typeck.c:10941 cp/typeck.c:4427
+#: c/c-fold.c:339 c/c-typeck.c:10948 cp/typeck.c:4427
 #, gcc-internal-format
 msgid "right shift count >= width of type"
 msgstr ""
@@ -32747,7 +32797,7 @@ msgstr ""
 msgid "version control conflict marker in file"
 msgstr ""
 
-#: c/c-parser.c:1086 cp/parser.c:26940
+#: c/c-parser.c:1086 cp/parser.c:27015
 #, gcc-internal-format
 msgid "expected end of line"
 msgstr ""
@@ -32782,8 +32832,8 @@ msgstr ""
 msgid "use %<enum%> keyword to refer to the type"
 msgstr ""
 
-#: c/c-parser.c:1686 c/c-parser.c:10203 c/c-parser.c:15197 c/c-parser.c:16092
-#: cp/parser.c:33989 cp/parser.c:34887 cp/parser.c:37412
+#: c/c-parser.c:1686 c/c-parser.c:10203 c/c-parser.c:15182 c/c-parser.c:16077
+#: cp/parser.c:34050 cp/parser.c:34949 cp/parser.c:37474
 #, gcc-internal-format
 msgid "expected declaration specifiers"
 msgstr ""
@@ -32798,7 +32848,7 @@ msgstr ""
 msgid "expected %<;%>, identifier or %<(%>"
 msgstr ""
 
-#: c/c-parser.c:1735 cp/parser.c:28588 cp/parser.c:28662
+#: c/c-parser.c:1735 cp/parser.c:28663 cp/parser.c:28737
 #, gcc-internal-format
 msgid "prefix attributes are ignored for methods"
 msgstr ""
@@ -32847,7 +32897,7 @@ msgstr ""
 msgid "%<__auto_type%> may only be used with a single declarator"
 msgstr ""
 
-#: c/c-parser.c:2036 cp/parser.c:12447
+#: c/c-parser.c:2036 cp/parser.c:12465
 #, gcc-internal-format
 msgid "expected %<,%> or %<;%>"
 msgstr ""
@@ -32875,7 +32925,7 @@ msgstr ""
 msgid "ISO C90 does not support %<_Static_assert%>"
 msgstr ""
 
-#: c/c-parser.c:2209 c/c-parser.c:3877 c/c-parser.c:10261 cp/parser.c:37117
+#: c/c-parser.c:2209 c/c-parser.c:3877 c/c-parser.c:10261 cp/parser.c:37179
 #, gcc-internal-format
 msgid "expected string literal"
 msgstr ""
@@ -32937,15 +32987,15 @@ msgstr ""
 #: c/c-parser.c:8877 c/c-parser.c:8885 c/c-parser.c:8914 c/c-parser.c:8927
 #: c/c-parser.c:9232 c/c-parser.c:9356 c/c-parser.c:9796 c/c-parser.c:9831
 #: c/c-parser.c:9884 c/c-parser.c:9937 c/c-parser.c:9953 c/c-parser.c:9999
-#: c/c-parser.c:10575 c/c-parser.c:10614 c/c-parser.c:12563 c/c-parser.c:12797
-#: c/c-parser.c:14596 c/c-parser.c:17371 c/c-parser.c:17700 cp/parser.c:26943
-#: cp/parser.c:29431 cp/parser.c:29461 cp/parser.c:29531 cp/parser.c:31642
-#: cp/parser.c:36831 cp/parser.c:37556
+#: c/c-parser.c:10575 c/c-parser.c:10616 c/c-parser.c:12546 c/c-parser.c:12780
+#: c/c-parser.c:14579 c/c-parser.c:17356 c/c-parser.c:17685 cp/parser.c:27018
+#: cp/parser.c:29506 cp/parser.c:29536 cp/parser.c:29606 cp/parser.c:31701
+#: cp/parser.c:36893 cp/parser.c:37618
 #, gcc-internal-format
 msgid "expected identifier"
 msgstr ""
 
-#: c/c-parser.c:2745 cp/parser.c:17358
+#: c/c-parser.c:2745 cp/parser.c:17380
 #, gcc-internal-format
 msgid "comma at end of enumerator list"
 msgstr ""
@@ -33080,7 +33130,7 @@ msgstr ""
 msgid "expected %<}%> before %<else%>"
 msgstr ""
 
-#: c/c-parser.c:4847 cp/parser.c:10801
+#: c/c-parser.c:4847 cp/parser.c:10803
 #, gcc-internal-format
 msgid "%<else%> without a previous %<if%>"
 msgstr ""
@@ -33101,12 +33151,12 @@ msgid ""
 "a label can only be part of a statement and a declaration is not a statement"
 msgstr ""
 
-#: c/c-parser.c:5156 cp/parser.c:10402
+#: c/c-parser.c:5156 cp/parser.c:10404
 #, gcc-internal-format
 msgid "-fcilkplus must be enabled to use %<_Cilk_for%>"
 msgstr ""
 
-#: c/c-parser.c:5166 cp/parser.c:10428
+#: c/c-parser.c:5166 cp/parser.c:10430
 #, gcc-internal-format
 msgid "-fcilkplus must be enabled to use %<_Cilk_sync%>"
 msgstr ""
@@ -33120,17 +33170,17 @@ msgstr ""
 #. c_parser_skip_until_found stops at a closing nesting
 #. delimiter without consuming it, but here we need to consume
 #. it to proceed further.
-#: c/c-parser.c:5276 cp/parser.c:10506
+#: c/c-parser.c:5276 cp/parser.c:10508
 #, gcc-internal-format
 msgid "expected statement"
 msgstr ""
 
-#: c/c-parser.c:5380 cp/parser.c:11907
+#: c/c-parser.c:5380 cp/parser.c:11918
 #, gcc-internal-format
 msgid "suggest braces around empty body in an %<if%> statement"
 msgstr ""
 
-#: c/c-parser.c:5414 cp/parser.c:11910
+#: c/c-parser.c:5414 cp/parser.c:11921
 #, gcc-internal-format
 msgid "suggest braces around empty body in an %<else%> statement"
 msgstr ""
@@ -33140,7 +33190,7 @@ msgstr ""
 msgid "if statement cannot contain %<Cilk_spawn%>"
 msgstr ""
 
-#: c/c-parser.c:5509 cp/parser.c:10955
+#: c/c-parser.c:5509 cp/parser.c:10957
 #, gcc-internal-format
 msgid "suggest explicit braces to avoid ambiguous %<else%>"
 msgstr ""
@@ -33160,7 +33210,7 @@ msgstr ""
 msgid "invalid iterating variable in fast enumeration"
 msgstr ""
 
-#: c/c-parser.c:5852 cp/parser.c:11156
+#: c/c-parser.c:5852 cp/parser.c:11158
 #, gcc-internal-format
 msgid "missing loop condition in loop with %<GCC ivdep%> pragma"
 msgstr ""
@@ -33407,32 +33457,32 @@ msgstr ""
 msgid "no type or storage class may be specified here,"
 msgstr ""
 
-#: c/c-parser.c:9800 c/c-parser.c:9857 cp/parser.c:29491
+#: c/c-parser.c:9800 c/c-parser.c:9857 cp/parser.c:29566
 #, gcc-internal-format
 msgid "unknown property attribute"
 msgstr ""
 
-#: c/c-parser.c:9821 cp/parser.c:29451
+#: c/c-parser.c:9821 cp/parser.c:29526
 #, gcc-internal-format
 msgid "missing %<=%> (after %<getter%> attribute)"
 msgstr ""
 
-#: c/c-parser.c:9824 cp/parser.c:29454
+#: c/c-parser.c:9824 cp/parser.c:29529
 #, gcc-internal-format
 msgid "missing %<=%> (after %<setter%> attribute)"
 msgstr ""
 
-#: c/c-parser.c:9838 cp/parser.c:29469
+#: c/c-parser.c:9838 cp/parser.c:29544
 #, gcc-internal-format
 msgid "the %<setter%> attribute may only be specified once"
 msgstr ""
 
-#: c/c-parser.c:9843 cp/parser.c:29475
+#: c/c-parser.c:9843 cp/parser.c:29550
 #, gcc-internal-format
 msgid "setter name must terminate with %<:%>"
 msgstr ""
 
-#: c/c-parser.c:9850 cp/parser.c:29483
+#: c/c-parser.c:9850 cp/parser.c:29558
 #, gcc-internal-format
 msgid "the %<getter%> attribute may only be specified once"
 msgstr ""
@@ -33442,50 +33492,50 @@ msgstr ""
 msgid "%<#pragma acc update%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10063 cp/parser.c:37195
+#: c/c-parser.c:10063 cp/parser.c:37257
 #, gcc-internal-format
 msgid "%<#pragma omp barrier%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10074 cp/parser.c:37210
+#: c/c-parser.c:10074 cp/parser.c:37272
 #, gcc-internal-format
 msgid "%<#pragma omp flush%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10085 cp/parser.c:37226
+#: c/c-parser.c:10085 cp/parser.c:37288
 #, gcc-internal-format
 msgid "%<#pragma omp taskwait%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10096 cp/parser.c:37242
+#: c/c-parser.c:10096 cp/parser.c:37304
 #, gcc-internal-format
 msgid "%<#pragma omp taskyield%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10107 cp/parser.c:37258
+#: c/c-parser.c:10107 cp/parser.c:37320
 #, gcc-internal-format
 msgid "%<#pragma omp cancel%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10118 cp/parser.c:37274
+#: c/c-parser.c:10118 cp/parser.c:37336
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp cancellation point%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:10138 cp/parser.c:37347
+#: c/c-parser.c:10138 cp/parser.c:37409
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp section%> may only be used in %<#pragma omp sections%> "
 "construct"
 msgstr ""
 
-#: c/c-parser.c:10157 cp/parser.c:37366
+#: c/c-parser.c:10157 cp/parser.c:37428
 #, gcc-internal-format
 msgid "for, while or do statement expected"
 msgstr ""
 
-#: c/c-parser.c:10169 cp/parser.c:37185
+#: c/c-parser.c:10169 cp/parser.c:37247
 #, gcc-internal-format
 msgid "%<#pragma GCC pch_preprocess%> must be first"
 msgstr ""
@@ -33500,12 +33550,12 @@ msgstr ""
 msgid "%<#pragma grainsize%> must be inside a function"
 msgstr ""
 
-#: c/c-parser.c:10501 cp/parser.c:29881
+#: c/c-parser.c:10501 cp/parser.c:29956
 #, gcc-internal-format
 msgid "too many %qs clauses"
 msgstr ""
 
-#: c/c-parser.c:10522 cp/parser.c:30426
+#: c/c-parser.c:10522 cp/parser.c:30485
 #, gcc-internal-format
 msgid "expected integer expression before ')'"
 msgstr ""
@@ -33515,734 +33565,729 @@ msgstr ""
 msgid "expression must be integral"
 msgstr ""
 
-#: c/c-parser.c:10666 c/c-parser.c:10674 cp/parser.c:30009 cp/parser.c:30017
-#, gcc-internal-format
-msgid "%qD is not a constant"
-msgstr ""
-
-#: c/c-parser.c:10826 c/c-parser.c:17232
+#: c/c-parser.c:10809 c/c-parser.c:17217
 #, gcc-internal-format
 msgid "%qD is not a variable"
 msgstr ""
 
-#: c/c-parser.c:10830 cp/semantics.c:6715
+#: c/c-parser.c:10813 cp/semantics.c:6719
 #, gcc-internal-format
 msgid "%qD is not a pointer variable"
 msgstr ""
 
-#: c/c-parser.c:10870 cp/parser.c:30504
+#: c/c-parser.c:10853 cp/parser.c:30563
 #, gcc-internal-format
 msgid "collapse argument needs positive constant integer expression"
 msgstr ""
 
-#: c/c-parser.c:10940 cp/parser.c:30560
+#: c/c-parser.c:10923 cp/parser.c:30619
 #, gcc-internal-format
 msgid "expected %<none%>"
 msgstr ""
 
-#: c/c-parser.c:10942 cp/parser.c:30562
+#: c/c-parser.c:10925 cp/parser.c:30621
 #, gcc-internal-format
 msgid "expected %<none%> or %<shared%>"
 msgstr ""
 
-#: c/c-parser.c:11042 cp/parser.c:30662
+#: c/c-parser.c:11025 cp/parser.c:30721
 #, gcc-internal-format
 msgid "expected %<data%>, %<update%>, %<enter%> or %<exit%>"
 msgstr ""
 
-#: c/c-parser.c:11062 c/c-parser.c:15921 c/c-parser.c:16006 cp/parser.c:30680
-#: cp/parser.c:34671 cp/parser.c:34759
+#: c/c-parser.c:11045 c/c-parser.c:15906 c/c-parser.c:15991 cp/parser.c:30739
+#: cp/parser.c:34733 cp/parser.c:34821
 #, gcc-internal-format
 msgid "expected %<data%>"
 msgstr ""
 
-#: c/c-parser.c:11109 cp/parser.c:30733
+#: c/c-parser.c:11092 cp/parser.c:30792
 #, gcc-internal-format
 msgid "too many %<if%> clauses with %qs modifier"
 msgstr ""
 
-#: c/c-parser.c:11116 cp/parser.c:30740
+#: c/c-parser.c:11099 cp/parser.c:30799
 #, gcc-internal-format
 msgid "too many %<if%> clauses"
 msgstr ""
 
-#: c/c-parser.c:11118 cp/parser.c:30742
+#: c/c-parser.c:11101 cp/parser.c:30801
 #, gcc-internal-format
 msgid "too many %<if%> clauses without modifier"
 msgstr ""
 
-#: c/c-parser.c:11124 cp/parser.c:30748
+#: c/c-parser.c:11107 cp/parser.c:30807
 #, gcc-internal-format
 msgid ""
 "if any %<if%> clause has modifier, then all %<if%> clauses have to use "
 "modifier"
 msgstr ""
 
-#: c/c-parser.c:11198 c/c-parser.c:11242 c/c-parser.c:11286 c/c-parser.c:11330
-#: c/c-parser.c:11374 c/c-parser.c:11418 c/c-parser.c:11522 c/c-parser.c:11648
-#: c/c-parser.c:11729 c/c-parser.c:12127 c/c-parser.c:12194 c/c-parser.c:12297
-#: c/c-parser.c:12340 c/c-parser.c:12849
+#: c/c-parser.c:11181 c/c-parser.c:11225 c/c-parser.c:11269 c/c-parser.c:11313
+#: c/c-parser.c:11357 c/c-parser.c:11401 c/c-parser.c:11505 c/c-parser.c:11631
+#: c/c-parser.c:11712 c/c-parser.c:12110 c/c-parser.c:12177 c/c-parser.c:12280
+#: c/c-parser.c:12323 c/c-parser.c:12832
 #, gcc-internal-format
 msgid "expected integer expression"
 msgstr ""
 
-#: c/c-parser.c:11209
+#: c/c-parser.c:11192
 #, gcc-internal-format
 msgid "%<num_gangs%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11253
+#: c/c-parser.c:11236
 #, gcc-internal-format
 msgid "%<num_threads%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11297
+#: c/c-parser.c:11280
 #, gcc-internal-format
 msgid "%<num_tasks%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11341 cp/semantics.c:6891
+#: c/c-parser.c:11324 cp/semantics.c:6895
 #, gcc-internal-format
 msgid "%<grainsize%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11386 cp/semantics.c:6920
+#: c/c-parser.c:11369 cp/semantics.c:6924
 #, gcc-internal-format
 msgid "%<priority%> value must be non-negative"
 msgstr ""
 
-#: c/c-parser.c:11447 c/c-parser.c:11453 cp/parser.c:30959 cp/parser.c:30966
+#: c/c-parser.c:11430 c/c-parser.c:11436 cp/parser.c:31018 cp/parser.c:31025
 #, gcc-internal-format
 msgid "expected %<tofrom%>"
 msgstr ""
 
-#: c/c-parser.c:11461 c/c-parser.c:11467 cp/parser.c:30975 cp/parser.c:30982
+#: c/c-parser.c:11444 c/c-parser.c:11450 cp/parser.c:31034 cp/parser.c:31041
 #, gcc-internal-format
 msgid "expected %<scalar%>"
 msgstr ""
 
-#: c/c-parser.c:11533
+#: c/c-parser.c:11516
 #, gcc-internal-format
 msgid "%<num_workers%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11597 cp/parser.c:30288
+#: c/c-parser.c:11580 cp/parser.c:30347
 #, gcc-internal-format
 msgid "too many %<static%> arguments"
 msgstr ""
 
-#: c/c-parser.c:11631 cp/parser.c:30321
+#: c/c-parser.c:11614 cp/parser.c:30380
 #, gcc-internal-format
 msgid "unexpected argument"
 msgstr ""
 
-#: c/c-parser.c:11657
+#: c/c-parser.c:11640
 #, gcc-internal-format
 msgid "%<%s%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11786 cp/semantics.c:7004
+#: c/c-parser.c:11769 cp/semantics.c:7008
 #, gcc-internal-format
 msgid "%<tile%> value must be integral"
 msgstr ""
 
-#: c/c-parser.c:11799 cp/semantics.c:7018
+#: c/c-parser.c:11782 cp/semantics.c:7022
 #, gcc-internal-format
 msgid "%<tile%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:11865 cp/parser.c:31039
+#: c/c-parser.c:11848 cp/parser.c:31098
 #, gcc-internal-format
 msgid "ordered argument needs positive constant integer expression"
 msgstr ""
 
-#: c/c-parser.c:11956
+#: c/c-parser.c:11939
 #, gcc-internal-format
 msgid ""
 "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> "
 "or %<max%>"
 msgstr ""
 
-#: c/c-parser.c:12065 cp/parser.c:31252
+#: c/c-parser.c:12048 cp/parser.c:31311
 #, gcc-internal-format
 msgid "both %<monotonic%> and %<nonmonotonic%> modifiers specified"
 msgstr ""
 
-#: c/c-parser.c:12118 cp/parser.c:31268
+#: c/c-parser.c:12101 cp/parser.c:31327
 #, gcc-internal-format
 msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter"
 msgstr ""
 
-#: c/c-parser.c:12122 cp/parser.c:31271
+#: c/c-parser.c:12105 cp/parser.c:31330
 #, gcc-internal-format
 msgid "schedule %<auto%> does not take a %<chunk_size%> parameter"
 msgstr ""
 
-#: c/c-parser.c:12144 cp/parser.c:31291
+#: c/c-parser.c:12127 cp/parser.c:31350
 #, gcc-internal-format
 msgid "invalid schedule kind"
 msgstr ""
 
-#: c/c-parser.c:12205
+#: c/c-parser.c:12188
 #, gcc-internal-format
 msgid "%<vector_length%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:12307
+#: c/c-parser.c:12290
 #, gcc-internal-format
 msgid "%<num_teams%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:12350 cp/semantics.c:6395
+#: c/c-parser.c:12333 cp/semantics.c:6393
 #, gcc-internal-format
 msgid "%<thread_limit%> value must be positive"
 msgstr ""
 
-#: c/c-parser.c:12392 cp/semantics.c:6505
+#: c/c-parser.c:12375 cp/semantics.c:6503
 #, gcc-internal-format
 msgid ""
 "%<aligned%> clause alignment expression must be positive constant integer "
 "expression"
 msgstr ""
 
-#: c/c-parser.c:12453 cp/parser.c:31549
+#: c/c-parser.c:12436 cp/parser.c:31608
 #, gcc-internal-format
 msgid "using parameters for %<linear%> step is not supported yet"
 msgstr ""
 
-#: c/c-parser.c:12458
+#: c/c-parser.c:12441
 #, gcc-internal-format
 msgid "%<linear%> clause step expression must be integral"
 msgstr ""
 
-#: c/c-parser.c:12496
+#: c/c-parser.c:12479
 #, gcc-internal-format
 msgid ""
 "%<safelen%> clause expression must be positive constant integer expression"
 msgstr ""
 
-#: c/c-parser.c:12532
+#: c/c-parser.c:12515
 #, gcc-internal-format
 msgid ""
 "%<simdlen%> clause expression must be positive constant integer expression"
 msgstr ""
 
-#: c/c-parser.c:12701 cp/parser.c:31785 cp/parser.c:32008
+#: c/c-parser.c:12684 cp/parser.c:31844 cp/parser.c:32067
 #, gcc-internal-format
 msgid "invalid depend kind"
 msgstr ""
 
-#: c/c-parser.c:12785 cp/parser.c:31858
+#: c/c-parser.c:12768 cp/parser.c:31917
 #, gcc-internal-format
 msgid "invalid map kind"
 msgstr ""
 
-#: c/c-parser.c:12879 cp/parser.c:31955
+#: c/c-parser.c:12862 cp/parser.c:32014
 #, gcc-internal-format
 msgid "invalid dist_schedule kind"
 msgstr ""
 
-#: c/c-parser.c:12948
+#: c/c-parser.c:12931
 #, gcc-internal-format
 msgid "invalid proc_bind kind"
 msgstr ""
 
-#: c/c-parser.c:13161 cp/parser.c:32233
+#: c/c-parser.c:13144 cp/parser.c:32292
 #, gcc-internal-format
 msgid "expected %<#pragma acc%> clause"
 msgstr ""
 
-#: c/c-parser.c:13172 c/c-parser.c:13455 cp/parser.c:32244 cp/parser.c:32560
+#: c/c-parser.c:13155 c/c-parser.c:13438 cp/parser.c:32303 cp/parser.c:32619
 #, gcc-internal-format
 msgid "%qs is not valid for %qs"
 msgstr ""
 
-#: c/c-parser.c:13318 cp/parser.c:32420
+#: c/c-parser.c:13301 cp/parser.c:32479
 #, gcc-internal-format
 msgid "%qs must be the first clause of %qs"
 msgstr ""
 
-#: c/c-parser.c:13444 cp/parser.c:32549
+#: c/c-parser.c:13427 cp/parser.c:32608
 #, gcc-internal-format
 msgid "expected %<#pragma omp%> clause"
 msgstr ""
 
-#: c/c-parser.c:13582 cp/parser.c:35185
+#: c/c-parser.c:13565 cp/parser.c:35247
 #, gcc-internal-format
 msgid "no valid clauses specified in %<#pragma acc declare%>"
 msgstr ""
 
-#: c/c-parser.c:13592 cp/parser.c:35195
+#: c/c-parser.c:13575 cp/parser.c:35257
 #, gcc-internal-format
 msgid "array section in %<#pragma acc declare%>"
 msgstr ""
 
-#: c/c-parser.c:13616 cp/parser.c:35219
+#: c/c-parser.c:13599 cp/parser.c:35281
 #, gcc-internal-format
 msgid "%qD must be a global variable in%<#pragma acc declare link%>"
 msgstr ""
 
-#: c/c-parser.c:13627 cp/parser.c:35230
+#: c/c-parser.c:13610 cp/parser.c:35292
 #, gcc-internal-format
 msgid "invalid OpenACC clause at file scope"
 msgstr ""
 
-#: c/c-parser.c:13634 cp/parser.c:35237
+#: c/c-parser.c:13617 cp/parser.c:35299
 #, gcc-internal-format
 msgid "invalid use of %<extern%> variable %qD in %<#pragma acc declare%>"
 msgstr ""
 
-#: c/c-parser.c:13642 cp/parser.c:35245
+#: c/c-parser.c:13625 cp/parser.c:35307
 #, gcc-internal-format
 msgid "invalid use of %<global%> variable %qD in %<#pragma acc declare%>"
 msgstr ""
 
-#: c/c-parser.c:13654 cp/parser.c:35257
+#: c/c-parser.c:13637 cp/parser.c:35319
 #, gcc-internal-format
 msgid "variable %qD used more than once with %<#pragma acc declare%>"
 msgstr ""
 
-#: c/c-parser.c:13740 cp/parser.c:35340
+#: c/c-parser.c:13723 cp/parser.c:35402
 #, gcc-internal-format
 msgid "expected %<data%> in %<#pragma acc enter data%>"
 msgstr ""
 
-#: c/c-parser.c:13749 cp/parser.c:35350
+#: c/c-parser.c:13732 cp/parser.c:35412
 #, gcc-internal-format
 msgid "invalid pragma"
 msgstr ""
 
-#: c/c-parser.c:13766 cp/parser.c:35367
+#: c/c-parser.c:13749 cp/parser.c:35429
 #, gcc-internal-format
 msgid "%<#pragma acc enter data%> has no data movement clause"
 msgstr ""
 
-#: c/c-parser.c:13970 cp/parser.c:36451
+#: c/c-parser.c:13953 cp/parser.c:36513
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> not at file scope"
 msgstr ""
 
-#: c/c-parser.c:13987 cp/parser.c:2829
+#: c/c-parser.c:13970 cp/parser.c:2829
 #, gcc-internal-format
 msgid "%qE has not been declared"
 msgstr ""
 
-#: c/c-parser.c:13993
+#: c/c-parser.c:13976
 #, gcc-internal-format
 msgid "expected function name"
 msgstr ""
 
-#: c/c-parser.c:14032
+#: c/c-parser.c:14015
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> %s"
 msgstr ""
 
-#: c/c-parser.c:14039 cp/parser.c:36664
+#: c/c-parser.c:14022 cp/parser.c:36726
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> already applied to %D"
 msgstr ""
 
-#: c/c-parser.c:14042 cp/parser.c:36671
+#: c/c-parser.c:14025 cp/parser.c:36733
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> must be applied before %s"
 msgstr ""
 
-#: c/c-parser.c:14079 cp/parser.c:35541
+#: c/c-parser.c:14062 cp/parser.c:35603
 #, gcc-internal-format
 msgid ""
 "%<#pragma acc update%> must contain at least one %<device%> or %<host%> or "
 "%<self%> clause"
 msgstr ""
 
-#: c/c-parser.c:14487 cp/parser.c:32931 cp/parser.c:32957
+#: c/c-parser.c:14470 cp/parser.c:32990 cp/parser.c:33016
 #, gcc-internal-format
 msgid "invalid form of %<#pragma omp atomic%>"
 msgstr ""
 
-#: c/c-parser.c:14491 cp/parser.c:32988 cp/parser.c:33004
+#: c/c-parser.c:14474 cp/parser.c:33047 cp/parser.c:33063
 #, gcc-internal-format
 msgid "invalid operator for %<#pragma omp atomic%>"
 msgstr ""
 
-#: c/c-parser.c:14540 cp/semantics.c:8405 cp/semantics.c:8415
+#: c/c-parser.c:14523 cp/semantics.c:8409 cp/semantics.c:8419
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp atomic capture%> uses two different expressions for memory"
 msgstr ""
 
-#: c/c-parser.c:14605 c/c-parser.c:14627
+#: c/c-parser.c:14588 c/c-parser.c:14610
 #, gcc-internal-format
 msgid "expected %<(%> or end of line"
 msgstr ""
 
-#: c/c-parser.c:14665 cp/parser.c:33502
+#: c/c-parser.c:14648 cp/parser.c:33561
 #, gcc-internal-format
 msgid "%<ordered%> clause parameter is less than %<collapse%>"
 msgstr ""
 
-#: c/c-parser.c:14676 cp/parser.c:33513
+#: c/c-parser.c:14659 cp/parser.c:33572
 #, gcc-internal-format
 msgid ""
 "%<linear%> clause may not be specified together with %<ordered%> clause with "
 "a parameter"
 msgstr ""
 
-#: c/c-parser.c:14695 cp/parser.c:33540 cp/parser.c:37733
+#: c/c-parser.c:14678 cp/parser.c:33599 cp/parser.c:37795
 #, gcc-internal-format
 msgid "for statement expected"
 msgstr ""
 
-#: c/c-parser.c:14701 cp/parser.c:33546
+#: c/c-parser.c:14684 cp/parser.c:33605
 #, gcc-internal-format
 msgid "_Cilk_for statement expected"
 msgstr ""
 
-#: c/c-parser.c:14770 cp/semantics.c:7955 cp/semantics.c:8042
+#: c/c-parser.c:14753 cp/semantics.c:7959 cp/semantics.c:8046
 #, gcc-internal-format
 msgid "expected iteration declaration or initialization"
 msgstr ""
 
-#: c/c-parser.c:14855
+#: c/c-parser.c:14838
 #, gcc-internal-format
 msgid "not enough perfectly nested loops"
 msgstr ""
 
-#: c/c-parser.c:14914 cp/parser.c:33773
+#: c/c-parser.c:14897 cp/parser.c:33832
 #, gcc-internal-format
 msgid "collapsed loops not perfectly nested"
 msgstr ""
 
-#: c/c-parser.c:14961 cp/parser.c:33589 cp/parser.c:33631 cp/pt.c:14951
+#: c/c-parser.c:14944 cp/parser.c:33648 cp/parser.c:33690 cp/pt.c:15026
 #, gcc-internal-format
 msgid "iteration variable %qD should not be firstprivate"
 msgstr ""
 
-#: c/c-parser.c:15052 cp/parser.c:33840
+#: c/c-parser.c:15035 cp/parser.c:33899
 #, gcc-internal-format
 msgid "%<ordered%> clause with parameter may not be specified on %qs construct"
 msgstr ""
 
-#: c/c-parser.c:15211
+#: c/c-parser.c:15196
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp ordered%> with %<depend> clause may only be used in compound "
 "statements"
 msgstr ""
 
-#: c/c-parser.c:15414 cp/parser.c:34196
+#: c/c-parser.c:15399 cp/parser.c:34257
 #, gcc-internal-format
 msgid "expected %<for%> after %qs"
 msgstr ""
 
-#: c/c-parser.c:15613 cp/parser.c:34390
+#: c/c-parser.c:15598 cp/parser.c:34452
 #, gcc-internal-format
 msgid "expected %<point%>"
 msgstr ""
 
-#: c/c-parser.c:15821 cp/parser.c:34613
+#: c/c-parser.c:15806 cp/parser.c:34675
 #, 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.c:15834 cp/parser.c:34626
+#: c/c-parser.c:15819 cp/parser.c:34688
 #, gcc-internal-format
 msgid "%<#pragma omp target data%> must contain at least one %<map%> clause"
 msgstr ""
 
-#: c/c-parser.c:15869 cp/parser.c:34838
+#: c/c-parser.c:15854 cp/parser.c:34900
 #, gcc-internal-format
 msgid "%<#pragma omp target update%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:15882 cp/parser.c:34851
+#: c/c-parser.c:15867 cp/parser.c:34913
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target update%> must contain at least one %<from%> or %<to%> "
 "clauses"
 msgstr ""
 
-#: c/c-parser.c:15929 cp/parser.c:34679
+#: c/c-parser.c:15914 cp/parser.c:34741
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target enter data%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:15955 cp/parser.c:34706
+#: c/c-parser.c:15940 cp/parser.c:34768
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target enter data%> with map-type other than %<to%> or %<alloc"
 "%> on %<map%> clause"
 msgstr ""
 
-#: c/c-parser.c:15967 cp/parser.c:34718
+#: c/c-parser.c:15952 cp/parser.c:34780
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target enter data%> must contain at least one %<map%> clause"
 msgstr ""
 
-#: c/c-parser.c:16014 cp/parser.c:34767
+#: c/c-parser.c:15999 cp/parser.c:34829
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target exit data%> may only be used in compound statements"
 msgstr ""
 
-#: c/c-parser.c:16042
+#: c/c-parser.c:16027
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target exit data%> with map-type other than %<from%>, "
 "%<release> or %<delete%> on %<map%> clause"
 msgstr ""
 
-#: c/c-parser.c:16055 cp/parser.c:34808
+#: c/c-parser.c:16040 cp/parser.c:34870
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target exit data%> must contain at least one %<map%> clause"
 msgstr ""
 
-#: c/c-parser.c:16264 cp/parser.c:35062
+#: c/c-parser.c:16249 cp/parser.c:35124
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target%> with map-type other than %<to%>, %<from%>, %<tofrom%> "
 "or %<alloc%> on %<map%> clause"
 msgstr ""
 
-#: c/c-parser.c:16315
+#: c/c-parser.c:16300
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> must be followed by function declaration or "
 "definition or another %<#pragma omp declare simd%>"
 msgstr ""
 
-#: c/c-parser.c:16366 c/c-parser.c:16394
+#: c/c-parser.c:16351 c/c-parser.c:16379
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> must be followed by function declaration or "
 "definition"
 msgstr ""
 
-#: c/c-parser.c:16415
+#: c/c-parser.c:16400
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> or %<simd%> attribute cannot be used in the "
 "same function marked as a Cilk Plus SIMD-enabled function"
 msgstr ""
 
-#: c/c-parser.c:16429
+#: c/c-parser.c:16414
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> not immediately followed by a function "
 "declaration or definition"
 msgstr ""
 
-#: c/c-parser.c:16437 cp/parser.c:35717
+#: c/c-parser.c:16422 cp/parser.c:35779
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> not immediately followed by a single function "
 "declaration or definition"
 msgstr ""
 
-#: c/c-parser.c:16553 cp/parser.c:35788
+#: c/c-parser.c:16538 cp/parser.c:35850
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare target%> with clauses in between %<#pragma omp declare "
 "target%> without clauses and %<#pragma omp end declare target%>"
 msgstr ""
 
-#: c/c-parser.c:16572 cp/parser.c:35807
+#: c/c-parser.c:16557 cp/parser.c:35869
 #, gcc-internal-format
 msgid "%qD specified both in declare target %<link%> and %<to%> clauses"
 msgstr ""
 
-#: c/c-parser.c:16610 cp/parser.c:35851
+#: c/c-parser.c:16595 cp/parser.c:35913
 #, gcc-internal-format
 msgid "expected %<target%>"
 msgstr ""
 
-#: c/c-parser.c:16617 cp/parser.c:35858
+#: c/c-parser.c:16602 cp/parser.c:35920
 #, gcc-internal-format
 msgid "expected %<declare%>"
 msgstr ""
 
-#: c/c-parser.c:16623 cp/parser.c:35865
+#: c/c-parser.c:16608 cp/parser.c:35927
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp end declare target%> without corresponding %<#pragma omp "
 "declare target%>"
 msgstr ""
 
-#: c/c-parser.c:16651
+#: c/c-parser.c:16636
 #, gcc-internal-format
 msgid "%<#pragma omp declare reduction%> not at file or block scope"
 msgstr ""
 
-#: c/c-parser.c:16701
+#: c/c-parser.c:16686
 #, gcc-internal-format
 msgid ""
 "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> "
 "or identifier"
 msgstr ""
 
-#: c/c-parser.c:16728
+#: c/c-parser.c:16713
 #, gcc-internal-format
 msgid "predeclared arithmetic type in %<#pragma omp declare reduction%>"
 msgstr ""
 
-#: c/c-parser.c:16732
+#: c/c-parser.c:16717
 #, gcc-internal-format
 msgid "function or array type in %<#pragma omp declare reduction%>"
 msgstr ""
 
-#: c/c-parser.c:16735
+#: c/c-parser.c:16720
 #, gcc-internal-format
 msgid ""
 "const, volatile or restrict qualified type in %<#pragma omp declare reduction"
 "%>"
 msgstr ""
 
-#: c/c-parser.c:16743
+#: c/c-parser.c:16728
 #, gcc-internal-format
 msgid "redeclaration of %qs %<#pragma omp declare reduction%> for type %qT"
 msgstr ""
 
-#: c/c-parser.c:16752
+#: c/c-parser.c:16737
 #, gcc-internal-format
 msgid "previous %<#pragma omp declare reduction%>"
 msgstr ""
 
-#: c/c-parser.c:16869
+#: c/c-parser.c:16854
 #, gcc-internal-format
 msgid "expected %<omp_priv%> or function-name"
 msgstr ""
 
-#: c/c-parser.c:16880
+#: c/c-parser.c:16865
 #, gcc-internal-format
 msgid "expected function-name %<(%>"
 msgstr ""
 
-#: c/c-parser.c:16899
+#: c/c-parser.c:16884
 #, gcc-internal-format
 msgid "one of the initializer call arguments should be %<&omp_priv%>"
 msgstr ""
 
-#: c/c-parser.c:17019 cp/parser.c:36310
+#: c/c-parser.c:17004 cp/parser.c:36372
 #, gcc-internal-format
 msgid "expected %<simd%> or %<reduction%> or %<target%>"
 msgstr ""
 
-#: c/c-parser.c:17234 cp/semantics.c:7428
+#: c/c-parser.c:17219 cp/semantics.c:7432
 #, gcc-internal-format
 msgid "%qE declared %<threadprivate%> after first use"
 msgstr ""
 
-#: c/c-parser.c:17236 cp/semantics.c:7430
+#: c/c-parser.c:17221 cp/semantics.c:7434
 #, gcc-internal-format
 msgid "automatic variable %qE cannot be %<threadprivate%>"
 msgstr ""
 
-#: c/c-parser.c:17240 cp/semantics.c:7432
+#: c/c-parser.c:17225 cp/semantics.c:7436
 #, gcc-internal-format
 msgid "%<threadprivate%> %qE has incomplete type"
 msgstr ""
 
-#: c/c-parser.c:17271
+#: c/c-parser.c:17256
 #, gcc-internal-format
 msgid "pragma simd ignored because -fcilkplus is not enabled"
 msgstr ""
 
-#: c/c-parser.c:17277
+#: c/c-parser.c:17262
 #, gcc-internal-format
 msgid "pragma simd must be inside a function"
 msgstr ""
 
-#: c/c-parser.c:17321 cp/parser.c:37504
+#: c/c-parser.c:17306 cp/parser.c:37566
 #, gcc-internal-format
 msgid "vectorlength must be an integer constant"
 msgstr ""
 
-#: c/c-parser.c:17323 cp/parser.c:37507
+#: c/c-parser.c:17308 cp/parser.c:37569
 #, gcc-internal-format
 msgid "vectorlength must be a power of 2"
 msgstr ""
 
-#: c/c-parser.c:17406 cp/parser.c:37614
+#: c/c-parser.c:17391 cp/parser.c:37676
 #, gcc-internal-format
 msgid "step size must be an integer constant expression or an integer variable"
 msgstr ""
 
-#: c/c-parser.c:17505 cp/parser.c:37707
+#: c/c-parser.c:17490 cp/parser.c:37769
 #, gcc-internal-format
 msgid "expected %<#pragma simd%> clause"
 msgstr ""
 
-#: c/c-parser.c:17549 cp/parser.c:37156
+#: c/c-parser.c:17534 cp/parser.c:37218
 #, gcc-internal-format
 msgid "%<#pragma cilk grainsize%> is not followed by %<_Cilk_for%>"
 msgstr ""
 
-#: c/c-parser.c:17849 cp/parser.c:37048
+#: c/c-parser.c:17834 cp/parser.c:37110
 #, gcc-internal-format
 msgid "%<__transaction_cancel%> without transactional memory support enabled"
 msgstr ""
 
-#: c/c-parser.c:17855 cp/parser.c:37054
+#: c/c-parser.c:17840 cp/parser.c:37116
 #, gcc-internal-format
 msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>"
 msgstr ""
 
-#: c/c-parser.c:17864 cp/parser.c:37063
+#: c/c-parser.c:17849 cp/parser.c:37125
 #, gcc-internal-format
 msgid ""
 "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>"
 msgstr ""
 
-#: c/c-parser.c:17866 cp/parser.c:37066
+#: c/c-parser.c:17851 cp/parser.c:37128
 #, gcc-internal-format
 msgid "  or a %<transaction_may_cancel_outer%> function"
 msgstr ""
 
-#: c/c-parser.c:17872 cp/parser.c:37072
+#: c/c-parser.c:17857 cp/parser.c:37134
 #, gcc-internal-format
 msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>"
 msgstr ""
 
-#: c/c-parser.c:17940 cp/cp-array-notation.c:1407
+#: c/c-parser.c:17925 cp/cp-array-notation.c:1407
 #, gcc-internal-format
 msgid "base of array section must be pointer or array type"
 msgstr ""
 
-#: c/c-parser.c:17949 cp/parser.c:7013
+#: c/c-parser.c:17934 cp/parser.c:7013
 #, gcc-internal-format
 msgid "expected %<:%> or numeral"
 msgstr ""
 
-#: c/c-parser.c:17960
+#: c/c-parser.c:17945
 #, gcc-internal-format
 msgid ""
 "start-index and length fields necessary for using array notations in pointers"
 msgstr ""
 
-#: c/c-parser.c:17967 c/c-parser.c:18010
+#: c/c-parser.c:17952 c/c-parser.c:17995
 #, gcc-internal-format
 msgid "array notations cannot be used with function type"
 msgstr ""
 
-#: c/c-parser.c:17976
+#: c/c-parser.c:17961
 #, gcc-internal-format
 msgid ""
 "start-index and length fields necessary for using array notations in "
 "dimensionless arrays"
 msgstr ""
 
-#: c/c-parser.c:17988
+#: c/c-parser.c:17973
 #, gcc-internal-format
 msgid ""
 "start-index and length fields necessary for using array notations in "
 "variable-length arrays"
 msgstr ""
 
-#: c/c-parser.c:18038 c/c-parser.c:18041
+#: c/c-parser.c:18023 c/c-parser.c:18026
 #, gcc-internal-format
 msgid "expected array notation expression"
 msgstr ""
@@ -34252,7 +34297,7 @@ msgstr ""
 msgid "%qD has an incomplete type %qT"
 msgstr ""
 
-#: c/c-typeck.c:231 c/c-typeck.c:9501 c/c-typeck.c:9543 cp/call.c:3970
+#: c/c-typeck.c:231 c/c-typeck.c:9508 c/c-typeck.c:9550 cp/call.c:3976
 #, gcc-internal-format
 msgid "invalid use of void expression"
 msgstr ""
@@ -34509,290 +34554,290 @@ msgstr ""
 msgid "passing argument %d of %qE as signed due to prototype"
 msgstr ""
 
-#: c/c-typeck.c:3423 cp/call.c:6769
+#: c/c-typeck.c:3423 cp/call.c:6779
 #, gcc-internal-format
 msgid "implicit conversion from %qT to %qT when passing argument to function"
 msgstr ""
 
-#: c/c-typeck.c:3617 c/c-typeck.c:3622 cp/typeck.c:4534 cp/typeck.c:4776
+#: c/c-typeck.c:3622 c/c-typeck.c:3627 cp/typeck.c:4534 cp/typeck.c:4776
 #, gcc-internal-format
 msgid "comparison with string literal results in unspecified behavior"
 msgstr ""
 
-#: c/c-typeck.c:3636
+#: c/c-typeck.c:3641
 #, gcc-internal-format
 msgid "comparison between %qT and %qT"
 msgstr ""
 
-#: c/c-typeck.c:3685
+#: c/c-typeck.c:3690
 #, gcc-internal-format
 msgid "pointer of type %<void *%> used in subtraction"
 msgstr ""
 
-#: c/c-typeck.c:3688
+#: c/c-typeck.c:3693
 #, gcc-internal-format
 msgid "pointer to a function used in subtraction"
 msgstr ""
 
-#: c/c-typeck.c:3700
+#: c/c-typeck.c:3705
 #, gcc-internal-format
 msgid "arithmetic on pointer to an incomplete type"
 msgstr ""
 
-#: c/c-typeck.c:3705 cp/typeck.c:5293
+#: c/c-typeck.c:3710 cp/typeck.c:5293
 #, gcc-internal-format
 msgid "arithmetic on pointer to an empty aggregate"
 msgstr ""
 
-#: c/c-typeck.c:4113
+#: c/c-typeck.c:4118
 #, gcc-internal-format
 msgid "ISO C does not support %<~%> for complex conjugation"
 msgstr ""
 
-#: c/c-typeck.c:4152
+#: c/c-typeck.c:4157
 #, gcc-internal-format
 msgid "wrong type argument to unary exclamation mark"
 msgstr ""
 
-#: c/c-typeck.c:4209
+#: c/c-typeck.c:4214
 #, gcc-internal-format
 msgid "increment of enumeration value is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:4212
+#: c/c-typeck.c:4217
 #, gcc-internal-format
 msgid "decrement of enumeration value is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:4228
+#: c/c-typeck.c:4233
 #, gcc-internal-format
 msgid "ISO C does not support %<++%> and %<--%> on complex types"
 msgstr ""
 
-#: c/c-typeck.c:4251 c/c-typeck.c:4285
+#: c/c-typeck.c:4256 c/c-typeck.c:4290
 #, gcc-internal-format
 msgid "wrong type argument to increment"
 msgstr ""
 
-#: c/c-typeck.c:4253 c/c-typeck.c:4288
+#: c/c-typeck.c:4258 c/c-typeck.c:4293
 #, gcc-internal-format
 msgid "wrong type argument to decrement"
 msgstr ""
 
-#: c/c-typeck.c:4273
+#: c/c-typeck.c:4278
 #, gcc-internal-format
 msgid "increment of pointer to an incomplete type %qT"
 msgstr ""
 
-#: c/c-typeck.c:4277
+#: c/c-typeck.c:4282
 #, gcc-internal-format
 msgid "decrement of pointer to an incomplete type %qT"
 msgstr ""
 
-#: c/c-typeck.c:4381
+#: c/c-typeck.c:4386
 #, gcc-internal-format
 msgid "taking address of expression of type %<void%>"
 msgstr ""
 
-#: c/c-typeck.c:4439
+#: c/c-typeck.c:4444
 #, gcc-internal-format
 msgid "cannot take address of bit-field %qD"
 msgstr ""
 
-#: c/c-typeck.c:4452
+#: c/c-typeck.c:4457
 #, gcc-internal-format
 msgid "cannot take address of scalar with reverse storage order"
 msgstr ""
 
-#: c/c-typeck.c:4460
+#: c/c-typeck.c:4465
 #, gcc-internal-format
 msgid "address of array with reverse scalar storage order requested"
 msgstr ""
 
-#: c/c-typeck.c:4632
+#: c/c-typeck.c:4637
 #, gcc-internal-format
 msgid "global register variable %qD used in nested function"
 msgstr ""
 
-#: c/c-typeck.c:4635
+#: c/c-typeck.c:4640
 #, gcc-internal-format
 msgid "register variable %qD used in nested function"
 msgstr ""
 
-#: c/c-typeck.c:4640
+#: c/c-typeck.c:4645
 #, gcc-internal-format
 msgid "address of global register variable %qD requested"
 msgstr ""
 
-#: c/c-typeck.c:4642
+#: c/c-typeck.c:4647
 #, gcc-internal-format
 msgid "address of register variable %qD requested"
 msgstr ""
 
-#: c/c-typeck.c:4743
+#: c/c-typeck.c:4748
 #, gcc-internal-format
 msgid "non-lvalue array in conditional expression"
 msgstr ""
 
-#: c/c-typeck.c:4799 cp/call.c:5089
+#: c/c-typeck.c:4804 cp/call.c:5098
 #, gcc-internal-format
 msgid ""
 "implicit conversion from %qT to %qT to match other result of conditional"
 msgstr ""
 
-#: c/c-typeck.c:4873
+#: c/c-typeck.c:4878
 #, gcc-internal-format
 msgid "ISO C forbids conditional expr with only one void side"
 msgstr ""
 
-#: c/c-typeck.c:4890
+#: c/c-typeck.c:4895
 #, gcc-internal-format
 msgid "pointers to disjoint address spaces used in conditional expression"
 msgstr ""
 
-#: c/c-typeck.c:4901 c/c-typeck.c:4918
+#: c/c-typeck.c:4906 c/c-typeck.c:4923
 #, gcc-internal-format
 msgid "pointer to array loses qualifier in conditional expression"
 msgstr ""
 
-#: c/c-typeck.c:4906 c/c-typeck.c:4923
+#: c/c-typeck.c:4911 c/c-typeck.c:4928
 #, gcc-internal-format
 msgid "ISO C forbids conditional expr between %<void *%> and function pointer"
 msgstr ""
 
-#: c/c-typeck.c:4936
+#: c/c-typeck.c:4941
 #, gcc-internal-format
 msgid "pointer type mismatch in conditional expression"
 msgstr ""
 
-#: c/c-typeck.c:4945 c/c-typeck.c:4956
+#: c/c-typeck.c:4950 c/c-typeck.c:4961
 #, gcc-internal-format
 msgid "pointer/integer type mismatch in conditional expression"
 msgstr ""
 
-#: c/c-typeck.c:5059 cp/typeck.c:6436
+#: c/c-typeck.c:5064 cp/typeck.c:6435
 #, gcc-internal-format
 msgid "spawned function call cannot be part of a comma expression"
 msgstr ""
 
-#: c/c-typeck.c:5093
+#: c/c-typeck.c:5098
 #, gcc-internal-format
 msgid "left-hand operand of comma expression has no effect"
 msgstr ""
 
-#: c/c-typeck.c:5111 c/c-typeck.c:10192
+#: c/c-typeck.c:5116 c/c-typeck.c:10199
 #, gcc-internal-format
 msgid "right-hand operand of comma expression has no effect"
 msgstr ""
 
-#: c/c-typeck.c:5180
+#: c/c-typeck.c:5185
 msgid "cast adds %q#v qualifier to function type"
 msgstr ""
 
-#: c/c-typeck.c:5186
+#: c/c-typeck.c:5191
 msgid "cast discards %qv qualifier from pointer target type"
 msgstr ""
 
-#: c/c-typeck.c:5221
+#: c/c-typeck.c:5226
 #, gcc-internal-format
 msgid ""
 "to be safe all intermediate pointers in cast from %qT to %qT must be %<const"
 "%> qualified"
 msgstr ""
 
-#: c/c-typeck.c:5258
+#: c/c-typeck.c:5263
 #, gcc-internal-format
 msgid "cast specifies array type"
 msgstr ""
 
-#: c/c-typeck.c:5264
+#: c/c-typeck.c:5269
 #, gcc-internal-format
 msgid "cast specifies function type"
 msgstr ""
 
-#: c/c-typeck.c:5279
+#: c/c-typeck.c:5284
 #, gcc-internal-format
 msgid "ISO C forbids casting nonscalar to the same type"
 msgstr ""
 
-#: c/c-typeck.c:5299
+#: c/c-typeck.c:5304
 #, gcc-internal-format
 msgid "ISO C forbids casts to union type"
 msgstr ""
 
-#: c/c-typeck.c:5309
+#: c/c-typeck.c:5314
 #, gcc-internal-format
 msgid "cast to union type from type not present in union"
 msgstr ""
 
-#: c/c-typeck.c:5344
+#: c/c-typeck.c:5349
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "cast to %s address space pointer from disjoint generic address space pointer"
 msgstr ""
 
-#: c/c-typeck.c:5349
+#: c/c-typeck.c:5354
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "cast to generic address space pointer from disjoint %s address space pointer"
 msgstr ""
 
-#: c/c-typeck.c:5354
+#: c/c-typeck.c:5359
 #, gcc-internal-format, gfc-internal-format
 msgid "cast to %s address space pointer from disjoint %s address space pointer"
 msgstr ""
 
-#: c/c-typeck.c:5373
+#: c/c-typeck.c:5378
 #, gcc-internal-format
 msgid "cast increases required alignment of target type"
 msgstr ""
 
-#: c/c-typeck.c:5384
+#: c/c-typeck.c:5389
 #, gcc-internal-format
 msgid "cast from pointer to integer of different size"
 msgstr ""
 
-#: c/c-typeck.c:5389
+#: c/c-typeck.c:5394
 #, gcc-internal-format
 msgid "cast from function call of type %qT to non-matching type %qT"
 msgstr ""
 
-#: c/c-typeck.c:5398 cp/typeck.c:7407
+#: c/c-typeck.c:5403 cp/typeck.c:7406
 #, gcc-internal-format
 msgid "cast to pointer from integer of different size"
 msgstr ""
 
-#: c/c-typeck.c:5412
+#: c/c-typeck.c:5417
 #, gcc-internal-format
 msgid "ISO C forbids conversion of function pointer to object pointer type"
 msgstr ""
 
-#: c/c-typeck.c:5421
+#: c/c-typeck.c:5426
 #, gcc-internal-format
 msgid "ISO C forbids conversion of object pointer to function pointer type"
 msgstr ""
 
-#: c/c-typeck.c:5508
+#: c/c-typeck.c:5513
 #, gcc-internal-format
 msgid "defining a type in a cast is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:5550
+#: c/c-typeck.c:5555
 #, gcc-internal-format
 msgid "assignment to expression with array type"
 msgstr ""
 
-#: c/c-typeck.c:5673 c/c-typeck.c:6113
+#: c/c-typeck.c:5678 c/c-typeck.c:6118
 #, gcc-internal-format
 msgid "enum conversion in assignment is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:5865 c/c-typeck.c:5883 c/c-typeck.c:5902
+#: c/c-typeck.c:5870 c/c-typeck.c:5888 c/c-typeck.c:5907
 #, gcc-internal-format
 msgid "(near initialization for %qs)"
 msgstr ""
 
-#: c/c-typeck.c:5917
+#: c/c-typeck.c:5922
 #, gcc-internal-format
 msgid "array initialized from parenthesized string constant"
 msgstr ""
@@ -34808,1559 +34853,1559 @@ msgstr ""
 #. strings are complete sentences, visible to gettext and checked at
 #. compile time.  It is the same as PEDWARN_FOR_QUALIFIERS but uses
 #. warning_at instead of pedwarn.
-#: c/c-typeck.c:5993 c/c-typeck.c:6022 c/c-typeck.c:6051 c/c-typeck.c:6629
+#: c/c-typeck.c:5998 c/c-typeck.c:6027 c/c-typeck.c:6056 c/c-typeck.c:6634
 #, gcc-internal-format
 msgid "expected %qT but argument is of type %qT"
 msgstr ""
 
-#: c/c-typeck.c:6111
+#: c/c-typeck.c:6116
 #, gcc-internal-format
 msgid "enum conversion when passing argument %d of %qE is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:6115 c/c-typeck.c:8711
+#: c/c-typeck.c:6120 c/c-typeck.c:8718
 #, gcc-internal-format
 msgid "enum conversion in initialization is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:6117
+#: c/c-typeck.c:6122
 #, gcc-internal-format
 msgid "enum conversion in return is invalid in C++"
 msgstr ""
 
-#: c/c-typeck.c:6148
+#: c/c-typeck.c:6153
 #, gcc-internal-format
 msgid "cannot pass rvalue to reference parameter"
 msgstr ""
 
-#: c/c-typeck.c:6281 c/c-typeck.c:6546
+#: c/c-typeck.c:6286 c/c-typeck.c:6551
 msgid ""
 "passing argument %d of %qE makes %q#v qualified function pointer from "
 "unqualified"
 msgstr ""
 
-#: c/c-typeck.c:6284 c/c-typeck.c:6549
+#: c/c-typeck.c:6289 c/c-typeck.c:6554
 msgid "assignment makes %q#v qualified function pointer from unqualified"
 msgstr ""
 
-#: c/c-typeck.c:6287 c/c-typeck.c:6551
+#: c/c-typeck.c:6292 c/c-typeck.c:6556
 msgid "initialization makes %q#v qualified function pointer from unqualified"
 msgstr ""
 
-#: c/c-typeck.c:6290 c/c-typeck.c:6553
+#: c/c-typeck.c:6295 c/c-typeck.c:6558
 msgid "return makes %q#v qualified function pointer from unqualified"
 msgstr ""
 
-#: c/c-typeck.c:6298 c/c-typeck.c:6465 c/c-typeck.c:6508
+#: c/c-typeck.c:6303 c/c-typeck.c:6470 c/c-typeck.c:6513
 msgid ""
 "passing argument %d of %qE discards %qv qualifier from pointer target type"
 msgstr ""
 
-#: c/c-typeck.c:6300 c/c-typeck.c:6467 c/c-typeck.c:6510
+#: c/c-typeck.c:6305 c/c-typeck.c:6472 c/c-typeck.c:6515
 msgid "assignment discards %qv qualifier from pointer target type"
 msgstr ""
 
-#: c/c-typeck.c:6302 c/c-typeck.c:6469 c/c-typeck.c:6512
+#: c/c-typeck.c:6307 c/c-typeck.c:6474 c/c-typeck.c:6517
 msgid "initialization discards %qv qualifier from pointer target type"
 msgstr ""
 
-#: c/c-typeck.c:6304 c/c-typeck.c:6471 c/c-typeck.c:6514
+#: c/c-typeck.c:6309 c/c-typeck.c:6476 c/c-typeck.c:6519
 msgid "return discards %qv qualifier from pointer target type"
 msgstr ""
 
-#: c/c-typeck.c:6313
+#: c/c-typeck.c:6318
 #, gcc-internal-format
 msgid "ISO C prohibits argument conversion to union type"
 msgstr ""
 
-#: c/c-typeck.c:6375
+#: c/c-typeck.c:6380
 #, gcc-internal-format
 msgid "request for implicit conversion from %qT to %qT not permitted in C++"
 msgstr ""
 
-#: c/c-typeck.c:6387
+#: c/c-typeck.c:6392
 #, gcc-internal-format
 msgid "passing argument %d of %qE from pointer to non-enclosed address space"
 msgstr ""
 
-#: c/c-typeck.c:6391
+#: c/c-typeck.c:6396
 #, gcc-internal-format
 msgid "assignment from pointer to non-enclosed address space"
 msgstr ""
 
-#: c/c-typeck.c:6395
+#: c/c-typeck.c:6400
 #, gcc-internal-format
 msgid "initialization from pointer to non-enclosed address space"
 msgstr ""
 
-#: c/c-typeck.c:6399
+#: c/c-typeck.c:6404
 #, gcc-internal-format
 msgid "return from pointer to non-enclosed address space"
 msgstr ""
 
-#: c/c-typeck.c:6417
+#: c/c-typeck.c:6422
 #, gcc-internal-format
 msgid "argument %d of %qE might be a candidate for a format attribute"
 msgstr ""
 
-#: c/c-typeck.c:6423
+#: c/c-typeck.c:6428
 #, gcc-internal-format
 msgid "assignment left-hand side might be a candidate for a format attribute"
 msgstr ""
 
-#: c/c-typeck.c:6428
+#: c/c-typeck.c:6433
 #, gcc-internal-format
 msgid ""
 "initialization left-hand side might be a candidate for a format attribute"
 msgstr ""
 
-#: c/c-typeck.c:6433 cp/typeck.c:8423
+#: c/c-typeck.c:6438 cp/typeck.c:8422
 #, gcc-internal-format
 msgid "return type might be a candidate for a format attribute"
 msgstr ""
 
-#: c/c-typeck.c:6482
+#: c/c-typeck.c:6487
 #, gcc-internal-format
 msgid ""
 "ISO C forbids passing argument %d of %qE between function pointer and %<void "
 "*%>"
 msgstr ""
 
-#: c/c-typeck.c:6485
+#: c/c-typeck.c:6490
 #, gcc-internal-format
 msgid "ISO C forbids assignment between function pointer and %<void *%>"
 msgstr ""
 
-#: c/c-typeck.c:6487
+#: c/c-typeck.c:6492
 #, gcc-internal-format
 msgid "ISO C forbids initialization between function pointer and %<void *%>"
 msgstr ""
 
-#: c/c-typeck.c:6489
+#: c/c-typeck.c:6494
 #, gcc-internal-format
 msgid "ISO C forbids return between function pointer and %<void *%>"
 msgstr ""
 
-#: c/c-typeck.c:6526
+#: c/c-typeck.c:6531
 #, gcc-internal-format
 msgid "pointer targets in passing argument %d of %qE differ in signedness"
 msgstr ""
 
-#: c/c-typeck.c:6528
+#: c/c-typeck.c:6533
 #, gcc-internal-format
 msgid "pointer targets in assignment differ in signedness"
 msgstr ""
 
-#: c/c-typeck.c:6530
+#: c/c-typeck.c:6535
 #, gcc-internal-format
 msgid "pointer targets in initialization differ in signedness"
 msgstr ""
 
-#: c/c-typeck.c:6532
+#: c/c-typeck.c:6537
 #, gcc-internal-format
 msgid "pointer targets in return differ in signedness"
 msgstr ""
 
-#: c/c-typeck.c:6563
+#: c/c-typeck.c:6568
 #, gcc-internal-format
 msgid "passing argument %d of %qE from incompatible pointer type"
 msgstr ""
 
-#: c/c-typeck.c:6565
+#: c/c-typeck.c:6570
 #, gcc-internal-format
 msgid "assignment from incompatible pointer type"
 msgstr ""
 
-#: c/c-typeck.c:6566
+#: c/c-typeck.c:6571
 #, gcc-internal-format
 msgid "initialization from incompatible pointer type"
 msgstr ""
 
-#: c/c-typeck.c:6568
+#: c/c-typeck.c:6573
 #, gcc-internal-format
 msgid "return from incompatible pointer type"
 msgstr ""
 
 #. ??? This should not be an error when inlining calls to
 #. unprototyped functions.
-#: c/c-typeck.c:6576 c/c-typeck.c:7070 cp/typeck.c:1992
+#: c/c-typeck.c:6581 c/c-typeck.c:7075 cp/typeck.c:1992
 #, gcc-internal-format
 msgid "invalid use of non-lvalue array"
 msgstr ""
 
-#: c/c-typeck.c:6587
+#: c/c-typeck.c:6592
 #, gcc-internal-format
 msgid "passing argument %d of %qE makes pointer from integer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6589
+#: c/c-typeck.c:6594
 #, gcc-internal-format
 msgid "assignment makes pointer from integer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6591
+#: c/c-typeck.c:6596
 #, gcc-internal-format
 msgid "initialization makes pointer from integer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6593
+#: c/c-typeck.c:6598
 #, gcc-internal-format
 msgid "return makes pointer from integer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6602
+#: c/c-typeck.c:6607
 #, gcc-internal-format
 msgid "passing argument %d of %qE makes integer from pointer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6604
+#: c/c-typeck.c:6609
 #, gcc-internal-format
 msgid "assignment makes integer from pointer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6606
+#: c/c-typeck.c:6611
 #, gcc-internal-format
 msgid "initialization makes integer from pointer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6608
+#: c/c-typeck.c:6613
 #, gcc-internal-format
 msgid "return makes integer from pointer without a cast"
 msgstr ""
 
-#: c/c-typeck.c:6632
+#: c/c-typeck.c:6637
 #, gcc-internal-format
 msgid "incompatible types when assigning to type %qT from type %qT"
 msgstr ""
 
-#: c/c-typeck.c:6637
+#: c/c-typeck.c:6642
 #, gcc-internal-format
 msgid "incompatible types when initializing type %qT using type %qT"
 msgstr ""
 
-#: c/c-typeck.c:6642
+#: c/c-typeck.c:6647
 #, gcc-internal-format
 msgid "incompatible types when returning type %qT but %qT was expected"
 msgstr ""
 
-#: c/c-typeck.c:6706
+#: c/c-typeck.c:6711
 #, gcc-internal-format
 msgid "traditional C rejects automatic aggregate initialization"
 msgstr ""
 
-#: c/c-typeck.c:6943 c/c-typeck.c:7822 cp/typeck2.c:1020
+#: c/c-typeck.c:6948 c/c-typeck.c:7827 cp/typeck2.c:1023
 #, gcc-internal-format
 msgid "initialization of a flexible array member"
 msgstr ""
 
-#: c/c-typeck.c:6953 cp/typeck2.c:1035
+#: c/c-typeck.c:6958 cp/typeck2.c:1038
 #, gcc-internal-format
 msgid "char-array initialized from wide string"
 msgstr ""
 
-#: c/c-typeck.c:6962
+#: c/c-typeck.c:6967
 #, gcc-internal-format
 msgid "wide character array initialized from non-wide string"
 msgstr ""
 
-#: c/c-typeck.c:6968
+#: c/c-typeck.c:6973
 #, gcc-internal-format
 msgid "wide character array initialized from incompatible wide string"
 msgstr ""
 
-#: c/c-typeck.c:7002
+#: c/c-typeck.c:7007
 #, gcc-internal-format
 msgid "array of inappropriate type initialized from string constant"
 msgstr ""
 
-#: c/c-typeck.c:7089 c/c-typeck.c:7113 c/c-typeck.c:7116 c/c-typeck.c:7124
-#: c/c-typeck.c:7164 c/c-typeck.c:8650 c/c-typeck.c:8684
+#: c/c-typeck.c:7094 c/c-typeck.c:7118 c/c-typeck.c:7121 c/c-typeck.c:7129
+#: c/c-typeck.c:7169 c/c-typeck.c:8657 c/c-typeck.c:8691
 #, gcc-internal-format
 msgid "initializer element is not constant"
 msgstr ""
 
-#: c/c-typeck.c:7098
+#: c/c-typeck.c:7103
 #, gcc-internal-format
 msgid "array initialized from non-constant array expression"
 msgstr ""
 
-#: c/c-typeck.c:7129 c/c-typeck.c:7177 c/c-typeck.c:8694
+#: c/c-typeck.c:7134 c/c-typeck.c:7182 c/c-typeck.c:8701
 #, gcc-internal-format
 msgid "initializer element is not a constant expression"
 msgstr ""
 
-#: c/c-typeck.c:7171 c/c-typeck.c:8689
+#: c/c-typeck.c:7176 c/c-typeck.c:8696
 #, gcc-internal-format
 msgid "initializer element is not computable at load time"
 msgstr ""
 
-#: c/c-typeck.c:7190
+#: c/c-typeck.c:7195
 #, gcc-internal-format
 msgid "invalid initializer"
 msgstr ""
 
-#: c/c-typeck.c:7465 cp/decl.c:6108
+#: c/c-typeck.c:7470 cp/decl.c:6115
 #, gcc-internal-format
 msgid "opaque vector types cannot be initialized"
 msgstr ""
 
-#: c/c-typeck.c:7681
+#: c/c-typeck.c:7686
 #, gcc-internal-format
 msgid "extra brace group at end of initializer"
 msgstr ""
 
-#: c/c-typeck.c:7759
+#: c/c-typeck.c:7764
 #, gcc-internal-format
 msgid "braces around scalar initializer"
 msgstr ""
 
-#: c/c-typeck.c:7819 c/c-typeck.c:9123
+#: c/c-typeck.c:7824 c/c-typeck.c:9130
 #, gcc-internal-format
 msgid "initialization of flexible array member in a nested context"
 msgstr ""
 
-#: c/c-typeck.c:7853
+#: c/c-typeck.c:7858
 #, gcc-internal-format
 msgid "missing braces around initializer"
 msgstr ""
 
-#: c/c-typeck.c:7875
+#: c/c-typeck.c:7880
 #, gcc-internal-format
 msgid "missing initializer for field %qD of %qT"
 msgstr ""
 
-#: c/c-typeck.c:7899
+#: c/c-typeck.c:7904
 #, gcc-internal-format
 msgid "empty scalar initializer"
 msgstr ""
 
-#: c/c-typeck.c:7904
+#: c/c-typeck.c:7909
 #, gcc-internal-format
 msgid "extra elements in scalar initializer"
 msgstr ""
 
-#: c/c-typeck.c:8016 c/c-typeck.c:8098
+#: c/c-typeck.c:8021 c/c-typeck.c:8103
 #, gcc-internal-format
 msgid "array index in non-array initializer"
 msgstr ""
 
-#: c/c-typeck.c:8021 c/c-typeck.c:8160
+#: c/c-typeck.c:8026 c/c-typeck.c:8165
 #, gcc-internal-format
 msgid "field name not in record or union initializer"
 msgstr ""
 
-#: c/c-typeck.c:8071
+#: c/c-typeck.c:8076
 #, gcc-internal-format
 msgid "array index in initializer not of integer type"
 msgstr ""
 
-#: c/c-typeck.c:8080 c/c-typeck.c:8089
+#: c/c-typeck.c:8085 c/c-typeck.c:8094
 #, gcc-internal-format
 msgid "array index in initializer is not an integer constant expression"
 msgstr ""
 
-#: c/c-typeck.c:8094 c/c-typeck.c:8096
+#: c/c-typeck.c:8099 c/c-typeck.c:8101
 #, gcc-internal-format
 msgid "nonconstant array index in initializer"
 msgstr ""
 
-#: c/c-typeck.c:8100 c/c-typeck.c:8103
+#: c/c-typeck.c:8105 c/c-typeck.c:8108
 #, gcc-internal-format
 msgid "array index in initializer exceeds array bounds"
 msgstr ""
 
-#: c/c-typeck.c:8122
+#: c/c-typeck.c:8127
 #, gcc-internal-format
 msgid "empty index range in initializer"
 msgstr ""
 
-#: c/c-typeck.c:8131
+#: c/c-typeck.c:8136
 #, gcc-internal-format
 msgid "array index range in initializer exceeds array bounds"
 msgstr ""
 
-#: c/c-typeck.c:8167
+#: c/c-typeck.c:8172
 #, gcc-internal-format
 msgid "unknown field %qE specified in initializer"
 msgstr ""
 
-#: c/c-typeck.c:8220 c/c-typeck.c:8250 c/c-typeck.c:8784
+#: c/c-typeck.c:8225 c/c-typeck.c:8255 c/c-typeck.c:8791
 #, gcc-internal-format
 msgid "initialized field with side-effects overwritten"
 msgstr ""
 
-#: c/c-typeck.c:8224 c/c-typeck.c:8254 c/c-typeck.c:8787
+#: c/c-typeck.c:8229 c/c-typeck.c:8259 c/c-typeck.c:8794
 #, gcc-internal-format
 msgid "initialized field overwritten"
 msgstr ""
 
-#: c/c-typeck.c:9006
+#: c/c-typeck.c:9013
 #, gcc-internal-format
 msgid "excess elements in char array initializer"
 msgstr ""
 
-#: c/c-typeck.c:9013 c/c-typeck.c:9082
+#: c/c-typeck.c:9020 c/c-typeck.c:9089
 #, gcc-internal-format
 msgid "excess elements in struct initializer"
 msgstr ""
 
-#: c/c-typeck.c:9028
+#: c/c-typeck.c:9035
 #, gcc-internal-format
 msgid ""
 "positional initialization of field in %<struct%> declared with "
 "%<designated_init%> attribute"
 msgstr ""
 
-#: c/c-typeck.c:9097
+#: c/c-typeck.c:9104
 #, gcc-internal-format
 msgid "non-static initialization of a flexible array member"
 msgstr ""
 
-#: c/c-typeck.c:9196
+#: c/c-typeck.c:9203
 #, gcc-internal-format
 msgid "excess elements in union initializer"
 msgstr ""
 
-#: c/c-typeck.c:9218
+#: c/c-typeck.c:9225
 #, gcc-internal-format
 msgid "traditional C rejects initialization of unions"
 msgstr ""
 
-#: c/c-typeck.c:9286
+#: c/c-typeck.c:9293
 #, gcc-internal-format
 msgid "excess elements in array initializer"
 msgstr ""
 
-#: c/c-typeck.c:9320
+#: c/c-typeck.c:9327
 #, gcc-internal-format
 msgid "excess elements in vector initializer"
 msgstr ""
 
-#: c/c-typeck.c:9352
+#: c/c-typeck.c:9359
 #, gcc-internal-format
 msgid "excess elements in scalar initializer"
 msgstr ""
 
-#: c/c-typeck.c:9592
+#: c/c-typeck.c:9599
 #, gcc-internal-format
 msgid "ISO C forbids %<goto *expr;%>"
 msgstr ""
 
-#: c/c-typeck.c:9620 cp/typeck.c:8652
+#: c/c-typeck.c:9627 cp/typeck.c:8651
 #, gcc-internal-format
 msgid "function declared %<noreturn%> has a %<return%> statement"
 msgstr ""
 
-#: c/c-typeck.c:9630 cp/cp-array-notation.c:1087
+#: c/c-typeck.c:9637 cp/cp-array-notation.c:1087
 #, gcc-internal-format
 msgid "array notation expression cannot be used as a return value"
 msgstr ""
 
-#: c/c-typeck.c:9637 cp/typeck.c:8643
+#: c/c-typeck.c:9644 cp/typeck.c:8642
 #, gcc-internal-format
 msgid "use of %<_Cilk_spawn%> in a return statement is not allowed"
 msgstr ""
 
-#: c/c-typeck.c:9665 c/c-typeck.c:9669
+#: c/c-typeck.c:9672 c/c-typeck.c:9676
 #, gcc-internal-format
 msgid "%<return%> with no value, in function returning non-void"
 msgstr ""
 
-#: c/c-typeck.c:9683
+#: c/c-typeck.c:9690
 #, gcc-internal-format
 msgid "%<return%> with a value, in function returning void"
 msgstr ""
 
-#: c/c-typeck.c:9686
+#: c/c-typeck.c:9693
 #, gcc-internal-format
 msgid "ISO C forbids %<return%> with expression, in function returning void"
 msgstr ""
 
-#: c/c-typeck.c:9762
+#: c/c-typeck.c:9769
 #, gcc-internal-format
 msgid "function returns address of label"
 msgstr ""
 
-#: c/c-typeck.c:9853 cp/semantics.c:1146
+#: c/c-typeck.c:9860 cp/semantics.c:1146
 #, gcc-internal-format
 msgid "switch quantity not an integer"
 msgstr ""
 
-#: c/c-typeck.c:9878
+#: c/c-typeck.c:9885
 #, gcc-internal-format
 msgid "%<long%> switch expression not converted to %<int%> in ISO C"
 msgstr ""
 
-#: c/c-typeck.c:9916 c/c-typeck.c:9924
+#: c/c-typeck.c:9923 c/c-typeck.c:9931
 #, gcc-internal-format
 msgid "case label is not an integer constant expression"
 msgstr ""
 
-#: c/c-typeck.c:9930 cp/parser.c:10624
+#: c/c-typeck.c:9937 cp/parser.c:10626
 #, gcc-internal-format
 msgid "case label not within a switch statement"
 msgstr ""
 
-#: c/c-typeck.c:9932
+#: c/c-typeck.c:9939
 #, gcc-internal-format
 msgid "%<default%> label not within a switch statement"
 msgstr ""
 
-#: c/c-typeck.c:10003
+#: c/c-typeck.c:10010
 #, gcc-internal-format
 msgid "rank-mismatch between if-statement%'s condition and the then-block"
 msgstr ""
 
-#: c/c-typeck.c:10009
+#: c/c-typeck.c:10016
 #, gcc-internal-format
 msgid "rank-mismatch between if-statement%'s condition and the else-block"
 msgstr ""
 
-#: c/c-typeck.c:10134 cp/parser.c:11745
+#: c/c-typeck.c:10141 cp/parser.c:11756
 #, gcc-internal-format
 msgid "break statement not within loop or switch"
 msgstr ""
 
-#: c/c-typeck.c:10136 cp/parser.c:11771
+#: c/c-typeck.c:10143 cp/parser.c:11782
 #, gcc-internal-format
 msgid "continue statement not within a loop"
 msgstr ""
 
-#: c/c-typeck.c:10141 cp/parser.c:11758
+#: c/c-typeck.c:10148 cp/parser.c:11769
 #, gcc-internal-format
 msgid "break statement used with OpenMP for loop"
 msgstr ""
 
-#: c/c-typeck.c:10146
+#: c/c-typeck.c:10153
 #, gcc-internal-format
 msgid "break statement within %<#pragma simd%> loop body"
 msgstr ""
 
-#: c/c-typeck.c:10148 cp/parser.c:11775
+#: c/c-typeck.c:10155 cp/parser.c:11786
 #, gcc-internal-format
 msgid "continue statement within %<#pragma simd%> loop body"
 msgstr ""
 
-#: c/c-typeck.c:10174 cp/cp-gimplify.c:444
+#: c/c-typeck.c:10181 cp/cp-gimplify.c:444
 #, gcc-internal-format
 msgid "statement with no effect"
 msgstr ""
 
-#: c/c-typeck.c:10218
+#: c/c-typeck.c:10225
 #, gcc-internal-format
 msgid "expression statement has incomplete type"
 msgstr ""
 
-#: c/c-typeck.c:11019 c/c-typeck.c:11176 cp/typeck.c:4790
+#: c/c-typeck.c:11026 c/c-typeck.c:11183 cp/typeck.c:4790
 #, gcc-internal-format
 msgid "comparing vectors with different element types"
 msgstr ""
 
-#: c/c-typeck.c:11026 c/c-typeck.c:11183 cp/typeck.c:4802
+#: c/c-typeck.c:11033 c/c-typeck.c:11190 cp/typeck.c:4802
 #, gcc-internal-format
 msgid "comparing vectors with different number of elements"
 msgstr ""
 
-#: c/c-typeck.c:11057 cp/typeck.c:4528
+#: c/c-typeck.c:11064 cp/typeck.c:4528
 #, gcc-internal-format
 msgid "comparing floating point with == or != is unsafe"
 msgstr ""
 
-#: c/c-typeck.c:11074 c/c-typeck.c:11094
+#: c/c-typeck.c:11081 c/c-typeck.c:11101
 #, gcc-internal-format
 msgid ""
 "the comparison will always evaluate as %<false%> for the address of %qD will "
 "never be NULL"
 msgstr ""
 
-#: c/c-typeck.c:11080 c/c-typeck.c:11100
+#: c/c-typeck.c:11087 c/c-typeck.c:11107
 #, gcc-internal-format
 msgid ""
 "the comparison will always evaluate as %<true%> for the address of %qD will "
 "never be NULL"
 msgstr ""
 
-#: c/c-typeck.c:11121 c/c-typeck.c:11241
+#: c/c-typeck.c:11128 c/c-typeck.c:11248
 #, gcc-internal-format
 msgid "comparison of pointers to disjoint address spaces"
 msgstr ""
 
-#: c/c-typeck.c:11128 c/c-typeck.c:11134
+#: c/c-typeck.c:11135 c/c-typeck.c:11141
 #, gcc-internal-format
 msgid "ISO C forbids comparison of %<void *%> with function pointer"
 msgstr ""
 
-#: c/c-typeck.c:11141 c/c-typeck.c:11251
+#: c/c-typeck.c:11148 c/c-typeck.c:11258
 #, gcc-internal-format
 msgid "comparison of distinct pointer types lacks a cast"
 msgstr ""
 
-#: c/c-typeck.c:11153 c/c-typeck.c:11158 c/c-typeck.c:11277 c/c-typeck.c:11282
+#: c/c-typeck.c:11160 c/c-typeck.c:11165 c/c-typeck.c:11284 c/c-typeck.c:11289
 #, gcc-internal-format
 msgid "comparison between pointer and integer"
 msgstr ""
 
-#: c/c-typeck.c:11229
+#: c/c-typeck.c:11236
 #, gcc-internal-format
 msgid "comparison of complete and incomplete pointers"
 msgstr ""
 
-#: c/c-typeck.c:11231
+#: c/c-typeck.c:11238
 #, gcc-internal-format
 msgid "ISO C forbids ordered comparisons of pointers to functions"
 msgstr ""
 
-#: c/c-typeck.c:11236
+#: c/c-typeck.c:11243
 #, gcc-internal-format
 msgid "ordered comparison of pointer with null pointer"
 msgstr ""
 
-#: c/c-typeck.c:11259 c/c-typeck.c:11262 c/c-typeck.c:11269 c/c-typeck.c:11272
+#: c/c-typeck.c:11266 c/c-typeck.c:11269 c/c-typeck.c:11276 c/c-typeck.c:11279
 #: cp/typeck.c:4853 cp/typeck.c:4860
 #, gcc-internal-format
 msgid "ordered comparison of pointer with integer zero"
 msgstr ""
 
-#: c/c-typeck.c:11323 cp/typeck.c:4939
+#: c/c-typeck.c:11330 cp/typeck.c:4939
 #, gcc-internal-format
 msgid ""
 "implicit conversion from %qT to %qT to match other operand of binary "
 "expression"
 msgstr ""
 
-#: c/c-typeck.c:11636
+#: c/c-typeck.c:11643
 #, gcc-internal-format
 msgid "used array that cannot be converted to pointer where scalar is required"
 msgstr ""
 
-#: c/c-typeck.c:11640
+#: c/c-typeck.c:11647
 #, gcc-internal-format
 msgid "used struct type value where scalar is required"
 msgstr ""
 
-#: c/c-typeck.c:11644
+#: c/c-typeck.c:11651
 #, gcc-internal-format
 msgid "used union type value where scalar is required"
 msgstr ""
 
-#: c/c-typeck.c:11660
+#: c/c-typeck.c:11667
 #, gcc-internal-format
 msgid "used vector type where scalar is required"
 msgstr ""
 
-#: c/c-typeck.c:11850 cp/semantics.c:8512
+#: c/c-typeck.c:11857 cp/semantics.c:8516
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp cancel must specify one of %<parallel%>, %<for%>, %<sections%> "
 "or %<taskgroup%> clauses"
 msgstr ""
 
-#: c/c-typeck.c:11889 cp/semantics.c:8549
+#: c/c-typeck.c:11896 cp/semantics.c:8553
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp cancellation point must specify one of %<parallel%>, %<for%>, "
 "%<sections%> or %<taskgroup%> clauses"
 msgstr ""
 
-#: c/c-typeck.c:11939 c/c-typeck.c:13045 cp/semantics.c:4513
-#: cp/semantics.c:6627
+#: c/c-typeck.c:11946 c/c-typeck.c:13052 cp/semantics.c:4507
+#: cp/semantics.c:6628
 #, gcc-internal-format
 msgid "bit-field %qE in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:11948 c/c-typeck.c:13062 cp/semantics.c:4522
-#: cp/semantics.c:6644
+#: c/c-typeck.c:11955 c/c-typeck.c:13069 cp/semantics.c:4517
+#: cp/semantics.c:6646
 #, gcc-internal-format
 msgid "%qE is a member of a union"
 msgstr ""
 
-#: c/c-typeck.c:11958 cp/semantics.c:4534 cp/semantics.c:6667
+#: c/c-typeck.c:11965 cp/semantics.c:4531 cp/semantics.c:6671
 #, gcc-internal-format
 msgid "%qD is not a variable in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:11962 c/c-typeck.c:13079 cp/semantics.c:4538
-#: cp/semantics.c:6670
+#: c/c-typeck.c:11969 c/c-typeck.c:13086 cp/semantics.c:4535
+#: cp/semantics.c:6674
 #, gcc-internal-format
 msgid "%qE is not a variable in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:11970 c/c-typeck.c:13086 c/c-typeck.c:13171
-#: cp/semantics.c:4555 cp/semantics.c:6676 cp/semantics.c:6830
+#: c/c-typeck.c:11977 c/c-typeck.c:13093 c/c-typeck.c:13178 cp/semantics.c:4552
+#: cp/semantics.c:6680 cp/semantics.c:6834
 #, gcc-internal-format
 msgid "%qD is threadprivate variable in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:11992 cp/semantics.c:4586
+#: c/c-typeck.c:11999 cp/semantics.c:4583
 #, gcc-internal-format
 msgid "low bound %qE of array section does not have integral type"
 msgstr ""
 
-#: c/c-typeck.c:11999 cp/semantics.c:4593
+#: c/c-typeck.c:12006 cp/semantics.c:4590
 #, gcc-internal-format
 msgid "length %qE of array section does not have integral type"
 msgstr ""
 
-#: c/c-typeck.c:12026 c/c-typeck.c:12090 c/c-typeck.c:12348
-#: cp/semantics.c:4629 cp/semantics.c:4693
+#: c/c-typeck.c:12033 c/c-typeck.c:12097 c/c-typeck.c:12355 cp/semantics.c:4626
+#: cp/semantics.c:4690
 #, gcc-internal-format
 msgid "zero length array section in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12045 cp/semantics.c:4648
+#: c/c-typeck.c:12052 cp/semantics.c:4645
 #, gcc-internal-format
 msgid "for unknown bound array type length expression must be specified"
 msgstr ""
 
-#: c/c-typeck.c:12053 cp/semantics.c:4656
+#: c/c-typeck.c:12060 cp/semantics.c:4653
 #, gcc-internal-format
 msgid "negative low bound in array section in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12062 c/c-typeck.c:12172 cp/semantics.c:4665
-#: cp/semantics.c:4775
+#: c/c-typeck.c:12069 c/c-typeck.c:12179 cp/semantics.c:4662
+#: cp/semantics.c:4772
 #, gcc-internal-format
 msgid "negative length in array section in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12079 cp/semantics.c:4682
+#: c/c-typeck.c:12086 cp/semantics.c:4679
 #, gcc-internal-format
 msgid "low bound %qE above array section size in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12116 cp/semantics.c:4719
+#: c/c-typeck.c:12123 cp/semantics.c:4716
 #, gcc-internal-format
 msgid "length %qE above array section size in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12131 cp/semantics.c:4734
+#: c/c-typeck.c:12138 cp/semantics.c:4731
 #, gcc-internal-format
 msgid "high bound %qE above array section size in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12164 cp/semantics.c:4767
+#: c/c-typeck.c:12171 cp/semantics.c:4764
 #, gcc-internal-format
 msgid "for pointer type length expression must be specified"
 msgstr ""
 
-#: c/c-typeck.c:12182 c/c-typeck.c:12291 cp/semantics.c:4785
-#: cp/semantics.c:4897
+#: c/c-typeck.c:12189 c/c-typeck.c:12298 cp/semantics.c:4782
+#: cp/semantics.c:4894
 #, gcc-internal-format
 msgid "array section is not contiguous in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:12190 cp/semantics.c:4793
+#: c/c-typeck.c:12197 cp/semantics.c:4790
 #, gcc-internal-format
 msgid "%qE does not have pointer or array type"
 msgstr ""
 
-#: c/c-typeck.c:12568 c/c-typeck.c:12578
+#: c/c-typeck.c:12575 c/c-typeck.c:12585
 #, gcc-internal-format
 msgid "%qD in %<reduction%> clause is a zero size array"
 msgstr ""
 
-#: c/c-typeck.c:12636
+#: c/c-typeck.c:12643
 #, gcc-internal-format
 msgid "%qE has invalid type for %<reduction(%s)%>"
 msgstr ""
 
-#: c/c-typeck.c:12645 cp/semantics.c:5704
+#: c/c-typeck.c:12652 cp/semantics.c:5701
 #, gcc-internal-format
 msgid "user defined reduction not found for %qE"
 msgstr ""
 
-#: c/c-typeck.c:12733
+#: c/c-typeck.c:12740
 #, gcc-internal-format
 msgid "variable length element type in array %<reduction%> clause"
 msgstr ""
 
-#: c/c-typeck.c:12751 c/c-typeck.c:13229 cp/semantics.c:7146
+#: c/c-typeck.c:12758 c/c-typeck.c:13236 cp/semantics.c:7150
 #, gcc-internal-format
 msgid "%<nowait%> clause must not be used together with %<copyprivate%>"
 msgstr ""
 
-#: c/c-typeck.c:12763 cp/semantics.c:7186
+#: c/c-typeck.c:12770 cp/semantics.c:7190
 #, gcc-internal-format
 msgid "%qE must be %<threadprivate%> for %<copyin%>"
 msgstr ""
 
-#: c/c-typeck.c:12777 cp/semantics.c:5866
+#: c/c-typeck.c:12784 cp/semantics.c:5863
 #, gcc-internal-format
 msgid ""
 "modifier should not be specified in %<linear%> clause on %<simd%> or %<for%> "
 "constructs"
 msgstr ""
 
-#: c/c-typeck.c:12785
+#: c/c-typeck.c:12792
 #, gcc-internal-format
 msgid ""
 "linear clause applied to non-integral non-pointer variable with type %qT"
 msgstr ""
 
-#: c/c-typeck.c:12805 cp/semantics.c:5933
+#: c/c-typeck.c:12812 cp/semantics.c:5931
 #, gcc-internal-format
 msgid "%<linear%> clause step %qE is neither constant nor a parameter"
 msgstr ""
 
-#: c/c-typeck.c:12835 c/c-typeck.c:13164 cp/semantics.c:6017
-#: cp/semantics.c:6823
+#: c/c-typeck.c:12842 c/c-typeck.c:13171 cp/semantics.c:6015
+#: cp/semantics.c:6827
 #, gcc-internal-format
 msgid "%qE is not a variable in clause %qs"
 msgstr ""
 
-#: c/c-typeck.c:12844 c/c-typeck.c:12871 c/c-typeck.c:12897
+#: c/c-typeck.c:12851 c/c-typeck.c:12878 c/c-typeck.c:12904
 #, gcc-internal-format
 msgid "%qE appears more than once in data clauses"
 msgstr ""
 
-#: c/c-typeck.c:12850 c/c-typeck.c:12876 c/c-typeck.c:13120 c/c-typeck.c:13137
-#: cp/semantics.c:6031 cp/semantics.c:6083 cp/semantics.c:6729
-#: cp/semantics.c:6746
+#: c/c-typeck.c:12857 c/c-typeck.c:12883 c/c-typeck.c:13127 c/c-typeck.c:13144
+#: cp/semantics.c:6029 cp/semantics.c:6081 cp/semantics.c:6733
+#: cp/semantics.c:6750
 #, gcc-internal-format
 msgid "%qD appears both in data and map clauses"
 msgstr ""
 
-#: c/c-typeck.c:12864 cp/semantics.c:6072
+#: c/c-typeck.c:12871 cp/semantics.c:6070
 #, gcc-internal-format
 msgid "%qE is not a variable in clause %<firstprivate%>"
 msgstr ""
 
-#: c/c-typeck.c:12890 cp/semantics.c:6111
+#: c/c-typeck.c:12897 cp/semantics.c:6109
 #, gcc-internal-format
 msgid "%qE is not a variable in clause %<lastprivate%>"
 msgstr ""
 
-#: c/c-typeck.c:12909 cp/semantics.c:6461
+#: c/c-typeck.c:12916 cp/semantics.c:6459
 #, gcc-internal-format
 msgid "%qE is not a variable in %<aligned%> clause"
 msgstr ""
 
-#: c/c-typeck.c:12916
+#: c/c-typeck.c:12923
 #, gcc-internal-format
 msgid "%qE in %<aligned%> clause is neither a pointer nor an array"
 msgstr ""
 
-#: c/c-typeck.c:12923
+#: c/c-typeck.c:12930
 #, gcc-internal-format
 msgid "%qE appears more than once in %<aligned%> clauses"
 msgstr ""
 
-#: c/c-typeck.c:12978 cp/semantics.c:6543
+#: c/c-typeck.c:12985 cp/semantics.c:6541
 #, gcc-internal-format
 msgid "%qE is not a variable in %<depend%> clause"
 msgstr ""
 
-#: c/c-typeck.c:13000 cp/semantics.c:6574
+#: c/c-typeck.c:13007 cp/semantics.c:6572
 #, gcc-internal-format
 msgid "array section does not have mappable type in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:13017 c/c-typeck.c:13129 cp/semantics.c:6591
-#: cp/semantics.c:6738
+#: c/c-typeck.c:13024 c/c-typeck.c:13136 cp/semantics.c:6591
+#: cp/semantics.c:6742
 #, gcc-internal-format
 msgid "%qD appears more than once in motion clauses"
 msgstr ""
 
-#: c/c-typeck.c:13020 c/c-typeck.c:13131 cp/semantics.c:6594
-#: cp/semantics.c:6740
+#: c/c-typeck.c:13027 c/c-typeck.c:13138 cp/semantics.c:6594
+#: cp/semantics.c:6744
 #, gcc-internal-format
 msgid "%qD appears more than once in map clauses"
 msgstr ""
 
-#: c/c-typeck.c:13052 cp/semantics.c:6634
+#: c/c-typeck.c:13059 cp/semantics.c:6635
 #, gcc-internal-format
 msgid "%qE does not have a mappable type in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:13105 c/c-typeck.c:13178 cp/semantics.c:6706
-#: cp/semantics.c:6837
+#: c/c-typeck.c:13112 c/c-typeck.c:13185 cp/semantics.c:6710
+#: cp/semantics.c:6841
 #, gcc-internal-format
 msgid "%qD does not have a mappable type in %qs clause"
 msgstr ""
 
-#: c/c-typeck.c:13115 cp/semantics.c:6025 cp/semantics.c:6078
-#: cp/semantics.c:6117 cp/semantics.c:6724
+#: c/c-typeck.c:13122 cp/semantics.c:6023 cp/semantics.c:6076
+#: cp/semantics.c:6115 cp/semantics.c:6728
 #, gcc-internal-format
 msgid "%qD appears more than once in data clauses"
 msgstr ""
 
-#: c/c-typeck.c:13159 cp/semantics.c:6817
+#: c/c-typeck.c:13166 cp/semantics.c:6821
 #, gcc-internal-format
 msgid "%qE is neither a variable nor a function name in clause %qs"
 msgstr ""
 
-#: c/c-typeck.c:13187 cp/semantics.c:6846
+#: c/c-typeck.c:13194 cp/semantics.c:6850
 #, gcc-internal-format
 msgid "%qE appears more than once on the same %<declare target%> directive"
 msgstr ""
 
-#: c/c-typeck.c:13201 cp/semantics.c:6861
+#: c/c-typeck.c:13208 cp/semantics.c:6865
 #, gcc-internal-format
 msgid "%qD is not an argument in %<uniform%> clause"
 msgstr ""
 
-#: c/c-typeck.c:13204 cp/semantics.c:6863
+#: c/c-typeck.c:13211 cp/semantics.c:6867
 #, gcc-internal-format
 msgid "%qE is not an argument in %<uniform%> clause"
 msgstr ""
 
-#: c/c-typeck.c:13219
+#: c/c-typeck.c:13226
 #, gcc-internal-format
 msgid "%qs variable is neither a pointer nor an array"
 msgstr ""
 
-#: c/c-typeck.c:13294 cp/semantics.c:6271
+#: c/c-typeck.c:13301 cp/semantics.c:6269
 #, gcc-internal-format
 msgid "%<nonmonotonic%> modifier specified for %qs schedule kind"
 msgstr ""
 
-#: c/c-typeck.c:13325 cp/semantics.c:7038
+#: c/c-typeck.c:13332 cp/semantics.c:7042
 #, gcc-internal-format
 msgid "%<inbranch%> clause is incompatible with %<notinbranch%>"
 msgstr ""
 
-#: c/c-typeck.c:13375 cp/semantics.c:7229
+#: c/c-typeck.c:13382 cp/semantics.c:7233
 #, gcc-internal-format
 msgid "%qE is predetermined %qs for %qs"
 msgstr ""
 
-#: c/c-typeck.c:13395 cp/semantics.c:7120
+#: c/c-typeck.c:13402 cp/semantics.c:7124
 #, gcc-internal-format
 msgid "%<simdlen%> clause value is bigger than %<safelen%> clause value"
 msgstr ""
 
-#: c/c-typeck.c:13407 cp/semantics.c:7133
+#: c/c-typeck.c:13414 cp/semantics.c:7137
 #, gcc-internal-format
 msgid ""
 "%<nonmonotonic%> schedule modifier specified together with %<ordered%> clause"
 msgstr ""
 
-#: c/c-typeck.c:13425 cp/semantics.c:7100
+#: c/c-typeck.c:13432 cp/semantics.c:7104
 #, gcc-internal-format
 msgid ""
 "%<linear%> clause step is a parameter %qD not specified in %<uniform%> clause"
 msgstr ""
 
-#: c/c-typeck.c:13553
+#: c/c-typeck.c:13561
 #, gcc-internal-format
 msgid "cannot use %<va_arg%> with reverse storage order"
 msgstr ""
 
-#: c/c-typeck.c:13558
+#: c/c-typeck.c:13566
 #, gcc-internal-format
 msgid "second argument to %<va_arg%> is of incomplete type %qT"
 msgstr ""
 
-#: c/c-typeck.c:13564
+#: c/c-typeck.c:13572
 #, gcc-internal-format
 msgid "C++ requires promoted type, not enum type, in %<va_arg%>"
 msgstr ""
 
 #. A bad conversion for 'this' must be discarding cv-quals.
-#: cp/call.c:3313
+#: cp/call.c:3319
 #, gcc-internal-format
 msgid "  passing %qT as %<this%> argument discards qualifiers"
 msgstr ""
 
-#: cp/call.c:3317
+#: cp/call.c:3323
 #, gcc-internal-format
 msgid "  no known conversion for implicit %<this%> parameter from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:3324
+#: cp/call.c:3330
 #, gcc-internal-format, gfc-internal-format
 msgid "  conversion of argument %d would be ill-formed:"
 msgstr ""
 
 #. Conversion of conversion function return value failed.
-#: cp/call.c:3331
+#: cp/call.c:3337
 #, gcc-internal-format
 msgid "  no known conversion from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:3334
+#: cp/call.c:3340
 #, gcc-internal-format
 msgid "  no known conversion for argument %d from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:3345 cp/pt.c:6094
+#: cp/call.c:3351 cp/pt.c:6108
 #, gcc-internal-format, gfc-internal-format
 msgid "  candidate expects %d argument, %d provided"
 msgid_plural "  candidate expects %d arguments, %d provided"
 msgstr[0] ""
 msgstr[1] ""
 
-#: cp/call.c:3370
+#: cp/call.c:3376
 #, gcc-internal-format
 msgid "%s%D(%T, %T, %T) <built-in>"
 msgstr ""
 
-#: cp/call.c:3375
+#: cp/call.c:3381
 #, gcc-internal-format
 msgid "%s%D(%T, %T) <built-in>"
 msgstr ""
 
-#: cp/call.c:3379
+#: cp/call.c:3385
 #, gcc-internal-format
 msgid "%s%D(%T) <built-in>"
 msgstr ""
 
-#: cp/call.c:3383
+#: cp/call.c:3389
 #, gcc-internal-format
 msgid "%s%T <conversion>"
 msgstr ""
 
-#: cp/call.c:3385
+#: cp/call.c:3391
 #, gcc-internal-format
 msgid "%s%#D <near match>"
 msgstr ""
 
-#: cp/call.c:3387
+#: cp/call.c:3393
 #, gcc-internal-format
 msgid "%s%#D <deleted>"
 msgstr ""
 
-#: cp/call.c:3389
+#: cp/call.c:3395
 #, gcc-internal-format
 msgid "%s%#D"
 msgstr ""
 
-#: cp/call.c:3408
+#: cp/call.c:3414
 #, gcc-internal-format
 msgid ""
 "  return type %qT of explicit conversion function cannot be converted to %qT "
 "with a qualification conversion"
 msgstr ""
 
-#: cp/call.c:3414
+#: cp/call.c:3420
 #, gcc-internal-format
 msgid ""
 "  conversion from return type %qT of template conversion function "
 "specialization to %qT is not an exact match"
 msgstr ""
 
-#: cp/call.c:3425
+#: cp/call.c:3431
 #, gcc-internal-format
 msgid ""
 "  substitution of deduced template arguments resulted in errors seen above"
 msgstr ""
 
 #. Re-run template unification with diagnostics.
-#: cp/call.c:3430
+#: cp/call.c:3436
 #, gcc-internal-format
 msgid "  template argument deduction/substitution failed:"
 msgstr ""
 
-#: cp/call.c:3444
+#: cp/call.c:3450
 #, gcc-internal-format
 msgid ""
 "  a constructor taking a single argument of its own class type is invalid"
 msgstr ""
 
-#: cp/call.c:3808
+#: cp/call.c:3814
 #, gcc-internal-format
 msgid "conversion from %qT to %qT is ambiguous"
 msgstr ""
 
-#: cp/call.c:3935
+#: cp/call.c:3941
 #, gcc-internal-format
 msgid ""
 "conversion from %qT to %qT not considered for non-type template argument"
 msgstr ""
 
-#: cp/call.c:4053
+#: cp/call.c:4059
 #, gcc-internal-format
 msgid "no matching function for call to %<%D(%A)%>"
 msgstr ""
 
-#: cp/call.c:4056
+#: cp/call.c:4062
 #, gcc-internal-format
 msgid "call of overloaded %<%D(%A)%> is ambiguous"
 msgstr ""
 
 #. It's no good looking for an overloaded operator() on a
 #. pointer-to-member-function.
-#: cp/call.c:4291
+#: cp/call.c:4297
 #, gcc-internal-format
 msgid ""
 "pointer-to-member function %E cannot be called without an object; consider "
 "using .* or ->*"
 msgstr ""
 
-#: cp/call.c:4362
+#: cp/call.c:4368
 #, gcc-internal-format
 msgid "no match for call to %<(%T) (%A)%>"
 msgstr ""
 
-#: cp/call.c:4375
+#: cp/call.c:4381
 #, gcc-internal-format
 msgid "call of %<(%T) (%A)%> is ambiguous"
 msgstr ""
 
-#: cp/call.c:4423
+#: cp/call.c:4432
 #, gcc-internal-format
 msgid "ambiguous overload for "
 msgstr ""
 
-#: cp/call.c:4424
+#: cp/call.c:4433
 #, gcc-internal-format
 msgid "no match for "
 msgstr ""
 
-#: cp/call.c:4427
+#: cp/call.c:4436
 #, gcc-internal-format
 msgid " (operand types are %qT, %qT, and %qT)"
 msgstr ""
 
-#: cp/call.c:4429
+#: cp/call.c:4438
 #, gcc-internal-format
 msgid " (operand types are %qT and %qT)"
 msgstr ""
 
-#: cp/call.c:4431
+#: cp/call.c:4440
 #, gcc-internal-format
 msgid " (operand type is %qT)"
 msgstr ""
 
-#: cp/call.c:4451
+#: cp/call.c:4460
 #, gcc-internal-format
 msgid "ternary %<operator?:%>"
 msgstr ""
 
-#: cp/call.c:4455
+#: cp/call.c:4464
 #, gcc-internal-format
 msgid "ternary %<operator?:%> in %<%E ? %E : %E%>"
 msgstr ""
 
-#: cp/call.c:4464 cp/call.c:4495 cp/call.c:4504
+#: cp/call.c:4473 cp/call.c:4504 cp/call.c:4513
 #, gcc-internal-format
 msgid "%<operator%s%>"
 msgstr ""
 
-#: cp/call.c:4467
+#: cp/call.c:4476
 #, gcc-internal-format
 msgid "%<operator%s%> in %<%E%s%>"
 msgstr ""
 
-#: cp/call.c:4474
+#: cp/call.c:4483
 #, gcc-internal-format
 msgid "%<operator[]%>"
 msgstr ""
 
-#: cp/call.c:4477
+#: cp/call.c:4486
 #, gcc-internal-format
 msgid "%<operator[]%> in %<%E[%E]%>"
 msgstr ""
 
-#: cp/call.c:4485
+#: cp/call.c:4494
 #, gcc-internal-format
 msgid "%qs"
 msgstr ""
 
-#: cp/call.c:4488
+#: cp/call.c:4497
 #, gcc-internal-format
 msgid "%qs in %<%s %E%>"
 msgstr ""
 
-#: cp/call.c:4498
+#: cp/call.c:4507
 #, gcc-internal-format
 msgid "%<operator%s%> in %<%E %s %E%>"
 msgstr ""
 
-#: cp/call.c:4507
+#: cp/call.c:4516
 #, gcc-internal-format
 msgid "%<operator%s%> in %<%s%E%>"
 msgstr ""
 
-#: cp/call.c:4616
+#: cp/call.c:4625
 #, gcc-internal-format
 msgid "ISO C++ forbids omitting the middle term of a ?: expression"
 msgstr ""
 
-#: cp/call.c:4675
+#: cp/call.c:4684
 #, gcc-internal-format
 msgid ""
 "inferred scalar type %qT is not an integer or floating point type of the "
 "same size as %qT"
 msgstr ""
 
-#: cp/call.c:4752
+#: cp/call.c:4761
 #, gcc-internal-format
 msgid "incompatible vector types in conditional expression: %qT, %qT and %qT"
 msgstr ""
 
-#: cp/call.c:4842
+#: cp/call.c:4851
 #, gcc-internal-format
 msgid ""
 "second operand to the conditional operator is of type %<void%>, but the "
 "third operand is neither a throw-expression nor of type %<void%>"
 msgstr ""
 
-#: cp/call.c:4847
+#: cp/call.c:4856
 #, gcc-internal-format
 msgid ""
 "third operand to the conditional operator is of type %<void%>, but the "
 "second operand is neither a throw-expression nor of type %<void%>"
 msgstr ""
 
-#: cp/call.c:4898 cp/call.c:5014 cp/call.c:5157
+#: cp/call.c:4907 cp/call.c:5023 cp/call.c:5166
 #, gcc-internal-format
 msgid "operands to ?: have different types %qT and %qT"
 msgstr ""
 
-#: cp/call.c:4901
+#: cp/call.c:4910
 #, gcc-internal-format
 msgid "  and each type can be converted to the other"
 msgstr ""
 
-#: cp/call.c:5102
+#: cp/call.c:5111
 #, gcc-internal-format
 msgid "enumeral mismatch in conditional expression: %qT vs %qT"
 msgstr ""
 
-#: cp/call.c:5114
+#: cp/call.c:5123
 #, gcc-internal-format
 msgid "enumeral and non-enumeral type in conditional expression"
 msgstr ""
 
-#: cp/call.c:5577
+#: cp/call.c:5586
 #, gcc-internal-format
 msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead"
 msgstr ""
 
-#: cp/call.c:5579
+#: cp/call.c:5588
 #, gcc-internal-format
 msgid "no %<%D(int)%> declared for postfix %qs"
 msgstr ""
 
-#: cp/call.c:5685
+#: cp/call.c:5694
 #, gcc-internal-format
 msgid "comparison between %q#T and %q#T"
 msgstr ""
 
-#: cp/call.c:5956
+#: cp/call.c:5965
 #, gcc-internal-format
 msgid ""
 "exception cleanup for this placement new selects non-placement operator "
 "delete"
 msgstr ""
 
-#: cp/call.c:5959
+#: cp/call.c:5968
 #, gcc-internal-format
 msgid ""
 "%qD is a usual (non-placement) deallocation function in C++14 (or with -"
 "fsized-deallocation)"
 msgstr ""
 
-#: cp/call.c:5994
+#: cp/call.c:6003
 #, gcc-internal-format
 msgid "%qD is a usual (non-placement) deallocation function"
 msgstr ""
 
-#: cp/call.c:6111
+#: cp/call.c:6120
 #, gcc-internal-format
 msgid "no corresponding deallocation function for %qD"
 msgstr ""
 
-#: cp/call.c:6117
+#: cp/call.c:6126
 #, gcc-internal-format
 msgid "no suitable %<operator %s%> for %qT"
 msgstr ""
 
-#: cp/call.c:6139
+#: cp/call.c:6148
 #, gcc-internal-format
 msgid "%q#D is private within this context"
 msgstr ""
 
-#: cp/call.c:6141
+#: cp/call.c:6150
 #, gcc-internal-format
 msgid "declared private here"
 msgstr ""
 
-#: cp/call.c:6145
+#: cp/call.c:6154
 #, gcc-internal-format
 msgid "%q#D is protected within this context"
 msgstr ""
 
-#: cp/call.c:6147
+#: cp/call.c:6156
 #, gcc-internal-format
 msgid "declared protected here"
 msgstr ""
 
-#: cp/call.c:6151
+#: cp/call.c:6160
 #, gcc-internal-format
 msgid "%q#D is inaccessible within this context"
 msgstr ""
 
-#: cp/call.c:6204
+#: cp/call.c:6213
 #, gcc-internal-format
 msgid "passing NULL to non-pointer argument %P of %qD"
 msgstr ""
 
-#: cp/call.c:6208
+#: cp/call.c:6217
 #, gcc-internal-format
 msgid "converting to non-pointer type %qT from NULL"
 msgstr ""
 
-#: cp/call.c:6217
+#: cp/call.c:6226
 #, gcc-internal-format
 msgid "converting %<false%> to pointer type for argument %P of %qD"
 msgstr ""
 
-#: cp/call.c:6221
+#: cp/call.c:6230
 #, gcc-internal-format
 msgid "converting %<false%> to pointer type %qT"
 msgstr ""
 
-#: cp/call.c:6284
+#: cp/call.c:6293
 #, gcc-internal-format
 msgid "too many braces around initializer for %qT"
 msgstr ""
 
-#: cp/call.c:6295
+#: cp/call.c:6304
 #, gcc-internal-format
 msgid "converting to %qT from %qT requires direct-initialization"
 msgstr ""
 
-#: cp/call.c:6303
+#: cp/call.c:6312
 #, gcc-internal-format
 msgid "invalid user-defined conversion from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:6320 cp/call.c:6344 cp/call.c:6462 cp/call.c:6554 cp/call.c:6596
-#: cp/call.c:6624
+#: cp/call.c:6329 cp/call.c:6353 cp/call.c:6472 cp/call.c:6564 cp/call.c:6606
+#: cp/call.c:6634
 #, gcc-internal-format
 msgid "  initializing argument %P of %qD"
 msgstr ""
 
-#: cp/call.c:6340 cp/cvt.c:224
+#: cp/call.c:6349 cp/cvt.c:224
 #, gcc-internal-format
 msgid "invalid conversion from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:6374 cp/call.c:6381
+#: cp/call.c:6384 cp/call.c:6391
 #, gcc-internal-format
 msgid ""
 "converting to %qT from initializer list would use explicit constructor %qD"
 msgstr ""
 
-#: cp/call.c:6377
+#: cp/call.c:6387
 #, gcc-internal-format
 msgid "in C++11 and above a default constructor can be explicit"
 msgstr ""
 
-#: cp/call.c:6610
+#: cp/call.c:6620
 #, gcc-internal-format
 msgid "cannot bind %qT lvalue to %qT"
 msgstr ""
 
-#: cp/call.c:6614 cp/call.c:9945
+#: cp/call.c:6624 cp/call.c:9956
 #, gcc-internal-format
 msgid ""
 "invalid initialization of non-const reference of type %qT from an rvalue of "
 "type %qT"
 msgstr ""
 
-#: cp/call.c:6617
+#: cp/call.c:6627
 #, gcc-internal-format
 msgid "binding %qT to reference of type %qT discards qualifiers"
 msgstr ""
 
-#: cp/call.c:6653
+#: cp/call.c:6663
 #, gcc-internal-format
 msgid "cannot bind bitfield %qE to %qT"
 msgstr ""
 
-#: cp/call.c:6656 cp/call.c:6673
+#: cp/call.c:6666 cp/call.c:6683
 #, gcc-internal-format
 msgid "cannot bind packed field %qE to %qT"
 msgstr ""
 
-#: cp/call.c:6659
+#: cp/call.c:6669
 #, gcc-internal-format
 msgid "cannot bind rvalue %qE to %qT"
 msgstr ""
 
-#: cp/call.c:6786 cp/cvt.c:1738
+#: cp/call.c:6796 cp/cvt.c:1738
 #, gcc-internal-format
 msgid ""
 "scoped enum %qT passed through ... as %qT before -fabi-version=6, %qT after"
 msgstr ""
 
-#: cp/call.c:6827
+#: cp/call.c:6837
 #, gcc-internal-format
 msgid ""
 "passing objects of non-trivially-copyable type %q#T through %<...%> is "
 "conditionally supported"
 msgstr ""
 
-#: cp/call.c:6858
+#: cp/call.c:6868
 #, gcc-internal-format
 msgid "cannot receive reference type %qT through %<...%>"
 msgstr ""
 
-#: cp/call.c:6868
+#: cp/call.c:6878
 #, gcc-internal-format
 msgid ""
 "receiving objects of non-trivially-copyable type %q#T through %<...%> is "
 "conditionally-supported"
 msgstr ""
 
-#: cp/call.c:6928
+#: cp/call.c:6938
 #, gcc-internal-format
 msgid "recursive evaluation of default argument for %q#D"
 msgstr ""
 
-#: cp/call.c:6937
+#: cp/call.c:6947
 #, gcc-internal-format
 msgid ""
 "call to %qD uses the default argument for parameter %P, which is not yet "
 "defined"
 msgstr ""
 
-#: cp/call.c:7039
+#: cp/call.c:7049
 #, gcc-internal-format
 msgid "argument of function call might be a candidate for a format attribute"
 msgstr ""
 
-#: cp/call.c:7088
+#: cp/call.c:7098
 #, gcc-internal-format
 msgid "use of multiversioned function without a default"
 msgstr ""
 
-#: cp/call.c:7369
+#: cp/call.c:7380
 #, gcc-internal-format
 msgid "passing %qT as %<this%> argument discards qualifiers"
 msgstr ""
 
-#: cp/call.c:7372 cp/call.c:7488 cp/call.c:9175 cp/name-lookup.c:5728
+#: cp/call.c:7383 cp/call.c:7499 cp/call.c:9186 cp/name-lookup.c:5728
 #, gcc-internal-format
 msgid "  in call to %qD"
 msgstr ""
 
-#: cp/call.c:7402
+#: cp/call.c:7413
 #, gcc-internal-format
 msgid "%qT is not an accessible base of %qT"
 msgstr ""
 
-#: cp/call.c:7484
+#: cp/call.c:7495
 #, gcc-internal-format
 msgid "deducing %qT as %qT"
 msgstr ""
 
-#: cp/call.c:7490
+#: cp/call.c:7501
 #, gcc-internal-format
 msgid "  (you can disable this with -fno-deduce-init-list)"
 msgstr ""
 
-#: cp/call.c:7866
+#: cp/call.c:7877
 #, gcc-internal-format
 msgid "could not find class$ field in java interface type %qT"
 msgstr ""
 
-#: cp/call.c:8037
+#: cp/call.c:8048
 #, gcc-internal-format
 msgid "constructor delegates to itself"
 msgstr ""
 
-#: cp/call.c:8127
+#: cp/call.c:8138
 #, gcc-internal-format
 msgid "call to non-function %qD"
 msgstr ""
 
-#: cp/call.c:8173 cp/pt.c:13652 cp/typeck.c:2783
+#: cp/call.c:8184 cp/pt.c:13718 cp/typeck.c:2783
 #, gcc-internal-format
 msgid "cannot call constructor %<%T::%D%> directly"
 msgstr ""
 
-#: cp/call.c:8175
+#: cp/call.c:8186
 #, gcc-internal-format
 msgid "for a function-style cast, remove the redundant %<::%D%>"
 msgstr ""
 
-#: cp/call.c:8305
+#: cp/call.c:8316
 #, gcc-internal-format
 msgid "no matching function for call to %<%T::operator %T(%A)%#V%>"
 msgstr ""
 
-#: cp/call.c:8318
+#: cp/call.c:8329
 #, gcc-internal-format
 msgid "no matching function for call to %<%T::%s(%A)%#V%>"
 msgstr ""
 
-#: cp/call.c:8344
+#: cp/call.c:8355
 #, gcc-internal-format
 msgid "no matching function for call to %<%s(%A)%>"
 msgstr ""
 
-#: cp/call.c:8347
+#: cp/call.c:8358
 #, gcc-internal-format
 msgid "call of overloaded %<%s(%A)%> is ambiguous"
 msgstr ""
 
-#: cp/call.c:8368
+#: cp/call.c:8379
 #, gcc-internal-format
 msgid "pure virtual %q#D called from non-static data member initializer"
 msgstr ""
 
-#: cp/call.c:8394
+#: cp/call.c:8405
 #, gcc-internal-format
 msgid "cannot call member function %qD without object"
 msgstr ""
 
-#: cp/call.c:9173
+#: cp/call.c:9184
 #, gcc-internal-format
 msgid "passing %qT chooses %qT over %qT"
 msgstr ""
 
-#: cp/call.c:9233
+#: cp/call.c:9244
 #, gcc-internal-format
 msgid "choosing %qD over %qD"
 msgstr ""
 
-#: cp/call.c:9234
+#: cp/call.c:9245
 #, gcc-internal-format
 msgid "  for conversion from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:9237
+#: cp/call.c:9248
 #, gcc-internal-format
 msgid "  because conversion sequence for the argument is better"
 msgstr ""
 
-#: cp/call.c:9399
+#: cp/call.c:9410
 #, gcc-internal-format
 msgid "default argument mismatch in overload resolution"
 msgstr ""
 
-#: cp/call.c:9403
+#: cp/call.c:9414
 #, gcc-internal-format
 msgid " candidate 1: %q+#F"
 msgstr ""
 
-#: cp/call.c:9405
+#: cp/call.c:9416
 #, gcc-internal-format
 msgid " candidate 2: %q+#F"
 msgstr ""
 
-#: cp/call.c:9450
+#: cp/call.c:9461
 #, gcc-internal-format
 msgid ""
 "ISO C++ says that these are ambiguous, even though the worst conversion for "
 "the first is better than the worst conversion for the second:"
 msgstr ""
 
-#: cp/call.c:9628
+#: cp/call.c:9639
 #, gcc-internal-format
 msgid "could not convert %qE from %qT to %qT"
 msgstr ""
 
-#: cp/call.c:9822
+#: cp/call.c:9833
 #, gcc-internal-format
 msgid "a temporary bound to %qD only persists until the constructor exits"
 msgstr ""
 
-#: cp/call.c:9949
+#: cp/call.c:9960
 #, gcc-internal-format
 msgid ""
 "invalid initialization of reference of type %qT from expression of type %qT"
@@ -36675,225 +36720,225 @@ msgstr ""
 msgid "  but does not override %<operator=(const %T&)%>"
 msgstr ""
 
-#: cp/class.c:4351
+#: cp/class.c:4352
 #, gcc-internal-format
 msgid "alignment of %qD increased in -fabi-version=9 (GCC 5.2)"
 msgstr ""
 
-#: cp/class.c:4354
+#: cp/class.c:4355
 #, gcc-internal-format
 msgid "alignment of %qD will increase in -fabi-version=9"
 msgstr ""
 
-#: cp/class.c:4608
+#: cp/class.c:4609
 #, gcc-internal-format
 msgid "initializer specified for non-virtual method %q+D"
 msgstr ""
 
-#: cp/class.c:5045
+#: cp/class.c:5046
 #, gcc-internal-format
 msgid "method overrides both %<transaction_pure%> and %qE methods"
 msgstr ""
 
-#: cp/class.c:5066
+#: cp/class.c:5067
 #, gcc-internal-format
 msgid "method declared %qE overriding %qE method"
 msgstr ""
 
-#: cp/class.c:5660 cp/constexpr.c:217
+#: cp/class.c:5661 cp/constexpr.c:217
 #, gcc-internal-format
 msgid ""
 "enclosing class of constexpr non-static member function %q+#D is not a "
 "literal type"
 msgstr ""
 
-#: cp/class.c:5685
+#: cp/class.c:5686
 #, gcc-internal-format
 msgid "%q+T is not literal because:"
 msgstr ""
 
-#: cp/class.c:5687
+#: cp/class.c:5688
 #, gcc-internal-format
 msgid "  %q+T has a non-trivial destructor"
 msgstr ""
 
-#: cp/class.c:5692
+#: cp/class.c:5693
 #, gcc-internal-format
 msgid ""
 "  %q+T is not an aggregate, does not have a trivial default constructor, and "
 "has no constexpr constructor that is not a copy or move constructor"
 msgstr ""
 
-#: cp/class.c:5727
+#: cp/class.c:5728
 #, gcc-internal-format
 msgid "  base class %qT of %q+T is non-literal"
 msgstr ""
 
-#: cp/class.c:5742
+#: cp/class.c:5743
 #, gcc-internal-format
 msgid "  non-static data member %qD has non-literal type"
 msgstr ""
 
-#: cp/class.c:5749
+#: cp/class.c:5750
 #, gcc-internal-format
 msgid "  non-static data member %qD has volatile type"
 msgstr ""
 
-#: cp/class.c:5867
+#: cp/class.c:5868
 #, gcc-internal-format
 msgid "base class %q#T has accessible non-virtual destructor"
 msgstr ""
 
-#: cp/class.c:5896
+#: cp/class.c:5897
 #, gcc-internal-format
 msgid "non-static reference %q#D in class without a constructor"
 msgstr ""
 
-#: cp/class.c:5902
+#: cp/class.c:5903
 #, gcc-internal-format
 msgid "non-static const member %q#D in class without a constructor"
 msgstr ""
 
 #. If the function is defaulted outside the class, we just
 #. give the synthesis error.
-#: cp/class.c:5928
+#: cp/class.c:5929
 #, gcc-internal-format
 msgid ""
 "%q+D declared to take const reference, but implicit declaration would take "
 "non-const"
 msgstr ""
 
-#: cp/class.c:6205
+#: cp/class.c:6206
 #, gcc-internal-format
 msgid "direct base %qT inaccessible in %qT due to ambiguity"
 msgstr ""
 
-#: cp/class.c:6217
+#: cp/class.c:6218
 #, gcc-internal-format
 msgid "virtual base %qT inaccessible in %qT due to ambiguity"
 msgstr ""
 
-#: cp/class.c:6445
+#: cp/class.c:6446
 #, gcc-internal-format
 msgid ""
 "offset of %qD is not ABI-compliant and may change in a future version of GCC"
 msgstr ""
 
-#: cp/class.c:6600
+#: cp/class.c:6601
 #, gcc-internal-format
 msgid "size of type %qT is too large (%qE bytes)"
 msgstr ""
 
-#: cp/class.c:6805
+#: cp/class.c:6806
 #, gcc-internal-format
 msgid "zero-size array member %qD not at end of %q#T"
 msgstr ""
 
-#: cp/class.c:6807
+#: cp/class.c:6808
 #, gcc-internal-format
 msgid "zero-size array member %qD in an otherwise empty %q#T"
 msgstr ""
 
-#: cp/class.c:6812 cp/class.c:6835
+#: cp/class.c:6813 cp/class.c:6836
 #, gcc-internal-format
 msgid "in the definition of %q#T"
 msgstr ""
 
-#: cp/class.c:6817
+#: cp/class.c:6818
 #, gcc-internal-format
 msgid "flexible array member %qD not at end of %q#T"
 msgstr ""
 
-#: cp/class.c:6819
+#: cp/class.c:6820
 #, gcc-internal-format
 msgid "flexible array member %qD in an otherwise empty %q#T"
 msgstr ""
 
-#: cp/class.c:6832
+#: cp/class.c:6833
 #, gcc-internal-format
 msgid "next member %q#D declared here"
 msgstr ""
 
-#: cp/class.c:6929 cp/decl.c:12941 cp/parser.c:21981
+#: cp/class.c:6930 cp/decl.c:12954 cp/parser.c:22003
 #, gcc-internal-format
 msgid "redefinition of %q#T"
 msgstr ""
 
-#: cp/class.c:7075
+#: cp/class.c:7076
 #, gcc-internal-format
 msgid "%q#T has virtual functions and accessible non-virtual destructor"
 msgstr ""
 
-#: cp/class.c:7103
+#: cp/class.c:7104
 #, gcc-internal-format
 msgid "type transparent %q#T does not have any fields"
 msgstr ""
 
-#: cp/class.c:7109
+#: cp/class.c:7110
 #, gcc-internal-format
 msgid "type transparent class %qT has base classes"
 msgstr ""
 
-#: cp/class.c:7113
+#: cp/class.c:7114
 #, gcc-internal-format
 msgid "type transparent class %qT has virtual functions"
 msgstr ""
 
-#: cp/class.c:7119
+#: cp/class.c:7120
 #, gcc-internal-format
 msgid ""
 "type transparent %q#T cannot be made transparent because the type of the "
 "first field has a different ABI from the class overall"
 msgstr ""
 
-#: cp/class.c:7283
+#: cp/class.c:7284
 #, gcc-internal-format
 msgid ""
 "definition of std::initializer_list does not match #include "
 "<initializer_list>"
 msgstr ""
 
-#: cp/class.c:7294
+#: cp/class.c:7295
 #, gcc-internal-format
 msgid "trying to finish struct, but kicked out due to previous parse errors"
 msgstr ""
 
-#: cp/class.c:7830
+#: cp/class.c:7831
 #, gcc-internal-format
 msgid "language string %<\"%E\"%> not recognized"
 msgstr ""
 
-#: cp/class.c:7920
+#: cp/class.c:7921
 #, gcc-internal-format
 msgid "cannot resolve overloaded function %qD based on conversion to type %qT"
 msgstr ""
 
-#: cp/class.c:8067
+#: cp/class.c:8068
 #, gcc-internal-format
 msgid "no matches converting function %qD to type %q#T"
 msgstr ""
 
-#: cp/class.c:8095
+#: cp/class.c:8096
 #, gcc-internal-format
 msgid "converting overloaded function %qD to type %q#T is ambiguous"
 msgstr ""
 
-#: cp/class.c:8122
+#: cp/class.c:8123
 #, gcc-internal-format
 msgid "assuming pointer to member %qD"
 msgstr ""
 
-#: cp/class.c:8125
+#: cp/class.c:8126
 #, gcc-internal-format
 msgid "(a pointer to member can only be formed with %<&%E%>)"
 msgstr ""
 
-#: cp/class.c:8200 cp/class.c:8235
+#: cp/class.c:8201 cp/class.c:8236
 #, gcc-internal-format
 msgid "not enough type information"
 msgstr ""
 
-#: cp/class.c:8218 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247
+#: cp/class.c:8219 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247
 #, gcc-internal-format
 msgid "cannot convert %qE from type %qT to type %qT"
 msgstr ""
@@ -36903,12 +36948,12 @@ msgstr ""
 #. A name N used in a class S shall refer to the same declaration
 #. in its context and when re-evaluated in the completed scope of
 #. S.
-#: cp/class.c:8499
+#: cp/class.c:8500
 #, gcc-internal-format
 msgid "declaration of %q#D"
 msgstr ""
 
-#: cp/class.c:8501
+#: cp/class.c:8502
 #, gcc-internal-format
 msgid "changes meaning of %qD from %q#D"
 msgstr ""
@@ -36943,286 +36988,291 @@ msgstr ""
 msgid "%q#T has virtual base classes"
 msgstr ""
 
-#: cp/constexpr.c:478
+#: cp/constexpr.c:483
 #, gcc-internal-format
 msgid "constexpr constructor does not have empty body"
 msgstr ""
 
-#: cp/constexpr.c:584
+#: cp/constexpr.c:589
 #, gcc-internal-format
 msgid "body of %<constexpr%> constructor cannot be a function-try-block"
 msgstr ""
 
-#: cp/constexpr.c:715
+#: cp/constexpr.c:720
 #, gcc-internal-format
 msgid ""
 "%<constexpr%> constructor for union %qT must initialize exactly one non-"
 "static data member"
 msgstr ""
 
-#: cp/constexpr.c:755
+#: cp/constexpr.c:760
 #, gcc-internal-format
 msgid ""
 "member %qD must be initialized by mem-initializer in %<constexpr%> "
 "constructor"
 msgstr ""
 
-#: cp/constexpr.c:787
+#: cp/constexpr.c:792
 #, gcc-internal-format
 msgid "body of constexpr function %qD not a return-statement"
 msgstr ""
 
-#: cp/constexpr.c:841
+#: cp/constexpr.c:846
 #, gcc-internal-format
 msgid "%qD is not usable as a constexpr function because:"
 msgstr ""
 
-#: cp/constexpr.c:1281 cp/constexpr.c:4572
+#: cp/constexpr.c:1286 cp/constexpr.c:4623
 #, gcc-internal-format
 msgid "call to internal function"
 msgstr ""
 
-#: cp/constexpr.c:1299
+#: cp/constexpr.c:1304
 #, gcc-internal-format
 msgid "expression %qE does not designate a constexpr function"
 msgstr ""
 
-#: cp/constexpr.c:1317 cp/constexpr.c:4589
+#: cp/constexpr.c:1322 cp/constexpr.c:4640
 #, gcc-internal-format
 msgid "call to non-constexpr function %qD"
 msgstr ""
 
-#: cp/constexpr.c:1379
+#: cp/constexpr.c:1390
 #, gcc-internal-format
 msgid "%qD called in a constant expression before its definition is complete"
 msgstr ""
 
 #. The definition of fun was somehow unsuitable.
-#: cp/constexpr.c:1384
+#: cp/constexpr.c:1395
 #, gcc-internal-format
 msgid "%qD called in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:1388
+#: cp/constexpr.c:1399
 #, gcc-internal-format
 msgid "%qD used before its definition"
 msgstr ""
 
-#: cp/constexpr.c:1428
+#: cp/constexpr.c:1439
 #, gcc-internal-format
 msgid "call has circular dependency"
 msgstr ""
 
-#: cp/constexpr.c:1439
+#: cp/constexpr.c:1450
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to "
 "increase the maximum)"
 msgstr ""
 
-#: cp/constexpr.c:1511
+#: cp/constexpr.c:1532
 #, gcc-internal-format
 msgid "constexpr call flows off the end of the function"
 msgstr ""
 
-#: cp/constexpr.c:1591
+#: cp/constexpr.c:1612
 #, gcc-internal-format
 msgid "%q+E is not a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:1631
+#: cp/constexpr.c:1652
 #, gcc-internal-format
 msgid "right operand of shift expression %q+E is negative"
 msgstr ""
 
-#: cp/constexpr.c:1638
+#: cp/constexpr.c:1659
 #, gcc-internal-format
 msgid ""
 "right operand of shift expression %q+E is >= than the precision of the left "
 "operand"
 msgstr ""
 
-#: cp/constexpr.c:1656
+#: cp/constexpr.c:1677
 #, gcc-internal-format
 msgid "left operand of shift expression %q+E is negative"
 msgstr ""
 
-#: cp/constexpr.c:1675
+#: cp/constexpr.c:1696
 #, gcc-internal-format
 msgid "shift expression %q+E overflows"
 msgstr ""
 
-#: cp/constexpr.c:1942
+#: cp/constexpr.c:1967
 #, gcc-internal-format
 msgid ""
 "array subscript value %qE is outside the bounds of array %qD of type %qT"
 msgstr ""
 
-#: cp/constexpr.c:1947
+#: cp/constexpr.c:1972
 #, gcc-internal-format
 msgid "array subscript value %qE is outside the bounds of array type %qT"
 msgstr ""
 
-#: cp/constexpr.c:2036
+#: cp/constexpr.c:2083
 #, gcc-internal-format
 msgid "accessing uninitialized array element"
 msgstr ""
 
-#: cp/constexpr.c:2091 cp/constexpr.c:2175 cp/constexpr.c:3549
+#: cp/constexpr.c:2123 cp/constexpr.c:2207 cp/constexpr.c:3587
 #, gcc-internal-format
 msgid "%qE is not a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:2097
+#: cp/constexpr.c:2129
 #, gcc-internal-format
 msgid "mutable %qD is not usable in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:2118
+#: cp/constexpr.c:2150
 #, gcc-internal-format
 msgid ""
 "accessing %qD member instead of initialized %qD member in constant expression"
 msgstr ""
 
-#: cp/constexpr.c:2135
+#: cp/constexpr.c:2167
 #, gcc-internal-format
 msgid "accessing uninitialized member %qD"
 msgstr ""
 
-#: cp/constexpr.c:2853
+#: cp/constexpr.c:2885
 #, gcc-internal-format
 msgid "accessing value of %qE through a %qT glvalue in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:2894
+#: cp/constexpr.c:2926
 #, gcc-internal-format
 msgid "the value of %qD is not usable in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:2901
+#: cp/constexpr.c:2933
 #, gcc-internal-format
 msgid "%qD used in its own initializer"
 msgstr ""
 
-#: cp/constexpr.c:2906
+#: cp/constexpr.c:2938
 #, gcc-internal-format
 msgid "%q#D is not const"
 msgstr ""
 
-#: cp/constexpr.c:2909
+#: cp/constexpr.c:2941
 #, gcc-internal-format
 msgid "%q#D is volatile"
 msgstr ""
 
-#: cp/constexpr.c:2914
+#: cp/constexpr.c:2946
 #, gcc-internal-format
 msgid "%qD was not initialized with a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:2923
+#: cp/constexpr.c:2955
 #, gcc-internal-format
 msgid "%qD was not declared %<constexpr%>"
 msgstr ""
 
-#: cp/constexpr.c:2926
+#: cp/constexpr.c:2958
 #, gcc-internal-format
 msgid "%qD does not have integral or enumeration type"
 msgstr ""
 
-#: cp/constexpr.c:3034
+#: cp/constexpr.c:3066
 #, gcc-internal-format
 msgid "modification of %qE is not a constant-expression"
 msgstr ""
 
-#: cp/constexpr.c:3595 cp/constexpr.c:4941
+#: cp/constexpr.c:3633 cp/constexpr.c:4994
 #, gcc-internal-format
 msgid "temporary of non-literal type %qT in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:3919
+#: cp/constexpr.c:3970
 #, gcc-internal-format
 msgid "a reinterpret_cast is not a constant-expression"
 msgstr ""
 
-#: cp/constexpr.c:3930 cp/constexpr.c:4679
+#: cp/constexpr.c:3981 cp/constexpr.c:4730
 #, gcc-internal-format
 msgid "reinterpret_cast from integer to pointer"
 msgstr ""
 
-#: cp/constexpr.c:3990 cp/constexpr.c:4830 cp/constexpr.c:5117
+#: cp/constexpr.c:4041 cp/constexpr.c:4881 cp/constexpr.c:5170
 #, gcc-internal-format
 msgid "expression %qE is not a constant-expression"
 msgstr ""
 
-#: cp/constexpr.c:4060
+#: cp/constexpr.c:4111
 #, gcc-internal-format
 msgid "statement is not a constant-expression"
 msgstr ""
 
-#: cp/constexpr.c:4063
+#: cp/constexpr.c:4114
 #, gcc-internal-format
 msgid "unexpected expression %qE of kind %s"
 msgstr ""
 
-#: cp/constexpr.c:4133
+#: cp/constexpr.c:4184
 #, gcc-internal-format
 msgid ""
 "%qE is not a constant expression because it refers to mutable subobjects of "
 "%qT"
 msgstr ""
 
-#: cp/constexpr.c:4146
+#: cp/constexpr.c:4197
 #, gcc-internal-format
 msgid ""
 "conversion from pointer type %qT to arithmetic type %qT in a constant-"
 "expression"
 msgstr ""
 
-#: cp/constexpr.c:4508
+#: cp/constexpr.c:4559
 #, gcc-internal-format
 msgid "expression %qE has side-effects"
 msgstr ""
 
-#: cp/constexpr.c:4705
+#: cp/constexpr.c:4756
 #, gcc-internal-format
 msgid ""
 "address-of an object %qE with thread local or automatic storage is not a "
 "constant expression"
 msgstr ""
 
-#: cp/constexpr.c:4737
+#: cp/constexpr.c:4788
 #, gcc-internal-format
 msgid "use of %<this%> in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:4842
+#: cp/constexpr.c:4893
 #, gcc-internal-format
 msgid ""
 "typeid-expression is not a constant expression because %qE is of polymorphic "
 "type"
 msgstr ""
 
-#: cp/constexpr.c:4904
+#: cp/constexpr.c:4955
 #, gcc-internal-format
 msgid "cast to non-integral type %qT in a constant expression"
 msgstr ""
 
-#: cp/constexpr.c:4989
+#: cp/constexpr.c:5042
 #, gcc-internal-format
 msgid "division by zero is not a constant-expression"
 msgstr ""
 
-#: cp/constexpr.c:5094
+#: cp/constexpr.c:5147
 #, gcc-internal-format
 msgid "%<delete[]%> is not a constant-expression"
 msgstr ""
 
-#: cp/constexpr.c:5125
+#: cp/constexpr.c:5178
 #, gcc-internal-format
 msgid "non-constant array initialization"
 msgstr ""
 
-#: cp/constexpr.c:5142
+#: cp/constexpr.c:5198
+#, gcc-internal-format
+msgid "%<goto%> is not a constant-expression"
+msgstr ""
+
+#: cp/constexpr.c:5206
 #, gcc-internal-format, gfc-internal-format
 msgid "unexpected AST of kind %s"
 msgstr ""
@@ -37297,17 +37347,17 @@ msgstr ""
 msgid "try statements are not allowed inside loops marked with #pragma simd"
 msgstr ""
 
-#: cp/cp-gimplify.c:1350
+#: cp/cp-gimplify.c:1372
 #, gcc-internal-format
 msgid "throw will always call terminate()"
 msgstr ""
 
-#: cp/cp-gimplify.c:1353
+#: cp/cp-gimplify.c:1375
 #, gcc-internal-format
 msgid "in C++11 destructors default to noexcept"
 msgstr ""
 
-#: cp/cp-gimplify.c:1364
+#: cp/cp-gimplify.c:1386
 #, gcc-internal-format
 msgid ""
 "in C++11 this throw will terminate because destructors default to noexcept"
@@ -37348,7 +37398,7 @@ msgstr ""
 msgid "conversion from %qT to %qT discards qualifiers"
 msgstr ""
 
-#: cp/cvt.c:489 cp/typeck.c:6986
+#: cp/cvt.c:489 cp/typeck.c:6985
 #, gcc-internal-format
 msgid "casting %qT to %qT does not dereference pointer"
 msgstr ""
@@ -37705,7 +37755,7 @@ msgstr ""
 msgid "  candidate conversions include %qD and %qD"
 msgstr ""
 
-#: cp/cxx-pretty-print.c:2189
+#: cp/cxx-pretty-print.c:2206
 #, gcc-internal-format
 msgid "template-parameter-"
 msgstr ""
@@ -37720,7 +37770,7 @@ msgstr ""
 msgid "%qD was declared %<extern%> and later %<static%>"
 msgstr ""
 
-#: cp/decl.c:1202 cp/decl.c:1926 cp/decl.c:1936 cp/decl.c:2475
+#: cp/decl.c:1202 cp/decl.c:1926 cp/decl.c:1936 cp/decl.c:2483
 #, gcc-internal-format
 msgid "previous declaration of %qD"
 msgstr ""
@@ -37935,12 +37985,12 @@ msgstr ""
 #. that specialization that would cause an implicit
 #. instantiation to take place, in every translation unit in
 #. which such a use occurs.
-#: cp/decl.c:2341
+#: cp/decl.c:2349
 #, gcc-internal-format
 msgid "explicit specialization of %qD after first use"
 msgstr ""
 
-#: cp/decl.c:2472
+#: cp/decl.c:2480
 #, gcc-internal-format
 msgid ""
 "%qD: visibility attribute ignored because it conflicts with previous "
@@ -37948,27 +37998,27 @@ msgid ""
 msgstr ""
 
 #. Reject two definitions.
-#: cp/decl.c:2722 cp/decl.c:2751 cp/decl.c:2784 cp/decl.c:2801 cp/decl.c:2874
+#: cp/decl.c:2730 cp/decl.c:2759 cp/decl.c:2792 cp/decl.c:2809 cp/decl.c:2882
 #, gcc-internal-format
 msgid "redefinition of %q#D"
 msgstr ""
 
-#: cp/decl.c:2738
+#: cp/decl.c:2746
 #, gcc-internal-format
 msgid "%qD conflicts with used function"
 msgstr ""
 
-#: cp/decl.c:2748
+#: cp/decl.c:2756
 #, gcc-internal-format
 msgid "%q#D not declared in class"
 msgstr ""
 
-#: cp/decl.c:2762 cp/decl.c:2811
+#: cp/decl.c:2770 cp/decl.c:2819
 #, gcc-internal-format
 msgid "%q+D redeclared inline with %<gnu_inline%> attribute"
 msgstr ""
 
-#: cp/decl.c:2765 cp/decl.c:2814
+#: cp/decl.c:2773 cp/decl.c:2822
 #, gcc-internal-format
 msgid "%q+D redeclared inline without %<gnu_inline%> attribute"
 msgstr ""
@@ -37976,392 +38026,392 @@ msgstr ""
 #. is_primary=
 #. is_partial=
 #. is_friend_decl=
-#: cp/decl.c:2831
+#: cp/decl.c:2839
 #, gcc-internal-format
 msgid "redeclaration of friend %q#D may not have default template arguments"
 msgstr ""
 
-#: cp/decl.c:2845
+#: cp/decl.c:2853
 #, gcc-internal-format
 msgid "thread-local declaration of %q#D follows non-thread-local declaration"
 msgstr ""
 
-#: cp/decl.c:2848
+#: cp/decl.c:2856
 #, gcc-internal-format
 msgid "non-thread-local declaration of %q#D follows thread-local declaration"
 msgstr ""
 
-#: cp/decl.c:2863 cp/decl.c:2882 cp/name-lookup.c:582 cp/name-lookup.c:1166
+#: cp/decl.c:2871 cp/decl.c:2890 cp/name-lookup.c:582 cp/name-lookup.c:1166
 #: cp/name-lookup.c:1189
 #, gcc-internal-format
 msgid "redeclaration of %q#D"
 msgstr ""
 
-#: cp/decl.c:3031
+#: cp/decl.c:3039
 #, gcc-internal-format
 msgid "jump to label %qD"
 msgstr ""
 
-#: cp/decl.c:3032
+#: cp/decl.c:3040
 #, gcc-internal-format
 msgid "jump to case label"
 msgstr ""
 
-#: cp/decl.c:3034
+#: cp/decl.c:3042
 #, gcc-internal-format
 msgid "  from here"
 msgstr ""
 
-#: cp/decl.c:3057 cp/decl.c:3276
+#: cp/decl.c:3065 cp/decl.c:3284
 #, gcc-internal-format
 msgid "  exits OpenMP structured block"
 msgstr ""
 
-#: cp/decl.c:3084
+#: cp/decl.c:3092
 #, gcc-internal-format
 msgid "  crosses initialization of %q#D"
 msgstr ""
 
-#: cp/decl.c:3087 cp/decl.c:3239
+#: cp/decl.c:3095 cp/decl.c:3247
 #, gcc-internal-format
 msgid "  enters scope of %q#D which has non-trivial destructor"
 msgstr ""
 
-#: cp/decl.c:3105 cp/decl.c:3247
+#: cp/decl.c:3113 cp/decl.c:3255
 #, gcc-internal-format
 msgid "  enters try block"
 msgstr ""
 
-#: cp/decl.c:3107 cp/decl.c:3229 cp/decl.c:3249
+#: cp/decl.c:3115 cp/decl.c:3237 cp/decl.c:3257
 #, gcc-internal-format
 msgid "  enters catch block"
 msgstr ""
 
-#: cp/decl.c:3120 cp/decl.c:3257
+#: cp/decl.c:3128 cp/decl.c:3265
 #, gcc-internal-format
 msgid "  enters OpenMP structured block"
 msgstr ""
 
-#: cp/decl.c:3133 cp/decl.c:3251
+#: cp/decl.c:3141 cp/decl.c:3259
 #, gcc-internal-format
 msgid "  enters synchronized or atomic statement"
 msgstr ""
 
-#: cp/decl.c:3236
+#: cp/decl.c:3244
 #, gcc-internal-format
 msgid "  skips initialization of %q#D"
 msgstr ""
 
-#: cp/decl.c:3293 cp/parser.c:11755 cp/parser.c:11782
+#: cp/decl.c:3301 cp/parser.c:11766 cp/parser.c:11793
 #, gcc-internal-format
 msgid "invalid exit from OpenMP structured block"
 msgstr ""
 
-#: cp/decl.c:3325
+#: cp/decl.c:3333
 #, gcc-internal-format
 msgid "label named wchar_t"
 msgstr ""
 
-#: cp/decl.c:3644
+#: cp/decl.c:3652
 #, gcc-internal-format
 msgid "%qD is not a type"
 msgstr ""
 
-#: cp/decl.c:3651 cp/parser.c:6033
+#: cp/decl.c:3659 cp/parser.c:6033
 #, gcc-internal-format
 msgid "%qD used without template parameters"
 msgstr ""
 
-#: cp/decl.c:3660
+#: cp/decl.c:3668
 #, gcc-internal-format
 msgid "%q#T is not a class"
 msgstr ""
 
-#: cp/decl.c:3684 cp/decl.c:3776
+#: cp/decl.c:3692 cp/decl.c:3784
 #, gcc-internal-format
 msgid "no class template named %q#T in %q#T"
 msgstr ""
 
-#: cp/decl.c:3685
+#: cp/decl.c:3693
 #, gcc-internal-format
 msgid "no type named %q#T in %q#T"
 msgstr ""
 
-#: cp/decl.c:3697
+#: cp/decl.c:3705
 #, gcc-internal-format
 msgid "lookup of %qT in %qT is ambiguous"
 msgstr ""
 
-#: cp/decl.c:3706
+#: cp/decl.c:3714
 #, gcc-internal-format
 msgid "%<typename %T::%D%> names %q#T, which is not a class template"
 msgstr ""
 
-#: cp/decl.c:3713
+#: cp/decl.c:3721
 #, gcc-internal-format
 msgid "%<typename %T::%D%> names %q#T, which is not a type"
 msgstr ""
 
-#: cp/decl.c:3785
+#: cp/decl.c:3793
 #, gcc-internal-format
 msgid "template parameters do not match template %qD"
 msgstr ""
 
-#: cp/decl.c:4518
+#: cp/decl.c:4526
 #, gcc-internal-format
 msgid "an anonymous struct cannot have function members"
 msgstr ""
 
-#: cp/decl.c:4521
+#: cp/decl.c:4529
 #, gcc-internal-format
 msgid "an anonymous union cannot have function members"
 msgstr ""
 
-#: cp/decl.c:4539
+#: cp/decl.c:4547
 #, gcc-internal-format
 msgid "member %q+#D with constructor not allowed in anonymous aggregate"
 msgstr ""
 
-#: cp/decl.c:4542
+#: cp/decl.c:4550
 #, gcc-internal-format
 msgid "member %q+#D with destructor not allowed in anonymous aggregate"
 msgstr ""
 
-#: cp/decl.c:4545
+#: cp/decl.c:4553
 #, gcc-internal-format
 msgid ""
 "member %q+#D with copy assignment operator not allowed in anonymous aggregate"
 msgstr ""
 
-#: cp/decl.c:4563
+#: cp/decl.c:4571
 #, gcc-internal-format
 msgid "attribute ignored in declaration of %q#T"
 msgstr ""
 
-#: cp/decl.c:4566
+#: cp/decl.c:4574
 #, gcc-internal-format
 msgid "attribute for %q#T must follow the %qs keyword"
 msgstr ""
 
-#: cp/decl.c:4589
+#: cp/decl.c:4597
 #, gcc-internal-format
 msgid "multiple types in one declaration"
 msgstr ""
 
-#: cp/decl.c:4594
+#: cp/decl.c:4602
 #, gcc-internal-format
 msgid "redeclaration of C++ built-in type %qT"
 msgstr ""
 
-#: cp/decl.c:4612
+#: cp/decl.c:4620
 #, gcc-internal-format
 msgid "%<auto%> can only be specified for variables or function declarations"
 msgstr ""
 
-#: cp/decl.c:4638
+#: cp/decl.c:4646
 #, gcc-internal-format
 msgid "missing type-name in typedef-declaration"
 msgstr ""
 
-#: cp/decl.c:4646
+#: cp/decl.c:4654
 #, gcc-internal-format
 msgid "ISO C++ prohibits anonymous structs"
 msgstr ""
 
-#: cp/decl.c:4653
+#: cp/decl.c:4661
 #, gcc-internal-format
 msgid "%<inline%> can only be specified for functions"
 msgstr ""
 
-#: cp/decl.c:4656
+#: cp/decl.c:4664
 #, gcc-internal-format
 msgid "%<virtual%> can only be specified for functions"
 msgstr ""
 
-#: cp/decl.c:4661
+#: cp/decl.c:4669
 #, gcc-internal-format
 msgid "%<friend%> can only be specified inside a class"
 msgstr ""
 
-#: cp/decl.c:4664
+#: cp/decl.c:4672
 #, gcc-internal-format
 msgid "%<explicit%> can only be specified for constructors"
 msgstr ""
 
-#: cp/decl.c:4667
+#: cp/decl.c:4675
 #, gcc-internal-format
 msgid "a storage class can only be specified for objects and functions"
 msgstr ""
 
-#: cp/decl.c:4671
+#: cp/decl.c:4679
 #, gcc-internal-format
 msgid "%<const%> can only be specified for objects and functions"
 msgstr ""
 
-#: cp/decl.c:4675
+#: cp/decl.c:4683
 #, gcc-internal-format
 msgid "%<volatile%> can only be specified for objects and functions"
 msgstr ""
 
-#: cp/decl.c:4679
+#: cp/decl.c:4687
 #, gcc-internal-format
 msgid "%<__restrict%> can only be specified for objects and functions"
 msgstr ""
 
-#: cp/decl.c:4683
+#: cp/decl.c:4691
 #, gcc-internal-format
 msgid "%<__thread%> can only be specified for objects and functions"
 msgstr ""
 
-#: cp/decl.c:4687
+#: cp/decl.c:4695
 #, gcc-internal-format
 msgid "%<typedef%> was ignored in this declaration"
 msgstr ""
 
-#: cp/decl.c:4690
+#: cp/decl.c:4698
 #, gcc-internal-format
 msgid "%<constexpr%> cannot be used for type declarations"
 msgstr ""
 
-#: cp/decl.c:4712
+#: cp/decl.c:4720
 #, gcc-internal-format
 msgid "attribute ignored in explicit instantiation %q#T"
 msgstr ""
 
-#: cp/decl.c:4715
+#: cp/decl.c:4723
 #, gcc-internal-format
 msgid "no attribute can be applied to an explicit instantiation"
 msgstr ""
 
-#: cp/decl.c:4787
+#: cp/decl.c:4795
 #, 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.c:4791
+#: cp/decl.c:4799
 #, gcc-internal-format
 msgid ""
 "ignoring attributes applied to dependent type %qT without an associated "
 "declaration"
 msgstr ""
 
-#: cp/decl.c:4860 cp/decl2.c:889
+#: cp/decl.c:4868 cp/decl2.c:889
 #, gcc-internal-format
 msgid "typedef %qD is initialized (use decltype instead)"
 msgstr ""
 
-#: cp/decl.c:4868
+#: cp/decl.c:4876
 #, gcc-internal-format
 msgid "declaration of %q#D has %<extern%> and is initialized"
 msgstr ""
 
-#: cp/decl.c:4897
+#: cp/decl.c:4905
 #, gcc-internal-format
 msgid "definition of %q#D is marked %<dllimport%>"
 msgstr ""
 
-#: cp/decl.c:4921
+#: cp/decl.c:4929
 #, gcc-internal-format
 msgid "%q+#D is not a static data member of %q#T"
 msgstr ""
 
-#: cp/decl.c:4930
+#: cp/decl.c:4938
 #, gcc-internal-format
 msgid "non-member-template declaration of %qD"
 msgstr ""
 
-#: cp/decl.c:4931
+#: cp/decl.c:4939
 #, gcc-internal-format
 msgid "does not match member template declaration here"
 msgstr ""
 
-#: cp/decl.c:4944
+#: cp/decl.c:4952
 #, gcc-internal-format
 msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>"
 msgstr ""
 
-#: cp/decl.c:4956
+#: cp/decl.c:4964
 #, gcc-internal-format
 msgid "duplicate initialization of %qD"
 msgstr ""
 
-#: cp/decl.c:4961
+#: cp/decl.c:4969
 #, gcc-internal-format
 msgid "%qD declared %<constexpr%> outside its class"
 msgstr ""
 
-#: cp/decl.c:5004
+#: cp/decl.c:5012
 #, gcc-internal-format
 msgid "declaration of %q#D outside of class is not definition"
 msgstr ""
 
-#: cp/decl.c:5037
+#: cp/decl.c:5045
 #, gcc-internal-format
 msgid "%qD declared %<thread_local%> in %<constexpr%> function"
 msgstr ""
 
-#: cp/decl.c:5040
+#: cp/decl.c:5048
 #, gcc-internal-format
 msgid "%qD declared %<static%> in %<constexpr%> function"
 msgstr ""
 
-#: cp/decl.c:5105
+#: cp/decl.c:5113
 #, gcc-internal-format
 msgid "variable %q#D has initializer but incomplete type"
 msgstr ""
 
-#: cp/decl.c:5111 cp/decl.c:5975
+#: cp/decl.c:5119 cp/decl.c:5982
 #, gcc-internal-format
 msgid "elements of array %q#D have incomplete type"
 msgstr ""
 
-#: cp/decl.c:5118 cp/decl.c:6621
+#: cp/decl.c:5126 cp/decl.c:6628
 #, gcc-internal-format
 msgid "declaration of %q#D has no initializer"
 msgstr ""
 
-#: cp/decl.c:5120
+#: cp/decl.c:5128
 #, gcc-internal-format
 msgid "aggregate %q#D has incomplete type and cannot be defined"
 msgstr ""
 
-#: cp/decl.c:5154
+#: cp/decl.c:5162
 #, gcc-internal-format
 msgid "%qD declared as reference but not initialized"
 msgstr ""
 
-#: cp/decl.c:5211
+#: cp/decl.c:5219
 #, gcc-internal-format
 msgid "name used in a GNU-style designated initializer for an array"
 msgstr ""
 
-#: cp/decl.c:5217
+#: cp/decl.c:5225
 #, gcc-internal-format
 msgid "name %qD used in a GNU-style designated initializer for an array"
 msgstr ""
 
-#: cp/decl.c:5233 cp/typeck2.c:1281 cp/typeck2.c:1391
+#: cp/decl.c:5241 cp/typeck2.c:1284 cp/typeck2.c:1394
 #, gcc-internal-format
 msgid "non-trivial designated initializers not supported"
 msgstr ""
 
-#: cp/decl.c:5236
+#: cp/decl.c:5244
 #, gcc-internal-format
 msgid "C99 designator %qE is not an integral constant-expression"
 msgstr ""
 
-#: cp/decl.c:5284
+#: cp/decl.c:5292
 #, gcc-internal-format
 msgid "initializer fails to determine size of %qD"
 msgstr ""
 
-#: cp/decl.c:5290
+#: cp/decl.c:5298
 #, gcc-internal-format
 msgid "array size missing in %qD"
 msgstr ""
 
-#: cp/decl.c:5301
+#: cp/decl.c:5309
 #, gcc-internal-format
 msgid "zero-size array %qD"
 msgstr ""
@@ -38369,916 +38419,923 @@ msgstr ""
 #. An automatic variable with an incomplete type: that is an error.
 #. Don't talk about array types here, since we took care of that
 #. message in grokdeclarator.
-#: cp/decl.c:5343
+#: cp/decl.c:5348
 #, gcc-internal-format
 msgid "storage size of %qD isn%'t known"
 msgstr ""
 
-#: cp/decl.c:5366
+#: cp/decl.c:5371
 #, gcc-internal-format
 msgid "storage size of %qD isn%'t constant"
 msgstr ""
 
-#: cp/decl.c:5412
+#: cp/decl.c:5417
 #, 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.c:5416
+#: cp/decl.c:5421
 #, gcc-internal-format
 msgid "you can work around this by removing the initializer"
 msgstr ""
 
-#: cp/decl.c:5443
+#: cp/decl.c:5448
 #, gcc-internal-format
 msgid "uninitialized const %qD"
 msgstr ""
 
-#: cp/decl.c:5447
+#: cp/decl.c:5452
 #, gcc-internal-format
 msgid "uninitialized variable %qD in %<constexpr%> function"
 msgstr ""
 
-#: cp/decl.c:5457
+#: cp/decl.c:5462
 #, gcc-internal-format
 msgid "%q#T has no user-provided default constructor"
 msgstr ""
 
-#: cp/decl.c:5461
+#: cp/decl.c:5466
 #, gcc-internal-format
 msgid ""
 "constructor is not user-provided because it is explicitly defaulted in the "
 "class body"
 msgstr ""
 
-#: cp/decl.c:5464
+#: cp/decl.c:5469
 #, gcc-internal-format
 msgid "and the implicitly-defined constructor does not initialize %q#D"
 msgstr ""
 
-#: cp/decl.c:5587
+#: cp/decl.c:5592
 #, gcc-internal-format
 msgid "invalid type %qT as initializer for a vector of type %qT"
 msgstr ""
 
-#: cp/decl.c:5628
+#: cp/decl.c:5633
 #, gcc-internal-format
 msgid "initializer for %qT must be brace-enclosed"
 msgstr ""
 
-#: cp/decl.c:5654
+#: cp/decl.c:5659
 #, gcc-internal-format
 msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT"
 msgstr ""
 
-#: cp/decl.c:5662
+#: cp/decl.c:5667
 #, gcc-internal-format
 msgid "%qT has no non-static data member named %qD"
 msgstr ""
 
-#: cp/decl.c:5682
+#: cp/decl.c:5687
 #, gcc-internal-format
 msgid "invalid initializer for %q#D"
 msgstr ""
 
-#: cp/decl.c:5712
+#: cp/decl.c:5717
 #, gcc-internal-format
 msgid "C99 designator %qE outside aggregate initializer"
 msgstr ""
 
-#: cp/decl.c:5749 cp/decl.c:5954 cp/typeck2.c:1268 cp/typeck2.c:1477
-#: cp/typeck2.c:1521 cp/typeck2.c:1568
+#: cp/decl.c:5754 cp/decl.c:5961 cp/typeck2.c:1271 cp/typeck2.c:1480
+#: cp/typeck2.c:1524 cp/typeck2.c:1571
 #, gcc-internal-format
 msgid "too many initializers for %qT"
 msgstr ""
 
-#: cp/decl.c:5788
+#: cp/decl.c:5793
 #, gcc-internal-format
 msgid "braces around scalar initializer for type %qT"
 msgstr ""
 
-#: cp/decl.c:5895
+#: cp/decl.c:5902
 #, gcc-internal-format
 msgid "missing braces around initializer for %qT"
 msgstr ""
 
-#: cp/decl.c:5977
+#: cp/decl.c:5984
 #, gcc-internal-format
 msgid "elements of array %q#T have incomplete type"
 msgstr ""
 
-#: cp/decl.c:5985
+#: cp/decl.c:5992
 #, gcc-internal-format
 msgid "variable-sized compound literal"
 msgstr ""
 
-#: cp/decl.c:6039
+#: cp/decl.c:6046
 #, gcc-internal-format
 msgid "%q#D has incomplete type"
 msgstr ""
 
-#: cp/decl.c:6059
+#: cp/decl.c:6066
 #, gcc-internal-format
 msgid "scalar object %qD requires one element in initializer"
 msgstr ""
 
-#: cp/decl.c:6102
+#: cp/decl.c:6109
 #, gcc-internal-format
 msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>"
 msgstr ""
 
-#: cp/decl.c:6196
+#: cp/decl.c:6203
 #, gcc-internal-format
 msgid "array %qD initialized by parenthesized string literal %qE"
 msgstr ""
 
-#: cp/decl.c:6227
+#: cp/decl.c:6234
 #, gcc-internal-format
 msgid "initializer invalid for static member with constructor"
 msgstr ""
 
-#: cp/decl.c:6229
+#: cp/decl.c:6236
 #, gcc-internal-format
 msgid "non-constant in-class initialization invalid for static member %qD"
 msgstr ""
 
-#: cp/decl.c:6234
+#: cp/decl.c:6241
 #, gcc-internal-format
 msgid "(an out of class initialization is required)"
 msgstr ""
 
-#: cp/decl.c:6411
+#: cp/decl.c:6418
 #, gcc-internal-format
 msgid "reference %qD is initialized with itself"
 msgstr ""
 
-#: cp/decl.c:6580
+#: cp/decl.c:6587
 #, gcc-internal-format
 msgid "assignment (not initialization) in declaration"
 msgstr ""
 
-#: cp/decl.c:6732
+#: cp/decl.c:6645
+#, gcc-internal-format
+msgid ""
+"initializer for %<decltype(auto) %D%> has function type (did you forget the "
+"%<()%> ?)"
+msgstr ""
+
+#: cp/decl.c:6746
 #, gcc-internal-format
 msgid "variable concept has no initializer"
 msgstr ""
 
-#: cp/decl.c:6760
+#: cp/decl.c:6774
 #, gcc-internal-format
 msgid "shadowing previous type declaration of %q#D"
 msgstr ""
 
-#: cp/decl.c:6834
+#: cp/decl.c:6848
 #, gcc-internal-format
 msgid "Java object %qD not allocated with %<new%>"
 msgstr ""
 
-#: cp/decl.c:6882
+#: cp/decl.c:6896
 #, gcc-internal-format
 msgid "non-static data member %qD has Java class type"
 msgstr ""
 
-#: cp/decl.c:6963
+#: cp/decl.c:6977
 #, gcc-internal-format
 msgid "function %q#D is initialized like a variable"
 msgstr ""
 
-#: cp/decl.c:7397
+#: cp/decl.c:7411
 #, gcc-internal-format
 msgid ""
 "non-local variable %qD declared %<__thread%> needs dynamic initialization"
 msgstr ""
 
-#: cp/decl.c:7400
+#: cp/decl.c:7414
 #, gcc-internal-format
 msgid ""
 "non-local variable %qD declared %<__thread%> has a non-trivial destructor"
 msgstr ""
 
-#: cp/decl.c:7406
+#: cp/decl.c:7420
 #, gcc-internal-format
 msgid "C++11 %<thread_local%> allows dynamic initialization and destruction"
 msgstr ""
 
-#: cp/decl.c:7633
+#: cp/decl.c:7647
 #, gcc-internal-format
 msgid "initializer fails to determine size of %qT"
 msgstr ""
 
-#: cp/decl.c:7637
+#: cp/decl.c:7651
 #, gcc-internal-format
 msgid "array size missing in %qT"
 msgstr ""
 
-#: cp/decl.c:7640
+#: cp/decl.c:7654
 #, gcc-internal-format
 msgid "zero-size array %qT"
 msgstr ""
 
-#: cp/decl.c:7656
+#: cp/decl.c:7670
 #, gcc-internal-format
 msgid "destructor for alien class %qT cannot be a member"
 msgstr ""
 
-#: cp/decl.c:7658
+#: cp/decl.c:7672
 #, gcc-internal-format
 msgid "constructor for alien class %qT cannot be a member"
 msgstr ""
 
-#: cp/decl.c:7682
+#: cp/decl.c:7696
 #, gcc-internal-format
 msgid "%qD declared as a %<virtual%> variable"
 msgstr ""
 
-#: cp/decl.c:7684
+#: cp/decl.c:7698
 #, gcc-internal-format
 msgid "%qD declared as an %<inline%> variable"
 msgstr ""
 
-#: cp/decl.c:7686
+#: cp/decl.c:7700
 #, gcc-internal-format
 msgid ""
 "%<const%> and %<volatile%> function specifiers on %qD invalid in variable "
 "declaration"
 msgstr ""
 
-#: cp/decl.c:7691
+#: cp/decl.c:7705
 #, gcc-internal-format
 msgid "%qD declared as a %<virtual%> parameter"
 msgstr ""
 
-#: cp/decl.c:7693
+#: cp/decl.c:7707
 #, gcc-internal-format
 msgid "%qD declared as an %<inline%> parameter"
 msgstr ""
 
-#: cp/decl.c:7695
+#: cp/decl.c:7709
 #, gcc-internal-format
 msgid ""
 "%<const%> and %<volatile%> function specifiers on %qD invalid in parameter "
 "declaration"
 msgstr ""
 
-#: cp/decl.c:7700
+#: cp/decl.c:7714
 #, gcc-internal-format
 msgid "%qD declared as a %<virtual%> type"
 msgstr ""
 
-#: cp/decl.c:7702
+#: cp/decl.c:7716
 #, gcc-internal-format
 msgid "%qD declared as an %<inline%> type"
 msgstr ""
 
-#: cp/decl.c:7704
+#: cp/decl.c:7718
 #, gcc-internal-format
 msgid ""
 "%<const%> and %<volatile%> function specifiers on %qD invalid in type "
 "declaration"
 msgstr ""
 
-#: cp/decl.c:7709
+#: cp/decl.c:7723
 #, gcc-internal-format
 msgid "%qD declared as a %<virtual%> field"
 msgstr ""
 
-#: cp/decl.c:7711
+#: cp/decl.c:7725
 #, gcc-internal-format
 msgid "%qD declared as an %<inline%> field"
 msgstr ""
 
-#: cp/decl.c:7713
+#: cp/decl.c:7727
 #, gcc-internal-format
 msgid ""
 "%<const%> and %<volatile%> function specifiers on %qD invalid in field "
 "declaration"
 msgstr ""
 
-#: cp/decl.c:7720
+#: cp/decl.c:7734
 #, gcc-internal-format
 msgid "%q+D declared as a friend"
 msgstr ""
 
-#: cp/decl.c:7726
+#: cp/decl.c:7740
 #, gcc-internal-format
 msgid "%q+D declared with an exception specification"
 msgstr ""
 
-#: cp/decl.c:7759
+#: cp/decl.c:7773
 #, gcc-internal-format
 msgid "definition of %qD is not in namespace enclosing %qT"
 msgstr ""
 
-#: cp/decl.c:7799
+#: cp/decl.c:7813
 #, gcc-internal-format
 msgid "static member function %q#D declared with type qualifiers"
 msgstr ""
 
-#: cp/decl.c:7809
+#: cp/decl.c:7823
 #, gcc-internal-format
 msgid "concept %q#D declared with function parameters"
 msgstr ""
 
-#: cp/decl.c:7815
+#: cp/decl.c:7829
 #, gcc-internal-format
 msgid "concept %q#D declared with a deduced return type"
 msgstr ""
 
-#: cp/decl.c:7817
+#: cp/decl.c:7831
 #, gcc-internal-format
 msgid "concept %q#D with non-%<bool%> return type %qT"
 msgstr ""
 
-#: cp/decl.c:7888
+#: cp/decl.c:7902
 #, gcc-internal-format
 msgid "concept %qD has no definition"
 msgstr ""
 
-#: cp/decl.c:7956
+#: cp/decl.c:7970
 #, gcc-internal-format
 msgid "defining explicit specialization %qD in friend declaration"
 msgstr ""
 
 #. Something like `template <class T> friend void f<T>()'.
-#: cp/decl.c:7966
+#: cp/decl.c:7980
 #, gcc-internal-format
 msgid "invalid use of template-id %qD in declaration of primary template"
 msgstr ""
 
-#: cp/decl.c:7984
+#: cp/decl.c:7998
 #, gcc-internal-format
 msgid ""
 "default arguments are not allowed in declaration of friend template "
 "specialization %qD"
 msgstr ""
 
-#: cp/decl.c:7992
+#: cp/decl.c:8006
 #, gcc-internal-format
 msgid ""
 "%<inline%> is not allowed in declaration of friend template specialization "
 "%qD"
 msgstr ""
 
-#: cp/decl.c:8039
+#: cp/decl.c:8053
 #, gcc-internal-format
 msgid "cannot declare %<::main%> to be a template"
 msgstr ""
 
-#: cp/decl.c:8041
+#: cp/decl.c:8055
 #, gcc-internal-format
 msgid "cannot declare %<::main%> to be inline"
 msgstr ""
 
-#: cp/decl.c:8043
+#: cp/decl.c:8057
 #, gcc-internal-format
 msgid "cannot declare %<::main%> to be constexpr"
 msgstr ""
 
-#: cp/decl.c:8045
+#: cp/decl.c:8059
 #, gcc-internal-format
 msgid "cannot declare %<::main%> to be static"
 msgstr ""
 
-#: cp/decl.c:8102
+#: cp/decl.c:8116
 #, gcc-internal-format
 msgid "static member function %qD cannot have cv-qualifier"
 msgstr ""
 
-#: cp/decl.c:8103
+#: cp/decl.c:8117
 #, gcc-internal-format
 msgid "non-member function %qD cannot have cv-qualifier"
 msgstr ""
 
-#: cp/decl.c:8111
+#: cp/decl.c:8125
 #, gcc-internal-format
 msgid "static member function %qD cannot have ref-qualifier"
 msgstr ""
 
-#: cp/decl.c:8112
+#: cp/decl.c:8126
 #, gcc-internal-format
 msgid "non-member function %qD cannot have ref-qualifier"
 msgstr ""
 
-#: cp/decl.c:8129
+#: cp/decl.c:8143
 #, gcc-internal-format
 msgid "literal operator with C linkage"
 msgstr ""
 
-#: cp/decl.c:8138
+#: cp/decl.c:8152
 #, gcc-internal-format
 msgid "%qD has invalid argument list"
 msgstr ""
 
-#: cp/decl.c:8146
+#: cp/decl.c:8160
 #, gcc-internal-format
 msgid "integer suffix %<%s%> shadowed by implementation"
 msgstr ""
 
-#: cp/decl.c:8152
+#: cp/decl.c:8166
 #, gcc-internal-format
 msgid "floating point suffix %<%s%> shadowed by implementation"
 msgstr ""
 
-#: cp/decl.c:8158
+#: cp/decl.c:8172
 #, gcc-internal-format
 msgid "%qD must be a non-member function"
 msgstr ""
 
-#: cp/decl.c:8237
+#: cp/decl.c:8251
 #, gcc-internal-format
 msgid "%<::main%> must return %<int%>"
 msgstr ""
 
-#: cp/decl.c:8279
+#: cp/decl.c:8293
 #, gcc-internal-format
 msgid "definition of implicitly-declared %qD"
 msgstr ""
 
-#: cp/decl.c:8284
+#: cp/decl.c:8298
 #, gcc-internal-format
 msgid "definition of explicitly-defaulted %q+D"
 msgstr ""
 
-#: cp/decl.c:8285
+#: cp/decl.c:8299
 #, gcc-internal-format
 msgid "%q+#D explicitly defaulted here"
 msgstr ""
 
-#: cp/decl.c:8302 cp/decl2.c:787
+#: cp/decl.c:8316 cp/decl2.c:787
 #, gcc-internal-format
 msgid "no %q#D member function declared in class %qT"
 msgstr ""
 
-#: cp/decl.c:8486
+#: cp/decl.c:8500
 #, gcc-internal-format
 msgid "cannot declare %<::main%> to be a global variable"
 msgstr ""
 
-#: cp/decl.c:8494
+#: cp/decl.c:8508
 #, gcc-internal-format
 msgid "a non-template variable cannot be %<concept%>"
 msgstr ""
 
-#: cp/decl.c:8501
+#: cp/decl.c:8515
 #, gcc-internal-format
 msgid "concept must have type %<bool%>"
 msgstr ""
 
-#: cp/decl.c:8614
+#: cp/decl.c:8628
 #, gcc-internal-format
 msgid "in-class initialization of static data member %q#D of incomplete type"
 msgstr ""
 
-#: cp/decl.c:8618
+#: cp/decl.c:8632
 #, gcc-internal-format
 msgid ""
 "%<constexpr%> needed for in-class initialization of static data member %q#D "
 "of non-integral type"
 msgstr ""
 
-#: cp/decl.c:8621
+#: cp/decl.c:8635
 #, gcc-internal-format
 msgid "in-class initialization of static data member %q#D of non-literal type"
 msgstr ""
 
-#: cp/decl.c:8634
+#: cp/decl.c:8648
 #, gcc-internal-format
 msgid ""
 "invalid in-class initialization of static data member of non-integral type "
 "%qT"
 msgstr ""
 
-#: cp/decl.c:8640
+#: cp/decl.c:8654
 #, gcc-internal-format
 msgid "ISO C++ forbids in-class initialization of non-const static member %qD"
 msgstr ""
 
-#: cp/decl.c:8644
+#: cp/decl.c:8658
 #, gcc-internal-format
 msgid ""
 "ISO C++ forbids initialization of member constant %qD of non-integral type "
 "%qT"
 msgstr ""
 
-#: cp/decl.c:8739 cp/decl.c:8766
+#: cp/decl.c:8753 cp/decl.c:8780
 #, gcc-internal-format
 msgid "size of array %qD has non-integral type %qT"
 msgstr ""
 
-#: cp/decl.c:8742 cp/decl.c:8768
+#: cp/decl.c:8756 cp/decl.c:8782
 #, gcc-internal-format
 msgid "size of array has non-integral type %qT"
 msgstr ""
 
-#: cp/decl.c:8799 cp/decl.c:8852
+#: cp/decl.c:8813 cp/decl.c:8866
 #, gcc-internal-format
 msgid "size of array is not an integral constant-expression"
 msgstr ""
 
-#: cp/decl.c:8818
+#: cp/decl.c:8832
 #, gcc-internal-format
 msgid "size of array %qD is negative"
 msgstr ""
 
-#: cp/decl.c:8820 cp/init.c:3418
+#: cp/decl.c:8834 cp/init.c:3437
 #, gcc-internal-format
 msgid "size of array is negative"
 msgstr ""
 
-#: cp/decl.c:8834
+#: cp/decl.c:8848
 #, gcc-internal-format
 msgid "ISO C++ forbids zero-size array %qD"
 msgstr ""
 
-#: cp/decl.c:8836
+#: cp/decl.c:8850
 #, gcc-internal-format
 msgid "ISO C++ forbids zero-size array"
 msgstr ""
 
-#: cp/decl.c:8849
+#: cp/decl.c:8863
 #, gcc-internal-format
 msgid "size of array %qD is not an integral constant-expression"
 msgstr ""
 
-#: cp/decl.c:8858
+#: cp/decl.c:8872
 #, gcc-internal-format
 msgid "ISO C++ forbids variable length array %qD"
 msgstr ""
 
-#: cp/decl.c:8860
+#: cp/decl.c:8874
 #, gcc-internal-format
 msgid "ISO C++ forbids variable length array"
 msgstr ""
 
-#: cp/decl.c:8866
+#: cp/decl.c:8880
 #, gcc-internal-format
 msgid "variable length array %qD is used"
 msgstr ""
 
-#: cp/decl.c:8869
+#: cp/decl.c:8883
 #, gcc-internal-format
 msgid "variable length array is used"
 msgstr ""
 
-#: cp/decl.c:8920
+#: cp/decl.c:8934
 #, gcc-internal-format
 msgid "overflow in array dimension"
 msgstr ""
 
-#: cp/decl.c:8973
+#: cp/decl.c:8987
 #, gcc-internal-format
 msgid "%qD declared as array of %qT"
 msgstr ""
 
-#: cp/decl.c:8983
+#: cp/decl.c:8997
 #, gcc-internal-format
 msgid "declaration of %qD as array of void"
 msgstr ""
 
-#: cp/decl.c:8985
+#: cp/decl.c:8999
 #, gcc-internal-format
 msgid "creating array of void"
 msgstr ""
 
-#: cp/decl.c:8990
+#: cp/decl.c:9004
 #, gcc-internal-format
 msgid "declaration of %qD as array of functions"
 msgstr ""
 
-#: cp/decl.c:8992
+#: cp/decl.c:9006
 #, gcc-internal-format
 msgid "creating array of functions"
 msgstr ""
 
-#: cp/decl.c:8997
+#: cp/decl.c:9011
 #, gcc-internal-format
 msgid "declaration of %qD as array of references"
 msgstr ""
 
-#: cp/decl.c:8999
+#: cp/decl.c:9013
 #, gcc-internal-format
 msgid "creating array of references"
 msgstr ""
 
-#: cp/decl.c:9004
+#: cp/decl.c:9018
 #, gcc-internal-format
 msgid "declaration of %qD as array of function members"
 msgstr ""
 
-#: cp/decl.c:9006
+#: cp/decl.c:9020
 #, gcc-internal-format
 msgid "creating array of function members"
 msgstr ""
 
-#: cp/decl.c:9020
+#: cp/decl.c:9034
 #, gcc-internal-format
 msgid ""
 "declaration of %qD as multidimensional array must have bounds for all "
 "dimensions except the first"
 msgstr ""
 
-#: cp/decl.c:9024
+#: cp/decl.c:9038
 #, gcc-internal-format
 msgid ""
 "multidimensional array must have bounds for all dimensions except the first"
 msgstr ""
 
-#: cp/decl.c:9083
+#: cp/decl.c:9097
 #, gcc-internal-format
 msgid "return type specification for constructor invalid"
 msgstr ""
 
-#: cp/decl.c:9086
+#: cp/decl.c:9100
 #, gcc-internal-format
 msgid "qualifiers are not allowed on constructor declaration"
 msgstr ""
 
-#: cp/decl.c:9096
+#: cp/decl.c:9110
 #, gcc-internal-format
 msgid "return type specification for destructor invalid"
 msgstr ""
 
-#: cp/decl.c:9099
+#: cp/decl.c:9113
 #, gcc-internal-format
 msgid "qualifiers are not allowed on destructor declaration"
 msgstr ""
 
-#: cp/decl.c:9113
+#: cp/decl.c:9127
 #, gcc-internal-format
 msgid "return type specified for %<operator %T%>"
 msgstr ""
 
-#: cp/decl.c:9116
+#: cp/decl.c:9130
 #, gcc-internal-format
 msgid "qualifiers are not allowed on declaration of %<operator %T%>"
 msgstr ""
 
-#: cp/decl.c:9140
+#: cp/decl.c:9154
 #, gcc-internal-format
 msgid "unnamed variable or field declared void"
 msgstr ""
 
-#: cp/decl.c:9147
+#: cp/decl.c:9161
 #, gcc-internal-format
 msgid "variable or field declared void"
 msgstr ""
 
-#: cp/decl.c:9351
+#: cp/decl.c:9365
 #, gcc-internal-format
 msgid "invalid use of qualified-name %<::%D%>"
 msgstr ""
 
-#: cp/decl.c:9354 cp/decl.c:9374
+#: cp/decl.c:9368 cp/decl.c:9388
 #, gcc-internal-format
 msgid "invalid use of qualified-name %<%T::%D%>"
 msgstr ""
 
-#: cp/decl.c:9357
+#: cp/decl.c:9371
 #, gcc-internal-format
 msgid "invalid use of qualified-name %<%D::%D%>"
 msgstr ""
 
-#: cp/decl.c:9366
+#: cp/decl.c:9380
 #, gcc-internal-format
 msgid "%q#T is not a class or a namespace"
 msgstr ""
 
-#: cp/decl.c:9390 cp/decl.c:9487 cp/decl.c:9496 cp/decl.c:10927
+#: cp/decl.c:9404 cp/decl.c:9501 cp/decl.c:9510 cp/decl.c:10941
 #, gcc-internal-format
 msgid "declaration of %qD as non-function"
 msgstr ""
 
-#: cp/decl.c:9396
+#: cp/decl.c:9410
 #, gcc-internal-format
 msgid "declaration of %qD as non-member"
 msgstr ""
 
-#: cp/decl.c:9432
+#: cp/decl.c:9446
 #, gcc-internal-format
 msgid "declarator-id missing; using reserved word %qD"
 msgstr ""
 
-#: cp/decl.c:9479
+#: cp/decl.c:9493
 #, gcc-internal-format
 msgid "function definition does not declare parameters"
 msgstr ""
 
-#: cp/decl.c:9504
+#: cp/decl.c:9518
 #, gcc-internal-format
 msgid "declaration of %qD as %<typedef%>"
 msgstr ""
 
-#: cp/decl.c:9509
+#: cp/decl.c:9523
 #, gcc-internal-format
 msgid "declaration of %qD as parameter"
 msgstr ""
 
-#: cp/decl.c:9542
+#: cp/decl.c:9556
 #, gcc-internal-format
 msgid "%<concept%> cannot appear in a typedef declaration"
 msgstr ""
 
-#: cp/decl.c:9548
+#: cp/decl.c:9562
 #, gcc-internal-format
 msgid "%<constexpr%> cannot appear in a typedef declaration"
 msgstr ""
 
-#: cp/decl.c:9556
+#: cp/decl.c:9570
 #, gcc-internal-format
 msgid "two or more data types in declaration of %qs"
 msgstr ""
 
-#: cp/decl.c:9562
+#: cp/decl.c:9576
 #, gcc-internal-format
 msgid "conflicting specifiers in declaration of %qs"
 msgstr ""
 
-#: cp/decl.c:9603
+#: cp/decl.c:9617
 #, gcc-internal-format
 msgid "ISO C++ does not support plain %<complex%> meaning %<double complex%>"
 msgstr ""
 
-#: cp/decl.c:9651 cp/decl.c:9654 cp/decl.c:9657
+#: cp/decl.c:9665 cp/decl.c:9668 cp/decl.c:9671
 #, gcc-internal-format
 msgid "ISO C++ forbids declaration of %qs with no type"
 msgstr ""
 
-#: cp/decl.c:9673
+#: cp/decl.c:9687
 #, gcc-internal-format
 msgid "%<__int%d%> is not supported by this target"
 msgstr ""
 
-#: cp/decl.c:9679
+#: cp/decl.c:9693
 #, gcc-internal-format
 msgid "ISO C++ does not support %<__int%d%> for %qs"
 msgstr ""
 
-#: cp/decl.c:9701 cp/decl.c:9721
+#: cp/decl.c:9715 cp/decl.c:9735
 #, gcc-internal-format
 msgid "%<signed%> or %<unsigned%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9703
+#: cp/decl.c:9717
 #, gcc-internal-format
 msgid "%<signed%> and %<unsigned%> specified together for %qs"
 msgstr ""
 
-#: cp/decl.c:9705
+#: cp/decl.c:9719
 #, gcc-internal-format
 msgid "%<long long%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9707
+#: cp/decl.c:9721
 #, gcc-internal-format
 msgid "%<long%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9709
+#: cp/decl.c:9723
 #, gcc-internal-format
 msgid "%<short%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9711
+#: cp/decl.c:9725
 #, gcc-internal-format
 msgid "%<long%> or %<short%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9713
+#: cp/decl.c:9727
 #, gcc-internal-format
 msgid "%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9715
+#: cp/decl.c:9729
 #, gcc-internal-format
 msgid "%<long%> or %<short%> specified with char for %qs"
 msgstr ""
 
-#: cp/decl.c:9717
+#: cp/decl.c:9731
 #, gcc-internal-format
 msgid "%<long%> and %<short%> specified together for %qs"
 msgstr ""
 
-#: cp/decl.c:9723
+#: cp/decl.c:9737
 #, gcc-internal-format
 msgid "%<short%> or %<long%> invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9731
+#: cp/decl.c:9745
 #, gcc-internal-format
 msgid "long, short, signed or unsigned used invalidly for %qs"
 msgstr ""
 
-#: cp/decl.c:9799
+#: cp/decl.c:9813
 #, gcc-internal-format
 msgid "complex invalid for %qs"
 msgstr ""
 
-#: cp/decl.c:9846
+#: cp/decl.c:9860
 #, gcc-internal-format
 msgid "member %qD cannot be declared both %<virtual%> and %<static%>"
 msgstr ""
 
-#: cp/decl.c:9852
+#: cp/decl.c:9866
 #, gcc-internal-format
 msgid "member %qD cannot be declared both %<virtual%> and %<constexpr%>"
 msgstr ""
 
-#: cp/decl.c:9862
+#: cp/decl.c:9876
 #, gcc-internal-format
 msgid "typedef declaration invalid in parameter declaration"
 msgstr ""
 
-#: cp/decl.c:9867
+#: cp/decl.c:9881
 #, gcc-internal-format
 msgid "storage class specified for template parameter %qs"
 msgstr ""
 
-#: cp/decl.c:9873
+#: cp/decl.c:9887
 #, gcc-internal-format
 msgid "storage class specifiers invalid in parameter declarations"
 msgstr ""
 
-#: cp/decl.c:9877
+#: cp/decl.c:9891
 #, gcc-internal-format
 msgid "a parameter cannot be declared %<concept%>"
 msgstr ""
 
-#: cp/decl.c:9882
+#: cp/decl.c:9896
 #, gcc-internal-format
 msgid "a parameter cannot be declared %<constexpr%>"
 msgstr ""
 
-#: cp/decl.c:9892
+#: cp/decl.c:9906
 #, gcc-internal-format
 msgid "%<virtual%> outside class declaration"
 msgstr ""
 
-#: cp/decl.c:9910
+#: cp/decl.c:9924
 #, gcc-internal-format
 msgid "multiple storage classes in declaration of %qs"
 msgstr ""
 
-#: cp/decl.c:9933
+#: cp/decl.c:9947
 #, gcc-internal-format
 msgid "storage class specified for %qs"
 msgstr ""
 
-#: cp/decl.c:9937
+#: cp/decl.c:9951
 #, gcc-internal-format
 msgid "storage class specified for parameter %qs"
 msgstr ""
 
-#: cp/decl.c:9950
+#: cp/decl.c:9964
 #, gcc-internal-format
 msgid "nested function %qs declared %<extern%>"
 msgstr ""
 
-#: cp/decl.c:9954
+#: cp/decl.c:9968
 #, gcc-internal-format
 msgid "top-level declaration of %qs specifies %<auto%>"
 msgstr ""
 
-#: cp/decl.c:9961
+#: cp/decl.c:9975
 #, gcc-internal-format
 msgid "function-scope %qs implicitly auto and declared %<__thread%>"
 msgstr ""
 
-#: cp/decl.c:9973
+#: cp/decl.c:9987
 #, gcc-internal-format
 msgid "storage class specifiers invalid in friend function declarations"
 msgstr ""
 
-#: cp/decl.c:10085
+#: cp/decl.c:10099
 #, gcc-internal-format
 msgid "%qs declared as function returning a function"
 msgstr ""
 
-#: cp/decl.c:10090
+#: cp/decl.c:10104
 #, gcc-internal-format
 msgid "%qs declared as function returning an array"
 msgstr ""
 
-#: cp/decl.c:10114
+#: cp/decl.c:10128
 #, gcc-internal-format
 msgid "requires-clause on return type"
 msgstr ""
 
-#: cp/decl.c:10133
+#: cp/decl.c:10147
 #, gcc-internal-format
 msgid "%qs function uses %<auto%> type specifier without trailing return type"
 msgstr ""
 
-#: cp/decl.c:10136
+#: cp/decl.c:10150
 #, gcc-internal-format
 msgid "deduced return type only available with -std=c++14 or -std=gnu++14"
 msgstr ""
 
-#: cp/decl.c:10142
+#: cp/decl.c:10156
 #, gcc-internal-format
 msgid "virtual function cannot have deduced return type"
 msgstr ""
 
-#: cp/decl.c:10149
+#: cp/decl.c:10163
 #, gcc-internal-format
 msgid ""
 "%qs function with trailing return type has %qT as its type rather than plain "
@@ -39287,515 +39344,515 @@ msgstr ""
 
 #. Not using maybe_warn_cpp0x because this should
 #. always be an error.
-#: cp/decl.c:10161
+#: cp/decl.c:10175
 #, gcc-internal-format
 msgid "trailing return type only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/decl.c:10164
+#: cp/decl.c:10178
 #, gcc-internal-format
 msgid ""
 "%qs function with trailing return type not declared with %<auto%> type "
 "specifier"
 msgstr ""
 
-#: cp/decl.c:10201
+#: cp/decl.c:10215
 #, gcc-internal-format
 msgid "destructor cannot be static member function"
 msgstr ""
 
-#: cp/decl.c:10202
+#: cp/decl.c:10216
 #, gcc-internal-format
 msgid "constructor cannot be static member function"
 msgstr ""
 
-#: cp/decl.c:10206
+#: cp/decl.c:10220
 #, gcc-internal-format
 msgid "destructors may not be cv-qualified"
 msgstr ""
 
-#: cp/decl.c:10207
+#: cp/decl.c:10221
 #, gcc-internal-format
 msgid "constructors may not be cv-qualified"
 msgstr ""
 
-#: cp/decl.c:10215
+#: cp/decl.c:10229
 #, gcc-internal-format
 msgid "destructors may not be ref-qualified"
 msgstr ""
 
-#: cp/decl.c:10234
+#: cp/decl.c:10248
 #, gcc-internal-format
 msgid "constructors cannot be declared %<virtual%>"
 msgstr ""
 
 #. Cannot be both friend and virtual.
-#: cp/decl.c:10249
+#: cp/decl.c:10263
 #, gcc-internal-format
 msgid "virtual functions cannot be friends"
 msgstr ""
 
-#: cp/decl.c:10253
+#: cp/decl.c:10267
 #, gcc-internal-format
 msgid "friend declaration not in class definition"
 msgstr ""
 
-#: cp/decl.c:10255
+#: cp/decl.c:10269
 #, gcc-internal-format
 msgid "can%'t define friend function %qs in a local class definition"
 msgstr ""
 
-#: cp/decl.c:10267
+#: cp/decl.c:10281
 #, gcc-internal-format
 msgid "a conversion function cannot have a trailing return type"
 msgstr ""
 
-#: cp/decl.c:10278
+#: cp/decl.c:10292
 #, gcc-internal-format
 msgid "destructors may not have parameters"
 msgstr ""
 
-#: cp/decl.c:10315
+#: cp/decl.c:10329
 #, gcc-internal-format
 msgid "cannot declare pointer to %q#T"
 msgstr ""
 
-#: cp/decl.c:10328 cp/decl.c:10335
+#: cp/decl.c:10342 cp/decl.c:10349
 #, gcc-internal-format
 msgid "cannot declare reference to %q#T"
 msgstr ""
 
-#: cp/decl.c:10337
+#: cp/decl.c:10351
 #, gcc-internal-format
 msgid "cannot declare pointer to %q#T member"
 msgstr ""
 
-#: cp/decl.c:10366
+#: cp/decl.c:10380
 #, gcc-internal-format
 msgid "cannot declare reference to qualified function type %qT"
 msgstr ""
 
-#: cp/decl.c:10367
+#: cp/decl.c:10381
 #, gcc-internal-format
 msgid "cannot declare pointer to qualified function type %qT"
 msgstr ""
 
-#: cp/decl.c:10437
+#: cp/decl.c:10451
 #, gcc-internal-format
 msgid ""
 "cannot declare reference to %q#T, which is not a typedef or a template type "
 "argument"
 msgstr ""
 
-#: cp/decl.c:10507
+#: cp/decl.c:10521
 #, gcc-internal-format
 msgid "template-id %qD used as a declarator"
 msgstr ""
 
-#: cp/decl.c:10531
+#: cp/decl.c:10545
 #, gcc-internal-format
 msgid "member functions are implicitly friends of their class"
 msgstr ""
 
-#: cp/decl.c:10536
+#: cp/decl.c:10550
 #, gcc-internal-format
 msgid "extra qualification %<%T::%> on member %qs"
 msgstr ""
 
-#: cp/decl.c:10566
+#: cp/decl.c:10580
 #, gcc-internal-format
 msgid "cannot define member function %<%T::%s%> within %<%T%>"
 msgstr ""
 
-#: cp/decl.c:10568
+#: cp/decl.c:10582
 #, gcc-internal-format
 msgid "cannot declare member function %<%T::%s%> within %<%T%>"
 msgstr ""
 
-#: cp/decl.c:10576
+#: cp/decl.c:10590
 #, gcc-internal-format
 msgid "cannot declare member %<%T::%s%> within %qT"
 msgstr ""
 
-#: cp/decl.c:10609
+#: cp/decl.c:10623
 #, gcc-internal-format
 msgid "non-parameter %qs cannot be a parameter pack"
 msgstr ""
 
-#: cp/decl.c:10617
+#: cp/decl.c:10631
 #, gcc-internal-format
 msgid "data member may not have variably modified type %qT"
 msgstr ""
 
-#: cp/decl.c:10619
+#: cp/decl.c:10633
 #, gcc-internal-format
 msgid "parameter may not have variably modified type %qT"
 msgstr ""
 
-#: cp/decl.c:10630
+#: cp/decl.c:10644
 #, gcc-internal-format
 msgid "%<explicit%> outside class declaration"
 msgstr ""
 
-#: cp/decl.c:10633
+#: cp/decl.c:10647
 #, gcc-internal-format
 msgid "%<explicit%> in friend declaration"
 msgstr ""
 
-#: cp/decl.c:10636
+#: cp/decl.c:10650
 #, gcc-internal-format
 msgid ""
 "only declarations of constructors and conversion operators can be %<explicit"
 "%>"
 msgstr ""
 
-#: cp/decl.c:10645
+#: cp/decl.c:10659
 #, gcc-internal-format
 msgid "non-member %qs cannot be declared %<mutable%>"
 msgstr ""
 
-#: cp/decl.c:10650
+#: cp/decl.c:10664
 #, gcc-internal-format
 msgid "non-object member %qs cannot be declared %<mutable%>"
 msgstr ""
 
-#: cp/decl.c:10656
+#: cp/decl.c:10670
 #, gcc-internal-format
 msgid "function %qs cannot be declared %<mutable%>"
 msgstr ""
 
-#: cp/decl.c:10661
+#: cp/decl.c:10675
 #, gcc-internal-format
 msgid "static %qs cannot be declared %<mutable%>"
 msgstr ""
 
-#: cp/decl.c:10666
+#: cp/decl.c:10680
 #, gcc-internal-format
 msgid "const %qs cannot be declared %<mutable%>"
 msgstr ""
 
-#: cp/decl.c:10671
+#: cp/decl.c:10685
 #, gcc-internal-format
 msgid "reference %qs cannot be declared %<mutable%>"
 msgstr ""
 
-#: cp/decl.c:10707
+#: cp/decl.c:10721
 #, gcc-internal-format
 msgid "typedef declared %<auto%>"
 msgstr ""
 
-#: cp/decl.c:10712
+#: cp/decl.c:10726
 #, gcc-internal-format
 msgid "requires-clause on typedef"
 msgstr ""
 
-#: cp/decl.c:10720
+#: cp/decl.c:10734
 #, gcc-internal-format
 msgid "typedef name may not be a nested-name-specifier"
 msgstr ""
 
-#: cp/decl.c:10741
+#: cp/decl.c:10755
 #, gcc-internal-format
 msgid "ISO C++ forbids nested type %qD with same name as enclosing class"
 msgstr ""
 
-#: cp/decl.c:10857
+#: cp/decl.c:10871
 #, gcc-internal-format
 msgid "%<inline%> specified for friend class declaration"
 msgstr ""
 
-#: cp/decl.c:10865
+#: cp/decl.c:10879
 #, gcc-internal-format
 msgid "template parameters cannot be friends"
 msgstr ""
 
-#: cp/decl.c:10867
+#: cp/decl.c:10881
 #, gcc-internal-format
 msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>"
 msgstr ""
 
-#: cp/decl.c:10871
+#: cp/decl.c:10885
 #, gcc-internal-format
 msgid "friend declaration requires class-key, i.e. %<friend %#T%>"
 msgstr ""
 
-#: cp/decl.c:10884
+#: cp/decl.c:10898
 #, gcc-internal-format
 msgid "trying to make class %qT a friend of global scope"
 msgstr ""
 
-#: cp/decl.c:10904
+#: cp/decl.c:10918
 #, gcc-internal-format
 msgid "invalid qualifiers on non-member function type"
 msgstr ""
 
-#: cp/decl.c:10908
+#: cp/decl.c:10922
 #, gcc-internal-format
 msgid "requires-clause on type-id"
 msgstr ""
 
-#: cp/decl.c:10917
+#: cp/decl.c:10931
 #, gcc-internal-format
 msgid "abstract declarator %qT used as declaration"
 msgstr ""
 
-#: cp/decl.c:10935
+#: cp/decl.c:10949
 #, gcc-internal-format
 msgid "requires-clause on declaration of non-function type %qT"
 msgstr ""
 
-#: cp/decl.c:10953
+#: cp/decl.c:10967
 #, gcc-internal-format
 msgid "cannot use %<::%> in parameter declaration"
 msgstr ""
 
-#: cp/decl.c:10958
+#: cp/decl.c:10972
 #, gcc-internal-format
 msgid "%<auto%> parameter not permitted in this context"
 msgstr ""
 
-#: cp/decl.c:10960
+#: cp/decl.c:10974
 #, gcc-internal-format
 msgid "parameter declared %<auto%>"
 msgstr ""
 
-#: cp/decl.c:11006
+#: cp/decl.c:11020
 #, gcc-internal-format
 msgid "non-static data member declared %<auto%>"
 msgstr ""
 
 #. Something like struct S { int N::j; };
-#: cp/decl.c:11037
+#: cp/decl.c:11051
 #, gcc-internal-format
 msgid "invalid use of %<::%>"
 msgstr ""
 
-#: cp/decl.c:11059
+#: cp/decl.c:11073
 #, gcc-internal-format
 msgid "declaration of function %qD in invalid context"
 msgstr ""
 
-#: cp/decl.c:11068
+#: cp/decl.c:11082
 #, gcc-internal-format
 msgid "function %qD declared %<virtual%> inside a union"
 msgstr ""
 
-#: cp/decl.c:11077
+#: cp/decl.c:11091
 #, gcc-internal-format
 msgid "%qD cannot be declared %<virtual%>, since it is always static"
 msgstr ""
 
-#: cp/decl.c:11093
+#: cp/decl.c:11107
 #, gcc-internal-format
 msgid "expected qualified name in friend declaration for destructor %qD"
 msgstr ""
 
-#: cp/decl.c:11100
+#: cp/decl.c:11114
 #, gcc-internal-format
 msgid "declaration of %qD as member of %qT"
 msgstr ""
 
-#: cp/decl.c:11106
+#: cp/decl.c:11120
 #, gcc-internal-format
 msgid "a destructor cannot be %<concept%>"
 msgstr ""
 
-#: cp/decl.c:11111
+#: cp/decl.c:11125
 #, gcc-internal-format
 msgid "a destructor cannot be %<constexpr%>"
 msgstr ""
 
-#: cp/decl.c:11117
+#: cp/decl.c:11131
 #, gcc-internal-format
 msgid "expected qualified name in friend declaration for constructor %qD"
 msgstr ""
 
-#: cp/decl.c:11125
+#: cp/decl.c:11139
 #, gcc-internal-format
 msgid "a constructor cannot be %<concept%>"
 msgstr ""
 
-#: cp/decl.c:11130
+#: cp/decl.c:11144
 #, gcc-internal-format
 msgid "a concept cannot be a member function"
 msgstr ""
 
-#: cp/decl.c:11139
+#: cp/decl.c:11153
 #, gcc-internal-format
 msgid "specialization of variable template %qD declared as function"
 msgstr ""
 
-#: cp/decl.c:11142
+#: cp/decl.c:11156
 #, gcc-internal-format
 msgid "variable template declared here"
 msgstr ""
 
-#: cp/decl.c:11198
+#: cp/decl.c:11211
 #, gcc-internal-format
 msgid "field %qD has incomplete type %qT"
 msgstr ""
 
-#: cp/decl.c:11203
+#: cp/decl.c:11216
 #, gcc-internal-format
 msgid "name %qT has incomplete type"
 msgstr ""
 
-#: cp/decl.c:11213
+#: cp/decl.c:11226
 #, gcc-internal-format
 msgid "%qE is neither function nor member function; cannot be declared friend"
 msgstr ""
 
-#: cp/decl.c:11272
+#: cp/decl.c:11285
 #, gcc-internal-format
 msgid "static data member %qE declared %<concept%>"
 msgstr ""
 
-#: cp/decl.c:11276
+#: cp/decl.c:11289
 #, gcc-internal-format
 msgid "constexpr static data member %qD must have an initializer"
 msgstr ""
 
-#: cp/decl.c:11284
+#: cp/decl.c:11297
 #, gcc-internal-format
 msgid "non-static data member %qE declared %<concept%>"
 msgstr ""
 
-#: cp/decl.c:11288
+#: cp/decl.c:11301
 #, gcc-internal-format
 msgid "non-static data member %qE declared %<constexpr%>"
 msgstr ""
 
-#: cp/decl.c:11338
+#: cp/decl.c:11351
 #, gcc-internal-format
 msgid "storage class %<auto%> invalid for function %qs"
 msgstr ""
 
-#: cp/decl.c:11340
+#: cp/decl.c:11353
 #, gcc-internal-format
 msgid "storage class %<register%> invalid for function %qs"
 msgstr ""
 
-#: cp/decl.c:11344
+#: cp/decl.c:11357
 #, gcc-internal-format
 msgid "storage class %<__thread%> invalid for function %qs"
 msgstr ""
 
-#: cp/decl.c:11347
+#: cp/decl.c:11360
 #, gcc-internal-format
 msgid "storage class %<thread_local%> invalid for function %qs"
 msgstr ""
 
-#: cp/decl.c:11352
+#: cp/decl.c:11365
 #, gcc-internal-format
 msgid "virt-specifiers in %qs not allowed outside a class definition"
 msgstr ""
 
-#: cp/decl.c:11363
+#: cp/decl.c:11376
 #, gcc-internal-format
 msgid ""
 "%<static%> specified invalid for function %qs declared out of global scope"
 msgstr ""
 
-#: cp/decl.c:11367
+#: cp/decl.c:11380
 #, gcc-internal-format
 msgid ""
 "%<inline%> specifier invalid for function %qs declared out of global scope"
 msgstr ""
 
-#: cp/decl.c:11375
+#: cp/decl.c:11388
 #, gcc-internal-format
 msgid "virtual non-class function %qs"
 msgstr ""
 
-#: cp/decl.c:11382
+#: cp/decl.c:11395
 #, gcc-internal-format
 msgid "%qs defined in a non-class scope"
 msgstr ""
 
-#: cp/decl.c:11383
+#: cp/decl.c:11396
 #, gcc-internal-format
 msgid "%qs declared in a non-class scope"
 msgstr ""
 
-#: cp/decl.c:11416
+#: cp/decl.c:11429
 #, gcc-internal-format
 msgid "cannot declare member function %qD to have static linkage"
 msgstr ""
 
 #. FIXME need arm citation
-#: cp/decl.c:11423
+#: cp/decl.c:11436
 #, gcc-internal-format
 msgid "cannot declare static function inside another function"
 msgstr ""
 
-#: cp/decl.c:11457
+#: cp/decl.c:11470
 #, gcc-internal-format
 msgid ""
 "%<static%> may not be used when defining (as opposed to declaring) a static "
 "data member"
 msgstr ""
 
-#: cp/decl.c:11464
+#: cp/decl.c:11477
 #, gcc-internal-format
 msgid "static member %qD declared %<register%>"
 msgstr ""
 
-#: cp/decl.c:11470
+#: cp/decl.c:11483
 #, gcc-internal-format
 msgid "cannot explicitly declare member %q#D to have extern linkage"
 msgstr ""
 
-#: cp/decl.c:11477
+#: cp/decl.c:11490
 #, gcc-internal-format
 msgid "declaration of constexpr variable %qD is not a definition"
 msgstr ""
 
-#: cp/decl.c:11490
+#: cp/decl.c:11503
 #, gcc-internal-format
 msgid "%qs initialized and declared %<extern%>"
 msgstr ""
 
-#: cp/decl.c:11494
+#: cp/decl.c:11507
 #, gcc-internal-format
 msgid "%qs has both %<extern%> and initializer"
 msgstr ""
 
-#: cp/decl.c:11641
+#: cp/decl.c:11654
 #, gcc-internal-format
 msgid "default argument %qE uses %qD"
 msgstr ""
 
-#: cp/decl.c:11644
+#: cp/decl.c:11657
 #, gcc-internal-format
 msgid "default argument %qE uses local variable %qD"
 msgstr ""
 
-#: cp/decl.c:11729
+#: cp/decl.c:11742
 #, gcc-internal-format
 msgid "invalid use of cv-qualified type %qT in parameter declaration"
 msgstr ""
 
-#: cp/decl.c:11733
+#: cp/decl.c:11746
 #, gcc-internal-format
 msgid "invalid use of type %<void%> in parameter declaration"
 msgstr ""
 
-#: cp/decl.c:11746
+#: cp/decl.c:11759
 #, gcc-internal-format
 msgid "parameter %qD has Java class type"
 msgstr ""
 
-#: cp/decl.c:11774
+#: cp/decl.c:11787
 #, gcc-internal-format
 msgid "parameter %qD invalidly declared method type"
 msgstr ""
 
-#: cp/decl.c:11799
+#: cp/decl.c:11812
 #, gcc-internal-format
 msgid "parameter %qD includes pointer to array of unknown bound %qT"
 msgstr ""
 
-#: cp/decl.c:11801
+#: cp/decl.c:11814
 #, gcc-internal-format
 msgid "parameter %qD includes reference to array of unknown bound %qT"
 msgstr ""
@@ -39815,174 +39872,174 @@ msgstr ""
 #. or implicitly defined), there's no need to worry about their
 #. existence.  Theoretically, they should never even be
 #. instantiated, but that's hard to forestall.
-#: cp/decl.c:12051
+#: cp/decl.c:12064
 #, gcc-internal-format
 msgid "invalid constructor; you probably meant %<%T (const %T&)%>"
 msgstr ""
 
-#: cp/decl.c:12173
+#: cp/decl.c:12186
 #, gcc-internal-format
 msgid "%qD may not be declared within a namespace"
 msgstr ""
 
-#: cp/decl.c:12178
+#: cp/decl.c:12191
 #, gcc-internal-format
 msgid "%qD may not be declared as static"
 msgstr ""
 
-#: cp/decl.c:12204
+#: cp/decl.c:12217
 #, gcc-internal-format
 msgid "%qD must be a nonstatic member function"
 msgstr ""
 
-#: cp/decl.c:12213
+#: cp/decl.c:12226
 #, gcc-internal-format
 msgid ""
 "%qD must be either a non-static member function or a non-member function"
 msgstr ""
 
-#: cp/decl.c:12235
+#: cp/decl.c:12248
 #, gcc-internal-format
 msgid "%qD must have an argument of class or enumerated type"
 msgstr ""
 
-#: cp/decl.c:12264
+#: cp/decl.c:12277
 #, gcc-internal-format
 msgid ""
 "conversion to a reference to void will never use a type conversion operator"
 msgstr ""
 
-#: cp/decl.c:12266
+#: cp/decl.c:12279
 #, gcc-internal-format
 msgid "conversion to void will never use a type conversion operator"
 msgstr ""
 
-#: cp/decl.c:12273
+#: cp/decl.c:12286
 #, gcc-internal-format
 msgid ""
 "conversion to a reference to the same type will never use a type conversion "
 "operator"
 msgstr ""
 
-#: cp/decl.c:12275
+#: cp/decl.c:12288
 #, gcc-internal-format
 msgid "conversion to the same type will never use a type conversion operator"
 msgstr ""
 
-#: cp/decl.c:12283
+#: cp/decl.c:12296
 #, gcc-internal-format
 msgid ""
 "conversion to a reference to a base class will never use a type conversion "
 "operator"
 msgstr ""
 
-#: cp/decl.c:12285
+#: cp/decl.c:12298
 #, gcc-internal-format
 msgid "conversion to a base class will never use a type conversion operator"
 msgstr ""
 
 #. 13.4.0.3
-#: cp/decl.c:12294
+#: cp/decl.c:12307
 #, gcc-internal-format
 msgid "ISO C++ prohibits overloading operator ?:"
 msgstr ""
 
-#: cp/decl.c:12299
+#: cp/decl.c:12312
 #, gcc-internal-format
 msgid "%qD must not have variable number of arguments"
 msgstr ""
 
-#: cp/decl.c:12350
+#: cp/decl.c:12363
 #, gcc-internal-format
 msgid "postfix %qD must take %<int%> as its argument"
 msgstr ""
 
-#: cp/decl.c:12353
+#: cp/decl.c:12366
 #, gcc-internal-format
 msgid "postfix %qD must take %<int%> as its second argument"
 msgstr ""
 
-#: cp/decl.c:12361
+#: cp/decl.c:12374
 #, gcc-internal-format
 msgid "%qD must take either zero or one argument"
 msgstr ""
 
-#: cp/decl.c:12363
+#: cp/decl.c:12376
 #, gcc-internal-format
 msgid "%qD must take either one or two arguments"
 msgstr ""
 
-#: cp/decl.c:12385
+#: cp/decl.c:12398
 #, gcc-internal-format
 msgid "prefix %qD should return %qT"
 msgstr ""
 
-#: cp/decl.c:12391
+#: cp/decl.c:12404
 #, gcc-internal-format
 msgid "postfix %qD should return %qT"
 msgstr ""
 
-#: cp/decl.c:12400
+#: cp/decl.c:12413
 #, gcc-internal-format
 msgid "%qD must take %<void%>"
 msgstr ""
 
-#: cp/decl.c:12402 cp/decl.c:12411
+#: cp/decl.c:12415 cp/decl.c:12424
 #, gcc-internal-format
 msgid "%qD must take exactly one argument"
 msgstr ""
 
-#: cp/decl.c:12413
+#: cp/decl.c:12426
 #, gcc-internal-format
 msgid "%qD must take exactly two arguments"
 msgstr ""
 
-#: cp/decl.c:12422
+#: cp/decl.c:12435
 #, gcc-internal-format
 msgid "user-defined %qD always evaluates both arguments"
 msgstr ""
 
-#: cp/decl.c:12436
+#: cp/decl.c:12449
 #, gcc-internal-format
 msgid "%qD should return by value"
 msgstr ""
 
-#: cp/decl.c:12447 cp/decl.c:12452
+#: cp/decl.c:12460 cp/decl.c:12465
 #, gcc-internal-format
 msgid "%qD cannot have default arguments"
 msgstr ""
 
-#: cp/decl.c:12510
+#: cp/decl.c:12523
 #, gcc-internal-format
 msgid "using template type parameter %qT after %qs"
 msgstr ""
 
-#: cp/decl.c:12533
+#: cp/decl.c:12546
 #, gcc-internal-format
 msgid "using alias template specialization %qT after %qs"
 msgstr ""
 
-#: cp/decl.c:12536
+#: cp/decl.c:12549
 #, gcc-internal-format
 msgid "using typedef-name %qD after %qs"
 msgstr ""
 
-#: cp/decl.c:12538
+#: cp/decl.c:12551
 #, gcc-internal-format
 msgid "%qD has a previous declaration here"
 msgstr ""
 
-#: cp/decl.c:12546
+#: cp/decl.c:12559
 #, gcc-internal-format
 msgid "%qT referred to as %qs"
 msgstr ""
 
-#: cp/decl.c:12547 cp/decl.c:12554
+#: cp/decl.c:12560 cp/decl.c:12567
 #, gcc-internal-format
 msgid "%q+T has a previous declaration here"
 msgstr ""
 
-#: cp/decl.c:12553
+#: cp/decl.c:12566
 #, gcc-internal-format
 msgid "%qT referred to as enum"
 msgstr ""
@@ -39994,114 +40051,114 @@ msgstr ""
 #. void f(class C);            // No template header here
 #.
 #. then the required template argument is missing.
-#: cp/decl.c:12568
+#: cp/decl.c:12581
 #, gcc-internal-format
 msgid "template argument required for %<%s %T%>"
 msgstr ""
 
-#: cp/decl.c:12622 cp/name-lookup.c:3195
+#: cp/decl.c:12635 cp/name-lookup.c:3195
 #, gcc-internal-format
 msgid "%qD has the same name as the class in which it is declared"
 msgstr ""
 
-#: cp/decl.c:12652 cp/friend.c:261 cp/parser.c:2971 cp/parser.c:6092
-#: cp/pt.c:8154
+#: cp/decl.c:12665 cp/friend.c:261 cp/parser.c:2971 cp/parser.c:6092
+#: cp/pt.c:8169
 #, gcc-internal-format
 msgid "%qT is not a template"
 msgstr ""
 
-#: cp/decl.c:12653 cp/friend.c:262 cp/tree.c:3713
+#: cp/decl.c:12666 cp/friend.c:262 cp/tree.c:3718
 #, gcc-internal-format
 msgid "previous declaration here"
 msgstr ""
 
-#: cp/decl.c:12657
+#: cp/decl.c:12670
 #, gcc-internal-format
 msgid "perhaps you want to explicitly add %<%T::%>"
 msgstr ""
 
-#: cp/decl.c:12666 cp/name-lookup.c:2685 cp/name-lookup.c:3524
-#: cp/name-lookup.c:3569 cp/parser.c:6043 cp/parser.c:24842
+#: cp/decl.c:12679 cp/name-lookup.c:2685 cp/name-lookup.c:3524
+#: cp/name-lookup.c:3569 cp/parser.c:6043 cp/parser.c:24878
 #, gcc-internal-format
 msgid "reference to %qD is ambiguous"
 msgstr ""
 
-#: cp/decl.c:12787
+#: cp/decl.c:12800
 #, gcc-internal-format
 msgid "use of enum %q#D without previous declaration"
 msgstr ""
 
-#: cp/decl.c:12820
+#: cp/decl.c:12833
 #, gcc-internal-format
 msgid "redeclaration of %qT as a non-template"
 msgstr ""
 
-#: cp/decl.c:12821
+#: cp/decl.c:12834
 #, gcc-internal-format
 msgid "previous declaration %q+D"
 msgstr ""
 
-#: cp/decl.c:12964
+#: cp/decl.c:12977
 #, gcc-internal-format
 msgid "derived union %qT invalid"
 msgstr ""
 
-#: cp/decl.c:12973
+#: cp/decl.c:12986
 #, gcc-internal-format
 msgid "Java class %qT cannot have multiple bases"
 msgstr ""
 
-#: cp/decl.c:12978
+#: cp/decl.c:12991
 #, gcc-internal-format
 msgid "%qT defined with multiple direct bases"
 msgstr ""
 
-#: cp/decl.c:12987
+#: cp/decl.c:13000
 #, gcc-internal-format
 msgid "Java class %qT cannot have virtual bases"
 msgstr ""
 
-#: cp/decl.c:12992
+#: cp/decl.c:13005
 #, gcc-internal-format
 msgid "%qT defined with direct virtual base"
 msgstr ""
 
-#: cp/decl.c:13010
+#: cp/decl.c:13023
 #, gcc-internal-format
 msgid "base type %qT fails to be a struct or class type"
 msgstr ""
 
-#: cp/decl.c:13043
+#: cp/decl.c:13056
 #, gcc-internal-format
 msgid "recursive type %qT undefined"
 msgstr ""
 
-#: cp/decl.c:13045
+#: cp/decl.c:13058
 #, gcc-internal-format
 msgid "duplicate base type %qT invalid"
 msgstr ""
 
-#: cp/decl.c:13175
+#: cp/decl.c:13188
 #, gcc-internal-format
 msgid "scoped/unscoped mismatch in enum %q#T"
 msgstr ""
 
-#: cp/decl.c:13178 cp/decl.c:13186 cp/decl.c:13198 cp/parser.c:17258
+#: cp/decl.c:13191 cp/decl.c:13199 cp/decl.c:13211 cp/parser.c:17280
 #, gcc-internal-format
 msgid "previous definition here"
 msgstr ""
 
-#: cp/decl.c:13183
+#: cp/decl.c:13196
 #, gcc-internal-format
 msgid "underlying type mismatch in enum %q#T"
 msgstr ""
 
-#: cp/decl.c:13195
+#: cp/decl.c:13208
 #, gcc-internal-format
 msgid "different underlying type in enum %q#T"
 msgstr ""
 
-#: cp/decl.c:13267
+#: cp/decl.c:13280
 #, gcc-internal-format
 msgid "underlying type %<%T%> of %<%T%> must be an integral type"
 msgstr ""
@@ -40110,77 +40167,77 @@ msgstr ""
 #.
 #. IF no integral type can represent all the enumerator values, the
 #. enumeration is ill-formed.
-#: cp/decl.c:13401
+#: cp/decl.c:13427
 #, gcc-internal-format
 msgid "no integral type can represent all of the enumerator values for %qT"
 msgstr ""
 
-#: cp/decl.c:13569
+#: cp/decl.c:13595
 #, gcc-internal-format
 msgid "enumerator value for %qD is not an integer constant"
 msgstr ""
 
-#: cp/decl.c:13616
+#: cp/decl.c:13642
 #, gcc-internal-format
 msgid "incremented enumerator value is too large for %<unsigned long%>"
 msgstr ""
 
-#: cp/decl.c:13628
+#: cp/decl.c:13654
 #, gcc-internal-format
 msgid "overflow in enumeration values at %qD"
 msgstr ""
 
-#: cp/decl.c:13648
+#: cp/decl.c:13674
 #, gcc-internal-format
 msgid "enumerator value %E is outside the range of underlying type %<%T%>"
 msgstr ""
 
-#: cp/decl.c:13741
+#: cp/decl.c:13767
 #, gcc-internal-format
 msgid "return type %q#T is incomplete"
 msgstr ""
 
-#: cp/decl.c:13743
+#: cp/decl.c:13769
 #, gcc-internal-format
 msgid "return type has Java class type %q#T"
 msgstr ""
 
-#: cp/decl.c:13915 cp/typeck.c:8820
+#: cp/decl.c:13941 cp/typeck.c:8819
 #, gcc-internal-format
 msgid "%<operator=%> should return a reference to %<*this%>"
 msgstr ""
 
-#: cp/decl.c:14258
+#: cp/decl.c:14284
 #, gcc-internal-format
 msgid "invalid function declaration"
 msgstr ""
 
-#: cp/decl.c:14340
+#: cp/decl.c:14366
 #, gcc-internal-format
 msgid "parameter %qD declared void"
 msgstr ""
 
-#: cp/decl.c:14689
+#: cp/decl.c:14715
 #, gcc-internal-format
 msgid "no return statements in function returning %qT"
 msgstr ""
 
-#: cp/decl.c:14691 cp/typeck.c:8701
+#: cp/decl.c:14717 cp/typeck.c:8700
 #, gcc-internal-format
 msgid "only plain %<auto%> return type can be deduced to %<void%>"
 msgstr ""
 
-#: cp/decl.c:14893
+#: cp/decl.c:14919
 #, gcc-internal-format
 msgid "invalid member function declaration"
 msgstr ""
 
-#: cp/decl.c:14907
+#: cp/decl.c:14933
 #, gcc-internal-format
 msgid "%qD is already defined in class %qT"
 msgstr ""
 
-#: cp/decl.c:15278 cp/decl2.c:5133 cp/decl2.c:5183
+#: cp/decl.c:15305 cp/decl2.c:5131 cp/decl2.c:5181
 #, gcc-internal-format
 msgid "use of %qD before deduction of %<auto%>"
 msgstr ""
@@ -40222,7 +40279,7 @@ msgstr ""
 msgid "deleting %qT is undefined"
 msgstr ""
 
-#: cp/decl2.c:540 cp/pt.c:5174
+#: cp/decl2.c:540 cp/pt.c:5188
 #, gcc-internal-format
 msgid "template declaration of %q#D"
 msgstr ""
@@ -40246,7 +40303,7 @@ msgstr ""
 #. [temp.mem]
 #.
 #. A destructor shall not be a member template.
-#: cp/decl2.c:673 cp/pt.c:5144
+#: cp/decl2.c:673 cp/pt.c:5158
 #, gcc-internal-format
 msgid "destructor %qD declared as member template"
 msgstr ""
@@ -40479,132 +40536,132 @@ msgstr ""
 msgid "inline function %qD used but never defined"
 msgstr ""
 
-#: cp/decl2.c:5037
+#: cp/decl2.c:5035
 #, gcc-internal-format
 msgid "default argument missing for parameter %P of %q+#D"
 msgstr ""
 
 #. We mark a lambda conversion op as deleted if we can't
 #. generate it properly; see maybe_add_lambda_conv_op.
-#: cp/decl2.c:5105
+#: cp/decl2.c:5103
 #, gcc-internal-format
 msgid "converting lambda which uses %<...%> to function pointer"
 msgstr ""
 
-#: cp/decl2.c:5112
+#: cp/decl2.c:5110
 #, gcc-internal-format
 msgid "use of deleted function %qD"
 msgstr ""
 
-#: cp/error.c:1450
+#: cp/error.c:1456
 #, gcc-internal-format
 msgid "with"
 msgstr ""
 
-#: cp/error.c:3581
+#: cp/error.c:3597
 #, gcc-internal-format
 msgid ""
 "extended initializer lists only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3586
+#: cp/error.c:3602
 #, gcc-internal-format
 msgid ""
 "explicit conversion operators only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3591
+#: cp/error.c:3607
 #, gcc-internal-format
 msgid "variadic templates only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3596
+#: cp/error.c:3612
 #, gcc-internal-format
 msgid "lambda expressions only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3601
+#: cp/error.c:3617
 #, gcc-internal-format
 msgid "C++11 auto only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3605
+#: cp/error.c:3621
 #, gcc-internal-format
 msgid "scoped enums only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3609
+#: cp/error.c:3625
 #, gcc-internal-format
 msgid ""
 "defaulted and deleted functions only available with -std=c++11 or -std=gnu+"
 "+11"
 msgstr ""
 
-#: cp/error.c:3614
+#: cp/error.c:3630
 #, gcc-internal-format
 msgid "inline namespaces only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3619
+#: cp/error.c:3635
 #, gcc-internal-format
 msgid ""
 "override controls (override/final) only available with -std=c++11 or -std=gnu"
 "++11"
 msgstr ""
 
-#: cp/error.c:3624
+#: cp/error.c:3640
 #, gcc-internal-format
 msgid ""
 "non-static data member initializers only available with -std=c++11 or -"
 "std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3629
+#: cp/error.c:3645
 #, gcc-internal-format
 msgid "user-defined literals only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3634
+#: cp/error.c:3650
 #, gcc-internal-format
 msgid "delegating constructors only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3639
+#: cp/error.c:3655
 #, gcc-internal-format
 msgid "inheriting constructors only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3644
+#: cp/error.c:3660
 #, gcc-internal-format
 msgid "c++11 attributes only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3649
+#: cp/error.c:3665
 #, gcc-internal-format
 msgid "ref-qualifiers only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/error.c:3699
+#: cp/error.c:3715
 #, gcc-internal-format
 msgid "incomplete type %qT used in nested name specifier"
 msgstr ""
 
-#: cp/error.c:3703
+#: cp/error.c:3719
 #, gcc-internal-format
 msgid "reference to %<%T::%D%> is ambiguous"
 msgstr ""
 
-#: cp/error.c:3708 cp/typeck.c:2339
+#: cp/error.c:3724 cp/typeck.c:2339
 #, gcc-internal-format
 msgid "%qD is not a member of %qT"
 msgstr ""
 
-#: cp/error.c:3712 cp/typeck.c:2767
+#: cp/error.c:3728 cp/typeck.c:2767
 #, gcc-internal-format
 msgid "%qD is not a member of %qD"
 msgstr ""
 
-#: cp/error.c:3717
+#: cp/error.c:3733
 #, gcc-internal-format
 msgid "%<::%D%> has not been declared"
 msgstr ""
@@ -40641,7 +40698,7 @@ msgstr ""
 msgid "throwing NULL, which has integral, not pointer type"
 msgstr ""
 
-#: cp/except.c:754 cp/init.c:2864
+#: cp/except.c:754 cp/init.c:2883
 #, gcc-internal-format
 msgid "%qD should never be overloaded"
 msgstr ""
@@ -40836,18 +40893,18 @@ msgstr ""
 msgid "invalid initializer for array member %q#D"
 msgstr ""
 
-#: cp/init.c:756 cp/init.c:780 cp/init.c:2234 cp/method.c:1230
+#: cp/init.c:756 cp/init.c:780 cp/init.c:2252 cp/method.c:1232
 #, gcc-internal-format
 msgid "uninitialized const member in %q#T"
 msgstr ""
 
-#: cp/init.c:758 cp/init.c:775 cp/init.c:782 cp/init.c:2219 cp/init.c:2247
-#: cp/method.c:1233 cp/method.c:1244
+#: cp/init.c:758 cp/init.c:775 cp/init.c:782 cp/init.c:2237 cp/init.c:2265
+#: cp/method.c:1235 cp/method.c:1246
 #, gcc-internal-format
 msgid "%q#D should be initialized"
 msgstr ""
 
-#: cp/init.c:773 cp/init.c:2206 cp/method.c:1241
+#: cp/init.c:773 cp/init.c:2224 cp/method.c:1243
 #, gcc-internal-format
 msgid "uninitialized reference member in %q#T"
 msgstr ""
@@ -40944,227 +41001,227 @@ msgstr ""
 msgid "bad array initializer"
 msgstr ""
 
-#: cp/init.c:1864 cp/semantics.c:3194
+#: cp/init.c:1877 cp/semantics.c:3187
 #, gcc-internal-format
 msgid "%qT is not a class type"
 msgstr ""
 
-#: cp/init.c:1920
+#: cp/init.c:1933
 #, gcc-internal-format
 msgid "incomplete type %qT does not have member %qD"
 msgstr ""
 
-#: cp/init.c:1934
+#: cp/init.c:1947
 #, gcc-internal-format
 msgid "invalid pointer to bit-field %qD"
 msgstr ""
 
-#: cp/init.c:2015 cp/typeck.c:1831
+#: cp/init.c:2028 cp/typeck.c:1831
 #, gcc-internal-format
 msgid "invalid use of non-static member function %qD"
 msgstr ""
 
-#: cp/init.c:2022 cp/semantics.c:1762
+#: cp/init.c:2035 cp/semantics.c:1755
 #, gcc-internal-format
 msgid "invalid use of non-static data member %qD"
 msgstr ""
 
-#: cp/init.c:2203
+#: cp/init.c:2221
 #, gcc-internal-format
 msgid ""
 "uninitialized reference member in %q#T using %<new%> without new-initializer"
 msgstr ""
 
-#: cp/init.c:2211
+#: cp/init.c:2229
 #, gcc-internal-format
 msgid ""
 "uninitialized reference member in base %q#T of %q#T using %<new%> without "
 "new-initializer"
 msgstr ""
 
-#: cp/init.c:2215
+#: cp/init.c:2233
 #, gcc-internal-format
 msgid "uninitialized reference member in base %q#T of %q#T"
 msgstr ""
 
-#: cp/init.c:2231
+#: cp/init.c:2249
 #, gcc-internal-format
 msgid ""
 "uninitialized const member in %q#T using %<new%> without new-initializer"
 msgstr ""
 
-#: cp/init.c:2239
+#: cp/init.c:2257
 #, gcc-internal-format
 msgid ""
 "uninitialized const member in base %q#T of %q#T using %<new%> without new-"
 "initializer"
 msgstr ""
 
-#: cp/init.c:2243
+#: cp/init.c:2261
 #, gcc-internal-format
 msgid "uninitialized const member in base %q#T of %q#T"
 msgstr ""
 
-#: cp/init.c:2518
+#: cp/init.c:2537
 #, gcc-internal-format
 msgid ""
 "placement new constructing an object of type %<%T [%wu]%> and size %qwu in a "
 "region of type %qT and size %qwi"
 msgstr ""
 
-#: cp/init.c:2530
+#: cp/init.c:2549
 #, gcc-internal-format
 msgid ""
 "placement new constructing an array of objects of type %qT and size %qwu in "
 "a region of type %qT and size %qwi"
 msgstr ""
 
-#: cp/init.c:2541
+#: cp/init.c:2560
 #, gcc-internal-format
 msgid ""
 "placement new constructing an object of type %qT and size %qwu in a region "
 "of type %qT and size %qwi"
 msgstr ""
 
-#: cp/init.c:2655
+#: cp/init.c:2674
 #, gcc-internal-format
 msgid "integer overflow in array size"
 msgstr ""
 
-#: cp/init.c:2665
+#: cp/init.c:2684
 #, gcc-internal-format
 msgid "array size in new-expression must be constant"
 msgstr ""
 
-#: cp/init.c:2679
+#: cp/init.c:2698
 #, gcc-internal-format
 msgid "variably modified type not allowed in new-expression"
 msgstr ""
 
-#: cp/init.c:2710
+#: cp/init.c:2729
 #, gcc-internal-format
 msgid "invalid type %<void%> for new"
 msgstr ""
 
-#: cp/init.c:2753
+#: cp/init.c:2772
 #, gcc-internal-format
 msgid "uninitialized const in %<new%> of %q#T"
 msgstr ""
 
-#: cp/init.c:2845
+#: cp/init.c:2864
 #, gcc-internal-format
 msgid "%qT isn%'t a valid Java class type"
 msgstr ""
 
-#: cp/init.c:2858
+#: cp/init.c:2877
 #, gcc-internal-format
 msgid "call to Java constructor with %qs undefined"
 msgstr ""
 
-#: cp/init.c:2873
+#: cp/init.c:2892
 #, gcc-internal-format
 msgid "%qD is not a function returning a pointer"
 msgstr ""
 
-#: cp/init.c:2882
+#: cp/init.c:2901
 #, gcc-internal-format
 msgid "Java class %q#T object allocated using placement new"
 msgstr ""
 
-#: cp/init.c:2926
+#: cp/init.c:2945
 #, gcc-internal-format
 msgid "no suitable %qD found in class %qT"
 msgstr ""
 
-#: cp/init.c:2933 cp/search.c:1171
+#: cp/init.c:2952 cp/search.c:1172
 #, gcc-internal-format
 msgid "request for member %qD is ambiguous"
 msgstr ""
 
-#: cp/init.c:3162
+#: cp/init.c:3181
 #, gcc-internal-format
 msgid "parenthesized initializer in array new"
 msgstr ""
 
-#: cp/init.c:3400
+#: cp/init.c:3419
 #, gcc-internal-format
 msgid "size in array new must have integral type"
 msgstr ""
 
-#: cp/init.c:3432
+#: cp/init.c:3451
 #, gcc-internal-format
 msgid "new cannot be applied to a reference type"
 msgstr ""
 
-#: cp/init.c:3441
+#: cp/init.c:3460
 #, gcc-internal-format
 msgid "new cannot be applied to a function type"
 msgstr ""
 
-#: cp/init.c:3485
+#: cp/init.c:3504
 #, gcc-internal-format
 msgid "call to Java constructor, while %<jclass%> undefined"
 msgstr ""
 
-#: cp/init.c:3503
+#: cp/init.c:3522
 #, gcc-internal-format
 msgid "can%'t find %<class$%> in %qT"
 msgstr ""
 
-#: cp/init.c:3563
+#: cp/init.c:3582
 #, gcc-internal-format
 msgid "possible problem detected in invocation of delete [] operator:"
 msgstr ""
 
-#: cp/init.c:3567
+#: cp/init.c:3586
 #, gcc-internal-format
 msgid ""
 "neither the destructor nor the class-specific operator delete [] will be "
 "called, even if they are declared when the class is defined"
 msgstr ""
 
-#: cp/init.c:4059
+#: cp/init.c:4078
 #, gcc-internal-format
 msgid "initializer ends prematurely"
 msgstr ""
 
-#: cp/init.c:4144
+#: cp/init.c:4163
 #, gcc-internal-format
 msgid "cannot initialize multi-dimensional array with initializer"
 msgstr ""
 
-#: cp/init.c:4351
+#: cp/init.c:4370
 #, gcc-internal-format
 msgid "unknown array size in delete"
 msgstr ""
 
-#: cp/init.c:4375
+#: cp/init.c:4394
 #, gcc-internal-format
 msgid "possible problem detected in invocation of delete operator:"
 msgstr ""
 
-#: cp/init.c:4380
+#: cp/init.c:4399
 #, gcc-internal-format
 msgid ""
 "neither the destructor nor the class-specific operator delete will be "
 "called, even if they are declared when the class is defined"
 msgstr ""
 
-#: cp/init.c:4395
+#: cp/init.c:4414
 #, gcc-internal-format
 msgid ""
 "deleting object of abstract class type %qT which has non-virtual destructor "
 "will cause undefined behavior"
 msgstr ""
 
-#: cp/init.c:4400
+#: cp/init.c:4419
 #, gcc-internal-format
 msgid ""
 "deleting object of polymorphic class type %qT which has non-virtual "
 "destructor might cause undefined behavior"
 msgstr ""
 
-#: cp/init.c:4701
+#: cp/init.c:4720
 #, gcc-internal-format
 msgid "type to vector delete is neither pointer or array type"
 msgstr ""
@@ -41185,22 +41242,22 @@ msgstr ""
 msgid "because the array element type %qT has variable size"
 msgstr ""
 
-#: cp/lambda.c:492
+#: cp/lambda.c:494
 #, gcc-internal-format
 msgid "cannot capture %qE by reference"
 msgstr ""
 
-#: cp/lambda.c:500
+#: cp/lambda.c:502
 #, gcc-internal-format
 msgid "capture by copy of incomplete type %qT"
 msgstr ""
 
-#: cp/lambda.c:524
+#: cp/lambda.c:526
 #, gcc-internal-format
 msgid "already captured %qD in lambda expression"
 msgstr ""
 
-#: cp/lambda.c:723
+#: cp/lambda.c:725
 #, gcc-internal-format
 msgid "%<this%> was not captured for this lambda function"
 msgstr ""
@@ -41279,179 +41336,179 @@ msgstr ""
 msgid "mangling unknown fixed point type"
 msgstr ""
 
-#: cp/mangle.c:3011
+#: cp/mangle.c:3044
 #, gcc-internal-format
 msgid ""
 "use of built-in trait %qE in function signature; use library traits instead"
 msgstr ""
 
-#: cp/mangle.c:3016
+#: cp/mangle.c:3049
 #, gcc-internal-format, gfc-internal-format
 msgid "mangling %C"
 msgstr ""
 
-#: cp/mangle.c:3093
+#: cp/mangle.c:3126
 #, gcc-internal-format
 msgid "omitted middle operand to %<?:%> operand cannot be mangled"
 msgstr ""
 
-#: cp/mangle.c:3157
+#: cp/mangle.c:3213
 #, gcc-internal-format
 msgid "string literal in function template signature"
 msgstr ""
 
-#: cp/mangle.c:3640
+#: cp/mangle.c:3696
 #, gcc-internal-format
 msgid ""
 "a later -fabi-version= (or =0) avoids this error with a change in mangling"
 msgstr ""
 
-#: cp/mangle.c:3667
+#: cp/mangle.c:3723
 #, gcc-internal-format
 msgid ""
 "the mangled name of %qD changed between -fabi-version=%d (%D) and -fabi-"
 "version=%d (%D)"
 msgstr ""
 
-#: cp/mangle.c:3673
+#: cp/mangle.c:3729
 #, gcc-internal-format
 msgid ""
 "the mangled name of %qD changes between -fabi-version=%d (%D) and -fabi-"
 "version=%d (%D)"
 msgstr ""
 
-#: cp/mangle.c:3969
+#: cp/mangle.c:4025
 #, gcc-internal-format
 msgid ""
 "the mangled name of %qD changes between -fabi-version=%d and -fabi-version=%d"
 msgstr ""
 
-#: cp/mangle.c:3974
+#: cp/mangle.c:4030
 #, gcc-internal-format
 msgid ""
 "the mangled name of the initialization guard variable for%qD changes between "
 "-fabi-version=%d and -fabi-version=%d"
 msgstr ""
 
-#: cp/method.c:705 cp/method.c:1186
+#: cp/method.c:707 cp/method.c:1188
 #, gcc-internal-format
 msgid "non-static const member %q#D, can%'t use default assignment operator"
 msgstr ""
 
-#: cp/method.c:711 cp/method.c:1192
+#: cp/method.c:713 cp/method.c:1194
 #, gcc-internal-format
 msgid ""
 "non-static reference member %q#D, can%'t use default assignment operator"
 msgstr ""
 
-#: cp/method.c:829
+#: cp/method.c:831
 #, gcc-internal-format
 msgid "synthesized method %qD first required here "
 msgstr ""
 
-#: cp/method.c:1135
+#: cp/method.c:1137
 #, gcc-internal-format
 msgid "union member %q+D with non-trivial %qD"
 msgstr ""
 
-#: cp/method.c:1145
+#: cp/method.c:1147
 #, gcc-internal-format
 msgid "defaulted constructor calls non-constexpr %qD"
 msgstr ""
 
-#: cp/method.c:1209
+#: cp/method.c:1211
 #, gcc-internal-format
 msgid "initializer for %q#D is invalid"
 msgstr ""
 
-#: cp/method.c:1261
+#: cp/method.c:1263
 #, gcc-internal-format
 msgid "defaulted default constructor does not initialize %q#D"
 msgstr ""
 
-#: cp/method.c:1272
+#: cp/method.c:1274
 #, gcc-internal-format
 msgid "copying non-static data member %q#D of rvalue reference type"
 msgstr ""
 
 #. A trivial constructor doesn't have any NSDMI.
-#: cp/method.c:1439
+#: cp/method.c:1441
 #, gcc-internal-format
 msgid ""
 "defaulted default constructor does not initialize any non-static data member"
 msgstr ""
 
-#: cp/method.c:1516
+#: cp/method.c:1518
 #, gcc-internal-format
 msgid ""
 "defaulted move assignment for %qT calls a non-trivial move assignment "
 "operator for virtual base %qT"
 msgstr ""
 
-#: cp/method.c:1622
+#: cp/method.c:1624
 #, gcc-internal-format
 msgid "a lambda closure type has a deleted default constructor"
 msgstr ""
 
-#: cp/method.c:1625
+#: cp/method.c:1627
 #, gcc-internal-format
 msgid "a lambda closure type has a deleted copy assignment operator"
 msgstr ""
 
-#: cp/method.c:1636
+#: cp/method.c:1638
 #, gcc-internal-format
 msgid ""
 "%q#D is implicitly declared as deleted because %qT declares a move "
 "constructor or move assignment operator"
 msgstr ""
 
-#: cp/method.c:1656
+#: cp/method.c:1658
 #, gcc-internal-format
 msgid ""
 "%q#D is implicitly deleted because the default definition would be ill-"
 "formed:"
 msgstr ""
 
-#: cp/method.c:1665
+#: cp/method.c:1667
 msgid ""
 "%q#F is implicitly deleted because its exception-specification does not "
 "match the implicit exception-specification %qX"
 msgstr ""
 
-#: cp/method.c:1983
+#: cp/method.c:1985
 #, gcc-internal-format
 msgid "defaulted declaration %q+D"
 msgstr ""
 
-#: cp/method.c:1985
+#: cp/method.c:1987
 #, gcc-internal-format
 msgid "does not match expected signature %qD"
 msgstr ""
 
-#: cp/method.c:2017
+#: cp/method.c:2019
 msgid ""
 "function %q+D defaulted on its redeclaration with an exception-specification "
 "that differs from the implicit exception-specification %qX"
 msgstr ""
 
-#: cp/method.c:2039
+#: cp/method.c:2041
 #, gcc-internal-format
 msgid ""
 "explicitly defaulted function %q+D cannot be declared as constexpr because "
 "the implicit declaration is not constexpr:"
 msgstr ""
 
-#: cp/method.c:2085
+#: cp/method.c:2087
 #, gcc-internal-format
 msgid "a template cannot be defaulted"
 msgstr ""
 
-#: cp/method.c:2113
+#: cp/method.c:2115
 #, gcc-internal-format
 msgid "%qD cannot be defaulted"
 msgstr ""
 
-#: cp/method.c:2122
+#: cp/method.c:2124
 #, gcc-internal-format
 msgid "defaulted function %q+D with default argument"
 msgstr ""
@@ -41767,15 +41824,15 @@ msgstr ""
 msgid "LEXER_DEBUGGING_ENABLED_P is not set to true"
 msgstr ""
 
-#: cp/parser.c:1349 cp/parser.c:35637
+#: cp/parser.c:1349 cp/parser.c:35699
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> not immediately followed by function "
 "declaration or definition"
 msgstr ""
 
-#: cp/parser.c:1387 cp/parser.c:36470 cp/parser.c:36575 cp/parser.c:36600
-#: cp/parser.c:36657
+#: cp/parser.c:1387 cp/parser.c:36532 cp/parser.c:36637 cp/parser.c:36662
+#: cp/parser.c:36719
 #, gcc-internal-format
 msgid ""
 "%<#pragma acc routine%> not followed by a function declaration or definition"
@@ -41801,7 +41858,7 @@ msgstr ""
 msgid "request for member %qE in non-class type %qT"
 msgstr ""
 
-#: cp/parser.c:2826 cp/parser.c:17206
+#: cp/parser.c:2826 cp/parser.c:17228
 #, gcc-internal-format
 msgid "%<%T::%E%> has not been declared"
 msgstr ""
@@ -41881,7 +41938,7 @@ msgstr ""
 msgid "floating-point literal cannot appear in a constant-expression"
 msgstr ""
 
-#: cp/parser.c:3017 cp/pt.c:16071
+#: cp/parser.c:3017 cp/pt.c:16146
 #, gcc-internal-format
 msgid ""
 "a cast to a type other than an integral or enumeration type cannot appear in "
@@ -42088,7 +42145,7 @@ msgstr ""
 msgid "unable to find string literal operator %qD with %qT, %qT arguments"
 msgstr ""
 
-#: cp/parser.c:4347 cp/parser.c:12311
+#: cp/parser.c:4347 cp/parser.c:12322
 #, gcc-internal-format
 msgid "expected declaration"
 msgstr ""
@@ -42192,7 +42249,7 @@ msgid ""
 "standardization"
 msgstr ""
 
-#: cp/parser.c:5779 cp/parser.c:19182
+#: cp/parser.c:5779 cp/parser.c:19204
 #, gcc-internal-format
 msgid "expected unqualified-id"
 msgstr ""
@@ -42354,675 +42411,680 @@ msgstr ""
 msgid "lambda-expression in template-argument"
 msgstr ""
 
-#: cp/parser.c:9850
+#: cp/parser.c:9852
 #, gcc-internal-format
 msgid "expected end of capture-list"
 msgstr ""
 
-#: cp/parser.c:9864
+#: cp/parser.c:9866
 #, gcc-internal-format
 msgid ""
 "explicit by-copy capture of %<this%> redundant with by-copy capture default"
 msgstr ""
 
-#: cp/parser.c:9908
+#: cp/parser.c:9910
 #, gcc-internal-format
 msgid ""
 "lambda capture initializers only available with -std=c++14 or -std=gnu++14"
 msgstr ""
 
-#: cp/parser.c:9915
+#: cp/parser.c:9917
 #, gcc-internal-format
 msgid "empty initializer for lambda init-capture"
 msgstr ""
 
-#: cp/parser.c:9938
+#: cp/parser.c:9940
 #, gcc-internal-format
 msgid "capture of non-variable %qD "
 msgstr ""
 
-#: cp/parser.c:9941 cp/parser.c:9951 cp/semantics.c:3371 cp/semantics.c:3381
+#: cp/parser.c:9943 cp/parser.c:9953 cp/semantics.c:3364 cp/semantics.c:3374
 #, gcc-internal-format
 msgid "%q#D declared here"
 msgstr ""
 
-#: cp/parser.c:9947
+#: cp/parser.c:9949
 #, gcc-internal-format
 msgid "capture of variable %qD with non-automatic storage duration"
 msgstr ""
 
-#: cp/parser.c:9985
+#: cp/parser.c:9987
 #, gcc-internal-format
 msgid "explicit by-copy capture of %qD redundant with by-copy capture default"
 msgstr ""
 
-#: cp/parser.c:9990
+#: cp/parser.c:9992
 #, gcc-internal-format
 msgid ""
 "explicit by-reference capture of %qD redundant with by-reference capture "
 "default"
 msgstr ""
 
-#: cp/parser.c:10037
+#: cp/parser.c:10039
 #, gcc-internal-format
 msgid "lambda templates are only available with -std=c++14 or -std=gnu++14"
 msgstr ""
 
-#: cp/parser.c:10067
+#: cp/parser.c:10069
 #, gcc-internal-format
 msgid "default argument specified for lambda parameter"
 msgstr ""
 
-#: cp/parser.c:10546
+#: cp/parser.c:10548
 #, gcc-internal-format
 msgid "attributes at the beginning of statement are ignored"
 msgstr ""
 
-#: cp/parser.c:10574
+#: cp/parser.c:10576
 #, gcc-internal-format
 msgid "expected labeled-statement"
 msgstr ""
 
-#: cp/parser.c:10612
+#: cp/parser.c:10614
 #, gcc-internal-format
 msgid "case label %qE not within a switch statement"
 msgstr ""
 
-#: cp/parser.c:10697
+#: cp/parser.c:10699
 #, gcc-internal-format
 msgid "need %<typename%> before %qE because %qT is a dependent scope"
 msgstr ""
 
-#: cp/parser.c:10706
+#: cp/parser.c:10708
 #, gcc-internal-format
 msgid "%<%T::%D%> names the constructor, not the type"
 msgstr ""
 
-#: cp/parser.c:10753
+#: cp/parser.c:10755
 #, gcc-internal-format
 msgid "compound-statement in constexpr function"
 msgstr ""
 
-#: cp/parser.c:10995 cp/parser.c:26946
+#: cp/parser.c:10997 cp/parser.c:27021
 #, gcc-internal-format
 msgid "expected selection-statement"
 msgstr ""
 
-#: cp/parser.c:11028
+#: cp/parser.c:11030
 #, gcc-internal-format
 msgid "types may not be defined in conditions"
 msgstr ""
 
-#: cp/parser.c:11408
+#: cp/parser.c:11419
 #, gcc-internal-format
 msgid "range-based %<for%> expression of type %qT has incomplete type"
 msgstr ""
 
-#: cp/parser.c:11446
+#: cp/parser.c:11457
 #, gcc-internal-format
 msgid ""
 "range-based %<for%> expression of type %qT has an %<end%> member but not a "
 "%<begin%>"
 msgstr ""
 
-#: cp/parser.c:11452
+#: cp/parser.c:11463
 #, gcc-internal-format
 msgid ""
 "range-based %<for%> expression of type %qT has a %<begin%> member but not an "
 "%<end%>"
 msgstr ""
 
-#: cp/parser.c:11504
+#: cp/parser.c:11515
 #, gcc-internal-format
 msgid ""
 "inconsistent begin/end types in range-based %<for%> statement: %qT and %qT"
 msgstr ""
 
-#: cp/parser.c:11639 cp/parser.c:26949
+#: cp/parser.c:11650 cp/parser.c:27024
 #, gcc-internal-format
 msgid "expected iteration-statement"
 msgstr ""
 
-#: cp/parser.c:11687
+#: cp/parser.c:11698
 #, gcc-internal-format
 msgid ""
 "range-based %<for%> loops only available with -std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/parser.c:11761
+#: cp/parser.c:11772
 #, gcc-internal-format
 msgid "break statement used with Cilk Plus for loop"
 msgstr ""
 
-#: cp/parser.c:11818
+#: cp/parser.c:11829
 #, gcc-internal-format
 msgid "%<goto%> in %<constexpr%> function"
 msgstr ""
 
 #. Issue a warning about this use of a GNU extension.
-#: cp/parser.c:11826
+#: cp/parser.c:11837
 #, gcc-internal-format
 msgid "ISO C++ forbids computed gotos"
 msgstr ""
 
-#: cp/parser.c:11839 cp/parser.c:26952
+#: cp/parser.c:11850 cp/parser.c:27027
 #, gcc-internal-format
 msgid "expected jump-statement"
 msgstr ""
 
-#: cp/parser.c:11996 cp/parser.c:22324
+#: cp/parser.c:12007 cp/parser.c:22346
 #, gcc-internal-format
 msgid "extra %<;%>"
 msgstr ""
 
-#: cp/parser.c:12236
+#: cp/parser.c:12247
 #, gcc-internal-format
 msgid "%<__label__%> not at the beginning of a block"
 msgstr ""
 
-#: cp/parser.c:12398
+#: cp/parser.c:12409
 #, gcc-internal-format
 msgid "inconsistent deduction for %qT: %qT and then %qT"
 msgstr ""
 
-#: cp/parser.c:12419
+#: cp/parser.c:12430
 #, gcc-internal-format
 msgid "mixing declarations and function-definitions is forbidden"
 msgstr ""
 
-#: cp/parser.c:12490
+#: cp/parser.c:12454
+#, gcc-internal-format
+msgid "types may not be defined in a for-range-declaration"
+msgstr ""
+
+#: cp/parser.c:12508
 #, gcc-internal-format
 msgid "initializer in range-based %<for%> loop"
 msgstr ""
 
-#: cp/parser.c:12493
+#: cp/parser.c:12511
 #, gcc-internal-format
 msgid "multiple declarations in range-based %<for%> loop"
 msgstr ""
 
-#: cp/parser.c:12634
+#: cp/parser.c:12652
 #, gcc-internal-format
 msgid "%<friend%> used outside of class"
 msgstr ""
 
 #. Complain about `auto' as a storage specifier, if
 #. we're complaining about C++0x compatibility.
-#: cp/parser.c:12698
+#: cp/parser.c:12716
 #, gcc-internal-format
 msgid "%<auto%> changes meaning in C++11; please remove it"
 msgstr ""
 
-#: cp/parser.c:12734
+#: cp/parser.c:12752
 #, gcc-internal-format
 msgid "decl-specifier invalid in condition"
 msgstr ""
 
-#: cp/parser.c:12826
+#: cp/parser.c:12844
 #, gcc-internal-format
 msgid "class definition may not be declared a friend"
 msgstr ""
 
-#: cp/parser.c:12894 cp/parser.c:22731
+#: cp/parser.c:12912 cp/parser.c:22753
 #, gcc-internal-format
 msgid "templates may not be %<virtual%>"
 msgstr ""
 
-#: cp/parser.c:12934
+#: cp/parser.c:12952
 #, gcc-internal-format
 msgid "invalid linkage-specification"
 msgstr ""
 
-#: cp/parser.c:13021
+#: cp/parser.c:13039
 #, gcc-internal-format
 msgid ""
 "static_assert without a message only available with -std=c++1z or -std=gnu+"
 "+1z"
 msgstr ""
 
-#: cp/parser.c:13215
+#: cp/parser.c:13233
 #, gcc-internal-format
 msgid "types may not be defined in %<decltype%> expressions"
 msgstr ""
 
-#: cp/parser.c:13358
+#: cp/parser.c:13376
 #, gcc-internal-format
 msgid "types may not be defined in a conversion-type-id"
 msgstr ""
 
-#: cp/parser.c:13385
+#: cp/parser.c:13403
 #, gcc-internal-format
 msgid "invalid use of %<auto%> in conversion operator"
 msgstr ""
 
-#: cp/parser.c:13389
+#: cp/parser.c:13407
 #, gcc-internal-format
 msgid ""
 "use of %<auto%> in member template conversion operator can never be deduced"
 msgstr ""
 
-#: cp/parser.c:13478
+#: cp/parser.c:13496
 #, gcc-internal-format
 msgid "only constructors take member initializers"
 msgstr ""
 
-#: cp/parser.c:13500
+#: cp/parser.c:13518
 #, gcc-internal-format
 msgid "cannot expand initializer for member %<%D%>"
 msgstr ""
 
-#: cp/parser.c:13512
+#: cp/parser.c:13530
 #, gcc-internal-format
 msgid "mem-initializer for %qD follows constructor delegation"
 msgstr ""
 
-#: cp/parser.c:13524
+#: cp/parser.c:13542
 #, gcc-internal-format
 msgid "constructor delegation follows mem-initializer for %qD"
 msgstr ""
 
-#: cp/parser.c:13576
+#: cp/parser.c:13594
 #, gcc-internal-format
 msgid "anachronistic old-style base class initializer"
 msgstr ""
 
-#: cp/parser.c:13646
+#: cp/parser.c:13664
 #, gcc-internal-format
 msgid ""
 "keyword %<typename%> not allowed in this context (a qualified member "
 "initializer is implicitly a type)"
 msgstr ""
 
-#: cp/parser.c:14005
+#: cp/parser.c:14024
 #, gcc-internal-format
 msgid "unexpected keyword; remove space between quotes and suffix identifier"
 msgstr ""
 
-#: cp/parser.c:14011
+#: cp/parser.c:14030
 #, gcc-internal-format
 msgid "expected suffix identifier"
 msgstr ""
 
-#: cp/parser.c:14020
+#: cp/parser.c:14039
 #, gcc-internal-format
 msgid "expected empty string after %<operator%> keyword"
 msgstr ""
 
-#: cp/parser.c:14026
+#: cp/parser.c:14045
 #, gcc-internal-format
 msgid "invalid encoding prefix in literal operator"
 msgstr ""
 
-#: cp/parser.c:14049
+#: cp/parser.c:14068
 #, gcc-internal-format
 msgid "expected operator"
 msgstr ""
 
 #. Warn that we do not support `export'.
-#: cp/parser.c:14094
+#: cp/parser.c:14113
 #, gcc-internal-format
 msgid "keyword %<export%> not implemented, and will be ignored"
 msgstr ""
 
-#: cp/parser.c:14264
+#: cp/parser.c:14283
 #, gcc-internal-format
 msgid "invalid constrained type parameter"
 msgstr ""
 
-#: cp/parser.c:14272
+#: cp/parser.c:14291
 #, gcc-internal-format
 msgid "cv-qualified type parameter"
 msgstr ""
 
-#: cp/parser.c:14357
+#: cp/parser.c:14376
 #, gcc-internal-format
 msgid "variadic constraint introduced without %<...%>"
 msgstr ""
 
-#: cp/parser.c:14421
+#: cp/parser.c:14440
 #, gcc-internal-format
 msgid "invalid use of %<auto%> in default template argument"
 msgstr ""
 
-#: cp/parser.c:14656 cp/parser.c:14739 cp/parser.c:20599
+#: cp/parser.c:14675 cp/parser.c:14761 cp/parser.c:20621
 #, gcc-internal-format
 msgid "template parameter pack %qD cannot have a default argument"
 msgstr ""
 
-#: cp/parser.c:14660 cp/parser.c:14743
+#: cp/parser.c:14679 cp/parser.c:14765
 #, gcc-internal-format
 msgid "template parameter packs cannot have default arguments"
 msgstr ""
 
-#: cp/parser.c:14809
+#: cp/parser.c:14831
 #, gcc-internal-format
 msgid "expected template-id"
 msgstr ""
 
-#: cp/parser.c:14862 cp/parser.c:26910
+#: cp/parser.c:14884 cp/parser.c:26985
 #, gcc-internal-format
 msgid "expected %<<%>"
 msgstr ""
 
-#: cp/parser.c:14869
+#: cp/parser.c:14891
 #, gcc-internal-format
 msgid "%<<::%> cannot begin a template-argument list"
 msgstr ""
 
-#: cp/parser.c:14873
+#: cp/parser.c:14895
 #, gcc-internal-format
 msgid ""
 "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> "
 "and %<::%>"
 msgstr ""
 
-#: cp/parser.c:14877
+#: cp/parser.c:14899
 #, gcc-internal-format
 msgid ""
 "(if you use %<-fpermissive%> or %<-std=c++11%>, or %<-std=gnu++11%> G++ will "
 "accept your code)"
 msgstr ""
 
-#: cp/parser.c:14984
+#: cp/parser.c:15006
 #, gcc-internal-format
 msgid "parse error in template argument list"
 msgstr ""
 
 #. The name does not name a template.
-#: cp/parser.c:15053 cp/parser.c:15174 cp/parser.c:15389
+#: cp/parser.c:15075 cp/parser.c:15196 cp/parser.c:15411
 #, gcc-internal-format
 msgid "expected template-name"
 msgstr ""
 
 #. Explain what went wrong.
-#: cp/parser.c:15099
+#: cp/parser.c:15121
 #, gcc-internal-format
 msgid "non-template %qD used as template"
 msgstr ""
 
-#: cp/parser.c:15101
+#: cp/parser.c:15123
 #, gcc-internal-format
 msgid "use %<%T::template %D%> to indicate that it is a template"
 msgstr ""
 
-#: cp/parser.c:15241
+#: cp/parser.c:15263
 #, gcc-internal-format
 msgid "expected parameter pack before %<...%>"
 msgstr ""
 
-#: cp/parser.c:15350 cp/parser.c:15368 cp/parser.c:15535
+#: cp/parser.c:15372 cp/parser.c:15390 cp/parser.c:15557
 #, gcc-internal-format
 msgid "expected template-argument"
 msgstr ""
 
-#: cp/parser.c:15510
+#: cp/parser.c:15532
 #, gcc-internal-format
 msgid "invalid non-type template argument"
 msgstr ""
 
-#: cp/parser.c:15637
+#: cp/parser.c:15659
 #, gcc-internal-format
 msgid "explicit instantiation shall not use %<inline%> specifier"
 msgstr ""
 
-#: cp/parser.c:15641
+#: cp/parser.c:15663
 #, gcc-internal-format
 msgid "explicit instantiation shall not use %<constexpr%> specifier"
 msgstr ""
 
-#: cp/parser.c:15700
+#: cp/parser.c:15722
 #, gcc-internal-format
 msgid "template specialization with C linkage"
 msgstr ""
 
-#: cp/parser.c:15920
+#: cp/parser.c:15942
 #, gcc-internal-format
 msgid "expected type specifier"
 msgstr ""
 
-#: cp/parser.c:16100
+#: cp/parser.c:16122
 #, gcc-internal-format
 msgid ""
 "use of %<auto%> in lambda parameter declaration only available with -std=c+"
 "+14 or -std=gnu++14"
 msgstr ""
 
-#: cp/parser.c:16106
+#: cp/parser.c:16128
 #, gcc-internal-format
 msgid ""
 "use of %<auto%> in parameter declaration only available with -std=c++14 or -"
 "std=gnu++14"
 msgstr ""
 
-#: cp/parser.c:16111
+#: cp/parser.c:16133
 #, gcc-internal-format
 msgid "ISO C++ forbids use of %<auto%> in parameter declaration"
 msgstr ""
 
-#: cp/parser.c:16255
+#: cp/parser.c:16277
 #, gcc-internal-format
 msgid "expected template-id for type"
 msgstr ""
 
-#: cp/parser.c:16282
+#: cp/parser.c:16304
 #, gcc-internal-format
 msgid "expected type-name"
 msgstr ""
 
-#: cp/parser.c:16631
+#: cp/parser.c:16653
 #, gcc-internal-format
 msgid ""
 "elaborated-type-specifier for a scoped enum must not use the %<%D%> keyword"
 msgstr ""
 
-#: cp/parser.c:16840
+#: cp/parser.c:16862
 #, gcc-internal-format
 msgid "declaration %qD does not declare anything"
 msgstr ""
 
-#: cp/parser.c:16927
+#: cp/parser.c:16949
 #, gcc-internal-format
 msgid "attributes ignored on uninstantiated type"
 msgstr ""
 
-#: cp/parser.c:16931
+#: cp/parser.c:16953
 #, gcc-internal-format
 msgid "attributes ignored on template instantiation"
 msgstr ""
 
-#: cp/parser.c:16936
+#: cp/parser.c:16958
 #, gcc-internal-format
 msgid ""
 "attributes ignored on elaborated-type-specifier that is not a forward "
 "declaration"
 msgstr ""
 
-#: cp/parser.c:17070
+#: cp/parser.c:17092
 #, gcc-internal-format
 msgid "%qD is an enumeration template"
 msgstr ""
 
-#: cp/parser.c:17081
+#: cp/parser.c:17103
 #, gcc-internal-format
 msgid "%qD does not name an enumeration in %qT"
 msgstr ""
 
-#: cp/parser.c:17096
+#: cp/parser.c:17118
 #, gcc-internal-format
 msgid "anonymous scoped enum is not allowed"
 msgstr ""
 
-#: cp/parser.c:17151
+#: cp/parser.c:17173
 #, gcc-internal-format
 msgid "expected %<;%> or %<{%>"
 msgstr ""
 
-#: cp/parser.c:17200
+#: cp/parser.c:17222
 #, gcc-internal-format
 msgid "cannot add an enumerator list to a template instantiation"
 msgstr ""
 
-#: cp/parser.c:17214
+#: cp/parser.c:17236
 #, gcc-internal-format
 msgid ""
 "nested name specifier %qT for enum declaration does not name a class or "
 "namespace"
 msgstr ""
 
-#: cp/parser.c:17226 cp/parser.c:21835
+#: cp/parser.c:17248 cp/parser.c:21857
 #, gcc-internal-format
 msgid "declaration of %qD in namespace %qD which does not enclose %qD"
 msgstr ""
 
-#: cp/parser.c:17231 cp/parser.c:21840
+#: cp/parser.c:17253 cp/parser.c:21862
 #, gcc-internal-format
 msgid "declaration of %qD in %qD which does not enclose %qD"
 msgstr ""
 
-#: cp/parser.c:17256
+#: cp/parser.c:17278
 #, gcc-internal-format
 msgid "multiple definition of %q#T"
 msgstr ""
 
-#: cp/parser.c:17269
+#: cp/parser.c:17291
 #, gcc-internal-format
 msgid "ISO C++ forbids empty anonymous enum"
 msgstr ""
 
-#: cp/parser.c:17289
+#: cp/parser.c:17311
 #, gcc-internal-format
 msgid "opaque-enum-specifier without name"
 msgstr ""
 
-#: cp/parser.c:17292
+#: cp/parser.c:17314
 #, gcc-internal-format
 msgid "opaque-enum-specifier must use a simple identifier"
 msgstr ""
 
-#: cp/parser.c:17470
+#: cp/parser.c:17492
 #, gcc-internal-format
 msgid "%qD is not a namespace-name"
 msgstr ""
 
-#: cp/parser.c:17471
+#: cp/parser.c:17493
 #, gcc-internal-format
 msgid "expected namespace-name"
 msgstr ""
 
-#: cp/parser.c:17549
+#: cp/parser.c:17571
 #, gcc-internal-format
 msgid "a nested namespace definition cannot have attributes"
 msgstr ""
 
-#: cp/parser.c:17552
+#: cp/parser.c:17574
 #, gcc-internal-format
 msgid ""
 "nested namespace definitions only available with -std=c++1z or -std=gnu++1z"
 msgstr ""
 
-#: cp/parser.c:17555
+#: cp/parser.c:17577
 #, gcc-internal-format
 msgid "a nested namespace definition cannot be inline"
 msgstr ""
 
-#: cp/parser.c:17563
+#: cp/parser.c:17585
 #, gcc-internal-format
 msgid "nested identifier required"
 msgstr ""
 
-#: cp/parser.c:17591
+#: cp/parser.c:17613
 #, gcc-internal-format
 msgid "namespace %qD entered"
 msgstr ""
 
-#: cp/parser.c:17643
+#: cp/parser.c:17665
 #, gcc-internal-format
 msgid "%<namespace%> definition is not allowed here"
 msgstr ""
 
-#: cp/parser.c:17798
+#: cp/parser.c:17820
 #, gcc-internal-format
 msgid "a template-id may not appear in a using-declaration"
 msgstr ""
 
-#: cp/parser.c:17844
+#: cp/parser.c:17866
 #, gcc-internal-format
 msgid ""
 "access declarations are deprecated in favour of using-declarations; "
 "suggestion: add the %<using%> keyword"
 msgstr ""
 
-#: cp/parser.c:17909
+#: cp/parser.c:17931
 #, gcc-internal-format
 msgid "types may not be defined in alias template declarations"
 msgstr ""
 
-#: cp/parser.c:18062
+#: cp/parser.c:18084
 #, gcc-internal-format
 msgid "%<asm%> in %<constexpr%> function"
 msgstr ""
 
-#: cp/parser.c:18428
+#: cp/parser.c:18450
 #, gcc-internal-format
 msgid "a function-definition is not allowed here"
 msgstr ""
 
-#: cp/parser.c:18439
+#: cp/parser.c:18461
 #, gcc-internal-format
 msgid "an asm-specification is not allowed on a function-definition"
 msgstr ""
 
-#: cp/parser.c:18443
+#: cp/parser.c:18465
 #, gcc-internal-format
 msgid "attributes are not allowed on a function-definition"
 msgstr ""
 
-#: cp/parser.c:18494
+#: cp/parser.c:18516
 #, gcc-internal-format
 msgid "expected constructor, destructor, or type conversion"
 msgstr ""
 
 #. Anything else is an error.
-#: cp/parser.c:18533 cp/parser.c:20790
+#: cp/parser.c:18555 cp/parser.c:20812
 #, gcc-internal-format
 msgid "expected initializer"
 msgstr ""
 
-#: cp/parser.c:18614
+#: cp/parser.c:18636
 #, gcc-internal-format
 msgid "initializer provided for function"
 msgstr ""
 
-#: cp/parser.c:18648
+#: cp/parser.c:18670
 #, gcc-internal-format
 msgid "attributes after parenthesized initializer ignored"
 msgstr ""
 
-#: cp/parser.c:18653
+#: cp/parser.c:18675
 #, gcc-internal-format
 msgid "non-function %qD declared as implicit template"
 msgstr ""
 
-#: cp/parser.c:19102
+#: cp/parser.c:19124
 #, gcc-internal-format
 msgid "array bound is not an integer constant"
 msgstr ""
 
-#: cp/parser.c:19228
+#: cp/parser.c:19250
 #, gcc-internal-format
 msgid "cannot define member of dependent typedef %qT"
 msgstr ""
 
-#: cp/parser.c:19232
+#: cp/parser.c:19254
 #, gcc-internal-format
 msgid "%<%T::%E%> is not a type"
 msgstr ""
 
-#: cp/parser.c:19260
+#: cp/parser.c:19282
 #, gcc-internal-format
 msgid "invalid use of constructor as a template"
 msgstr ""
 
-#: cp/parser.c:19262
+#: cp/parser.c:19284
 #, gcc-internal-format
 msgid ""
 "use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified "
@@ -43033,335 +43095,335 @@ msgstr ""
 #. here because we do not have enough
 #. information about its original syntactic
 #. form.
-#: cp/parser.c:19279
+#: cp/parser.c:19301
 #, gcc-internal-format
 msgid "invalid declarator"
 msgstr ""
 
 #. But declarations with qualified-ids can't appear in a
 #. function.
-#: cp/parser.c:19349
+#: cp/parser.c:19371
 #, gcc-internal-format
 msgid "qualified-id in declaration"
 msgstr ""
 
-#: cp/parser.c:19374
+#: cp/parser.c:19396
 #, gcc-internal-format
 msgid "expected declarator"
 msgstr ""
 
-#: cp/parser.c:19477
+#: cp/parser.c:19499
 #, gcc-internal-format
 msgid "%qD is a namespace"
 msgstr ""
 
-#: cp/parser.c:19479
+#: cp/parser.c:19501
 #, gcc-internal-format
 msgid "cannot form pointer to member of non-class %q#T"
 msgstr ""
 
-#: cp/parser.c:19500
+#: cp/parser.c:19522
 #, gcc-internal-format
 msgid "expected ptr-operator"
 msgstr ""
 
-#: cp/parser.c:19559
+#: cp/parser.c:19581
 #, gcc-internal-format
 msgid "duplicate cv-qualifier"
 msgstr ""
 
-#: cp/parser.c:19613
+#: cp/parser.c:19635
 #, gcc-internal-format
 msgid "multiple ref-qualifiers"
 msgstr ""
 
-#: cp/parser.c:19650
+#: cp/parser.c:19672
 #, gcc-internal-format
 msgid "%E requires %<-fgnu-tm%>"
 msgstr ""
 
-#: cp/parser.c:19706
+#: cp/parser.c:19728
 #, gcc-internal-format
 msgid "duplicate virt-specifier"
 msgstr ""
 
-#: cp/parser.c:19936 cp/typeck2.c:529 cp/typeck2.c:1950
+#: cp/parser.c:19958 cp/typeck2.c:529 cp/typeck2.c:1953
 #, gcc-internal-format
 msgid "invalid use of %<auto%>"
 msgstr ""
 
-#: cp/parser.c:19957
+#: cp/parser.c:19979
 #, gcc-internal-format
 msgid "types may not be defined in template arguments"
 msgstr ""
 
-#: cp/parser.c:19962
+#: cp/parser.c:19984
 #, gcc-internal-format
 msgid "invalid use of %<auto%> in template argument"
 msgstr ""
 
-#: cp/parser.c:20050
+#: cp/parser.c:20072
 #, gcc-internal-format
 msgid "expected type-specifier"
 msgstr ""
 
-#: cp/parser.c:20356
+#: cp/parser.c:20378
 #, gcc-internal-format
 msgid "expected %<,%> or %<...%>"
 msgstr ""
 
-#: cp/parser.c:20431
+#: cp/parser.c:20453
 #, gcc-internal-format
 msgid "types may not be defined in parameter types"
 msgstr ""
 
-#: cp/parser.c:20583
+#: cp/parser.c:20605
 #, gcc-internal-format
 msgid "default arguments are only permitted for function parameters"
 msgstr ""
 
-#: cp/parser.c:20601
+#: cp/parser.c:20623
 #, gcc-internal-format
 msgid "parameter pack %qD cannot have a default argument"
 msgstr ""
 
-#: cp/parser.c:20607
+#: cp/parser.c:20629
 #, gcc-internal-format
 msgid "template parameter pack cannot have a default argument"
 msgstr ""
 
-#: cp/parser.c:20609
+#: cp/parser.c:20631
 #, gcc-internal-format
 msgid "parameter pack cannot have a default argument"
 msgstr ""
 
-#: cp/parser.c:20993
+#: cp/parser.c:21015
 #, gcc-internal-format
 msgid "ISO C++ does not allow designated initializers"
 msgstr ""
 
-#: cp/parser.c:21007
+#: cp/parser.c:21029
 #, gcc-internal-format
 msgid "ISO C++ does not allow C99 designated initializers"
 msgstr ""
 
-#: cp/parser.c:21127 cp/parser.c:21253
+#: cp/parser.c:21149 cp/parser.c:21275
 #, gcc-internal-format
 msgid "expected class-name"
 msgstr ""
 
-#: cp/parser.c:21440
+#: cp/parser.c:21462
 #, gcc-internal-format
 msgid "expected %<;%> after class definition"
 msgstr ""
 
-#: cp/parser.c:21442
+#: cp/parser.c:21464
 #, gcc-internal-format
 msgid "expected %<;%> after struct definition"
 msgstr ""
 
-#: cp/parser.c:21444
+#: cp/parser.c:21466
 #, gcc-internal-format
 msgid "expected %<;%> after union definition"
 msgstr ""
 
-#: cp/parser.c:21783
+#: cp/parser.c:21805
 #, gcc-internal-format
 msgid "expected %<{%> or %<:%>"
 msgstr ""
 
-#: cp/parser.c:21794
+#: cp/parser.c:21816
 #, gcc-internal-format
 msgid "cannot specify %<override%> for a class"
 msgstr ""
 
-#: cp/parser.c:21802
+#: cp/parser.c:21824
 #, gcc-internal-format
 msgid "global qualification of class name is invalid"
 msgstr ""
 
-#: cp/parser.c:21809
+#: cp/parser.c:21831
 #, gcc-internal-format
 msgid "qualified name does not name a class"
 msgstr ""
 
-#: cp/parser.c:21821
+#: cp/parser.c:21843
 #, gcc-internal-format
 msgid "invalid class name in declaration of %qD"
 msgstr ""
 
-#: cp/parser.c:21854
+#: cp/parser.c:21876
 #, gcc-internal-format
 msgid "extra qualification not allowed"
 msgstr ""
 
-#: cp/parser.c:21866
+#: cp/parser.c:21888
 #, gcc-internal-format
 msgid "an explicit specialization must be preceded by %<template <>%>"
 msgstr ""
 
-#: cp/parser.c:21896
+#: cp/parser.c:21918
 #, gcc-internal-format
 msgid "function template %qD redeclared as a class template"
 msgstr ""
 
-#: cp/parser.c:21927
+#: cp/parser.c:21949
 #, gcc-internal-format
 msgid "could not resolve typename type"
 msgstr ""
 
-#: cp/parser.c:21983
+#: cp/parser.c:22005
 #, gcc-internal-format
 msgid "previous definition of %q+#T"
 msgstr ""
 
-#: cp/parser.c:22074 cp/parser.c:26955
+#: cp/parser.c:22096 cp/parser.c:27030
 #, gcc-internal-format
 msgid "expected class-key"
 msgstr ""
 
-#: cp/parser.c:22098
+#: cp/parser.c:22120
 #, gcc-internal-format
 msgid ""
 "ISO C++ forbids typename key in template template parameter; use -std=c++1z "
 "or -std=gnu++1z"
 msgstr ""
 
-#: cp/parser.c:22102
+#: cp/parser.c:22124
 #, gcc-internal-format
 msgid "expected %<class%> or %<typename%>"
 msgstr ""
 
-#: cp/parser.c:22344
+#: cp/parser.c:22366
 #, gcc-internal-format
 msgid "in C++03 a class-key must be used when declaring a friend"
 msgstr ""
 
-#: cp/parser.c:22362
+#: cp/parser.c:22384
 #, gcc-internal-format
 msgid "friend declaration does not name a class or function"
 msgstr ""
 
-#: cp/parser.c:22380
+#: cp/parser.c:22402
 #, gcc-internal-format
 msgid "a storage class on an anonymous aggregate in class scope is not allowed"
 msgstr ""
 
-#: cp/parser.c:22584
+#: cp/parser.c:22606
 #, gcc-internal-format
 msgid "pure-specifier on function-definition"
 msgstr ""
 
-#: cp/parser.c:22639
+#: cp/parser.c:22661
 #, gcc-internal-format
 msgid "stray %<,%> at end of member declaration"
 msgstr ""
 
-#: cp/parser.c:22651
+#: cp/parser.c:22673
 #, gcc-internal-format
 msgid "expected %<;%> at end of member declaration"
 msgstr ""
 
-#: cp/parser.c:22725
+#: cp/parser.c:22747
 #, gcc-internal-format
 msgid "invalid pure specifier (only %<= 0%> is allowed)"
 msgstr ""
 
-#: cp/parser.c:22760
+#: cp/parser.c:22782
 #, gcc-internal-format
 msgid "a brace-enclosed initializer is not allowed here"
 msgstr ""
 
-#: cp/parser.c:22889
+#: cp/parser.c:22911
 #, gcc-internal-format
 msgid "%<virtual%> specified more than once in base-specified"
 msgstr ""
 
-#: cp/parser.c:22909
+#: cp/parser.c:22931
 #, gcc-internal-format
 msgid "more than one access specifier in base-specified"
 msgstr ""
 
-#: cp/parser.c:22933
+#: cp/parser.c:22955
 #, gcc-internal-format
 msgid "keyword %<typename%> not allowed outside of templates"
 msgstr ""
 
-#: cp/parser.c:22936
+#: cp/parser.c:22958
 #, gcc-internal-format
 msgid ""
 "keyword %<typename%> not allowed in this context (the base class is "
 "implicitly a type)"
 msgstr ""
 
-#: cp/parser.c:23029 cp/parser.c:23111
+#: cp/parser.c:23051 cp/parser.c:23133
 #, gcc-internal-format
 msgid "types may not be defined in an exception-specification"
 msgstr ""
 
-#: cp/parser.c:23093
+#: cp/parser.c:23115
 #, gcc-internal-format
 msgid ""
 "dynamic exception specifications are deprecated in C++0x; use %<noexcept%> "
 "instead"
 msgstr ""
 
-#: cp/parser.c:23153
+#: cp/parser.c:23175
 #, gcc-internal-format
 msgid "invalid use of %<auto%> in exception-specification"
 msgstr ""
 
-#: cp/parser.c:23192
+#: cp/parser.c:23214
 #, gcc-internal-format
 msgid "%<try%> in %<constexpr%> function"
 msgstr ""
 
-#: cp/parser.c:23305
+#: cp/parser.c:23327
 #, gcc-internal-format
 msgid "types may not be defined in exception-declarations"
 msgstr ""
 
-#: cp/parser.c:23917
+#: cp/parser.c:23939
 #, gcc-internal-format
 msgid "expected an identifier for the attribute name"
 msgstr ""
 
-#: cp/parser.c:23936
+#: cp/parser.c:23958
 #, gcc-internal-format
 msgid "%<deprecated%> is a C++14 feature; use %<gnu::deprecated%>"
 msgstr ""
 
-#: cp/parser.c:23998
+#: cp/parser.c:24020
 #, gcc-internal-format
 msgid "attribute noreturn can appear at most once in an attribute-list"
 msgstr ""
 
-#: cp/parser.c:24002
+#: cp/parser.c:24024
 #, gcc-internal-format
 msgid "attribute deprecated can appear at most once in an attribute-list"
 msgstr ""
 
-#: cp/parser.c:24273
+#: cp/parser.c:24295
 #, gcc-internal-format
 msgid "%<requires%> only available with -fconcepts"
 msgstr ""
 
-#: cp/parser.c:24305
+#: cp/parser.c:24327
 #, gcc-internal-format
 msgid "a requires expression cannot appear outside a template"
 msgstr ""
 
-#: cp/parser.c:25001
+#: cp/parser.c:25037
 #, gcc-internal-format
 msgid "specializing member %<%T::%E%> requires %<template<>%> syntax"
 msgstr ""
 
-#: cp/parser.c:25006
+#: cp/parser.c:25042
 #, gcc-internal-format
 msgid "invalid declaration of %<%T::%E%>"
 msgstr ""
 
-#: cp/parser.c:25010
+#: cp/parser.c:25046
 #, gcc-internal-format
 msgid "too few template-parameter-lists"
 msgstr ""
@@ -43370,668 +43432,668 @@ msgstr ""
 #. something like:
 #.
 #. template <class T> template <class U> void S::f();
-#: cp/parser.c:25017
+#: cp/parser.c:25053
 #, gcc-internal-format
 msgid "too many template-parameter-lists"
 msgstr ""
 
-#: cp/parser.c:25343
+#: cp/parser.c:25379
 #, gcc-internal-format
 msgid "named return values are no longer supported"
 msgstr ""
 
-#: cp/parser.c:25508
+#: cp/parser.c:25544
 #, gcc-internal-format
 msgid ""
 "literal operator template %qD has invalid parameter list.  Expected non-type "
 "template argument pack <char...> or <typename CharT, CharT...>"
 msgstr ""
 
-#: cp/parser.c:25513
+#: cp/parser.c:25549
 #, gcc-internal-format
 msgid ""
 "literal operator template %qD has invalid parameter list.  Expected non-type "
 "template argument pack <char...>"
 msgstr ""
 
-#: cp/parser.c:25582
+#: cp/parser.c:25618
 #, gcc-internal-format
 msgid "empty introduction-list"
 msgstr ""
 
-#: cp/parser.c:25606
+#: cp/parser.c:25642
 #, gcc-internal-format
 msgid "no matching concept for template-introduction"
 msgstr ""
 
-#: cp/parser.c:25628
+#: cp/parser.c:25664
 #, gcc-internal-format
 msgid "invalid declaration of member template in local class"
 msgstr ""
 
-#: cp/parser.c:25637
+#: cp/parser.c:25673
 #, gcc-internal-format
 msgid "template with C linkage"
 msgstr ""
 
-#: cp/parser.c:25656
+#: cp/parser.c:25692
 #, gcc-internal-format
 msgid "invalid explicit specialization"
 msgstr ""
 
-#: cp/parser.c:25757
+#: cp/parser.c:25796
 #, gcc-internal-format
 msgid "template declaration of %<typedef%>"
 msgstr ""
 
-#: cp/parser.c:25808
+#: cp/parser.c:25847
 #, gcc-internal-format
 msgid "a class template declaration must not declare anything else"
 msgstr ""
 
-#: cp/parser.c:25854
+#: cp/parser.c:25893
 #, gcc-internal-format
 msgid "explicit template specialization cannot have a storage class"
 msgstr ""
 
-#: cp/parser.c:26124
+#: cp/parser.c:26199
 #, gcc-internal-format
 msgid "%<>>%> should be %<> >%> within a nested template argument list"
 msgstr ""
 
-#: cp/parser.c:26137
+#: cp/parser.c:26212
 #, gcc-internal-format
 msgid "spurious %<>>%>, use %<>%> to terminate a template argument list"
 msgstr ""
 
-#: cp/parser.c:26434
+#: cp/parser.c:26509
 #, gcc-internal-format
 msgid "%<sizeof...%> argument must be surrounded by parentheses"
 msgstr ""
 
-#: cp/parser.c:26590
+#: cp/parser.c:26665
 #, gcc-internal-format
 msgid "invalid use of %qD in linkage specification"
 msgstr ""
 
-#: cp/parser.c:26605
+#: cp/parser.c:26680
 #, gcc-internal-format
 msgid "%<__thread%> before %qD"
 msgstr ""
 
-#: cp/parser.c:26739
+#: cp/parser.c:26814
 #, gcc-internal-format
 msgid "ISO C++ 1998 does not support %<long long%>"
 msgstr ""
 
-#: cp/parser.c:26747
+#: cp/parser.c:26822
 #, gcc-internal-format
 msgid "both %<__thread%> and %<thread_local%> specified"
 msgstr ""
 
-#: cp/parser.c:26749
+#: cp/parser.c:26824
 #, gcc-internal-format
 msgid "duplicate %qD"
 msgstr ""
 
-#: cp/parser.c:26771
+#: cp/parser.c:26846
 #, gcc-internal-format
 msgid "duplicate %qs"
 msgstr ""
 
-#: cp/parser.c:26813
+#: cp/parser.c:26888
 #, gcc-internal-format
 msgid "expected %<new%>"
 msgstr ""
 
-#: cp/parser.c:26816
+#: cp/parser.c:26891
 #, gcc-internal-format
 msgid "expected %<delete%>"
 msgstr ""
 
-#: cp/parser.c:26819
+#: cp/parser.c:26894
 #, gcc-internal-format
 msgid "expected %<return%>"
 msgstr ""
 
-#: cp/parser.c:26825
+#: cp/parser.c:26900
 #, gcc-internal-format
 msgid "expected %<extern%>"
 msgstr ""
 
-#: cp/parser.c:26828
+#: cp/parser.c:26903
 #, gcc-internal-format
 msgid "expected %<static_assert%>"
 msgstr ""
 
-#: cp/parser.c:26831
+#: cp/parser.c:26906
 #, gcc-internal-format
 msgid "expected %<decltype%>"
 msgstr ""
 
-#: cp/parser.c:26834
+#: cp/parser.c:26909
 #, gcc-internal-format
 msgid "expected %<operator%>"
 msgstr ""
 
-#: cp/parser.c:26837
+#: cp/parser.c:26912
 #, gcc-internal-format
 msgid "expected %<class%>"
 msgstr ""
 
-#: cp/parser.c:26840
+#: cp/parser.c:26915
 #, gcc-internal-format
 msgid "expected %<template%>"
 msgstr ""
 
-#: cp/parser.c:26843
+#: cp/parser.c:26918
 #, gcc-internal-format
 msgid "expected %<namespace%>"
 msgstr ""
 
-#: cp/parser.c:26846
+#: cp/parser.c:26921
 #, gcc-internal-format
 msgid "expected %<using%>"
 msgstr ""
 
-#: cp/parser.c:26849
+#: cp/parser.c:26924
 #, gcc-internal-format
 msgid "expected %<asm%>"
 msgstr ""
 
-#: cp/parser.c:26852
+#: cp/parser.c:26927
 #, gcc-internal-format
 msgid "expected %<try%>"
 msgstr ""
 
-#: cp/parser.c:26855
+#: cp/parser.c:26930
 #, gcc-internal-format
 msgid "expected %<catch%>"
 msgstr ""
 
-#: cp/parser.c:26858
+#: cp/parser.c:26933
 #, gcc-internal-format
 msgid "expected %<throw%>"
 msgstr ""
 
-#: cp/parser.c:26861
+#: cp/parser.c:26936
 #, gcc-internal-format
 msgid "expected %<__label__%>"
 msgstr ""
 
-#: cp/parser.c:26864
+#: cp/parser.c:26939
 #, gcc-internal-format
 msgid "expected %<@try%>"
 msgstr ""
 
-#: cp/parser.c:26867
+#: cp/parser.c:26942
 #, gcc-internal-format
 msgid "expected %<@synchronized%>"
 msgstr ""
 
-#: cp/parser.c:26870
+#: cp/parser.c:26945
 #, gcc-internal-format
 msgid "expected %<@throw%>"
 msgstr ""
 
-#: cp/parser.c:26873
+#: cp/parser.c:26948
 #, gcc-internal-format
 msgid "expected %<__transaction_atomic%>"
 msgstr ""
 
-#: cp/parser.c:26876
+#: cp/parser.c:26951
 #, gcc-internal-format
 msgid "expected %<__transaction_relaxed%>"
 msgstr ""
 
-#: cp/parser.c:26907
+#: cp/parser.c:26982
 #, gcc-internal-format
 msgid "expected %<::%>"
 msgstr ""
 
-#: cp/parser.c:26919
+#: cp/parser.c:26994
 #, gcc-internal-format
 msgid "expected %<...%>"
 msgstr ""
 
-#: cp/parser.c:26922
+#: cp/parser.c:26997
 #, gcc-internal-format
 msgid "expected %<*%>"
 msgstr ""
 
-#: cp/parser.c:26925
+#: cp/parser.c:27000
 #, gcc-internal-format
 msgid "expected %<~%>"
 msgstr ""
 
-#: cp/parser.c:26931
+#: cp/parser.c:27006
 #, gcc-internal-format
 msgid "expected %<:%> or %<::%>"
 msgstr ""
 
-#: cp/parser.c:26959
+#: cp/parser.c:27034
 #, gcc-internal-format
 msgid "expected %<class%>, %<typename%>, or %<template%>"
 msgstr ""
 
-#: cp/parser.c:27220
+#: cp/parser.c:27295
 #, gcc-internal-format
 msgid "%qs tag used in naming %q#T"
 msgstr ""
 
-#: cp/parser.c:27225
+#: cp/parser.c:27300
 #, gcc-internal-format
 msgid "%q#T was previously declared here"
 msgstr ""
 
-#: cp/parser.c:27244
+#: cp/parser.c:27319
 #, gcc-internal-format
 msgid "%qD redeclared with different access"
 msgstr ""
 
-#: cp/parser.c:27265
+#: cp/parser.c:27340
 #, gcc-internal-format
 msgid ""
 "in C++98 %<template%> (as a disambiguator) is only allowed within templates"
 msgstr ""
 
-#: cp/parser.c:27506
+#: cp/parser.c:27581
 #, gcc-internal-format
 msgid "file ends in default argument"
 msgstr ""
 
-#: cp/parser.c:27735 cp/parser.c:29044 cp/parser.c:29230
+#: cp/parser.c:27810 cp/parser.c:29119 cp/parser.c:29305
 #, gcc-internal-format
 msgid "misplaced %<@%D%> Objective-C++ construct"
 msgstr ""
 
-#: cp/parser.c:27804
+#: cp/parser.c:27879
 #, gcc-internal-format
 msgid "objective-c++ message receiver expected"
 msgstr ""
 
-#: cp/parser.c:27874
+#: cp/parser.c:27949
 #, gcc-internal-format
 msgid "objective-c++ message argument(s) are expected"
 msgstr ""
 
-#: cp/parser.c:27904
+#: cp/parser.c:27979
 #, gcc-internal-format
 msgid "%<@encode%> must specify a type as an argument"
 msgstr ""
 
-#: cp/parser.c:28310
+#: cp/parser.c:28385
 #, gcc-internal-format
 msgid "invalid Objective-C++ selector name"
 msgstr ""
 
-#: cp/parser.c:28385 cp/parser.c:28403
+#: cp/parser.c:28460 cp/parser.c:28478
 #, gcc-internal-format
 msgid "objective-c++ method declaration is expected"
 msgstr ""
 
-#: cp/parser.c:28397 cp/parser.c:28462
+#: cp/parser.c:28472 cp/parser.c:28537
 #, gcc-internal-format
 msgid "method attributes must be specified at the end"
 msgstr ""
 
-#: cp/parser.c:28505
+#: cp/parser.c:28580
 #, gcc-internal-format
 msgid "stray %qs between Objective-C++ methods"
 msgstr ""
 
-#: cp/parser.c:28711 cp/parser.c:28718 cp/parser.c:28725
+#: cp/parser.c:28786 cp/parser.c:28793 cp/parser.c:28800
 #, gcc-internal-format
 msgid "invalid type for instance variable"
 msgstr ""
 
-#: cp/parser.c:28838
+#: cp/parser.c:28913
 #, gcc-internal-format
 msgid "identifier expected after %<@protocol%>"
 msgstr ""
 
-#: cp/parser.c:29009
+#: cp/parser.c:29084
 #, gcc-internal-format
 msgid ""
 "attributes may not be specified before the %<@%D%> Objective-C++ keyword"
 msgstr ""
 
-#: cp/parser.c:29016
+#: cp/parser.c:29091
 #, gcc-internal-format
 msgid "prefix attributes are ignored before %<@%D%>"
 msgstr ""
 
-#: cp/parser.c:29289 cp/parser.c:29296 cp/parser.c:29303
+#: cp/parser.c:29364 cp/parser.c:29371 cp/parser.c:29378
 #, gcc-internal-format
 msgid "invalid type for property"
 msgstr ""
 
-#: cp/parser.c:30443
+#: cp/parser.c:30502
 #, gcc-internal-format
 msgid "%<wait%> expression must be integral"
 msgstr ""
 
-#: cp/parser.c:31137
+#: cp/parser.c:31196
 #, gcc-internal-format
 msgid "invalid reduction-identifier"
 msgstr ""
 
-#: cp/parser.c:33335
+#: cp/parser.c:33394
 #, gcc-internal-format
 msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop"
 msgstr ""
 
-#: cp/parser.c:33338
+#: cp/parser.c:33397
 #, gcc-internal-format
 msgid "parenthesized initialization is not allowed in for-loop"
 msgstr ""
 
-#: cp/parser.c:33408
+#: cp/parser.c:33467
 #, gcc-internal-format
 msgid ""
 "%<_Cilk_for%> allows expression instead of declaration only in C, not in C++"
 msgstr ""
 
-#: cp/parser.c:33636 cp/pt.c:14958
+#: cp/parser.c:33695 cp/pt.c:15033
 #, gcc-internal-format
 msgid "iteration variable %qD should not be reduction"
 msgstr ""
 
-#: cp/parser.c:33721
+#: cp/parser.c:33780
 #, gcc-internal-format
 msgid "not enough collapsed for loops"
 msgstr ""
 
-#: cp/parser.c:34003
+#: cp/parser.c:34064
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp ordered%> with %<depend%> clause may only be used in compound "
 "statements"
 msgstr ""
 
-#: cp/parser.c:34795
+#: cp/parser.c:34857
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp target exit data%> with map-type other than %<from%>, %<release"
 "%> or %<delete%> on %<map%> clause"
 msgstr ""
 
-#: cp/parser.c:35658
+#: cp/parser.c:35720
 #, gcc-internal-format
 msgid ""
 "%<#pragma omp declare simd%> of %<simd%> attribute cannot be used in the "
 "same function marked as a Cilk Plus SIMD-enabled  function"
 msgstr ""
 
-#: cp/parser.c:35668
+#: cp/parser.c:35730
 #, gcc-internal-format
 msgid ""
 "vector attribute not immediately followed by a single function declaration "
 "or definition"
 msgstr ""
 
-#: cp/parser.c:35962
+#: cp/parser.c:36024
 #, gcc-internal-format
 msgid "invalid initializer clause"
 msgstr ""
 
-#: cp/parser.c:35990
+#: cp/parser.c:36052
 #, gcc-internal-format
 msgid "expected id-expression (arguments)"
 msgstr ""
 
-#: cp/parser.c:36002
+#: cp/parser.c:36064
 #, gcc-internal-format
 msgid ""
 "one of the initializer call arguments should be %<omp_priv%> or %<&omp_priv%>"
 msgstr ""
 
-#: cp/parser.c:36083
+#: cp/parser.c:36145
 #, gcc-internal-format
 msgid ""
 "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or "
 "identifier"
 msgstr ""
 
-#: cp/parser.c:36102
+#: cp/parser.c:36164
 #, gcc-internal-format
 msgid "types may not be defined in declare reduction type list"
 msgstr ""
 
-#: cp/parser.c:36124 cp/semantics.c:5357
+#: cp/parser.c:36186 cp/semantics.c:5354
 #, gcc-internal-format
 msgid "predeclared arithmetic type %qT in %<#pragma omp declare reduction%>"
 msgstr ""
 
-#: cp/parser.c:36129 cp/semantics.c:5366
+#: cp/parser.c:36191 cp/semantics.c:5363
 #, gcc-internal-format
 msgid "function or array type %qT in %<#pragma omp declare reduction%>"
 msgstr ""
 
-#: cp/parser.c:36132 cp/pt.c:11838 cp/semantics.c:5372
+#: cp/parser.c:36194 cp/pt.c:11889 cp/semantics.c:5369
 #, gcc-internal-format
 msgid "reference type %qT in %<#pragma omp declare reduction%>"
 msgstr ""
 
-#: cp/parser.c:36135 cp/semantics.c:5378
+#: cp/parser.c:36197 cp/semantics.c:5375
 #, gcc-internal-format
 msgid ""
 "const, volatile or __restrict qualified type %qT in %<#pragma omp declare "
 "reduction%>"
 msgstr ""
 
-#: cp/parser.c:36517
+#: cp/parser.c:36579
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> names a set of overloads"
 msgstr ""
 
-#: cp/parser.c:36526
+#: cp/parser.c:36588
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> does not refer to a namespace scope function"
 msgstr ""
 
-#: cp/parser.c:36535
+#: cp/parser.c:36597
 #, gcc-internal-format
 msgid "%<#pragma acc routine%> does not refer to a function"
 msgstr ""
 
 #. cancel-and-throw is unimplemented.
-#: cp/parser.c:36873
+#: cp/parser.c:36935
 #, gcc-internal-format
 msgid "atomic_cancel"
 msgstr ""
 
-#: cp/parser.c:36916 cp/semantics.c:8579
+#: cp/parser.c:36978 cp/semantics.c:8583
 #, gcc-internal-format
 msgid "%<__transaction_relaxed%> without transactional memory support enabled"
 msgstr ""
 
-#: cp/parser.c:36918 cp/semantics.c:8581
+#: cp/parser.c:36980 cp/semantics.c:8585
 #, gcc-internal-format
 msgid "%<__transaction_atomic%> without transactional memory support enabled"
 msgstr ""
 
-#: cp/parser.c:37114
+#: cp/parser.c:37176
 #, gcc-internal-format
 msgid "junk at end of %<#pragma GCC pch_preprocess%>"
 msgstr ""
 
-#: cp/parser.c:37147
+#: cp/parser.c:37209
 #, gcc-internal-format
 msgid "invalid grainsize for _Cilk_for"
 msgstr ""
 
-#: cp/parser.c:37356
+#: cp/parser.c:37418
 #, gcc-internal-format
 msgid "%<#pragma GCC ivdep%> must be inside a function"
 msgstr ""
 
-#: cp/parser.c:37377
+#: cp/parser.c:37439
 #, gcc-internal-format
 msgid "%<#pragma simd%> must be inside a function"
 msgstr ""
 
-#: cp/parser.c:37389
+#: cp/parser.c:37451
 #, gcc-internal-format
 msgid "%<#pragma cilk grainsize%> must be inside a function"
 msgstr ""
 
-#: cp/parser.c:37401
+#: cp/parser.c:37463
 #, gcc-internal-format
 msgid "-fcilkplus must be enabled to use %<#pragma cilk grainsize%>"
 msgstr ""
 
-#: cp/parser.c:37458
+#: cp/parser.c:37520
 #, gcc-internal-format
 msgid "inter-module optimizations not implemented for C++"
 msgstr ""
 
-#: cp/parser.c:37568
+#: cp/parser.c:37630
 #, gcc-internal-format
 msgid "expected variable-name"
 msgstr ""
 
-#: cp/parser.c:37632
+#: cp/parser.c:37694
 #, gcc-internal-format
 msgid "expected %<,%> or %<)%> after %qE"
 msgstr ""
 
-#: cp/parser.c:38025
+#: cp/parser.c:38093
 #, gcc-internal-format
 msgid "implicit templates may not be %<virtual%>"
 msgstr ""
 
-#: cp/pt.c:295
+#: cp/pt.c:293
 #, gcc-internal-format
 msgid "data member %qD cannot be a member template"
 msgstr ""
 
-#: cp/pt.c:307
+#: cp/pt.c:305
 #, gcc-internal-format
 msgid "invalid member template declaration %qD"
 msgstr ""
 
-#: cp/pt.c:686
+#: cp/pt.c:684
 #, gcc-internal-format
 msgid "explicit specialization in non-namespace scope %qD"
 msgstr ""
 
-#: cp/pt.c:700
+#: cp/pt.c:698
 #, gcc-internal-format
 msgid "enclosing class templates are not explicitly specialized"
 msgstr ""
 
-#: cp/pt.c:786
+#: cp/pt.c:784
 #, gcc-internal-format
 msgid "specialization of %qD must appear at namespace scope"
 msgstr ""
 
-#: cp/pt.c:795
+#: cp/pt.c:793
 #, gcc-internal-format
 msgid "specialization of %qD in different namespace"
 msgstr ""
 
-#: cp/pt.c:797 cp/pt.c:1024
+#: cp/pt.c:795 cp/pt.c:1022
 #, gcc-internal-format
 msgid "  from definition of %q#D"
 msgstr ""
 
-#: cp/pt.c:814
+#: cp/pt.c:812
 #, gcc-internal-format
 msgid ""
 "explicit instantiation of %qD in namespace %qD (which does not enclose "
 "namespace %qD)"
 msgstr ""
 
-#: cp/pt.c:935
+#: cp/pt.c:933
 #, gcc-internal-format
 msgid "name of class shadows template template parameter %qD"
 msgstr ""
 
-#: cp/pt.c:946
+#: cp/pt.c:944
 #, gcc-internal-format
 msgid "specialization of alias template %qD"
 msgstr ""
 
-#: cp/pt.c:949 cp/pt.c:1086
+#: cp/pt.c:947 cp/pt.c:1084
 #, gcc-internal-format
 msgid "explicit specialization of non-template %qT"
 msgstr ""
 
-#: cp/pt.c:981
+#: cp/pt.c:979
 #, gcc-internal-format
 msgid "specialization of %qT after instantiation"
 msgstr ""
 
-#: cp/pt.c:1022
+#: cp/pt.c:1020
 #, gcc-internal-format
 msgid "specializing %q#T in different namespace"
 msgstr ""
 
 #. But if we've had an implicit instantiation, that's a
 #. problem ([temp.expl.spec]/6).
-#: cp/pt.c:1064
+#: cp/pt.c:1062
 #, gcc-internal-format
 msgid "specialization %qT after instantiation %qT"
 msgstr ""
 
-#: cp/pt.c:1082
+#: cp/pt.c:1080
 #, gcc-internal-format
 msgid "template specialization of %qD not allowed by ISO C++"
 msgstr ""
 
-#: cp/pt.c:1544
+#: cp/pt.c:1542
 #, gcc-internal-format
 msgid "specialization of %qD after instantiation"
 msgstr ""
 
-#: cp/pt.c:1943
+#: cp/pt.c:1941
 #, gcc-internal-format
 msgid "candidate is: %#D"
 msgstr ""
 
-#: cp/pt.c:1950 cp/semantics.c:5226
+#: cp/pt.c:1948 cp/semantics.c:5223
 #, gcc-internal-format
 msgid "%s %#D"
 msgstr ""
 
-#: cp/pt.c:2091
+#: cp/pt.c:2089
 #, gcc-internal-format
 msgid "%qD is not a function template"
 msgstr ""
 
-#: cp/pt.c:2096
+#: cp/pt.c:2094
 #, gcc-internal-format
 msgid "%qD is not a variable template"
 msgstr ""
 
-#: cp/pt.c:2350
+#: cp/pt.c:2348
 #, gcc-internal-format
 msgid "template-id %qD for %q+D does not match any template declaration"
 msgstr ""
 
-#: cp/pt.c:2353
+#: cp/pt.c:2351
 #, gcc-internal-format
 msgid ""
 "saw %d %<template<>%>, need %d for specializing a member function template"
 msgstr ""
 
-#: cp/pt.c:2364
+#: cp/pt.c:2362
 #, gcc-internal-format
 msgid "ambiguous template specialization %qD for %q+D"
 msgstr ""
 
-#: cp/pt.c:2574
+#: cp/pt.c:2572
 #, gcc-internal-format
 msgid "variable templates only available with -std=c++14 or -std=gnu++14"
 msgstr ""
 
-#: cp/pt.c:2583
+#: cp/pt.c:2581
 #, gcc-internal-format
 msgid "too many template headers for %D (should be %d)"
 msgstr ""
 
-#: cp/pt.c:2588
+#: cp/pt.c:2586
 #, gcc-internal-format
 msgid ""
 "members of an explicitly specialized class are defined without a template "
@@ -44040,57 +44102,57 @@ msgstr ""
 
 #. This case handles bogus declarations like template <>
 #. template <class T> void f<int>();
-#: cp/pt.c:2677 cp/pt.c:2736
+#: cp/pt.c:2675 cp/pt.c:2734
 #, gcc-internal-format
 msgid "template-id %qD in declaration of primary template"
 msgstr ""
 
-#: cp/pt.c:2690
+#: cp/pt.c:2688
 #, gcc-internal-format
 msgid "template parameter list used in explicit instantiation"
 msgstr ""
 
-#: cp/pt.c:2696
+#: cp/pt.c:2694
 #, gcc-internal-format
 msgid "definition provided for explicit instantiation"
 msgstr ""
 
-#: cp/pt.c:2704
+#: cp/pt.c:2702
 #, gcc-internal-format
 msgid "too many template parameter lists in declaration of %qD"
 msgstr ""
 
-#: cp/pt.c:2707
+#: cp/pt.c:2705
 #, gcc-internal-format
 msgid "too few template parameter lists in declaration of %qD"
 msgstr ""
 
-#: cp/pt.c:2709
+#: cp/pt.c:2707
 #, gcc-internal-format
 msgid "explicit specialization of %qD must be introduced by %<template <>%>"
 msgstr ""
 
-#: cp/pt.c:2715
+#: cp/pt.c:2713
 #, gcc-internal-format
 msgid "explicit specialization declared %<concept%>"
 msgstr ""
 
-#: cp/pt.c:2746
+#: cp/pt.c:2744
 #, gcc-internal-format
 msgid "non-type partial specialization %qD is not allowed"
 msgstr ""
 
-#: cp/pt.c:2749
+#: cp/pt.c:2747
 #, gcc-internal-format
 msgid "non-class, non-variable partial specialization %qD is not allowed"
 msgstr ""
 
-#: cp/pt.c:2782
+#: cp/pt.c:2780
 #, gcc-internal-format
 msgid "default argument specified in explicit specialization"
 msgstr ""
 
-#: cp/pt.c:2813
+#: cp/pt.c:2818
 #, gcc-internal-format
 msgid "%qD is not a template function"
 msgstr ""
@@ -44103,140 +44165,150 @@ msgstr ""
 #. program is ill-formed.
 #.
 #. Similar language is found in [temp.explicit].
-#: cp/pt.c:2878
+#: cp/pt.c:2883
 #, gcc-internal-format
 msgid "specialization of implicitly-declared special member function"
 msgstr ""
 
-#: cp/pt.c:2922
+#: cp/pt.c:2927
 #, gcc-internal-format
 msgid "no member function %qD declared in %qT"
 msgstr ""
 
-#: cp/pt.c:2954
+#: cp/pt.c:2959
 #, gcc-internal-format
 msgid "%qD is not declared in %qD"
 msgstr ""
 
-#: cp/pt.c:3059
+#: cp/pt.c:2965
+#, gcc-internal-format
+msgid "friend declaration %qD is not visible to explicit specialization"
+msgstr ""
+
+#: cp/pt.c:2968
+#, gcc-internal-format
+msgid "friend declaration here"
+msgstr ""
+
+#: cp/pt.c:3073
 #, gcc-internal-format
 msgid "explicit specialization of function concept %qD"
 msgstr ""
 
-#: cp/pt.c:3654
+#: cp/pt.c:3668
 #, gcc-internal-format
 msgid "base initializer expansion %<%T%> contains no parameter packs"
 msgstr ""
 
-#: cp/pt.c:3718
+#: cp/pt.c:3732
 #, gcc-internal-format
 msgid "expansion pattern %<%T%> contains no argument packs"
 msgstr ""
 
-#: cp/pt.c:3720
+#: cp/pt.c:3734
 #, gcc-internal-format
 msgid "expansion pattern %<%E%> contains no argument packs"
 msgstr ""
 
-#: cp/pt.c:3764
+#: cp/pt.c:3778
 #, gcc-internal-format
 msgid "parameter packs not expanded with %<...%>:"
 msgstr ""
 
-#: cp/pt.c:3779 cp/pt.c:4513
+#: cp/pt.c:3793 cp/pt.c:4527
 #, gcc-internal-format
 msgid "        %qD"
 msgstr ""
 
-#: cp/pt.c:3781
+#: cp/pt.c:3795
 #, gcc-internal-format
 msgid "        <anonymous>"
 msgstr ""
 
-#: cp/pt.c:3905
+#: cp/pt.c:3919
 #, gcc-internal-format
 msgid "declaration of template parameter %q+D shadows template parameter"
 msgstr ""
 
-#: cp/pt.c:3908
+#: cp/pt.c:3922
 #, gcc-internal-format
 msgid "declaration of %q+#D shadows template parameter"
 msgstr ""
 
-#: cp/pt.c:3910
+#: cp/pt.c:3924
 #, gcc-internal-format
 msgid "template parameter %qD declared here"
 msgstr ""
 
-#: cp/pt.c:4449
+#: cp/pt.c:4463
 #, gcc-internal-format
 msgid "specialization of variable concept %q#D"
 msgstr ""
 
-#: cp/pt.c:4508
+#: cp/pt.c:4522
 #, gcc-internal-format
 msgid "template parameters not deducible in partial specialization:"
 msgstr ""
 
-#: cp/pt.c:4532
+#: cp/pt.c:4546
 #, gcc-internal-format
 msgid "partial specialization %q+D does not specialize any template arguments"
 msgstr ""
 
-#: cp/pt.c:4535
+#: cp/pt.c:4549
 #, gcc-internal-format
 msgid ""
 "partial specialization %q+D does not specialize any template arguments and "
 "is not more constrained than"
 msgstr ""
 
-#: cp/pt.c:4537 cp/pt.c:4548
+#: cp/pt.c:4551 cp/pt.c:4562
 #, gcc-internal-format
 msgid "primary template here"
 msgstr ""
 
-#: cp/pt.c:4545
+#: cp/pt.c:4559
 #, gcc-internal-format
 msgid ""
 "partial specialization is not more specialized than the primary template "
 "because it replaces multiple parameters with a pack expansion"
 msgstr ""
 
-#: cp/pt.c:4595
+#: cp/pt.c:4609
 #, gcc-internal-format
 msgid ""
 "parameter pack argument %qE must be at the end of the template argument list"
 msgstr ""
 
-#: cp/pt.c:4598
+#: cp/pt.c:4612
 #, gcc-internal-format
 msgid ""
 "parameter pack argument %qT must be at the end of the template argument list"
 msgstr ""
 
-#: cp/pt.c:4619
+#: cp/pt.c:4633
 #, gcc-internal-format
 msgid "template argument %qE involves template parameter(s)"
 msgstr ""
 
-#: cp/pt.c:4665
+#: cp/pt.c:4679
 #, gcc-internal-format
 msgid "type %qT of template argument %qE depends on a template parameter"
 msgid_plural "type %qT of template argument %qE depends on template parameters"
 msgstr[0] ""
 msgstr[1] ""
 
-#: cp/pt.c:4718
+#: cp/pt.c:4732
 #, gcc-internal-format
 msgid "declaration of %qD ambiguates earlier template instantiation for %qD"
 msgstr ""
 
-#: cp/pt.c:4722
+#: cp/pt.c:4736
 #, gcc-internal-format
 msgid "partial specialization of %qD after instantiation of %qD"
 msgstr ""
 
-#: cp/pt.c:4898
+#: cp/pt.c:4912
 #, gcc-internal-format
 msgid "no default argument for %qD"
 msgstr ""
@@ -44244,53 +44316,53 @@ msgstr ""
 #. A primary class template can only have one
 #. parameter pack, at the end of the template
 #. parameter list.
-#: cp/pt.c:4920
+#: cp/pt.c:4934
 #, gcc-internal-format
 msgid "parameter pack %q+D must be at the end of the template parameter list"
 msgstr ""
 
-#: cp/pt.c:4956
+#: cp/pt.c:4970
 #, gcc-internal-format
 msgid ""
 "default template arguments may not be used in function template friend re-"
 "declaration"
 msgstr ""
 
-#: cp/pt.c:4959
+#: cp/pt.c:4973
 #, gcc-internal-format
 msgid ""
 "default template arguments may not be used in function template friend "
 "declarations"
 msgstr ""
 
-#: cp/pt.c:4962
+#: cp/pt.c:4976
 #, gcc-internal-format
 msgid ""
 "default template arguments may not be used in function templates without -"
 "std=c++11 or -std=gnu++11"
 msgstr ""
 
-#: cp/pt.c:4965
+#: cp/pt.c:4979
 #, gcc-internal-format
 msgid "default template arguments may not be used in partial specializations"
 msgstr ""
 
-#: cp/pt.c:4968 cp/pt.c:5026
+#: cp/pt.c:4982 cp/pt.c:5040
 #, gcc-internal-format
 msgid "default argument for template parameter for class enclosing %qD"
 msgstr ""
 
-#: cp/pt.c:5122
+#: cp/pt.c:5136
 #, gcc-internal-format
 msgid "template %qD declared"
 msgstr ""
 
-#: cp/pt.c:5129
+#: cp/pt.c:5143
 #, gcc-internal-format
 msgid "template class without a name"
 msgstr ""
 
-#: cp/pt.c:5137
+#: cp/pt.c:5151
 #, gcc-internal-format
 msgid "member template %qD may not have virt-specifiers"
 msgstr ""
@@ -44300,76 +44372,76 @@ msgstr ""
 #. An allocation function can be a function
 #. template. ... Template allocation functions shall
 #. have two or more parameters.
-#: cp/pt.c:5159
+#: cp/pt.c:5173
 #, gcc-internal-format
 msgid "invalid template declaration of %qD"
 msgstr ""
 
-#: cp/pt.c:5288
+#: cp/pt.c:5302
 #, gcc-internal-format
 msgid "template definition of non-template %q#D"
 msgstr ""
 
-#: cp/pt.c:5331
+#: cp/pt.c:5345
 #, gcc-internal-format
 msgid "expected %d levels of template parms for %q#D, got %d"
 msgstr ""
 
-#: cp/pt.c:5345
+#: cp/pt.c:5359
 #, gcc-internal-format
 msgid "got %d template parameters for %q#D"
 msgstr ""
 
-#: cp/pt.c:5348
+#: cp/pt.c:5362
 #, gcc-internal-format
 msgid "got %d template parameters for %q#T"
 msgstr ""
 
-#: cp/pt.c:5350
+#: cp/pt.c:5364
 #, gcc-internal-format, gfc-internal-format
 msgid "  but %d required"
 msgstr ""
 
-#: cp/pt.c:5371
+#: cp/pt.c:5385
 #, gcc-internal-format
 msgid "template arguments to %qD do not match original template %qD"
 msgstr ""
 
-#: cp/pt.c:5375
+#: cp/pt.c:5389
 #, gcc-internal-format
 msgid "use template<> for an explicit specialization"
 msgstr ""
 
-#: cp/pt.c:5513
+#: cp/pt.c:5527
 #, gcc-internal-format
 msgid "%qT is not a template type"
 msgstr ""
 
-#: cp/pt.c:5526
+#: cp/pt.c:5540
 #, gcc-internal-format
 msgid "template specifiers not specified in declaration of %qD"
 msgstr ""
 
-#: cp/pt.c:5537
+#: cp/pt.c:5551
 #, gcc-internal-format, gfc-internal-format
 msgid "redeclared with %d template parameter"
 msgid_plural "redeclared with %d template parameters"
 msgstr[0] ""
 msgstr[1] ""
 
-#: cp/pt.c:5541
+#: cp/pt.c:5555
 #, gcc-internal-format
 msgid "previous declaration %qD used %d template parameter"
 msgid_plural "previous declaration %qD used %d template parameters"
 msgstr[0] ""
 msgstr[1] ""
 
-#: cp/pt.c:5578
+#: cp/pt.c:5592
 #, gcc-internal-format
 msgid "template parameter %q+#D"
 msgstr ""
 
-#: cp/pt.c:5579
+#: cp/pt.c:5593
 #, gcc-internal-format
 msgid "redeclared here as %q#D"
 msgstr ""
@@ -44378,427 +44450,427 @@ msgstr ""
 #.
 #. A template-parameter may not be given default arguments
 #. by two different declarations in the same scope.
-#: cp/pt.c:5589
+#: cp/pt.c:5603
 #, gcc-internal-format
 msgid "redefinition of default argument for %q#D"
 msgstr ""
 
-#: cp/pt.c:5591
+#: cp/pt.c:5605
 #, gcc-internal-format
 msgid "original definition appeared here"
 msgstr ""
 
-#: cp/pt.c:5616
+#: cp/pt.c:5630
 #, gcc-internal-format
 msgid "redeclaration %q#D with different constraints"
 msgstr ""
 
-#: cp/pt.c:5619
+#: cp/pt.c:5633
 #, gcc-internal-format
 msgid "original declaration appeared here"
 msgstr ""
 
-#: cp/pt.c:5872 cp/pt.c:5923
+#: cp/pt.c:5886 cp/pt.c:5937
 #, gcc-internal-format
 msgid "%qE is not a valid template argument for type %qT"
 msgstr ""
 
-#: cp/pt.c:5875
+#: cp/pt.c:5889
 #, gcc-internal-format
 msgid "it must be the address of a function with external linkage"
 msgstr ""
 
-#: cp/pt.c:5878
+#: cp/pt.c:5892
 #, gcc-internal-format
 msgid "it must be the name of a function with external linkage"
 msgstr ""
 
-#: cp/pt.c:5890
+#: cp/pt.c:5904
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because %qD has no linkage"
 msgstr ""
 
-#: cp/pt.c:5894
+#: cp/pt.c:5908
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because %qD does not have "
 "external linkage"
 msgstr ""
 
-#: cp/pt.c:5925
+#: cp/pt.c:5939
 #, gcc-internal-format
 msgid "it must be a pointer-to-member of the form %<&X::Y%>"
 msgstr ""
 
-#: cp/pt.c:5976
+#: cp/pt.c:5990
 #, gcc-internal-format
 msgid "  couldn't deduce template parameter %qD"
 msgstr ""
 
-#: cp/pt.c:5991
+#: cp/pt.c:6005
 #, gcc-internal-format
 msgid "  types %qT and %qT have incompatible cv-qualifiers"
 msgstr ""
 
-#: cp/pt.c:6000
+#: cp/pt.c:6014
 #, gcc-internal-format
 msgid "  mismatched types %qT and %qT"
 msgstr ""
 
-#: cp/pt.c:6009
+#: cp/pt.c:6023
 #, gcc-internal-format
 msgid "  template parameter %qD is not a parameter pack, but argument %qD is"
 msgstr ""
 
-#: cp/pt.c:6020
+#: cp/pt.c:6034
 #, gcc-internal-format
 msgid "  template argument %qE does not match pointer-to-member constant %qE"
 msgstr ""
 
-#: cp/pt.c:6030
+#: cp/pt.c:6044
 #, gcc-internal-format
 msgid "  %qE is not equivalent to %qE"
 msgstr ""
 
-#: cp/pt.c:6039
+#: cp/pt.c:6053
 #, gcc-internal-format
 msgid "  inconsistent parameter pack deduction with %qT and %qT"
 msgstr ""
 
-#: cp/pt.c:6051
+#: cp/pt.c:6065
 #, gcc-internal-format
 msgid "  deduced conflicting types for parameter %qT (%qT and %qT)"
 msgstr ""
 
-#: cp/pt.c:6055
+#: cp/pt.c:6069
 #, gcc-internal-format
 msgid "  deduced conflicting values for non-type parameter %qE (%qE and %qE)"
 msgstr ""
 
-#: cp/pt.c:6066
+#: cp/pt.c:6080
 #, gcc-internal-format
 msgid "  variable-sized array type %qT is not a valid template argument"
 msgstr ""
 
-#: cp/pt.c:6077
+#: cp/pt.c:6091
 #, gcc-internal-format
 msgid "  member function type %qT is not a valid template argument"
 msgstr ""
 
-#: cp/pt.c:6089
+#: cp/pt.c:6103
 #, gcc-internal-format, gfc-internal-format
 msgid "  candidate expects at least %d argument, %d provided"
 msgid_plural "  candidate expects at least %d arguments, %d provided"
 msgstr[0] ""
 msgstr[1] ""
 
-#: cp/pt.c:6120
+#: cp/pt.c:6134
 #, gcc-internal-format
 msgid "  cannot convert %qE (type %qT) to type %qT"
 msgstr ""
 
-#: cp/pt.c:6133
+#: cp/pt.c:6147
 #, gcc-internal-format
 msgid "  %qT is an ambiguous base class of %qT"
 msgstr ""
 
-#: cp/pt.c:6137
+#: cp/pt.c:6151
 #, gcc-internal-format
 msgid "  %qT is not derived from %qT"
 msgstr ""
 
-#: cp/pt.c:6148
+#: cp/pt.c:6162
 #, gcc-internal-format
 msgid ""
 "  template parameters of a template template argument are inconsistent with "
 "other deduced template arguments"
 msgstr ""
 
-#: cp/pt.c:6158
+#: cp/pt.c:6172
 #, gcc-internal-format
 msgid "  can't deduce a template for %qT from non-template type %qT"
 msgstr ""
 
-#: cp/pt.c:6168
+#: cp/pt.c:6182
 #, gcc-internal-format
 msgid "  template argument %qE does not match %qD"
 msgstr ""
 
-#: cp/pt.c:6177
+#: cp/pt.c:6191
 #, gcc-internal-format
 msgid "  could not resolve address from overloaded function %qE"
 msgstr ""
 
-#: cp/pt.c:6216
+#: cp/pt.c:6230
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because string literals "
 "can never be used in this context"
 msgstr ""
 
-#: cp/pt.c:6379
+#: cp/pt.c:6393
 #, gcc-internal-format
 msgid "in template argument for type %qT "
 msgstr ""
 
-#: cp/pt.c:6426
+#: cp/pt.c:6440
 #, gcc-internal-format
 msgid ""
 "%qD is not a valid template argument because %qD is a variable, not the "
 "address of a variable"
 msgstr ""
 
-#: cp/pt.c:6434
+#: cp/pt.c:6448
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for %qT because it is not the address "
 "of a variable"
 msgstr ""
 
-#: cp/pt.c:6452
+#: cp/pt.c:6466
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument of type %qT because %qE is not a "
 "variable"
 msgstr ""
 
-#: cp/pt.c:6459
+#: cp/pt.c:6473
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument of type %qT because %qD does not have "
 "external linkage"
 msgstr ""
 
-#: cp/pt.c:6467
+#: cp/pt.c:6481
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument of type %qT because %qD has no linkage"
 msgstr ""
 
-#: cp/pt.c:6497
+#: cp/pt.c:6511
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because of conflicts in cv-"
 "qualification"
 msgstr ""
 
-#: cp/pt.c:6505
+#: cp/pt.c:6519
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because it is not an lvalue"
 msgstr ""
 
-#: cp/pt.c:6523
+#: cp/pt.c:6537
 #, gcc-internal-format
 msgid ""
 "%q#D is not a valid template argument for type %qT because a reference "
 "variable does not have a constant address"
 msgstr ""
 
-#: cp/pt.c:6533
+#: cp/pt.c:6547
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because it is not an "
 "object with linkage"
 msgstr ""
 
-#: cp/pt.c:6544
+#: cp/pt.c:6558
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because object %qD does "
 "not have linkage"
 msgstr ""
 
-#: cp/pt.c:6590
+#: cp/pt.c:6604
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because it is a pointer"
 msgstr ""
 
-#: cp/pt.c:6592
+#: cp/pt.c:6606
 #, gcc-internal-format
 msgid "try using %qE instead"
 msgstr ""
 
-#: cp/pt.c:6634 cp/pt.c:6665
+#: cp/pt.c:6648 cp/pt.c:6679
 #, gcc-internal-format
 msgid ""
 "%qE is not a valid template argument for type %qT because it is of type %qT"
 msgstr ""
 
-#: cp/pt.c:6640
+#: cp/pt.c:6654
 #, gcc-internal-format
 msgid "standard conversions are not allowed in this context"
 msgstr ""
 
-#: cp/pt.c:6952
+#: cp/pt.c:6966
 #, gcc-internal-format
 msgid "ignoring attributes on template argument %qT"
 msgstr ""
 
-#: cp/pt.c:7059
+#: cp/pt.c:7073
 #, gcc-internal-format
 msgid "injected-class-name %qD used as template template argument"
 msgstr ""
 
-#: cp/pt.c:7088
+#: cp/pt.c:7102
 #, gcc-internal-format
 msgid "invalid use of destructor %qE as a type"
 msgstr ""
 
-#: cp/pt.c:7093
+#: cp/pt.c:7107
 #, gcc-internal-format
 msgid "to refer to a type member of a template parameter, use %<typename %E%>"
 msgstr ""
 
-#: cp/pt.c:7109 cp/pt.c:7131 cp/pt.c:7184
+#: cp/pt.c:7123 cp/pt.c:7145 cp/pt.c:7198
 #, gcc-internal-format
 msgid "type/value mismatch at argument %d in template parameter list for %qD"
 msgstr ""
 
-#: cp/pt.c:7114
+#: cp/pt.c:7128
 #, gcc-internal-format
 msgid "  expected a constant of type %qT, got %qT"
 msgstr ""
 
-#: cp/pt.c:7119
+#: cp/pt.c:7133
 #, gcc-internal-format
 msgid "  expected a class template, got %qE"
 msgstr ""
 
-#: cp/pt.c:7122
+#: cp/pt.c:7136
 #, gcc-internal-format
 msgid "  expected a type, got %qE"
 msgstr ""
 
-#: cp/pt.c:7136
+#: cp/pt.c:7150
 #, gcc-internal-format
 msgid "  expected a type, got %qT"
 msgstr ""
 
-#: cp/pt.c:7139
+#: cp/pt.c:7153
 #, gcc-internal-format
 msgid "  expected a class template, got %qT"
 msgstr ""
 
-#: cp/pt.c:7188
+#: cp/pt.c:7202
 #, gcc-internal-format
 msgid "  expected a template of type %qD, got %qT"
 msgstr ""
 
-#: cp/pt.c:7202
+#: cp/pt.c:7216
 #, gcc-internal-format
 msgid "constraint mismatch at argument %d in template parameter list for %qD"
 msgstr ""
 
-#: cp/pt.c:7205
+#: cp/pt.c:7219
 #, gcc-internal-format
 msgid "  expected %qD but got %qD"
 msgstr ""
 
 #. Not sure if this is reachable, but it doesn't hurt
 #. to be robust.
-#: cp/pt.c:7237
+#: cp/pt.c:7251
 #, gcc-internal-format
 msgid "type mismatch in nontype parameter pack"
 msgstr ""
 
-#: cp/pt.c:7263
+#: cp/pt.c:7277
 #, gcc-internal-format
 msgid "could not convert template argument %qE to %qT"
 msgstr ""
 
-#: cp/pt.c:7397 cp/pt.c:7702
+#: cp/pt.c:7412 cp/pt.c:7717
 #, gcc-internal-format, gfc-internal-format
 msgid "template argument %d is invalid"
 msgstr ""
 
-#: cp/pt.c:7412 cp/pt.c:7542 cp/pt.c:7727
+#: cp/pt.c:7427 cp/pt.c:7557 cp/pt.c:7742
 #, gcc-internal-format, gfc-internal-format
 msgid "wrong number of template arguments (%d, should be %d)"
 msgstr ""
 
-#: cp/pt.c:7538
+#: cp/pt.c:7553
 #, gcc-internal-format, gfc-internal-format
 msgid "wrong number of template arguments (%d, should be at least %d)"
 msgstr ""
 
-#: cp/pt.c:7547
+#: cp/pt.c:7562
 #, gcc-internal-format
 msgid "provided for %qD"
 msgstr ""
 
-#: cp/pt.c:7572
+#: cp/pt.c:7587
 #, gcc-internal-format
 msgid ""
 "pack expansion argument for non-pack parameter %qD of alias template %qD"
 msgstr ""
 
-#: cp/pt.c:7576
+#: cp/pt.c:7591
 #, gcc-internal-format
 msgid "pack expansion argument for non-pack parameter %qD of concept %qD"
 msgstr ""
 
-#: cp/pt.c:7668
+#: cp/pt.c:7683
 #, gcc-internal-format
 msgid ""
 "so any instantiation with a non-empty parameter pack would be ill-formed"
 msgstr ""
 
-#: cp/pt.c:7730
+#: cp/pt.c:7745
 #, gcc-internal-format
 msgid "provided for %q+D"
 msgstr ""
 
-#: cp/pt.c:7999
+#: cp/pt.c:8014
 #, gcc-internal-format
 msgid "%q#D is not a function template"
 msgstr ""
 
-#: cp/pt.c:8166
+#: cp/pt.c:8181
 #, gcc-internal-format
 msgid "non-template type %qT used as a template"
 msgstr ""
 
-#: cp/pt.c:8168
+#: cp/pt.c:8183
 #, gcc-internal-format
 msgid "for template declaration %q+D"
 msgstr ""
 
-#: cp/pt.c:8339
+#: cp/pt.c:8354
 #, gcc-internal-format
 msgid "template constraint failure"
 msgstr ""
 
-#: cp/pt.c:8683
+#: cp/pt.c:8700
 #, gcc-internal-format
-msgid "constraints for %qD not satisfied"
+msgid "use of invalid variable template %qE"
 msgstr ""
 
-#: cp/pt.c:9075
+#: cp/pt.c:9094
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to "
 "increase the maximum)"
 msgstr ""
 
-#: cp/pt.c:10655
+#: cp/pt.c:10672
 #, gcc-internal-format
 msgid "fold of empty expansion over %O"
 msgstr ""
 
-#: cp/pt.c:10946
+#: cp/pt.c:10991
 #, gcc-internal-format
 msgid "mismatched argument pack lengths while expanding %<%T%>"
 msgstr ""
 
-#: cp/pt.c:10950
+#: cp/pt.c:10995
 #, gcc-internal-format
 msgid "mismatched argument pack lengths while expanding %<%E%>"
 msgstr ""
 
-#: cp/pt.c:11501
+#: cp/pt.c:11552
 #, gcc-internal-format
 msgid "  when instantiating default argument for call to %D"
 msgstr ""
@@ -44816,270 +44888,270 @@ msgstr ""
 #.
 #. is an attempt to declare a variable with function
 #. type.
-#: cp/pt.c:12336
+#: cp/pt.c:12395
 #, gcc-internal-format
 msgid "variable %qD has function type"
 msgstr ""
 
-#: cp/pt.c:12508
+#: cp/pt.c:12567
 #, gcc-internal-format
 msgid "invalid parameter type %qT"
 msgstr ""
 
-#: cp/pt.c:12510
+#: cp/pt.c:12569
 #, gcc-internal-format
 msgid "in declaration %q+D"
 msgstr ""
 
-#: cp/pt.c:12621
+#: cp/pt.c:12680
 #, gcc-internal-format
 msgid "function returning an array"
 msgstr ""
 
-#: cp/pt.c:12623
+#: cp/pt.c:12682
 #, gcc-internal-format
 msgid "function returning a function"
 msgstr ""
 
-#: cp/pt.c:12663
+#: cp/pt.c:12722
 #, gcc-internal-format
 msgid "creating pointer to member function of non-class type %qT"
 msgstr ""
 
-#: cp/pt.c:13251
+#: cp/pt.c:13317
 #, gcc-internal-format
 msgid "forming reference to void"
 msgstr ""
 
-#: cp/pt.c:13253
+#: cp/pt.c:13319
 #, gcc-internal-format
 msgid "forming pointer to reference type %qT"
 msgstr ""
 
-#: cp/pt.c:13255
+#: cp/pt.c:13321
 #, gcc-internal-format
 msgid "forming reference to reference type %qT"
 msgstr ""
 
-#: cp/pt.c:13268
+#: cp/pt.c:13334
 #, gcc-internal-format
 msgid "forming pointer to qualified function type %qT"
 msgstr ""
 
-#: cp/pt.c:13271
+#: cp/pt.c:13337
 #, gcc-internal-format
 msgid "forming reference to qualified function type %qT"
 msgstr ""
 
-#: cp/pt.c:13319
+#: cp/pt.c:13385
 #, gcc-internal-format
 msgid "creating pointer to member of non-class type %qT"
 msgstr ""
 
-#: cp/pt.c:13325
+#: cp/pt.c:13391
 #, gcc-internal-format
 msgid "creating pointer to member reference type %qT"
 msgstr ""
 
-#: cp/pt.c:13331
+#: cp/pt.c:13397
 #, gcc-internal-format
 msgid "creating pointer to member of type void"
 msgstr ""
 
-#: cp/pt.c:13397
+#: cp/pt.c:13463
 #, gcc-internal-format
 msgid "creating array of %qT"
 msgstr ""
 
-#: cp/pt.c:13428
+#: cp/pt.c:13494
 #, gcc-internal-format
 msgid "%qT is not a class, struct, or union type"
 msgstr ""
 
-#: cp/pt.c:13465
+#: cp/pt.c:13531
 #, gcc-internal-format
 msgid "%qT resolves to %qT, which is not an enumeration type"
 msgstr ""
 
-#: cp/pt.c:13473
+#: cp/pt.c:13539
 #, gcc-internal-format
 msgid "%qT resolves to %qT, which is is not a class type"
 msgstr ""
 
-#: cp/pt.c:13602
+#: cp/pt.c:13668
 #, gcc-internal-format
 msgid "use of %qs in template"
 msgstr ""
 
-#: cp/pt.c:13754
+#: cp/pt.c:13829
 #, gcc-internal-format
 msgid "qualifying type %qT does not match destructor name ~%qT"
 msgstr ""
 
-#: cp/pt.c:13769
+#: cp/pt.c:13844
 #, gcc-internal-format
 msgid ""
 "dependent-name %qE is parsed as a non-type, but instantiation yields a type"
 msgstr ""
 
-#: cp/pt.c:13771
+#: cp/pt.c:13846
 #, gcc-internal-format
 msgid "say %<typename %E%> if a type is meant"
 msgstr ""
 
-#: cp/pt.c:13986
+#: cp/pt.c:14064
 #, gcc-internal-format
 msgid "using invalid field %qD"
 msgstr ""
 
-#: cp/pt.c:14444 cp/pt.c:15770
+#: cp/pt.c:14519 cp/pt.c:15845
 #, gcc-internal-format
 msgid "invalid use of pack expansion expression"
 msgstr ""
 
-#: cp/pt.c:14448 cp/pt.c:15774
+#: cp/pt.c:14523 cp/pt.c:15849
 #, gcc-internal-format
 msgid "use %<...%> to expand argument pack"
 msgstr ""
 
-#: cp/pt.c:16549
+#: cp/pt.c:16624
 #, 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.c:16561
+#: cp/pt.c:16636
 #, gcc-internal-format
 msgid "declarations in dependent base %qT are not found by unqualified lookup"
 msgstr ""
 
-#: cp/pt.c:16566
+#: cp/pt.c:16641
 #, gcc-internal-format
 msgid "use %<this->%D%> instead"
 msgstr ""
 
-#: cp/pt.c:16569
+#: cp/pt.c:16644
 #, gcc-internal-format
 msgid "use %<%T::%D%> instead"
 msgstr ""
 
-#: cp/pt.c:16574
+#: cp/pt.c:16649
 #, gcc-internal-format
 msgid "%qD declared here, later in the translation unit"
 msgstr ""
 
-#: cp/pt.c:16847
+#: cp/pt.c:16922
 #, gcc-internal-format
 msgid "%qT is not a class or namespace"
 msgstr ""
 
-#: cp/pt.c:16850
+#: cp/pt.c:16925
 #, gcc-internal-format
 msgid "%qD is not a class or namespace"
 msgstr ""
 
-#: cp/pt.c:17213
+#: cp/pt.c:17288
 #, gcc-internal-format
 msgid "%qT is/uses anonymous type"
 msgstr ""
 
-#: cp/pt.c:17215
+#: cp/pt.c:17290
 #, gcc-internal-format
 msgid "template argument for %qD uses local type %qT"
 msgstr ""
 
-#: cp/pt.c:17225
+#: cp/pt.c:17300
 #, gcc-internal-format
 msgid "%qT is a variably modified type"
 msgstr ""
 
-#: cp/pt.c:17240
+#: cp/pt.c:17315
 #, gcc-internal-format
 msgid "integral expression %qE is not constant"
 msgstr ""
 
-#: cp/pt.c:17258
+#: cp/pt.c:17333
 #, gcc-internal-format
 msgid "  trying to instantiate %qD"
 msgstr ""
 
-#: cp/pt.c:21035
+#: cp/pt.c:21083
 #, gcc-internal-format
 msgid "ambiguous template instantiation for %q#T"
 msgstr ""
 
-#: cp/pt.c:21037
+#: cp/pt.c:21085
 #, gcc-internal-format
 msgid "ambiguous template instantiation for %q#D"
 msgstr ""
 
-#: cp/pt.c:21043
+#: cp/pt.c:21091
 msgid "%s %#S"
 msgstr ""
 
-#: cp/pt.c:21067 cp/pt.c:21154
+#: cp/pt.c:21115 cp/pt.c:21202
 #, gcc-internal-format
 msgid "explicit instantiation of non-template %q#D"
 msgstr ""
 
-#: cp/pt.c:21086
+#: cp/pt.c:21134
 #, gcc-internal-format
 msgid "%qD is not a static data member of a class template"
 msgstr ""
 
-#: cp/pt.c:21092 cp/pt.c:21149
+#: cp/pt.c:21140 cp/pt.c:21197
 #, gcc-internal-format
 msgid "no matching template for %qD found"
 msgstr ""
 
-#: cp/pt.c:21097
+#: cp/pt.c:21145
 #, gcc-internal-format
 msgid ""
 "type %qT for explicit instantiation %qD does not match declared type %qT"
 msgstr ""
 
-#: cp/pt.c:21105
+#: cp/pt.c:21153
 #, gcc-internal-format
 msgid "explicit instantiation of %q#D"
 msgstr ""
 
-#: cp/pt.c:21141
+#: cp/pt.c:21189
 #, gcc-internal-format
 msgid "duplicate explicit instantiation of %q#D"
 msgstr ""
 
-#: cp/pt.c:21164 cp/pt.c:21261
+#: cp/pt.c:21212 cp/pt.c:21309
 #, gcc-internal-format
 msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations"
 msgstr ""
 
-#: cp/pt.c:21169 cp/pt.c:21278
+#: cp/pt.c:21217 cp/pt.c:21326
 #, gcc-internal-format
 msgid "storage class %qD applied to template instantiation"
 msgstr ""
 
-#: cp/pt.c:21237
+#: cp/pt.c:21285
 #, gcc-internal-format
 msgid "explicit instantiation of non-class template %qD"
 msgstr ""
 
-#: cp/pt.c:21239
+#: cp/pt.c:21287
 #, gcc-internal-format
 msgid "explicit instantiation of non-template type %qT"
 msgstr ""
 
-#: cp/pt.c:21248
+#: cp/pt.c:21296
 #, gcc-internal-format
 msgid "explicit instantiation of %q#T before definition of template"
 msgstr ""
 
-#: cp/pt.c:21266
+#: cp/pt.c:21314
 #, gcc-internal-format
 msgid "ISO C++ forbids the use of %qE on explicit instantiations"
 msgstr ""
 
-#: cp/pt.c:21312
+#: cp/pt.c:21360
 #, gcc-internal-format
 msgid "duplicate explicit instantiation of %q#T"
 msgstr ""
@@ -45091,12 +45163,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.c:21851
+#: cp/pt.c:21912
 #, gcc-internal-format
 msgid "explicit instantiation of %qD but no definition available"
 msgstr ""
 
-#: cp/pt.c:22083
+#: cp/pt.c:22144
 #, gcc-internal-format
 msgid ""
 "template instantiation depth exceeds maximum of %d instantiating %q+D, "
@@ -45104,66 +45176,66 @@ msgid ""
 "the maximum)"
 msgstr ""
 
-#: cp/pt.c:22425
+#: cp/pt.c:22486
 #, gcc-internal-format
 msgid "invalid template non-type parameter"
 msgstr ""
 
-#: cp/pt.c:22427
+#: cp/pt.c:22488
 #, gcc-internal-format
 msgid "%q#T is not a valid type for a template non-type parameter"
 msgstr ""
 
-#: cp/pt.c:23789
+#: cp/pt.c:23854
 #, gcc-internal-format
 msgid ""
 "deducing from brace-enclosed initializer list requires #include "
 "<initializer_list>"
 msgstr ""
 
-#: cp/pt.c:23950
+#: cp/pt.c:24018
 #, gcc-internal-format
 msgid "direct-list-initialization of %<auto%> requires exactly one element"
 msgstr ""
 
-#: cp/pt.c:23953
+#: cp/pt.c:24021
 #, gcc-internal-format
 msgid ""
 "for deduction to %<std::initializer_list%>, use copy-list-initialization (i."
 "e. add %<=%> before the %<{%>)"
 msgstr ""
 
-#: cp/pt.c:23975
+#: cp/pt.c:24045
 #, gcc-internal-format
 msgid "%qT as type rather than plain %<decltype(auto)%>"
 msgstr ""
 
-#: cp/pt.c:24010
+#: cp/pt.c:24080
 #, gcc-internal-format
 msgid "unable to deduce lambda return type from %qE"
 msgstr ""
 
-#: cp/pt.c:24012
+#: cp/pt.c:24082
 #, gcc-internal-format
 msgid "unable to deduce %qT from %qE"
 msgstr ""
 
-#: cp/pt.c:24033
+#: cp/pt.c:24114
 #, gcc-internal-format
 msgid "placeholder constraints not satisfied"
 msgstr ""
 
-#: cp/pt.c:24036
+#: cp/pt.c:24117
 #, gcc-internal-format
 msgid "deduced initializer does not satisfy placeholder constraints"
 msgstr ""
 
-#: cp/pt.c:24040
+#: cp/pt.c:24121
 #, gcc-internal-format
 msgid "deduced return type does not satisfy placeholder constraints"
 msgstr ""
 
-#: cp/pt.c:24044
+#: cp/pt.c:24125
 #, gcc-internal-format
 msgid "deduced expression type does not saatisy placeholder constraints"
 msgstr ""
@@ -45230,94 +45302,94 @@ msgstr ""
 msgid "%qT is an inaccessible base of %qT"
 msgstr ""
 
-#: cp/search.c:2052
+#: cp/search.c:2053
 #, gcc-internal-format
 msgid "invalid covariant return type for %q#D"
 msgstr ""
 
-#: cp/search.c:2054
+#: cp/search.c:2055
 #, gcc-internal-format
 msgid "  overriding %q#D"
 msgstr ""
 
-#: cp/search.c:2067
+#: cp/search.c:2068
 #, gcc-internal-format
 msgid "invalid covariant return type for %q+#D"
 msgstr ""
 
-#: cp/search.c:2068 cp/search.c:2073 cp/search.c:2100
+#: cp/search.c:2069 cp/search.c:2074 cp/search.c:2101
 #, gcc-internal-format
 msgid "  overriding %q+#D"
 msgstr ""
 
-#: cp/search.c:2072
+#: cp/search.c:2073
 #, gcc-internal-format
 msgid "conflicting return type specified for %q+#D"
 msgstr ""
 
-#: cp/search.c:2087
+#: cp/search.c:2088
 #, gcc-internal-format
 msgid "looser throw specifier for %q+#F"
 msgstr ""
 
-#: cp/search.c:2088
+#: cp/search.c:2089
 #, gcc-internal-format
 msgid "  overriding %q+#F"
 msgstr ""
 
-#: cp/search.c:2099
+#: cp/search.c:2100
 #, gcc-internal-format
 msgid "conflicting type attributes specified for %q+#D"
 msgstr ""
 
-#: cp/search.c:2115
+#: cp/search.c:2116
 #, gcc-internal-format
 msgid "%qD declared %<transaction_safe_dynamic%>"
 msgstr ""
 
-#: cp/search.c:2117
+#: cp/search.c:2118
 #, gcc-internal-format
 msgid "overriding %qD declared %<transaction_safe%>"
 msgstr ""
 
-#: cp/search.c:2124
+#: cp/search.c:2125
 #, gcc-internal-format
 msgid "deleted function %q+D"
 msgstr ""
 
-#: cp/search.c:2125
+#: cp/search.c:2126
 #, gcc-internal-format
 msgid "overriding non-deleted function %q+D"
 msgstr ""
 
-#: cp/search.c:2130
+#: cp/search.c:2131
 #, gcc-internal-format
 msgid "non-deleted function %q+D"
 msgstr ""
 
-#: cp/search.c:2131
+#: cp/search.c:2132
 #, gcc-internal-format
 msgid "overriding deleted function %q+D"
 msgstr ""
 
-#: cp/search.c:2137
+#: cp/search.c:2138
 #, gcc-internal-format
 msgid "virtual function %q+D"
 msgstr ""
 
-#: cp/search.c:2138
+#: cp/search.c:2139
 #, gcc-internal-format
 msgid "overriding final function %q+D"
 msgstr ""
 
 #. A static member function cannot match an inherited
 #. virtual member function.
-#: cp/search.c:2234
+#: cp/search.c:2235
 #, gcc-internal-format
 msgid "%q+#D cannot be declared"
 msgstr ""
 
-#: cp/search.c:2235
+#: cp/search.c:2236
 #, gcc-internal-format
 msgid "  since %q+#D declared in base class"
 msgstr ""
@@ -45337,445 +45409,445 @@ msgstr ""
 msgid "__label__ declarations are only allowed in function scopes"
 msgstr ""
 
-#: cp/semantics.c:1760
+#: cp/semantics.c:1753
 #, gcc-internal-format
 msgid "invalid use of member %qD in static member function"
 msgstr ""
 
-#: cp/semantics.c:2467
+#: cp/semantics.c:2460
 #, gcc-internal-format
 msgid "arguments to destructor are not allowed"
 msgstr ""
 
-#: cp/semantics.c:2564
+#: cp/semantics.c:2557
 #, gcc-internal-format
 msgid "%<this%> is unavailable for static member functions"
 msgstr ""
 
-#: cp/semantics.c:2566
+#: cp/semantics.c:2559
 #, gcc-internal-format
 msgid "invalid use of %<this%> in non-member function"
 msgstr ""
 
-#: cp/semantics.c:2568
+#: cp/semantics.c:2561
 #, gcc-internal-format
 msgid "invalid use of %<this%> at top level"
 msgstr ""
 
-#: cp/semantics.c:2590
+#: cp/semantics.c:2583
 #, gcc-internal-format
 msgid "invalid qualifying scope in pseudo-destructor name"
 msgstr ""
 
-#: cp/semantics.c:2598 cp/typeck.c:2530
+#: cp/semantics.c:2591 cp/typeck.c:2530
 #, gcc-internal-format
 msgid "qualified type %qT does not match destructor name ~%qT"
 msgstr ""
 
-#: cp/semantics.c:2620
+#: cp/semantics.c:2613
 #, gcc-internal-format
 msgid "%qE is not of type %qT"
 msgstr ""
 
-#: cp/semantics.c:2691
+#: cp/semantics.c:2684
 #, gcc-internal-format
 msgid "compound literal of non-object type %qT"
 msgstr ""
 
-#: cp/semantics.c:2808
+#: cp/semantics.c:2801
 #, gcc-internal-format
 msgid "template type parameters must use the keyword %<class%> or %<typename%>"
 msgstr ""
 
-#: cp/semantics.c:2858
+#: cp/semantics.c:2851
 #, gcc-internal-format
 msgid ""
 "invalid use of type %qT as a default value for a template template-parameter"
 msgstr ""
 
-#: cp/semantics.c:2861
+#: cp/semantics.c:2854
 #, gcc-internal-format
 msgid "invalid default argument for a template template parameter"
 msgstr ""
 
-#: cp/semantics.c:2878
+#: cp/semantics.c:2871
 #, gcc-internal-format
 msgid "definition of %q#T inside template parameter list"
 msgstr ""
 
-#: cp/semantics.c:2909
+#: cp/semantics.c:2902
 #, gcc-internal-format
 msgid "invalid definition of qualified type %qT"
 msgstr ""
 
-#: cp/semantics.c:3189
+#: cp/semantics.c:3182
 #, gcc-internal-format
 msgid "invalid base-class specification"
 msgstr ""
 
-#: cp/semantics.c:3348
+#: cp/semantics.c:3341
 #, gcc-internal-format
 msgid "cannot capture member %qD of anonymous union"
 msgstr ""
 
-#: cp/semantics.c:3361 cp/semantics.c:9260
+#: cp/semantics.c:3354 cp/semantics.c:9266
 #, gcc-internal-format
 msgid "%qD is not captured"
 msgstr ""
 
-#: cp/semantics.c:3366
+#: cp/semantics.c:3359
 #, gcc-internal-format
 msgid "the lambda has no capture-default"
 msgstr ""
 
-#: cp/semantics.c:3368
+#: cp/semantics.c:3361
 #, gcc-internal-format
 msgid ""
 "lambda in local class %q+T cannot capture variables from the enclosing "
 "context"
 msgstr ""
 
-#: cp/semantics.c:3379
+#: cp/semantics.c:3372
 #, gcc-internal-format
 msgid "use of local variable with automatic storage from containing function"
 msgstr ""
 
-#: cp/semantics.c:3380
+#: cp/semantics.c:3373
 #, gcc-internal-format
 msgid "use of parameter from containing function"
 msgstr ""
 
-#: cp/semantics.c:3548
+#: cp/semantics.c:3541
 #, 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.c:3635
+#: cp/semantics.c:3628
 #, gcc-internal-format
 msgid "use of namespace %qD as expression"
 msgstr ""
 
-#: cp/semantics.c:3640
+#: cp/semantics.c:3633
 #, gcc-internal-format
 msgid "use of class template %qT as expression"
 msgstr ""
 
 #. Ambiguous reference to base members.
-#: cp/semantics.c:3646
+#: cp/semantics.c:3639
 #, gcc-internal-format
 msgid "request for member %qD is ambiguous in multiple inheritance lattice"
 msgstr ""
 
-#: cp/semantics.c:3672
+#: cp/semantics.c:3665
 #, gcc-internal-format
 msgid "%qD cannot appear in a constant-expression"
 msgstr ""
 
-#: cp/semantics.c:3797
+#: cp/semantics.c:3790
 #, gcc-internal-format
 msgid "type of %qE is unknown"
 msgstr ""
 
-#: cp/semantics.c:3825
+#: cp/semantics.c:3818
 #, gcc-internal-format
 msgid "%qT is not an enumeration type"
 msgstr ""
 
 #. Parameter packs can only be used in templates
-#: cp/semantics.c:3980
+#: cp/semantics.c:3973
 #, gcc-internal-format
 msgid "Parameter pack __bases only valid in template declaration"
 msgstr ""
 
-#: cp/semantics.c:4009
+#: cp/semantics.c:4002
 #, gcc-internal-format
 msgid "cannot apply %<offsetof%> to destructor %<~%T%>"
 msgstr ""
 
-#: cp/semantics.c:4018
+#: cp/semantics.c:4011
 #, gcc-internal-format
 msgid ""
 "second operand of %<offsetof%> is neither a single identifier nor a sequence "
 "of member accesses and array references"
 msgstr ""
 
-#: cp/semantics.c:4026
+#: cp/semantics.c:4019
 #, gcc-internal-format
 msgid "cannot apply %<offsetof%> to member function %qD"
 msgstr ""
 
-#: cp/semantics.c:4042
+#: cp/semantics.c:4035
 #, gcc-internal-format
 msgid "offsetof within non-standard-layout type %qT is undefined"
 msgstr ""
 
-#: cp/semantics.c:4547 cp/semantics.c:6003 cp/semantics.c:6059
-#: cp/semantics.c:6098 cp/semantics.c:6449 cp/semantics.c:6548
-#: cp/semantics.c:6682
+#: cp/semantics.c:4544 cp/semantics.c:6001 cp/semantics.c:6057
+#: cp/semantics.c:6096 cp/semantics.c:6447 cp/semantics.c:6546
+#: cp/semantics.c:6686
 #, gcc-internal-format
 msgid "%<this%> allowed in OpenMP only in %<declare simd%> clauses"
 msgstr ""
 
-#: cp/semantics.c:5223
+#: cp/semantics.c:5220
 #, gcc-internal-format
 msgid "user defined reduction lookup is ambiguous"
 msgstr ""
 
-#: cp/semantics.c:5496
+#: cp/semantics.c:5493
 #, gcc-internal-format
 msgid "%qE in %<reduction%> clause is a zero size array"
 msgstr ""
 
-#: cp/semantics.c:5544
+#: cp/semantics.c:5541
 #, gcc-internal-format
 msgid "%qE has const type for %<reduction%>"
 msgstr ""
 
-#: cp/semantics.c:5656
+#: cp/semantics.c:5653
 #, gcc-internal-format
 msgid "user defined reduction with constructor initializer for base class %qT"
 msgstr ""
 
-#: cp/semantics.c:5878
+#: cp/semantics.c:5875
 #, gcc-internal-format
 msgid ""
 "linear clause with %qs modifier applied to non-reference variable with %qT "
 "type"
 msgstr ""
 
-#: cp/semantics.c:5890
+#: cp/semantics.c:5888
 #, gcc-internal-format
 msgid ""
 "linear clause applied to non-integral non-pointer variable with %qT type"
 msgstr ""
 
-#: cp/semantics.c:5911
+#: cp/semantics.c:5909
 #, gcc-internal-format
 msgid "linear step expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6014
+#: cp/semantics.c:6012
 #, gcc-internal-format
 msgid "%qD is not a variable in clause %qs"
 msgstr ""
 
-#: cp/semantics.c:6070
+#: cp/semantics.c:6068
 #, gcc-internal-format
 msgid "%qD is not a variable in clause %<firstprivate%>"
 msgstr ""
 
-#: cp/semantics.c:6109
+#: cp/semantics.c:6107
 #, gcc-internal-format
 msgid "%qD is not a variable in clause %<lastprivate%>"
 msgstr ""
 
-#: cp/semantics.c:6154
+#: cp/semantics.c:6152
 #, gcc-internal-format
 msgid "%<gang%> static expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6168
+#: cp/semantics.c:6166
 #, gcc-internal-format
 msgid "%<gang%> static value must bepositive"
 msgstr ""
 
-#: cp/semantics.c:6200
+#: cp/semantics.c:6198
 #, gcc-internal-format
 msgid "%<gang%> num expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6203
+#: cp/semantics.c:6201
 #, gcc-internal-format
 msgid "%<vector%> length expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6207
+#: cp/semantics.c:6205
 #, gcc-internal-format
 msgid "%<worker%> num expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6211
+#: cp/semantics.c:6209
 #, gcc-internal-format
 msgid "%qs expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6229
+#: cp/semantics.c:6227
 #, gcc-internal-format
 msgid "%<gang%> num value must be positive"
 msgstr ""
 
-#: cp/semantics.c:6233
+#: cp/semantics.c:6231
 #, gcc-internal-format
 msgid "%<vector%> length value must bepositive"
 msgstr ""
 
-#: cp/semantics.c:6238
+#: cp/semantics.c:6236
 #, gcc-internal-format
 msgid "%<worker%> num value must bepositive"
 msgstr ""
 
-#: cp/semantics.c:6243
+#: cp/semantics.c:6241
 #, gcc-internal-format
 msgid "%qs value must be positive"
 msgstr ""
 
-#: cp/semantics.c:6290
+#: cp/semantics.c:6288
 #, gcc-internal-format
 msgid "schedule chunk size expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6322
+#: cp/semantics.c:6320
 #, gcc-internal-format
 msgid "%qs length expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6335
+#: cp/semantics.c:6333
 #, gcc-internal-format
 msgid "%qs length expression must be positive constant integer expression"
 msgstr ""
 
-#: cp/semantics.c:6354
+#: cp/semantics.c:6352
 #, gcc-internal-format
 msgid "%<async%> expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6382
+#: cp/semantics.c:6380
 #, gcc-internal-format
 msgid "%<thread_limit%> expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6411
+#: cp/semantics.c:6409
 #, gcc-internal-format
 msgid "%<device%> id must be integral"
 msgstr ""
 
-#: cp/semantics.c:6432
+#: cp/semantics.c:6430
 #, gcc-internal-format
 msgid "%<dist_schedule%> chunk size expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6459
+#: cp/semantics.c:6457
 #, gcc-internal-format
 msgid "%qD is not a variable in %<aligned%> clause"
 msgstr ""
 
-#: cp/semantics.c:6473
+#: cp/semantics.c:6471
 #, 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.c:6479
+#: cp/semantics.c:6477
 #, gcc-internal-format
 msgid "%qD appears more than once in %<aligned%> clauses"
 msgstr ""
 
-#: cp/semantics.c:6492
+#: cp/semantics.c:6490
 #, gcc-internal-format
 msgid "%<aligned%> clause alignment expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6541
+#: cp/semantics.c:6539
 #, gcc-internal-format
 msgid "%qD is not a variable in %<depend%> clause"
 msgstr ""
 
-#: cp/semantics.c:6809
+#: cp/semantics.c:6813
 #, gcc-internal-format
 msgid "overloaded function name %qE in clause %qs"
 msgstr ""
 
-#: cp/semantics.c:6813
+#: cp/semantics.c:6817
 #, gcc-internal-format
 msgid "template %qE in clause %qs"
 msgstr ""
 
-#: cp/semantics.c:6878
+#: cp/semantics.c:6882
 #, gcc-internal-format
 msgid "%<grainsize%> expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6907
+#: cp/semantics.c:6911
 #, gcc-internal-format
 msgid "%<priority%> expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6936
+#: cp/semantics.c:6940
 #, gcc-internal-format
 msgid "%<num_tasks%> expression must be integral"
 msgstr ""
 
-#: cp/semantics.c:6965
+#: cp/semantics.c:6969
 #, gcc-internal-format
 msgid ""
 "%qs variable is neither a pointer, nor an arraynor reference to pointer or "
 "array"
 msgstr ""
 
-#: cp/semantics.c:7421
+#: cp/semantics.c:7425
 #, gcc-internal-format
 msgid "%<threadprivate%> %qD is not file, namespace or block scope variable"
 msgstr ""
 
-#: cp/semantics.c:7435
+#: cp/semantics.c:7439
 #, gcc-internal-format
 msgid "%<threadprivate%> %qE directive not in %qT definition"
 msgstr ""
 
-#: cp/semantics.c:7640
+#: cp/semantics.c:7644
 #, gcc-internal-format
 msgid "difference between %qE and %qD does not have integer type"
 msgstr ""
 
-#: cp/semantics.c:8060
+#: cp/semantics.c:8064
 #, gcc-internal-format
 msgid "%<#pragma omp simd%> used with class iteration variable %qE"
 msgstr ""
 
-#: cp/semantics.c:8402 cp/semantics.c:8412
+#: cp/semantics.c:8406 cp/semantics.c:8416
 #, gcc-internal-format
 msgid "%<#pragma omp atomic update%> uses two different expressions for memory"
 msgstr ""
 
-#: cp/semantics.c:8705
+#: cp/semantics.c:8709
 #, gcc-internal-format
 msgid "static assertion failed"
 msgstr ""
 
-#: cp/semantics.c:8707
+#: cp/semantics.c:8711
 #, gcc-internal-format, gfc-internal-format
 msgid "static assertion failed: %s"
 msgstr ""
 
-#: cp/semantics.c:8712
+#: cp/semantics.c:8716
 #, gcc-internal-format
 msgid "non-constant condition for static assertion"
 msgstr ""
 
-#: cp/semantics.c:8742
+#: cp/semantics.c:8746
 #, gcc-internal-format
 msgid "argument to decltype must be an expression"
 msgstr ""
 
-#: cp/semantics.c:8770
+#: cp/semantics.c:8774
 #, gcc-internal-format
 msgid "decltype cannot resolve address of overloaded function"
 msgstr ""
 
-#: cp/semantics.c:9299
+#: cp/semantics.c:9305
 #, gcc-internal-format
 msgid "operand of fold expression has no unexpanded parameter packs"
 msgstr ""
 
-#: cp/semantics.c:9352
+#: cp/semantics.c:9358
 #, gcc-internal-format
 msgid "both arguments in binary fold have unexpanded parameter packs"
 msgstr ""
 
-#: cp/semantics.c:9354
+#: cp/semantics.c:9360
 #, gcc-internal-format
 msgid "no unexpanded parameter packs in binary fold"
 msgstr ""
@@ -45790,113 +45862,113 @@ msgstr ""
 msgid "lambda-expression in a constant expression"
 msgstr ""
 
-#: cp/tree.c:3567
+#: cp/tree.c:3572
 #, gcc-internal-format
 msgid "%qE attribute can only be applied to Java class definitions"
 msgstr ""
 
-#: cp/tree.c:3596
+#: cp/tree.c:3601
 #, gcc-internal-format
 msgid "%qE attribute can only be applied to class definitions"
 msgstr ""
 
-#: cp/tree.c:3602
+#: cp/tree.c:3607
 #, gcc-internal-format
 msgid "%qE is obsolete; g++ vtables are now COM-compatible by default"
 msgstr ""
 
-#: cp/tree.c:3629
+#: cp/tree.c:3634
 #, gcc-internal-format
 msgid "requested init_priority is not an integer constant"
 msgstr ""
 
-#: cp/tree.c:3651
+#: cp/tree.c:3656
 #, gcc-internal-format
 msgid ""
 "can only use %qE attribute on file-scope definitions of objects of class type"
 msgstr ""
 
-#: cp/tree.c:3659
+#: cp/tree.c:3664
 #, gcc-internal-format
 msgid "requested init_priority is out of range"
 msgstr ""
 
-#: cp/tree.c:3669
+#: cp/tree.c:3674
 #, gcc-internal-format
 msgid "requested init_priority is reserved for internal use"
 msgstr ""
 
-#: cp/tree.c:3680
+#: cp/tree.c:3685
 #, gcc-internal-format
 msgid "%qE attribute is not supported on this platform"
 msgstr ""
 
-#: cp/tree.c:3707
+#: cp/tree.c:3712
 #, gcc-internal-format
 msgid "redeclaration of %qD adds abi tag %E"
 msgstr ""
 
-#: cp/tree.c:3727
+#: cp/tree.c:3732
 #, gcc-internal-format
 msgid "the %qE attribute requires arguments"
 msgstr ""
 
-#: cp/tree.c:3738
+#: cp/tree.c:3743
 #, gcc-internal-format
 msgid "arguments to the %qE attribute must be narrow string literals"
 msgstr ""
 
-#: cp/tree.c:3751 cp/tree.c:3764
+#: cp/tree.c:3756 cp/tree.c:3769
 #, gcc-internal-format
 msgid "arguments to the %qE attribute must contain valid identifiers"
 msgstr ""
 
-#: cp/tree.c:3753
+#: cp/tree.c:3758
 #, gcc-internal-format
 msgid "%<%c%> is not a valid first character for an identifier"
 msgstr ""
 
-#: cp/tree.c:3766
+#: cp/tree.c:3771
 #, gcc-internal-format
 msgid "%<%c%> is not a valid character in an identifier"
 msgstr ""
 
-#: cp/tree.c:3790
+#: cp/tree.c:3795
 #, gcc-internal-format
 msgid "%qE attribute applied to non-class, non-enum type %qT"
 msgstr ""
 
-#: cp/tree.c:3796
+#: cp/tree.c:3801
 #, gcc-internal-format
 msgid "%qE attribute applied to %qT after its definition"
 msgstr ""
 
-#: cp/tree.c:3803
+#: cp/tree.c:3808
 #, gcc-internal-format
 msgid "ignoring %qE attribute applied to template instantiation %qT"
 msgstr ""
 
-#: cp/tree.c:3810
+#: cp/tree.c:3815
 #, gcc-internal-format
 msgid "ignoring %qE attribute applied to template specialization %qT"
 msgstr ""
 
-#: cp/tree.c:3832
+#: cp/tree.c:3837
 #, gcc-internal-format
 msgid "%qE attribute applied to non-function, non-variable %qD"
 msgstr ""
 
-#: cp/tree.c:3838
+#: cp/tree.c:3843
 #, gcc-internal-format
 msgid "%qE attribute applied to extern \"C\" declaration %qD"
 msgstr ""
 
-#: cp/tree.c:4539
+#: cp/tree.c:4544
 #, gcc-internal-format
 msgid "zero as null pointer constant"
 msgstr ""
 
-#: cp/tree.c:4552
+#: cp/tree.c:4557
 #, gcc-internal-format, gfc-internal-format
 msgid "lang_* check: failed in %s, at %s:%d"
 msgstr ""
@@ -46418,313 +46490,313 @@ msgstr ""
 msgid "address requested for %qD, which is declared %<register%>"
 msgstr ""
 
-#: cp/typeck.c:6302
+#: cp/typeck.c:6301
 #, gcc-internal-format
 msgid "list-initializer for non-class type must not be parenthesized"
 msgstr ""
 
-#: cp/typeck.c:6314
+#: cp/typeck.c:6313
 #, gcc-internal-format
 msgid "expression list treated as compound expression in initializer"
 msgstr ""
 
-#: cp/typeck.c:6318
+#: cp/typeck.c:6317
 #, gcc-internal-format
 msgid "expression list treated as compound expression in mem-initializer"
 msgstr ""
 
-#: cp/typeck.c:6322
+#: cp/typeck.c:6321
 #, gcc-internal-format
 msgid "expression list treated as compound expression in functional cast"
 msgstr ""
 
-#: cp/typeck.c:6359
+#: cp/typeck.c:6358
 #, gcc-internal-format, gfc-internal-format
 msgid "%s expression list treated as compound expression"
 msgstr ""
 
-#: cp/typeck.c:6456
+#: cp/typeck.c:6455
 #, gcc-internal-format
 msgid "no context to resolve type of %qE"
 msgstr ""
 
-#: cp/typeck.c:6489
+#: cp/typeck.c:6488
 #, gcc-internal-format
 msgid "cast from type %qT to type %qT casts away qualifiers"
 msgstr ""
 
-#: cp/typeck.c:6495
+#: cp/typeck.c:6494
 #, gcc-internal-format
 msgid "static_cast from type %qT to type %qT casts away qualifiers"
 msgstr ""
 
-#: cp/typeck.c:6501
+#: cp/typeck.c:6500
 #, gcc-internal-format
 msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers"
 msgstr ""
 
-#: cp/typeck.c:6524
+#: cp/typeck.c:6523
 #, gcc-internal-format
 msgid "useless cast to type %qT"
 msgstr ""
 
-#: cp/typeck.c:6895
+#: cp/typeck.c:6894
 #, gcc-internal-format
 msgid "invalid static_cast from type %qT to type %qT"
 msgstr ""
 
-#: cp/typeck.c:6921
+#: cp/typeck.c:6920
 #, gcc-internal-format
 msgid "converting from %qT to %qT"
 msgstr ""
 
-#: cp/typeck.c:6973
+#: cp/typeck.c:6972
 #, gcc-internal-format
 msgid "invalid cast of an rvalue expression of type %qT to type %qT"
 msgstr ""
 
-#: cp/typeck.c:7043
+#: cp/typeck.c:7042
 #, gcc-internal-format
 msgid "cast from %qT to %qT loses precision"
 msgstr ""
 
-#: cp/typeck.c:7083
+#: cp/typeck.c:7082
 #, gcc-internal-format
 msgid "cast from %qT to %qT increases required alignment of target type"
 msgstr ""
 
-#: cp/typeck.c:7101
+#: cp/typeck.c:7100
 #, gcc-internal-format
 msgid ""
 "casting between pointer-to-function and pointer-to-object is conditionally-"
 "supported"
 msgstr ""
 
-#: cp/typeck.c:7115
+#: cp/typeck.c:7114
 #, gcc-internal-format
 msgid "invalid cast from type %qT to type %qT"
 msgstr ""
 
-#: cp/typeck.c:7176
+#: cp/typeck.c:7175
 #, gcc-internal-format
 msgid ""
 "invalid use of const_cast with type %qT, which is not a pointer, reference, "
 "nor a pointer-to-data-member type"
 msgstr ""
 
-#: cp/typeck.c:7185
+#: cp/typeck.c:7184
 #, gcc-internal-format
 msgid ""
 "invalid use of const_cast with type %qT, which is a pointer or reference to "
 "a function type"
 msgstr ""
 
-#: cp/typeck.c:7225
+#: cp/typeck.c:7224
 #, gcc-internal-format
 msgid "invalid const_cast of an rvalue of type %qT to type %qT"
 msgstr ""
 
-#: cp/typeck.c:7286
+#: cp/typeck.c:7285
 #, gcc-internal-format
 msgid "invalid const_cast from type %qT to type %qT"
 msgstr ""
 
-#: cp/typeck.c:7379 cp/typeck.c:7387
+#: cp/typeck.c:7378 cp/typeck.c:7386
 #, gcc-internal-format
 msgid "ISO C++ forbids casting to an array type %qT"
 msgstr ""
 
-#: cp/typeck.c:7396
+#: cp/typeck.c:7395
 #, gcc-internal-format
 msgid "invalid cast to function type %qT"
 msgstr ""
 
-#: cp/typeck.c:7677
+#: cp/typeck.c:7676
 #, gcc-internal-format
 msgid "  in evaluation of %<%Q(%#T, %#T)%>"
 msgstr ""
 
-#: cp/typeck.c:7738
+#: cp/typeck.c:7737
 #, gcc-internal-format
 msgid "assigning to an array from an initializer list"
 msgstr ""
 
-#: cp/typeck.c:7764
+#: cp/typeck.c:7763
 #, gcc-internal-format
 msgid "incompatible types in assignment of %qT to %qT"
 msgstr ""
 
-#: cp/typeck.c:7778
+#: cp/typeck.c:7777
 #, gcc-internal-format
 msgid "array used as initializer"
 msgstr ""
 
-#: cp/typeck.c:7780
+#: cp/typeck.c:7779
 #, gcc-internal-format
 msgid "invalid array assignment"
 msgstr ""
 
-#: cp/typeck.c:7910
+#: cp/typeck.c:7909
 #, gcc-internal-format
 msgid "   in pointer to member function conversion"
 msgstr ""
 
-#: cp/typeck.c:7924
+#: cp/typeck.c:7923
 #, gcc-internal-format
 msgid "pointer to member conversion via virtual base %qT"
 msgstr ""
 
-#: cp/typeck.c:7971 cp/typeck.c:7990
+#: cp/typeck.c:7970 cp/typeck.c:7989
 #, gcc-internal-format
 msgid "   in pointer to member conversion"
 msgstr ""
 
-#: cp/typeck.c:8071
+#: cp/typeck.c:8070
 #, gcc-internal-format
 msgid "invalid conversion to type %qT from type %qT"
 msgstr ""
 
-#: cp/typeck.c:8347
+#: cp/typeck.c:8346
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT for argument %qP to %qD"
 msgstr ""
 
-#: cp/typeck.c:8353
+#: cp/typeck.c:8352
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT in default argument"
 msgstr ""
 
-#: cp/typeck.c:8357
+#: cp/typeck.c:8356
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT in argument passing"
 msgstr ""
 
-#: cp/typeck.c:8361
+#: cp/typeck.c:8360
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT"
 msgstr ""
 
-#: cp/typeck.c:8365
+#: cp/typeck.c:8364
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT in initialization"
 msgstr ""
 
-#: cp/typeck.c:8369
+#: cp/typeck.c:8368
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT in return"
 msgstr ""
 
-#: cp/typeck.c:8373
+#: cp/typeck.c:8372
 #, gcc-internal-format
 msgid "cannot convert %qT to %qT in assignment"
 msgstr ""
 
-#: cp/typeck.c:8386
+#: cp/typeck.c:8385
 #, gcc-internal-format
 msgid "class type %qT is incomplete"
 msgstr ""
 
-#: cp/typeck.c:8404
+#: cp/typeck.c:8403
 #, gcc-internal-format
 msgid "parameter %qP of %qD might be a candidate for a format attribute"
 msgstr ""
 
-#: cp/typeck.c:8408
+#: cp/typeck.c:8407
 #, gcc-internal-format
 msgid "parameter might be a candidate for a format attribute"
 msgstr ""
 
-#: cp/typeck.c:8413
+#: cp/typeck.c:8412
 #, gcc-internal-format
 msgid "target of conversion might be a candidate for a format attribute"
 msgstr ""
 
-#: cp/typeck.c:8418
+#: cp/typeck.c:8417
 #, gcc-internal-format
 msgid "target of initialization might be a candidate for a format attribute"
 msgstr ""
 
-#: cp/typeck.c:8428
+#: cp/typeck.c:8427
 #, gcc-internal-format
 msgid ""
 "left-hand side of assignment might be a candidate for a format attribute"
 msgstr ""
 
-#: cp/typeck.c:8523
+#: cp/typeck.c:8522
 #, gcc-internal-format
 msgid "in passing argument %P of %qD"
 msgstr ""
 
-#: cp/typeck.c:8582
+#: cp/typeck.c:8581
 #, gcc-internal-format
 msgid "returning reference to temporary"
 msgstr ""
 
-#: cp/typeck.c:8589
+#: cp/typeck.c:8588
 #, gcc-internal-format
 msgid "reference to non-lvalue returned"
 msgstr ""
 
-#: cp/typeck.c:8604
+#: cp/typeck.c:8603
 #, gcc-internal-format
 msgid "reference to local variable %qD returned"
 msgstr ""
 
-#: cp/typeck.c:8608
+#: cp/typeck.c:8607
 #, gcc-internal-format
 msgid "address of label %qD returned"
 msgstr ""
 
-#: cp/typeck.c:8612
+#: cp/typeck.c:8611
 #, gcc-internal-format
 msgid "address of local variable %qD returned"
 msgstr ""
 
-#: cp/typeck.c:8658
+#: cp/typeck.c:8657
 #, gcc-internal-format
 msgid "returning a value from a destructor"
 msgstr ""
 
 #. If a return statement appears in a handler of the
 #. function-try-block of a constructor, the program is ill-formed.
-#: cp/typeck.c:8666
+#: cp/typeck.c:8665
 #, gcc-internal-format
 msgid "cannot return from a handler of a function-try-block of a constructor"
 msgstr ""
 
 #. You can't return a value from a constructor.
-#: cp/typeck.c:8669
+#: cp/typeck.c:8668
 #, gcc-internal-format
 msgid "returning a value from a constructor"
 msgstr ""
 
 #. Give a helpful error message.
-#: cp/typeck.c:8699 cp/typeck.c:8745
+#: cp/typeck.c:8698 cp/typeck.c:8744
 #, gcc-internal-format
 msgid "return-statement with no value, in function returning %qT"
 msgstr ""
 
-#: cp/typeck.c:8707
+#: cp/typeck.c:8706
 #, gcc-internal-format
 msgid "returning initializer list"
 msgstr ""
 
-#: cp/typeck.c:8726
+#: cp/typeck.c:8725
 #, gcc-internal-format
 msgid "inconsistent types %qT and %qT deduced for lambda return type"
 msgstr ""
 
-#: cp/typeck.c:8729
+#: cp/typeck.c:8728
 #, gcc-internal-format
 msgid "inconsistent deduction for auto return type: %qT and then %qT"
 msgstr ""
 
-#: cp/typeck.c:8764
+#: cp/typeck.c:8763
 #, gcc-internal-format
 msgid "return-statement with a value, in function returning 'void'"
 msgstr ""
 
-#: cp/typeck.c:8794
+#: cp/typeck.c:8793
 #, gcc-internal-format
 msgid ""
 "%<operator new%> must not return NULL unless it is declared %<throw()%> (or -"
@@ -46732,12 +46804,12 @@ msgid ""
 msgstr ""
 
 #. Make this a permerror because we used to accept it.
-#: cp/typeck.c:9403
+#: cp/typeck.c:9402
 #, gcc-internal-format
 msgid "using temporary as lvalue"
 msgstr ""
 
-#: cp/typeck.c:9405
+#: cp/typeck.c:9404
 #, gcc-internal-format
 msgid "using xvalue (rvalue reference) as lvalue"
 msgstr ""
@@ -46929,164 +47001,164 @@ msgstr ""
 msgid "invalid use of template template parameter %qT"
 msgstr ""
 
-#: cp/typeck2.c:543
+#: cp/typeck2.c:544
 #, gcc-internal-format
 msgid "invalid use of dependent type %qT"
 msgstr ""
 
-#: cp/typeck2.c:550
+#: cp/typeck2.c:551
 #, gcc-internal-format
 msgid "invalid use of brace-enclosed initializer list"
 msgstr ""
 
-#: cp/typeck2.c:558
+#: cp/typeck2.c:559
 #, gcc-internal-format
 msgid "address of overloaded function with no contextual type information"
 msgstr ""
 
-#: cp/typeck2.c:562
+#: cp/typeck2.c:563
 #, gcc-internal-format
 msgid "overloaded function with no contextual type information"
 msgstr ""
 
-#: cp/typeck2.c:565
+#: cp/typeck2.c:566
 #, gcc-internal-format
 msgid "insufficient contextual information to determine type"
 msgstr ""
 
-#: cp/typeck2.c:785
+#: cp/typeck2.c:786
 #, gcc-internal-format
 msgid "constructor syntax used, but no constructor declared for type %qT"
 msgstr ""
 
-#: cp/typeck2.c:945
+#: cp/typeck2.c:946
 #, gcc-internal-format
 msgid ""
 "narrowing conversion of %qE from %qT to %qT inside { } is ill-formed in C++11"
 msgstr ""
 
-#: cp/typeck2.c:955 cp/typeck2.c:968
+#: cp/typeck2.c:957 cp/typeck2.c:971
 #, gcc-internal-format
 msgid "narrowing conversion of %qE from %qT to %qT inside { }"
 msgstr ""
 
-#: cp/typeck2.c:958
+#: cp/typeck2.c:961
 #, gcc-internal-format
 msgid ""
 " the expression has a constant value but is not a C++ constant-expression"
 msgstr ""
 
-#: cp/typeck2.c:1044
+#: cp/typeck2.c:1047
 #, gcc-internal-format
 msgid "int-array initialized from non-wide string"
 msgstr ""
 
-#: cp/typeck2.c:1050
+#: cp/typeck2.c:1053
 #, gcc-internal-format
 msgid "int-array initialized from incompatible wide string"
 msgstr ""
 
-#: cp/typeck2.c:1071
+#: cp/typeck2.c:1074
 #, gcc-internal-format
 msgid "initializer-string for array of chars is too long"
 msgstr ""
 
-#: cp/typeck2.c:1124
+#: cp/typeck2.c:1127
 #, gcc-internal-format
 msgid "cannot initialize aggregate of type %qT with a compound literal"
 msgstr ""
 
-#: cp/typeck2.c:1142
+#: cp/typeck2.c:1145
 #, gcc-internal-format
 msgid "array must be initialized with a brace-enclosed initializer"
 msgstr ""
 
-#: cp/typeck2.c:1425 cp/typeck2.c:1452
+#: cp/typeck2.c:1428 cp/typeck2.c:1455
 #, gcc-internal-format
 msgid "missing initializer for member %qD"
 msgstr ""
 
-#: cp/typeck2.c:1433
+#: cp/typeck2.c:1436
 #, gcc-internal-format
 msgid "member %qD is uninitialized reference"
 msgstr ""
 
-#: cp/typeck2.c:1440
+#: cp/typeck2.c:1443
 #, gcc-internal-format
 msgid "member %qD with uninitialized reference fields"
 msgstr ""
 
-#: cp/typeck2.c:1543
+#: cp/typeck2.c:1546
 #, gcc-internal-format
 msgid "no field %qD found in union being initialized"
 msgstr ""
 
-#: cp/typeck2.c:1554
+#: cp/typeck2.c:1557
 #, gcc-internal-format
 msgid "index value instead of field name in union initializer"
 msgstr ""
 
-#: cp/typeck2.c:1736
+#: cp/typeck2.c:1739
 #, gcc-internal-format
 msgid "circular pointer delegation detected"
 msgstr ""
 
-#: cp/typeck2.c:1750
+#: cp/typeck2.c:1753
 #, gcc-internal-format
 msgid "base operand of %<->%> has non-pointer type %qT"
 msgstr ""
 
-#: cp/typeck2.c:1776
+#: cp/typeck2.c:1779
 #, gcc-internal-format
 msgid "result of %<operator->()%> yields non-pointer result"
 msgstr ""
 
-#: cp/typeck2.c:1778
+#: cp/typeck2.c:1781
 #, gcc-internal-format
 msgid "base operand of %<->%> is not a pointer"
 msgstr ""
 
-#: cp/typeck2.c:1805
+#: cp/typeck2.c:1808
 #, gcc-internal-format
 msgid "%qE cannot be used as a member pointer, since it is of type %qT"
 msgstr ""
 
-#: cp/typeck2.c:1814
+#: cp/typeck2.c:1817
 #, gcc-internal-format
 msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT"
 msgstr ""
 
-#: cp/typeck2.c:1836
+#: cp/typeck2.c:1839
 #, gcc-internal-format
 msgid "pointer to member type %qT incompatible with object type %qT"
 msgstr ""
 
-#: cp/typeck2.c:1895
+#: cp/typeck2.c:1898
 #, gcc-internal-format
 msgid "pointer-to-member-function type %qT requires an rvalue"
 msgstr ""
 
-#: cp/typeck2.c:1902
+#: cp/typeck2.c:1905
 #, gcc-internal-format
 msgid "pointer-to-member-function type %qT requires an lvalue"
 msgstr ""
 
-#: cp/typeck2.c:1943
+#: cp/typeck2.c:1946
 #, gcc-internal-format
 msgid "functional cast to array type %qT"
 msgstr ""
 
-#: cp/typeck2.c:1964
+#: cp/typeck2.c:1967
 #, gcc-internal-format
 msgid "invalid value-initialization of reference type"
 msgstr ""
 
-#: cp/typeck2.c:2191
+#: cp/typeck2.c:2194
 #, gcc-internal-format
 msgid "call to function %qD which throws incomplete type %q#T"
 msgstr ""
 
-#: cp/typeck2.c:2194
+#: cp/typeck2.c:2197
 #, gcc-internal-format
 msgid "call to function which throws incomplete type %q#T"
 msgstr ""
@@ -47300,8 +47372,8 @@ msgstr ""
 
 #: fortran/array.c:213 fortran/array.c:625 fortran/check.c:2642
 #: fortran/check.c:4950 fortran/check.c:4988 fortran/check.c:5030
-#: fortran/check.c:5229 fortran/match.c:1680 fortran/match.c:2787
-#: fortran/match.c:2982 fortran/match.c:3178 fortran/simplify.c:4733
+#: fortran/check.c:5229 fortran/match.c:1802 fortran/match.c:2909
+#: fortran/match.c:3104 fortran/match.c:3300 fortran/simplify.c:4737
 #, gcc-internal-format
 msgid "Coarrays disabled at %C, use %<-fcoarray=%> to enable"
 msgstr ""
@@ -47441,7 +47513,7 @@ msgstr ""
 msgid "Array constructor including type specification at %C"
 msgstr ""
 
-#: fortran/array.c:1122 fortran/match.c:3608
+#: fortran/array.c:1122 fortran/match.c:3730
 #, gcc-internal-format, gfc-internal-format
 msgid "Type-spec at %L cannot contain a deferred type parameter"
 msgstr ""
@@ -48572,7 +48644,7 @@ msgid ""
 "because it returns a disassociated pointer"
 msgstr ""
 
-#: fortran/class.c:614
+#: fortran/class.c:612
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Assumed size polymorphic objects or components, such as that at %C, have not "
@@ -48581,12 +48653,12 @@ msgstr ""
 
 #. Since the extension field is 8 bit wide, we can only have
 #. up to 255 extension levels.
-#: fortran/class.c:725 fortran/decl.c:8176
+#: fortran/class.c:723 fortran/decl.c:8717
 #, gcc-internal-format
 msgid "Maximum extension level reached with type %qs at %L"
 msgstr ""
 
-#: fortran/class.c:2764 fortran/class.c:2838
+#: fortran/class.c:2762 fortran/class.c:2836
 #, gcc-internal-format
 msgid "%qs of %qs is PRIVATE at %L"
 msgstr ""
@@ -48681,1430 +48753,1555 @@ msgstr ""
 msgid "DATA statement at %C is not allowed in a PURE procedure"
 msgstr ""
 
-#: fortran/decl.c:619
+#: fortran/decl.c:638
+#, gcc-internal-format, gfc-internal-format
+msgid "Empty old style initializer list at %C"
+msgstr ""
+
+#: fortran/decl.c:658
+#, gcc-internal-format, gfc-internal-format
+msgid "Repeat spec invalid in scalar initializer at %C"
+msgstr ""
+
+#: fortran/decl.c:663
+#, gcc-internal-format, gfc-internal-format
+msgid "Repeat spec must be an integer at %C"
+msgstr ""
+
+#: fortran/decl.c:672
+#, gcc-internal-format, gfc-internal-format
+msgid "Expected data constant after repeat spec at %C"
+msgstr ""
+
+#: fortran/decl.c:703
+#, gcc-internal-format, gfc-internal-format
+msgid "End of scalar initializer expected at %C"
+msgstr ""
+
+#: fortran/decl.c:730
+#, gcc-internal-format, gfc-internal-format
+msgid "Not enough elements in array initializer at %C"
+msgstr ""
+
+#: fortran/decl.c:732
+#, gcc-internal-format, gfc-internal-format
+msgid "Too many elements in array initializer at %C"
+msgstr ""
+
+#: fortran/decl.c:751
+#, gcc-internal-format, gfc-internal-format
+msgid "Syntax error in old style initializer list at %C"
+msgstr ""
+
+#: fortran/decl.c:774
 #, gcc-internal-format, gfc-internal-format
 msgid "The assumed-rank array at %C shall not have a codimension"
 msgstr ""
 
-#: fortran/decl.c:687
+#: fortran/decl.c:842
 #, gcc-internal-format, gfc-internal-format
 msgid "Bad INTENT specification at %C"
 msgstr ""
 
-#: fortran/decl.c:708
+#: fortran/decl.c:863
 #, gcc-internal-format, gfc-internal-format
 msgid "deferred type parameter at %C"
 msgstr ""
 
-#: fortran/decl.c:780
+#: fortran/decl.c:935
 #, gcc-internal-format, gfc-internal-format
 msgid "Scalar INTEGER expression expected at %L"
 msgstr ""
 
-#: fortran/decl.c:806
+#: fortran/decl.c:961
 #, gcc-internal-format, gfc-internal-format
 msgid "Old-style character length at %C"
 msgstr ""
 
-#: fortran/decl.c:837
+#: fortran/decl.c:992
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in character length specification at %C"
 msgstr ""
 
-#: fortran/decl.c:990
+#: fortran/decl.c:1145
 #, gcc-internal-format
 msgid "Procedure %qs at %C is already defined at %L"
 msgstr ""
 
-#: fortran/decl.c:998
+#: fortran/decl.c:1153
 #, gcc-internal-format
 msgid "Name %qs at %C is already defined as a generic interface at %L"
 msgstr ""
 
-#: fortran/decl.c:1011
+#: fortran/decl.c:1166
 #, gcc-internal-format
 msgid ""
 "Procedure %qs at %C has an explicit interface and must not have attributes "
 "declared at %L"
 msgstr ""
 
-#: fortran/decl.c:1082
+#: fortran/decl.c:1237
 #, gcc-internal-format
 msgid ""
 "Procedure %qs at %L must have the BIND(C) attribute to be C interoperable"
 msgstr ""
 
-#: fortran/decl.c:1109
+#: fortran/decl.c:1264
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L is a dummy argument to the BIND(C) procedure %qs but is "
 "not C interoperable because derived type %qs is not C interoperable"
 msgstr ""
 
-#: fortran/decl.c:1116
+#: fortran/decl.c:1271
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L is a dummy argument to the BIND(C) procedure %qs but is "
 "not C interoperable because it is polymorphic"
 msgstr ""
 
-#: fortran/decl.c:1123
+#: fortran/decl.c:1278
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L is a dummy argument of the BIND(C) procedure %qs but may "
 "not be C interoperable"
 msgstr ""
 
-#: fortran/decl.c:1138
+#: fortran/decl.c:1293
 #, gcc-internal-format
 msgid ""
 "Character argument %qs at %L must be length 1 because procedure %qs is "
 "BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:1151
+#: fortran/decl.c:1306
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L with ALLOCATABLE attribute in procedure %qs with BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:1159
+#: fortran/decl.c:1314
 #, gcc-internal-format
 msgid "Variable %qs at %L with POINTER attribute in procedure %qs with BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:1168
+#: fortran/decl.c:1323
 #, gcc-internal-format
 msgid ""
 "Scalar variable %qs at %L with POINTER or ALLOCATABLE in procedure %qs with "
 "BIND(C) is not yet supported"
 msgstr ""
 
-#: fortran/decl.c:1177
+#: fortran/decl.c:1332
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L cannot have both the OPTIONAL and the VALUE attribute "
 "because procedure %qs is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:1184
+#: fortran/decl.c:1339
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L with OPTIONAL attribute in procedure %qs which is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:1195
+#: fortran/decl.c:1350
 #, gcc-internal-format
 msgid ""
 "Assumed-shape array %qs at %L as dummy argument to the BIND(C) procedure %qs "
 "at %L"
 msgstr ""
 
-#: fortran/decl.c:1244
+#: fortran/decl.c:1400
 #, gcc-internal-format
 msgid "Symbol %qs at %C also declared as a type at %L"
 msgstr ""
 
-#: fortran/decl.c:1303
+#: fortran/decl.c:1459
 #, gcc-internal-format
 msgid ""
 "Variable %qs in common block %qs at %C must be declared with a C "
 "interoperable kind since common block %qs is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:1348
+#: fortran/decl.c:1504
 #, gcc-internal-format, gfc-internal-format
 msgid "CHARACTER expression at %L is being truncated (%d/%d)"
 msgstr ""
 
-#: fortran/decl.c:1355
+#: fortran/decl.c:1511
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "The CHARACTER elements of the array constructor at %L must have the same "
 "length (%d/%d)"
 msgstr ""
 
-#: fortran/decl.c:1445
+#: fortran/decl.c:1601
 #, gcc-internal-format
 msgid "Initializer not allowed for PARAMETER %qs at %C"
 msgstr ""
 
-#: fortran/decl.c:1455
+#: fortran/decl.c:1611
 #, gcc-internal-format, gfc-internal-format
 msgid "PARAMETER at %L is missing an initializer"
 msgstr ""
 
-#: fortran/decl.c:1465
+#: fortran/decl.c:1621
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %C with an initializer already appears in a DATA statement"
 msgstr ""
 
-#: fortran/decl.c:1558
+#: fortran/decl.c:1714
 #, gcc-internal-format, gfc-internal-format
 msgid "Can't initialize implied-shape array at %L with scalar"
 msgstr ""
 
-#: fortran/decl.c:1593
+#: fortran/decl.c:1749
 #, gcc-internal-format, gfc-internal-format
 msgid "Non-constant lower bound in implied-shape declaration at %L"
 msgstr ""
 
-#: fortran/decl.c:1678
+#: fortran/decl.c:1835
 #, gcc-internal-format, gfc-internal-format
 msgid "Component at %C must have the POINTER attribute"
 msgstr ""
 
-#: fortran/decl.c:1686
+#: fortran/decl.c:1843
 #, gcc-internal-format, gfc-internal-format
 msgid "Array component of structure at %C must have explicit or deferred shape"
 msgstr ""
 
-#: fortran/decl.c:1767
+#: fortran/decl.c:1867
+#, gcc-internal-format, gfc-internal-format
+msgid "Component '%s' at %C already declared at %L"
+msgstr ""
+
+#: fortran/decl.c:1953
 #, gcc-internal-format, gfc-internal-format
 msgid "Pointer array component of structure at %C must have a deferred shape"
 msgstr ""
 
-#: fortran/decl.c:1776
+#: fortran/decl.c:1962
 #, gcc-internal-format, gfc-internal-format
 msgid "Allocatable component of structure at %C must have a deferred shape"
 msgstr ""
 
-#: fortran/decl.c:1785
+#: fortran/decl.c:1971
 #, gcc-internal-format, gfc-internal-format
 msgid "Array component of structure at %C must have an explicit shape"
 msgstr ""
 
-#: fortran/decl.c:1839
+#: fortran/decl.c:2025
 #, gcc-internal-format, gfc-internal-format
 msgid "NULL() initialization at %C is ambiguous"
 msgstr ""
 
-#: fortran/decl.c:1856
+#: fortran/decl.c:2042
 #, gcc-internal-format, gfc-internal-format
 msgid "NULL() initialization at %C may not have MOLD"
 msgstr ""
 
-#: fortran/decl.c:1873
+#: fortran/decl.c:2059
 #, gcc-internal-format, gfc-internal-format
 msgid "Initialization of pointer at %C is not allowed in a PURE procedure"
 msgstr ""
 
-#: fortran/decl.c:1894
+#: fortran/decl.c:2080
 #, gcc-internal-format, gfc-internal-format
 msgid "Error in pointer initialization at %C"
 msgstr ""
 
-#: fortran/decl.c:1901
+#: fortran/decl.c:2087
 #, gcc-internal-format, gfc-internal-format
 msgid "non-NULL pointer initialization at %C"
 msgstr ""
 
-#: fortran/decl.c:1924
+#: fortran/decl.c:2110
 #, gcc-internal-format
 msgid "Function name %qs not allowed at %C"
 msgstr ""
 
-#: fortran/decl.c:1991
+#: fortran/decl.c:2177
 #, gcc-internal-format
 msgid "Non-PARAMETER symbol %qs at %L can't be implied-shape"
 msgstr ""
 
-#: fortran/decl.c:2001
+#: fortran/decl.c:2187
 #, gcc-internal-format, gfc-internal-format
 msgid "Implied-shape array at %L"
 msgstr ""
 
-#: fortran/decl.c:2054
+#: fortran/decl.c:2240
 #, gcc-internal-format
 msgid ""
 "%qs at %C is a redefinition of the declaration in the corresponding "
 "interface for MODULE PROCEDURE %qs"
 msgstr ""
 
-#: fortran/decl.c:2083 fortran/decl.c:6950
+#: fortran/decl.c:2269 fortran/decl.c:7291
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate array spec for Cray pointee at %C"
 msgstr ""
 
-#: fortran/decl.c:2091
+#: fortran/decl.c:2277
 #, gcc-internal-format
 msgid "Couldn't set pointee array spec."
 msgstr ""
 
-#: fortran/decl.c:2154
+#: fortran/decl.c:2340
 #, gcc-internal-format, gfc-internal-format
 msgid "Old-style initialization at %C"
 msgstr ""
 
-#: fortran/decl.c:2159
+#: fortran/decl.c:2348
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid old style initialization for derived type component at %C"
 msgstr ""
 
-#: fortran/decl.c:2176 fortran/decl.c:5265
+#: fortran/decl.c:2361
+#, gcc-internal-format, gfc-internal-format
+msgid "Syntax error in old style initialization of %s at %C"
+msgstr ""
+
+#: fortran/decl.c:2381 fortran/decl.c:5584
 #, gcc-internal-format, gfc-internal-format
 msgid "Initialization at %C isn't for a pointer variable"
 msgstr ""
 
-#: fortran/decl.c:2189
+#: fortran/decl.c:2394
 #, gcc-internal-format
 msgid "Pointer initialization at %C requires %<=>%>, not %<=%>"
 msgstr ""
 
-#: fortran/decl.c:2198 fortran/decl.c:8325
+#: fortran/decl.c:2403 fortran/decl.c:8866
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected an initialization expression at %C"
 msgstr ""
 
-#: fortran/decl.c:2205
+#: fortran/decl.c:2410
 #, gcc-internal-format, gfc-internal-format
 msgid "Initialization of variable at %C is not allowed in a PURE procedure"
 msgstr ""
 
-#: fortran/decl.c:2222
+#: fortran/decl.c:2427
 #, gcc-internal-format, gfc-internal-format
 msgid "Initialization of allocatable component at %C is not allowed"
 msgstr ""
 
-#: fortran/decl.c:2276 fortran/decl.c:2312
+#: fortran/decl.c:2487 fortran/decl.c:2523
 #, gcc-internal-format, gfc-internal-format
 msgid "Old-style type declaration %s*%d not supported at %C"
 msgstr ""
 
-#: fortran/decl.c:2318
+#: fortran/decl.c:2529
 #, gcc-internal-format, gfc-internal-format
 msgid "Nonstandard type declaration %s*%d at %C"
 msgstr ""
 
-#: fortran/decl.c:2369 fortran/decl.c:2445
+#: fortran/decl.c:2580 fortran/decl.c:2656
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing right parenthesis at %C"
 msgstr ""
 
-#: fortran/decl.c:2382 fortran/decl.c:2516
+#: fortran/decl.c:2593 fortran/decl.c:2727
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected initialization expression at %C"
 msgstr ""
 
-#: fortran/decl.c:2390 fortran/decl.c:2522
+#: fortran/decl.c:2601 fortran/decl.c:2733
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected scalar initialization expression at %C"
 msgstr ""
 
-#: fortran/decl.c:2421
+#: fortran/decl.c:2632
 #, gcc-internal-format, gfc-internal-format
 msgid "Kind %d not supported for type %s at %C"
 msgstr ""
 
-#: fortran/decl.c:2434
+#: fortran/decl.c:2645
 #, gcc-internal-format, gfc-internal-format
 msgid "C kind type parameter is for type %s but type at %L is %s"
 msgstr ""
 
-#: fortran/decl.c:2443
+#: fortran/decl.c:2654
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing right parenthesis or comma at %C"
 msgstr ""
 
-#: fortran/decl.c:2542
+#: fortran/decl.c:2753
 #, gcc-internal-format, gfc-internal-format
 msgid "Kind %d is not supported for CHARACTER at %C"
 msgstr ""
 
-#: fortran/decl.c:2674
+#: fortran/decl.c:2885
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in CHARACTER declaration at %C"
 msgstr ""
 
-#: fortran/decl.c:2759
+#: fortran/decl.c:2951
+#, gcc-internal-format, gfc-internal-format
+msgid "RECORD at %C is an extension, enable it with -fdec-structure"
+msgstr ""
+
+#: fortran/decl.c:2957
+#, gcc-internal-format, gfc-internal-format
+msgid "Structure name expected after RECORD at %C"
+msgstr ""
+
+#: fortran/decl.c:3000
 #, gcc-internal-format, gfc-internal-format
 msgid "BYTE type at %C"
 msgstr ""
 
-#: fortran/decl.c:2764
+#: fortran/decl.c:3005
 #, gcc-internal-format, gfc-internal-format
 msgid "BYTE type used at %C is not available on the target machine"
 msgstr ""
 
-#: fortran/decl.c:2786
+#: fortran/decl.c:3027
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed type at %C is not allowed for components"
 msgstr ""
 
-#: fortran/decl.c:2789
+#: fortran/decl.c:3030
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed type at %C"
 msgstr ""
 
-#: fortran/decl.c:2812 fortran/decl.c:2843 fortran/decl.c:2872
-#: fortran/decl.c:3051
+#: fortran/decl.c:3053 fortran/decl.c:3084 fortran/decl.c:3113
+#: fortran/decl.c:3331
 #, gcc-internal-format, gfc-internal-format
 msgid "TYPE with intrinsic-type-spec at %C"
 msgstr ""
 
-#: fortran/decl.c:2868
+#: fortran/decl.c:3109
 #, gcc-internal-format, gfc-internal-format
 msgid "DOUBLE COMPLEX at %C"
 msgstr ""
 
-#: fortran/decl.c:2942
+#: fortran/decl.c:3146
+#, gcc-internal-format, gfc-internal-format
+msgid "Type name '%s' at %C is ambiguous"
+msgstr ""
+
+#: fortran/decl.c:3224
 #, gcc-internal-format, gfc-internal-format
 msgid "CLASS statement at %C"
 msgstr ""
 
-#: fortran/decl.c:2977 fortran/decl.c:2990 fortran/decl.c:3446
-#: fortran/decl.c:3454
+#: fortran/decl.c:3257 fortran/decl.c:3270 fortran/decl.c:3726
+#: fortran/decl.c:3734
 #, gcc-internal-format
 msgid "Type name %qs at %C is ambiguous"
 msgstr ""
 
-#: fortran/decl.c:3005
+#: fortran/decl.c:3285
 #, gcc-internal-format
 msgid ""
 "Type name %qs at %C conflicts with previously declared entity at %L, which "
 "has the same name"
 msgstr ""
 
-#: fortran/decl.c:3122
+#: fortran/decl.c:3402
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate IMPLICIT NONE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:3131
+#: fortran/decl.c:3411
 #, gcc-internal-format, gfc-internal-format
 msgid "IMPORT NONE with spec list at %C"
 msgstr ""
 
-#: fortran/decl.c:3190
+#: fortran/decl.c:3470
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing character range in IMPLICIT at %C"
 msgstr ""
 
-#: fortran/decl.c:3236
+#: fortran/decl.c:3516
 #, gcc-internal-format, gfc-internal-format
 msgid "Letters must be in alphabetic order in IMPLICIT statement at %C"
 msgstr ""
 
-#: fortran/decl.c:3289
+#: fortran/decl.c:3569
 #, gcc-internal-format, gfc-internal-format
 msgid "IMPLICIT statement at %C following an IMPLICIT NONE (type) statement"
 msgstr ""
 
-#: fortran/decl.c:3299
+#: fortran/decl.c:3579
 #, gcc-internal-format, gfc-internal-format
 msgid "Empty IMPLICIT statement at %C"
 msgstr ""
 
-#: fortran/decl.c:3405
+#: fortran/decl.c:3685
 #, gcc-internal-format, gfc-internal-format
 msgid "IMPORT statement at %C only permitted in an INTERFACE body"
 msgstr ""
 
-#: fortran/decl.c:3412
+#: fortran/decl.c:3692
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "F2008: C1210 IMPORT statement at %C is not permitted in a module procedure "
 "interface body"
 msgstr ""
 
-#: fortran/decl.c:3417
+#: fortran/decl.c:3697
 #, gcc-internal-format, gfc-internal-format
 msgid "IMPORT statement at %C"
 msgstr ""
 
-#: fortran/decl.c:3431
+#: fortran/decl.c:3711
 #, gcc-internal-format, gfc-internal-format
 msgid "Expecting list of named entities at %C"
 msgstr ""
 
-#: fortran/decl.c:3460
+#: fortran/decl.c:3740
 #, gcc-internal-format
 msgid "Cannot IMPORT %qs from host scoping unit at %C - does not exist."
 msgstr ""
 
-#: fortran/decl.c:3467
+#: fortran/decl.c:3747
 #, gcc-internal-format
 msgid "%qs is already IMPORTed from host scoping unit at %C"
 msgstr ""
 
-#: fortran/decl.c:3510
+#: fortran/decl.c:3788
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in IMPORT statement at %C"
 msgstr ""
 
-#: fortran/decl.c:3809
+#: fortran/decl.c:4087
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing codimension specification at %C"
 msgstr ""
 
-#: fortran/decl.c:3811
+#: fortran/decl.c:4089
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing dimension specification at %C"
 msgstr ""
 
-#: fortran/decl.c:3894
+#: fortran/decl.c:4172
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate %s attribute at %L"
 msgstr ""
 
-#: fortran/decl.c:3913
+#: fortran/decl.c:4191
 #, gcc-internal-format, gfc-internal-format
 msgid "ALLOCATABLE attribute at %C in a TYPE definition"
 msgstr ""
 
-#: fortran/decl.c:3922
+#: fortran/decl.c:4200
 #, gcc-internal-format, gfc-internal-format
 msgid "Attribute at %L is not allowed in a TYPE definition"
 msgstr ""
 
-#: fortran/decl.c:3940
+#: fortran/decl.c:4218
 #, gcc-internal-format, gfc-internal-format
 msgid "Attribute %s at %L in a TYPE definition"
 msgstr ""
 
-#: fortran/decl.c:3950
+#: fortran/decl.c:4228
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "%s attribute at %L is not allowed outside of the specification part of a "
 "module"
 msgstr ""
 
-#: fortran/decl.c:3964
+#: fortran/decl.c:4242
 #, gcc-internal-format, gfc-internal-format
 msgid "ASYNCHRONOUS attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:3975
+#: fortran/decl.c:4253
 #, gcc-internal-format, gfc-internal-format
 msgid "CONTIGUOUS attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:4022 fortran/decl.c:7246
+#: fortran/decl.c:4300 fortran/decl.c:7587
 #, gcc-internal-format, gfc-internal-format
 msgid "PROTECTED at %C only allowed in specification part of a module"
 msgstr ""
 
-#: fortran/decl.c:4028
+#: fortran/decl.c:4306
 #, gcc-internal-format, gfc-internal-format
 msgid "PROTECTED attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:4057
+#: fortran/decl.c:4335
 #, gcc-internal-format, gfc-internal-format
 msgid "VALUE attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:4064
+#: fortran/decl.c:4342
 #, gcc-internal-format, gfc-internal-format
 msgid "VOLATILE attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:4071
+#: fortran/decl.c:4349
 #, gcc-internal-format
 msgid "match_attr_spec(): Bad attribute"
 msgstr ""
 
-#: fortran/decl.c:4111
+#: fortran/decl.c:4389
 #, gcc-internal-format, gfc-internal-format
 msgid "Multiple identifiers provided with single NAME= specifier at %C"
 msgstr ""
 
-#: fortran/decl.c:4209
+#: fortran/decl.c:4487
 #, gcc-internal-format
 msgid ""
 "Implicitly declared BIND(C) function %qs at %L may not be C interoperable"
 msgstr ""
 
-#: fortran/decl.c:4231
+#: fortran/decl.c:4509
 #, gcc-internal-format
 msgid ""
 "Variable %qs in common block %qs at %L may not be a C interoperable kind "
 "though common block %qs is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:4240
+#: fortran/decl.c:4518
 #, gcc-internal-format
 msgid "Type declaration %qs at %L is not C interoperable but it is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:4244
+#: fortran/decl.c:4522
 #, gcc-internal-format
 msgid "Variable %qs at %L may not be a C interoperable kind but it is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:4256
+#: fortran/decl.c:4534
 #, gcc-internal-format
 msgid ""
 "Variable %qs in common block %qs at %L cannot be declared with BIND(C) since "
 "it is not a global"
 msgstr ""
 
-#: fortran/decl.c:4270
+#: fortran/decl.c:4548
 #, gcc-internal-format
 msgid "Variable %qs at %L cannot have both the POINTER and BIND(C) attributes"
 msgstr ""
 
-#: fortran/decl.c:4278
+#: fortran/decl.c:4556
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
 msgstr ""
 
-#: fortran/decl.c:4290
+#: fortran/decl.c:4568
 #, gcc-internal-format
 msgid "Return type of BIND(C) function %qs at %L cannot be an array"
 msgstr ""
 
-#: fortran/decl.c:4298
+#: fortran/decl.c:4576
 #, gcc-internal-format
 msgid "Return type of BIND(C) function %qs at %L cannot be a character string"
 msgstr ""
 
 #. Use gfc_warning_now because we won't say that the symbol fails
 #. just because of this.
-#: fortran/decl.c:4309
+#: fortran/decl.c:4587
 #, gcc-internal-format
 msgid ""
 "Symbol %qs at %L is marked PRIVATE but has been given the binding label %qs"
 msgstr ""
 
-#: fortran/decl.c:4383
+#: fortran/decl.c:4661
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Need either entity or common block name for attribute specification "
 "statement at %C"
 msgstr ""
 
-#: fortran/decl.c:4428
+#: fortran/decl.c:4706
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Missing entity or common block name for attribute specification statement at "
 "%C"
 msgstr ""
 
-#: fortran/decl.c:4435
+#: fortran/decl.c:4713
 #, gcc-internal-format
 msgid "Missing symbol"
 msgstr ""
 
-#: fortran/decl.c:4464
+#: fortran/decl.c:4742
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) statement at %C"
 msgstr ""
 
-#: fortran/decl.c:4542
+#: fortran/decl.c:4822
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Derived type at %C has not been previously defined and so cannot appear in a "
 "derived type definition"
 msgstr ""
 
-#: fortran/decl.c:4574
+#: fortran/decl.c:4854
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in data declaration at %C"
 msgstr ""
 
-#: fortran/decl.c:4615
+#: fortran/decl.c:4895
 #, gcc-internal-format, gfc-internal-format
 msgid "MODULE prefix at %C"
 msgstr ""
 
-#: fortran/decl.c:4660
+#: fortran/decl.c:4940
 #, gcc-internal-format, gfc-internal-format
 msgid "IMPURE procedure at %C"
 msgstr ""
 
-#: fortran/decl.c:4672
+#: fortran/decl.c:4952
 #, gcc-internal-format, gfc-internal-format
 msgid "PURE and IMPURE must not appear both at %C"
 msgstr ""
 
-#: fortran/decl.c:4756 fortran/primary.c:1779
+#: fortran/decl.c:4998
+#, gcc-internal-format, gfc-internal-format
+msgid "ELEMENTAL prefix in MODULE PROCEDURE interface is missing at %L"
+msgstr ""
+
+#: fortran/decl.c:5005
+#, gcc-internal-format, gfc-internal-format
+msgid "PURE prefix in MODULE PROCEDURE interface is missing at %L"
+msgstr ""
+
+#: fortran/decl.c:5012
+#, gcc-internal-format, gfc-internal-format
+msgid "RECURSIVE prefix in MODULE PROCEDURE interface is missing at %L"
+msgstr ""
+
+#: fortran/decl.c:5075 fortran/primary.c:1779
 #, gcc-internal-format, gfc-internal-format
 msgid "Alternate-return argument at %C"
 msgstr ""
 
-#: fortran/decl.c:4802
+#: fortran/decl.c:5121
 #, gcc-internal-format
 msgid "Name %qs at %C is the name of the procedure"
 msgstr ""
 
-#: fortran/decl.c:4814
+#: fortran/decl.c:5133
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk in formal argument list at %C"
 msgstr ""
 
-#: fortran/decl.c:4831
+#: fortran/decl.c:5150
 #, gcc-internal-format
 msgid "Duplicate symbol %qs in formal argument list at %C"
 msgstr ""
 
-#: fortran/decl.c:4870
+#: fortran/decl.c:5189
 #, gcc-internal-format, gfc-internal-format
 msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C"
 msgstr ""
 
-#: fortran/decl.c:4876
+#: fortran/decl.c:5195
 #, gcc-internal-format, gfc-internal-format
 msgid "Mismatch in number of MODULE PROCEDURE formal arguments at %C"
 msgstr ""
 
-#: fortran/decl.c:4915
+#: fortran/decl.c:5234
 #, gcc-internal-format, gfc-internal-format
 msgid "RESULT variable at %C must be different than function name"
 msgstr ""
 
-#: fortran/decl.c:4992
+#: fortran/decl.c:5311
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after function declaration at %C"
 msgstr ""
 
-#: fortran/decl.c:5002 fortran/decl.c:6095
+#: fortran/decl.c:5321 fortran/decl.c:6418
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) attribute at %L may not be specified for an internal procedure"
 msgstr ""
 
-#: fortran/decl.c:5204
+#: fortran/decl.c:5523
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) attribute at %C requires an interface with BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:5211
+#: fortran/decl.c:5530
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:5217
+#: fortran/decl.c:5536
 #, gcc-internal-format, gfc-internal-format
 msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME"
 msgstr ""
 
-#: fortran/decl.c:5240
+#: fortran/decl.c:5559
 #, gcc-internal-format
 msgid "Procedure %qs at %L already has basic type of %s"
 msgstr ""
 
-#: fortran/decl.c:5286 fortran/decl.c:5474 fortran/decl.c:8806
+#: fortran/decl.c:5605 fortran/decl.c:5793 fortran/decl.c:9347
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in PROCEDURE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:5335 fortran/decl.c:8708
+#: fortran/decl.c:5654 fortran/decl.c:9249
 #, gcc-internal-format
 msgid "Expected %<::%> after binding-attributes at %C"
 msgstr ""
 
-#: fortran/decl.c:5342
+#: fortran/decl.c:5661
 #, gcc-internal-format, gfc-internal-format
 msgid "NOPASS or explicit interface required at %C"
 msgstr ""
 
-#: fortran/decl.c:5346
+#: fortran/decl.c:5665
 #, gcc-internal-format, gfc-internal-format
 msgid "Procedure pointer component at %C"
 msgstr ""
 
-#: fortran/decl.c:5418
+#: fortran/decl.c:5737
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in procedure pointer component at %C"
 msgstr ""
 
-#: fortran/decl.c:5436
+#: fortran/decl.c:5755
 #, gcc-internal-format, gfc-internal-format
 msgid "PROCEDURE at %C must be in a generic interface"
 msgstr ""
 
-#: fortran/decl.c:5445 fortran/decl.c:7837
+#: fortran/decl.c:5764 fortran/decl.c:8178
 #, gcc-internal-format, gfc-internal-format
 msgid "double colon in MODULE PROCEDURE statement at %L"
 msgstr ""
 
-#: fortran/decl.c:5515
+#: fortran/decl.c:5834
 #, gcc-internal-format, gfc-internal-format
 msgid "PROCEDURE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:5587
+#: fortran/decl.c:5906
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected formal argument list in function definition at %C"
 msgstr ""
 
-#: fortran/decl.c:5611 fortran/decl.c:5615 fortran/decl.c:5867
-#: fortran/decl.c:5871 fortran/decl.c:6063 fortran/decl.c:6067
-#: fortran/symbol.c:1712
+#: fortran/decl.c:5930 fortran/decl.c:5934 fortran/decl.c:6190
+#: fortran/decl.c:6194 fortran/decl.c:6386 fortran/decl.c:6390
+#: fortran/symbol.c:1713
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) attribute at %L can only be used for variables or common blocks"
 msgstr ""
 
-#: fortran/decl.c:5769
+#: fortran/decl.c:6088
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C"
 msgstr ""
 
-#: fortran/decl.c:5778
+#: fortran/decl.c:6097
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a PROGRAM"
 msgstr ""
 
-#: fortran/decl.c:5781
+#: fortran/decl.c:6100
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a MODULE"
 msgstr ""
 
-#: fortran/decl.c:5784
+#: fortran/decl.c:6103
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a SUBMODULE"
 msgstr ""
 
-#: fortran/decl.c:5787
+#: fortran/decl.c:6106
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a BLOCK DATA"
 msgstr ""
 
-#: fortran/decl.c:5791 fortran/decl.c:5832
+#: fortran/decl.c:6110 fortran/decl.c:6155
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within an INTERFACE"
 msgstr ""
 
-#: fortran/decl.c:5795
+#: fortran/decl.c:6114
+#, gcc-internal-format, gfc-internal-format
+msgid "ENTRY statement at %C cannot appear within a STRUCTURE block"
+msgstr ""
+
+#: fortran/decl.c:6118
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block"
 msgstr ""
 
-#: fortran/decl.c:5799
+#: fortran/decl.c:6122
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within an IF-THEN block"
 msgstr ""
 
-#: fortran/decl.c:5804
+#: fortran/decl.c:6127
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a DO block"
 msgstr ""
 
-#: fortran/decl.c:5808
+#: fortran/decl.c:6131
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a SELECT block"
 msgstr ""
 
-#: fortran/decl.c:5812
+#: fortran/decl.c:6135
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a FORALL block"
 msgstr ""
 
-#: fortran/decl.c:5816
+#: fortran/decl.c:6139
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a WHERE block"
 msgstr ""
 
-#: fortran/decl.c:5820
+#: fortran/decl.c:6143
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear within a contained subprogram"
 msgstr ""
 
-#: fortran/decl.c:5824
+#: fortran/decl.c:6147
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected ENTRY statement at %C"
 msgstr ""
 
-#: fortran/decl.c:5845
+#: fortran/decl.c:6168
 #, gcc-internal-format, gfc-internal-format
 msgid "ENTRY statement at %C cannot appear in a contained procedure"
 msgstr ""
 
-#: fortran/decl.c:5896 fortran/decl.c:6102
+#: fortran/decl.c:6219 fortran/decl.c:6425
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing required parentheses before BIND(C) at %C"
 msgstr ""
 
-#: fortran/decl.c:6164 fortran/decl.c:6171
+#: fortran/decl.c:6487 fortran/decl.c:6494
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid C identifier in NAME= specifier at %C"
 msgstr ""
 
-#: fortran/decl.c:6211
+#: fortran/decl.c:6534
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in NAME= specifier for binding label at %C"
 msgstr ""
 
-#: fortran/decl.c:6227
+#: fortran/decl.c:6550
 #, gcc-internal-format, gfc-internal-format
 msgid "NAME= specifier at %C should be a constant expression"
 msgstr ""
 
-#: fortran/decl.c:6235
+#: fortran/decl.c:6558
 #, gcc-internal-format, gfc-internal-format
 msgid "NAME= specifier at %C should be a scalar of default character kind"
 msgstr ""
 
-#: fortran/decl.c:6254
+#: fortran/decl.c:6577
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing closing paren for binding label at %C"
 msgstr ""
 
-#: fortran/decl.c:6260
+#: fortran/decl.c:6583
 #, gcc-internal-format, gfc-internal-format
 msgid "No binding name is allowed in BIND(C) at %C"
 msgstr ""
 
-#: fortran/decl.c:6266
+#: fortran/decl.c:6589
 #, gcc-internal-format, gfc-internal-format
 msgid "For dummy procedure %s, no binding name is allowed in BIND(C) at %C"
 msgstr ""
 
-#: fortran/decl.c:6295
+#: fortran/decl.c:6618
 #, gcc-internal-format, gfc-internal-format
 msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C"
 msgstr ""
 
-#: fortran/decl.c:6520
+#: fortran/decl.c:6861
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected END statement at %C"
 msgstr ""
 
-#: fortran/decl.c:6529
+#: fortran/decl.c:6870
 #, gcc-internal-format, gfc-internal-format
 msgid "END statement instead of %s statement at %L"
 msgstr ""
 
 #. We would have required END [something].
-#: fortran/decl.c:6538
+#: fortran/decl.c:6879
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement expected at %L"
 msgstr ""
 
-#: fortran/decl.c:6549
+#: fortran/decl.c:6890
 #, gcc-internal-format, gfc-internal-format
 msgid "Expecting %s statement at %L"
 msgstr ""
 
-#: fortran/decl.c:6569
+#: fortran/decl.c:6910
 #, gcc-internal-format
 msgid "Expected block name of %qs in %s statement at %L"
 msgstr ""
 
-#: fortran/decl.c:6586
+#: fortran/decl.c:6927
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected terminating name at %C"
 msgstr ""
 
-#: fortran/decl.c:6600 fortran/decl.c:6608
+#: fortran/decl.c:6941 fortran/decl.c:6949
 #, gcc-internal-format
 msgid "Expected label %qs for %s statement at %C"
 msgstr ""
 
-#: fortran/decl.c:6707
+#: fortran/decl.c:7048
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing array specification at %L in DIMENSION statement"
 msgstr ""
 
-#: fortran/decl.c:6715
+#: fortran/decl.c:7056
 #, gcc-internal-format, gfc-internal-format
 msgid "Dimensions specified for %s at %L after its initialisation"
 msgstr ""
 
-#: fortran/decl.c:6723
+#: fortran/decl.c:7064
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing array specification at %L in CODIMENSION statement"
 msgstr ""
 
-#: fortran/decl.c:6732
+#: fortran/decl.c:7073
 #, gcc-internal-format, gfc-internal-format
 msgid "Array specification must be deferred at %L"
 msgstr ""
 
-#: fortran/decl.c:6830
+#: fortran/decl.c:7171
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected character in variable list at %C"
 msgstr ""
 
-#: fortran/decl.c:6867
+#: fortran/decl.c:7208
 #, gcc-internal-format
 msgid "Expected %<(%> at %C"
 msgstr ""
 
-#: fortran/decl.c:6881 fortran/decl.c:6921
+#: fortran/decl.c:7222 fortran/decl.c:7262
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected variable name at %C"
 msgstr ""
 
-#: fortran/decl.c:6897
+#: fortran/decl.c:7238
 #, gcc-internal-format, gfc-internal-format
 msgid "Cray pointer at %C must be an integer"
 msgstr ""
 
-#: fortran/decl.c:6901
+#: fortran/decl.c:7242
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Cray pointer at %C has %d bytes of precision; memory addresses require %d "
 "bytes"
 msgstr ""
 
-#: fortran/decl.c:6907
+#: fortran/decl.c:7248
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected \",\" at %C"
 msgstr ""
 
-#: fortran/decl.c:6946
+#: fortran/decl.c:7287
 #, gcc-internal-format
 msgid "Couldn't set Cray pointee array spec."
 msgstr ""
 
-#: fortran/decl.c:6970
+#: fortran/decl.c:7311
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected \")\" at %C"
 msgstr ""
 
-#: fortran/decl.c:6982
+#: fortran/decl.c:7323
 #, gcc-internal-format
 msgid "Expected %<,%> or end of statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7008
+#: fortran/decl.c:7349
 #, gcc-internal-format, gfc-internal-format
 msgid "INTENT is not allowed inside of BLOCK at %C"
 msgstr ""
 
-#: fortran/decl.c:7040
+#: fortran/decl.c:7381
 #, gcc-internal-format, gfc-internal-format
 msgid "OPTIONAL is not allowed inside of BLOCK at %C"
 msgstr ""
 
-#: fortran/decl.c:7059
+#: fortran/decl.c:7400
 #, gcc-internal-format, gfc-internal-format
 msgid "Cray pointer declaration at %C requires -fcray-pointer flag"
 msgstr ""
 
-#: fortran/decl.c:7098
+#: fortran/decl.c:7439
 #, gcc-internal-format, gfc-internal-format
 msgid "CONTIGUOUS statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7196
+#: fortran/decl.c:7537
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Access specification of the %s operator at %C has already been specified"
 msgstr ""
 
-#: fortran/decl.c:7213
+#: fortran/decl.c:7554
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Access specification of the .%s. operator at %C has already been specified"
 msgstr ""
 
-#: fortran/decl.c:7252
+#: fortran/decl.c:7593
 #, gcc-internal-format, gfc-internal-format
 msgid "PROTECTED statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7290
+#: fortran/decl.c:7631
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in PROTECTED statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7314
+#: fortran/decl.c:7655
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "PRIVATE statement at %C is only allowed in the specification part of a module"
 msgstr ""
 
-#: fortran/decl.c:7351
+#: fortran/decl.c:7692
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "PUBLIC statement at %C is only allowed in the specification part of a module"
 msgstr ""
 
-#: fortran/decl.c:7379
+#: fortran/decl.c:7720
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected variable name at %C in PARAMETER statement"
 msgstr ""
 
-#: fortran/decl.c:7386
+#: fortran/decl.c:7727
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected = sign in PARAMETER statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7392
+#: fortran/decl.c:7733
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected expression at %C in PARAMETER statement"
 msgstr ""
 
-#: fortran/decl.c:7412
+#: fortran/decl.c:7753
 #, gcc-internal-format, gfc-internal-format
 msgid "Initializing already initialized variable at %C"
 msgstr ""
 
-#: fortran/decl.c:7447
+#: fortran/decl.c:7788
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected characters in PARAMETER statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7471
+#: fortran/decl.c:7812
 #, gcc-internal-format, gfc-internal-format
 msgid "Blanket SAVE statement at %C follows previous SAVE statement"
 msgstr ""
 
-#: fortran/decl.c:7482
+#: fortran/decl.c:7823
 #, gcc-internal-format, gfc-internal-format
 msgid "SAVE statement at %C follows blanket SAVE statement"
 msgstr ""
 
-#: fortran/decl.c:7528
+#: fortran/decl.c:7869
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in SAVE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7542
+#: fortran/decl.c:7883
 #, gcc-internal-format, gfc-internal-format
 msgid "VALUE is not allowed inside of BLOCK at %C"
 msgstr ""
 
-#: fortran/decl.c:7546
+#: fortran/decl.c:7887
 #, gcc-internal-format, gfc-internal-format
 msgid "VALUE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7584
+#: fortran/decl.c:7925
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in VALUE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7595
+#: fortran/decl.c:7936
 #, gcc-internal-format, gfc-internal-format
 msgid "VOLATILE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7618
+#: fortran/decl.c:7959
 #, gcc-internal-format
 msgid ""
 "Specifying VOLATILE for coarray variable %qs at %C, which is use-/host-"
 "associated"
 msgstr ""
 
-#: fortran/decl.c:7643
+#: fortran/decl.c:7984
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in VOLATILE statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7654
+#: fortran/decl.c:7995
 #, gcc-internal-format, gfc-internal-format
 msgid "ASYNCHRONOUS statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7694
+#: fortran/decl.c:8035
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in ASYNCHRONOUS statement at %C"
 msgstr ""
 
-#: fortran/decl.c:7719
+#: fortran/decl.c:8060
 #, gcc-internal-format, gfc-internal-format
 msgid "MODULE PROCEDURE declaration at %C"
 msgstr ""
 
-#: fortran/decl.c:7812
+#: fortran/decl.c:8153
 #, gcc-internal-format, gfc-internal-format
 msgid "MODULE PROCEDURE at %C must be in a generic module interface"
 msgstr ""
 
-#: fortran/decl.c:7870
+#: fortran/decl.c:8211
 #, gcc-internal-format, gfc-internal-format
 msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE"
 msgstr ""
 
-#: fortran/decl.c:7919
+#: fortran/decl.c:8260
 #, gcc-internal-format, gfc-internal-format
 msgid "Ambiguous symbol in TYPE definition at %C"
 msgstr ""
 
-#: fortran/decl.c:7928
+#: fortran/decl.c:8269
 #, gcc-internal-format
 msgid "Symbol %qs at %C has not been previously defined"
 msgstr ""
 
-#: fortran/decl.c:7934
+#: fortran/decl.c:8275
 #, gcc-internal-format
 msgid "%qs in EXTENDS expression at %C is not a derived type"
 msgstr ""
 
-#: fortran/decl.c:7941
+#: fortran/decl.c:8282
 #, gcc-internal-format
 msgid "%qs cannot be extended at %C because it is BIND(C)"
 msgstr ""
 
-#: fortran/decl.c:7948
+#: fortran/decl.c:8289
 #, gcc-internal-format
 msgid "%qs cannot be extended at %C because it is a SEQUENCE type"
 msgstr ""
 
-#: fortran/decl.c:7971
+#: fortran/decl.c:8312
 #, 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.c:7983
+#: fortran/decl.c:8324
 #, 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.c:8004
+#: fortran/decl.c:8345
 #, gcc-internal-format, gfc-internal-format
 msgid "ABSTRACT type at %C"
 msgstr ""
 
-#: fortran/decl.c:8068
+#: fortran/decl.c:8391
+#, gcc-internal-format, gfc-internal-format
+msgid "Failed to create structure type '%s' at %C"
+msgstr ""
+
+#: fortran/decl.c:8397
+#, gcc-internal-format, gfc-internal-format
+msgid "Type definition of '%s' at %C was already defined at %L"
+msgstr ""
+
+#: fortran/decl.c:8444
+#, gcc-internal-format, gfc-internal-format
+msgid "Junk after MAP statement at %C"
+msgstr ""
+
+#: fortran/decl.c:8477
+#, gcc-internal-format, gfc-internal-format
+msgid "Junk after UNION statement at %C"
+msgstr ""
+
+#: fortran/decl.c:8512
+#, gcc-internal-format, gfc-internal-format
+msgid "STRUCTURE at %C is a DEC extension, enable with -fdec-structure"
+msgstr ""
+
+#: fortran/decl.c:8525
+#, gcc-internal-format, gfc-internal-format
+msgid "Structure name expected in non-nested structure declaration at %C"
+msgstr ""
+
+#: fortran/decl.c:8543
+#, gcc-internal-format, gfc-internal-format
+msgid "Junk after non-nested STRUCTURE statement at %C"
+msgstr ""
+
+#: fortran/decl.c:8550
+#, gcc-internal-format, gfc-internal-format
+msgid "Structure name '%s' at %C cannot be the same as an intrinsic type"
+msgstr ""
+
+#: fortran/decl.c:8611
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected :: in TYPE definition at %C"
 msgstr ""
 
-#: fortran/decl.c:8079
+#: fortran/decl.c:8622
 #, gcc-internal-format
 msgid "Type name %qs at %C cannot be the same as an intrinsic type"
 msgstr ""
 
-#: fortran/decl.c:8089
+#: fortran/decl.c:8632
 #, gcc-internal-format
 msgid "Derived type name %qs at %C already has a basic type of %s"
 msgstr ""
 
-#: fortran/decl.c:8106
+#: fortran/decl.c:8649
 #, gcc-internal-format
 msgid "Derived type definition of %qs at %C has already been defined"
 msgstr ""
 
-#: fortran/decl.c:8211
+#: fortran/decl.c:8752
 #, gcc-internal-format, gfc-internal-format
 msgid "Cray Pointee at %C cannot be assumed shape array"
 msgstr ""
 
-#: fortran/decl.c:8231
+#: fortran/decl.c:8772
 #, gcc-internal-format, gfc-internal-format
 msgid "ENUM and ENUMERATOR at %C"
 msgstr ""
 
-#: fortran/decl.c:8263
+#: fortran/decl.c:8804
 #, gcc-internal-format, gfc-internal-format
 msgid "Enumerator exceeds the C integer type at %C"
 msgstr ""
 
-#: fortran/decl.c:8342
+#: fortran/decl.c:8883
 #, gcc-internal-format, gfc-internal-format
 msgid "ENUMERATOR %L not initialized with integer expression"
 msgstr ""
 
-#: fortran/decl.c:8390
+#: fortran/decl.c:8931
 #, gcc-internal-format, gfc-internal-format
 msgid "ENUM definition statement expected before %C"
 msgstr ""
 
-#: fortran/decl.c:8426
+#: fortran/decl.c:8967
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in ENUMERATOR definition at %C"
 msgstr ""
 
-#: fortran/decl.c:8473 fortran/decl.c:8488
+#: fortran/decl.c:9014 fortran/decl.c:9029
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate access-specifier at %C"
 msgstr ""
 
-#: fortran/decl.c:8508
+#: fortran/decl.c:9049
 #, gcc-internal-format, gfc-internal-format
 msgid "Binding attributes already specify passing, illegal NOPASS at %C"
 msgstr ""
 
-#: fortran/decl.c:8528
+#: fortran/decl.c:9069
 #, gcc-internal-format, gfc-internal-format
 msgid "Binding attributes already specify passing, illegal PASS at %C"
 msgstr ""
 
-#: fortran/decl.c:8555
+#: fortran/decl.c:9096
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate POINTER attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:8573
+#: fortran/decl.c:9114
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate NON_OVERRIDABLE at %C"
 msgstr ""
 
-#: fortran/decl.c:8589
+#: fortran/decl.c:9130
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate DEFERRED at %C"
 msgstr ""
 
-#: fortran/decl.c:8602
+#: fortran/decl.c:9143
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected access-specifier at %C"
 msgstr ""
 
-#: fortran/decl.c:8604
+#: fortran/decl.c:9145
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected binding attribute at %C"
 msgstr ""
 
-#: fortran/decl.c:8612
+#: fortran/decl.c:9153
 #, gcc-internal-format, gfc-internal-format
 msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C"
 msgstr ""
 
-#: fortran/decl.c:8624
+#: fortran/decl.c:9165
 #, gcc-internal-format, gfc-internal-format
 msgid "POINTER attribute is required for procedure pointer component at %C"
 msgstr ""
 
-#: fortran/decl.c:8666
+#: fortran/decl.c:9207
 #, gcc-internal-format
 msgid "Interface-name expected after %<(%> at %C"
 msgstr ""
 
-#: fortran/decl.c:8672
+#: fortran/decl.c:9213
 #, gcc-internal-format
 msgid "%<)%> expected at %C"
 msgstr ""
 
-#: fortran/decl.c:8692
+#: fortran/decl.c:9233
 #, gcc-internal-format, gfc-internal-format
 msgid "Interface must be specified for DEFERRED binding at %C"
 msgstr ""
 
-#: fortran/decl.c:8697
+#: fortran/decl.c:9238
 #, gcc-internal-format, gfc-internal-format
 msgid "PROCEDURE(interface) at %C should be declared DEFERRED"
 msgstr ""
 
-#: fortran/decl.c:8720
+#: fortran/decl.c:9261
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected binding name at %C"
 msgstr ""
 
-#: fortran/decl.c:8724
+#: fortran/decl.c:9265
 #, gcc-internal-format, gfc-internal-format
 msgid "PROCEDURE list at %C"
 msgstr ""
 
-#: fortran/decl.c:8736
+#: fortran/decl.c:9277
 #, gcc-internal-format
 msgid "%<=> target%> is invalid for DEFERRED binding at %C"
 msgstr ""
 
-#: fortran/decl.c:8742
+#: fortran/decl.c:9283
 #, gcc-internal-format
 msgid "%<::%> needed in PROCEDURE binding with explicit target at %C"
 msgstr ""
 
-#: fortran/decl.c:8752
+#: fortran/decl.c:9293
 #, gcc-internal-format
 msgid "Expected binding target after %<=>%> at %C"
 msgstr ""
 
-#: fortran/decl.c:8769
+#: fortran/decl.c:9310
 #, gcc-internal-format
 msgid "Type %qs containing DEFERRED binding at %C is not ABSTRACT"
 msgstr ""
 
-#: fortran/decl.c:8780
+#: fortran/decl.c:9321
 #, gcc-internal-format
 msgid ""
 "There is already a procedure with binding name %qs for the derived type %qs "
 "at %C"
 msgstr ""
 
-#: fortran/decl.c:8829
+#: fortran/decl.c:9370
 #, gcc-internal-format, gfc-internal-format
 msgid "GENERIC at %C must be inside a derived-type CONTAINS"
 msgstr ""
 
-#: fortran/decl.c:8849
+#: fortran/decl.c:9390
 #, gcc-internal-format
 msgid "Expected %<::%> at %C"
 msgstr ""
 
-#: fortran/decl.c:8861
+#: fortran/decl.c:9402
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected generic name or operator descriptor at %C"
 msgstr ""
 
-#: fortran/decl.c:8881
+#: fortran/decl.c:9422
 #, gcc-internal-format, gfc-internal-format
 msgid "Malformed GENERIC statement at %C"
 msgstr ""
 
-#: fortran/decl.c:8892
+#: fortran/decl.c:9433
 #, gcc-internal-format
 msgid "Expected %<=>%> at %C"
 msgstr ""
 
-#: fortran/decl.c:8934
+#: fortran/decl.c:9475
 #, 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.c:8942
+#: fortran/decl.c:9483
 #, gcc-internal-format
 msgid "Binding at %C must have the same access as already defined binding %qs"
 msgstr ""
 
-#: fortran/decl.c:8991
+#: fortran/decl.c:9532
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected specific binding name at %C"
 msgstr ""
 
-#: fortran/decl.c:9001
+#: fortran/decl.c:9542
 #, gcc-internal-format
 msgid "%qs already defined as specific binding for the generic %qs at %C"
 msgstr ""
 
-#: fortran/decl.c:9019
+#: fortran/decl.c:9560
 #, gcc-internal-format, gfc-internal-format
 msgid "Junk after GENERIC binding at %C"
 msgstr ""
 
-#: fortran/decl.c:9054
+#: fortran/decl.c:9595
 #, gcc-internal-format, gfc-internal-format
 msgid "FINAL declaration at %C must be inside a derived type CONTAINS section"
 msgstr ""
 
-#: fortran/decl.c:9065
+#: fortran/decl.c:9606
 #, 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.c:9087
+#: fortran/decl.c:9628
 #, gcc-internal-format, gfc-internal-format
 msgid "Empty FINAL at %C"
 msgstr ""
 
-#: fortran/decl.c:9094
+#: fortran/decl.c:9635
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected module procedure name at %C"
 msgstr ""
 
-#: fortran/decl.c:9104
+#: fortran/decl.c:9645
 #, gcc-internal-format
 msgid "Expected %<,%> at %C"
 msgstr ""
 
-#: fortran/decl.c:9110
+#: fortran/decl.c:9651
 #, gcc-internal-format
 msgid "Unknown procedure name %qs at %C"
 msgstr ""
 
-#: fortran/decl.c:9123
+#: fortran/decl.c:9664
 #, gcc-internal-format
 msgid "%qs at %C is already defined as FINAL procedure!"
 msgstr ""
 
-#: fortran/decl.c:9193
+#: fortran/decl.c:9734
 #, gcc-internal-format, gfc-internal-format
 msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C"
 msgstr ""
 
-#: fortran/decl.c:9239
+#: fortran/decl.c:9780
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C"
 msgstr ""
@@ -50125,42 +50322,42 @@ msgid ""
 "INTENT(%s) actual argument at %L might interfere with actual argument at %L."
 msgstr ""
 
-#: fortran/dump-parse-tree.c:179
+#: fortran/dump-parse-tree.c:188
 #, gcc-internal-format
 msgid "show_array_spec(): Unhandled array shape type."
 msgstr ""
 
-#: fortran/dump-parse-tree.c:258
+#: fortran/dump-parse-tree.c:267
 #, gcc-internal-format
 msgid "show_array_ref(): Unknown array reference"
 msgstr ""
 
-#: fortran/dump-parse-tree.c:290
+#: fortran/dump-parse-tree.c:299
 #, gcc-internal-format
 msgid "show_ref(): Bad component code"
 msgstr ""
 
-#: fortran/dump-parse-tree.c:554
+#: fortran/dump-parse-tree.c:563
 #, gcc-internal-format
 msgid "show_expr(): Bad intrinsic in expression!"
 msgstr ""
 
-#: fortran/dump-parse-tree.c:597
+#: fortran/dump-parse-tree.c:606
 #, gcc-internal-format
 msgid "show_expr(): Don't know how to show expr"
 msgstr ""
 
-#: fortran/dump-parse-tree.c:2532
+#: fortran/dump-parse-tree.c:2541
 #, gcc-internal-format
 msgid "show_code_node(): Bad statement code"
 msgstr ""
 
-#: fortran/error.c:337
+#: fortran/error.c:335
 #, gcc-internal-format, gfc-internal-format
 msgid "    Included at %s:%d:"
 msgstr ""
 
-#: fortran/error.c:423
+#: fortran/error.c:421
 #, gcc-internal-format
 msgid "<During initialization>\n"
 msgstr ""
@@ -50274,7 +50471,7 @@ msgstr ""
 msgid "Evaluation of nonstandard initialization expression at %L"
 msgstr ""
 
-#: fortran/expr.c:2503 fortran/resolve.c:2569
+#: fortran/expr.c:2503 fortran/resolve.c:2575
 #, gcc-internal-format
 msgid ""
 "Function %qs in initialization expression at %L must be an intrinsic function"
@@ -50428,32 +50625,32 @@ msgstr ""
 msgid "BOZ literal at %L used to initialize non-integer variable %qs"
 msgstr ""
 
-#: fortran/expr.c:3252 fortran/resolve.c:9542
+#: fortran/expr.c:3252 fortran/resolve.c:9548
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX"
 msgstr ""
 
-#: fortran/expr.c:3263 fortran/resolve.c:9553
+#: fortran/expr.c:3263 fortran/resolve.c:9559
 #, gcc-internal-format
 msgid "BOZ literal at %L is bitwise transferred non-integer symbol %qs"
 msgstr ""
 
-#: fortran/expr.c:3271 fortran/resolve.c:9562
+#: fortran/expr.c:3271 fortran/resolve.c:9568
 #, gcc-internal-format
 msgid ""
 "Arithmetic underflow of bit-wise transferred BOZ at %L. This check can be "
 "disabled with the option %<-fno-range-check%>"
 msgstr ""
 
-#: fortran/expr.c:3275 fortran/resolve.c:9566
+#: fortran/expr.c:3275 fortran/resolve.c:9572
 #, gcc-internal-format
 msgid ""
 "Arithmetic overflow of bit-wise transferred BOZ at %L. This check can be "
 "disabled with the option %<-fno-range-check%>"
 msgstr ""
 
-#: fortran/expr.c:3279 fortran/resolve.c:9570
+#: fortran/expr.c:3279 fortran/resolve.c:9576
 #, gcc-internal-format
 msgid ""
 "Arithmetic NaN of bit-wise transferred BOZ at %L. This check can be disabled "
@@ -50554,7 +50751,7 @@ msgid ""
 "convention"
 msgstr ""
 
-#: fortran/expr.c:3594 fortran/expr.c:3601 fortran/resolve.c:2448
+#: fortran/expr.c:3594 fortran/expr.c:3601 fortran/resolve.c:2454
 #, gcc-internal-format
 msgid "Explicit interface required for %qs at %L: %s"
 msgstr ""
@@ -50657,7 +50854,7 @@ msgstr ""
 msgid "Pointer initialization target at %L must have the TARGET attribute"
 msgstr ""
 
-#: fortran/expr.c:3899 fortran/resolve.c:1341
+#: fortran/expr.c:3899 fortran/resolve.c:1347
 #, gcc-internal-format, gfc-internal-format
 msgid "Pointer initialization target at %L must have the SAVE attribute"
 msgstr ""
@@ -50668,102 +50865,102 @@ msgid ""
 "Procedure pointer initialization target at %L may not be a procedure pointer"
 msgstr ""
 
-#: fortran/expr.c:4800
+#: fortran/expr.c:4804
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Fortran 2008: Pointer functions in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4808
+#: fortran/expr.c:4812
 #, gcc-internal-format, gfc-internal-format
 msgid "Non-variable expression in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4816
+#: fortran/expr.c:4820
 #, gcc-internal-format
 msgid "Named constant %qs in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4825
+#: fortran/expr.c:4829
 #, gcc-internal-format
 msgid "%qs in variable definition context (%s) at %L is not a variable"
 msgstr ""
 
-#: fortran/expr.c:4836
+#: fortran/expr.c:4840
 #, gcc-internal-format, gfc-internal-format
 msgid "Non-POINTER in pointer association context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4845
+#: fortran/expr.c:4849
 #, gcc-internal-format, gfc-internal-format
 msgid "Type inaccessible in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4858
+#: fortran/expr.c:4862
 #, gcc-internal-format, gfc-internal-format
 msgid "LOCK_TYPE in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4871
+#: fortran/expr.c:4875
 #, gcc-internal-format, gfc-internal-format
 msgid "LOCK_EVENT in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4900
+#: fortran/expr.c:4904
 #, gcc-internal-format
 msgid ""
 "Dummy argument %qs with INTENT(IN) in pointer association context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4908
+#: fortran/expr.c:4912
 #, gcc-internal-format
 msgid ""
 "Dummy argument %qs with INTENT(IN) in variable definition context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4921
+#: fortran/expr.c:4925
 #, gcc-internal-format
 msgid ""
 "Variable %qs is PROTECTED and can not appear in a pointer association "
 "context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4929
+#: fortran/expr.c:4933
 #, gcc-internal-format
 msgid ""
 "Variable %qs is PROTECTED and can not appear in a variable definition "
 "context (%s) at %L"
 msgstr ""
 
-#: fortran/expr.c:4941
+#: fortran/expr.c:4945
 #, gcc-internal-format
 msgid ""
 "Variable %qs can not appear in a variable definition context (%s) at %L in "
 "PURE procedure"
 msgstr ""
 
-#: fortran/expr.c:5000
+#: fortran/expr.c:5004
 #, gcc-internal-format
 msgid ""
 "%qs at %L associated to vector-indexed target can not be used in a variable "
 "definition context (%s)"
 msgstr ""
 
-#: fortran/expr.c:5004
+#: fortran/expr.c:5008
 #, gcc-internal-format
 msgid ""
 "%qs at %L associated to expression can not be used in a variable definition "
 "context (%s)"
 msgstr ""
 
-#: fortran/expr.c:5015
+#: fortran/expr.c:5019
 #, gcc-internal-format
 msgid ""
 "Associate-name %qs can not appear in a variable definition context (%s) at "
 "%L because its target at %L can not, either"
 msgstr ""
 
-#: fortran/expr.c:5057
+#: fortran/expr.c:5061
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Elements with the same value at %L and %L in vector subscript in a variable "
@@ -50775,62 +50972,62 @@ msgstr ""
 msgid "can't open input file: %s"
 msgstr ""
 
-#: fortran/frontend-passes.c:297
+#: fortran/frontend-passes.c:311
 #, gcc-internal-format
 msgid "Illegal id in copy_walk_reduction_arg"
 msgstr ""
 
-#: fortran/frontend-passes.c:693 fortran/trans-array.c:1044
-#: fortran/trans-array.c:6167 fortran/trans-array.c:7518
+#: fortran/frontend-passes.c:711 fortran/trans-array.c:1044
+#: fortran/trans-array.c:6179 fortran/trans-array.c:7535
 #: fortran/trans-intrinsic.c:6278
 #, gcc-internal-format, gfc-internal-format
 msgid "Creating array temporary at %L"
 msgstr ""
 
-#: fortran/frontend-passes.c:717 fortran/frontend-passes.c:720
+#: fortran/frontend-passes.c:735 fortran/frontend-passes.c:738
 #, gcc-internal-format
 msgid "Removing call to function %qs at %L"
 msgstr ""
 
-#: fortran/frontend-passes.c:1695
+#: fortran/frontend-passes.c:1718
 #, gcc-internal-format
 msgid "illegal OP in optimize_comparison"
 msgstr ""
 
-#: fortran/frontend-passes.c:1887
+#: fortran/frontend-passes.c:1910
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L set to undefined value inside loop  beginning at %L as "
 "INTENT(OUT) argument to subroutine %qs"
 msgstr ""
 
-#: fortran/frontend-passes.c:1894
+#: fortran/frontend-passes.c:1917
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L not definable inside loop beginning at %L as "
 "INTENT(INOUT) argument to subroutine %qs"
 msgstr ""
 
-#: fortran/frontend-passes.c:1959
+#: fortran/frontend-passes.c:1982
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L set to undefined value inside loop beginning at %L as "
 "INTENT(OUT) argument to function %qs"
 msgstr ""
 
-#: fortran/frontend-passes.c:1965
+#: fortran/frontend-passes.c:1988
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L not definable inside loop beginning at %L as "
 "INTENT(INOUT) argument to function %qs"
 msgstr ""
 
-#: fortran/frontend-passes.c:2213 fortran/trans-expr.c:1522
+#: fortran/frontend-passes.c:2236 fortran/trans-expr.c:1522
 #, gcc-internal-format, gfc-internal-format
 msgid "Code for reallocating the allocatable array at %L will be added"
 msgstr ""
 
-#: fortran/frontend-passes.c:2692
+#: fortran/frontend-passes.c:2715
 #, gcc-internal-format
 msgid "Scalarization using DIMEN_RANGE unimplemented"
 msgstr ""
@@ -50905,189 +51102,189 @@ msgstr ""
 msgid "Expecting %<END INTERFACE %s%> at %C"
 msgstr ""
 
-#: fortran/interface.c:662
+#: fortran/interface.c:769
 #, gcc-internal-format, gfc-internal-format
 msgid "Alternate return cannot appear in operator interface at %L"
 msgstr ""
 
-#: fortran/interface.c:691
+#: fortran/interface.c:798
 #, gcc-internal-format, gfc-internal-format
 msgid "Assignment operator interface at %L must have two arguments"
 msgstr ""
 
-#: fortran/interface.c:694
+#: fortran/interface.c:801
 #, gcc-internal-format, gfc-internal-format
 msgid "Operator interface at %L has the wrong number of arguments"
 msgstr ""
 
-#: fortran/interface.c:707
+#: fortran/interface.c:814
 #, gcc-internal-format, gfc-internal-format
 msgid "Assignment operator interface at %L must be a SUBROUTINE"
 msgstr ""
 
-#: fortran/interface.c:725
+#: fortran/interface.c:832
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Assignment operator interface at %L must not redefine an INTRINSIC type "
 "assignment"
 msgstr ""
 
-#: fortran/interface.c:734
+#: fortran/interface.c:841
 #, gcc-internal-format, gfc-internal-format
 msgid "Intrinsic operator interface at %L must be a FUNCTION"
 msgstr ""
 
-#: fortran/interface.c:745
+#: fortran/interface.c:852
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "First argument of defined assignment at %L must be INTENT(OUT) or "
 "INTENT(INOUT)"
 msgstr ""
 
-#: fortran/interface.c:752
+#: fortran/interface.c:859
 #, gcc-internal-format, gfc-internal-format
 msgid "Second argument of defined assignment at %L must be INTENT(IN)"
 msgstr ""
 
-#: fortran/interface.c:761 fortran/resolve.c:15373
+#: fortran/interface.c:868 fortran/resolve.c:15452
 #, gcc-internal-format, gfc-internal-format
 msgid "First argument of operator interface at %L must be INTENT(IN)"
 msgstr ""
 
-#: fortran/interface.c:768 fortran/resolve.c:15391
+#: fortran/interface.c:875 fortran/resolve.c:15470
 #, gcc-internal-format, gfc-internal-format
 msgid "Second argument of operator interface at %L must be INTENT(IN)"
 msgstr ""
 
-#: fortran/interface.c:873
+#: fortran/interface.c:980
 #, gcc-internal-format, gfc-internal-format
 msgid "Operator interface at %L conflicts with intrinsic interface"
 msgstr ""
 
-#: fortran/interface.c:1205 fortran/interface.c:1264
+#: fortran/interface.c:1312 fortran/interface.c:1371
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "check_dummy_characteristics: Unexpected result %i of gfc_dep_compare_expr"
 msgstr ""
 
-#: fortran/interface.c:1377
+#: fortran/interface.c:1484
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "check_result_characteristics (1): Unexpected result %i of "
 "gfc_dep_compare_expr"
 msgstr ""
 
-#: fortran/interface.c:1424
+#: fortran/interface.c:1531
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "check_result_characteristics (2): Unexpected result %i of "
 "gfc_dep_compare_expr"
 msgstr ""
 
-#: fortran/interface.c:1591
+#: fortran/interface.c:1698
 #, gcc-internal-format
 msgid "Procedure %qs in %s at %L has no explicit interface"
 msgstr ""
 
-#: fortran/interface.c:1594
+#: fortran/interface.c:1701
 #, gcc-internal-format
 msgid "Procedure %qs in %s at %L is neither function nor subroutine"
 msgstr ""
 
-#: fortran/interface.c:1606
+#: fortran/interface.c:1713
 #, gcc-internal-format, gfc-internal-format
 msgid "In %s at %L procedures must be either all SUBROUTINEs or all FUNCTIONs"
 msgstr ""
 
-#: fortran/interface.c:1610
+#: fortran/interface.c:1717
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "In %s at %L procedures must be all FUNCTIONs as the generic name is also the "
 "name of a derived type"
 msgstr ""
 
-#: fortran/interface.c:1618
+#: fortran/interface.c:1725
 #, gcc-internal-format
 msgid "Internal procedure %qs in %s at %L"
 msgstr ""
 
-#: fortran/interface.c:1675 fortran/interface.c:1679
+#: fortran/interface.c:1782 fortran/interface.c:1786
 #, gcc-internal-format
 msgid "Ambiguous interfaces %qs and %qs in %s at %L"
 msgstr ""
 
-#: fortran/interface.c:1683
+#: fortran/interface.c:1790
 #, gcc-internal-format
 msgid "Although not referenced, %qs has ambiguous interfaces at %L"
 msgstr ""
 
-#: fortran/interface.c:1718
+#: fortran/interface.c:1825
 #, gcc-internal-format
 msgid "%qs at %L is not a module procedure"
 msgstr ""
 
-#: fortran/interface.c:1922
+#: fortran/interface.c:2029
 #, gcc-internal-format
 msgid ""
 "The assumed-rank array at %L requires that the dummy argument %qs has "
 "assumed-rank"
 msgstr ""
 
-#: fortran/interface.c:1927
+#: fortran/interface.c:2034
 #, gcc-internal-format
 msgid "Rank mismatch in argument %qs at %L (scalar and rank-%d)"
 msgstr ""
 
-#: fortran/interface.c:1932
+#: fortran/interface.c:2039
 #, gcc-internal-format
 msgid "Rank mismatch in argument %qs at %L (rank-%d and scalar)"
 msgstr ""
 
-#: fortran/interface.c:1937
+#: fortran/interface.c:2044
 #, gcc-internal-format
 msgid "Rank mismatch in argument %qs at %L (rank-%d and rank-%d)"
 msgstr ""
 
-#: fortran/interface.c:1980
+#: fortran/interface.c:2087
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid procedure argument at %L"
 msgstr ""
 
-#: fortran/interface.c:1988 fortran/interface.c:2015
+#: fortran/interface.c:2095 fortran/interface.c:2122
 #, gcc-internal-format
 msgid "Interface mismatch in dummy procedure %qs at %L: %s"
 msgstr ""
 
-#: fortran/interface.c:2026
+#: fortran/interface.c:2133
 #, gcc-internal-format
 msgid ""
 "Actual argument to contiguous pointer dummy %qs at %L must be simply "
 "contiguous"
 msgstr ""
 
-#: fortran/interface.c:2041
+#: fortran/interface.c:2148
 #, gcc-internal-format
 msgid "Type mismatch in argument %qs at %L; passed %s to %s"
 msgstr ""
 
-#: fortran/interface.c:2050
+#: fortran/interface.c:2157
 #, gcc-internal-format
 msgid ""
 "Assumed-type actual argument at %L requires that dummy argument %qs is of "
 "assumed type"
 msgstr ""
 
-#: fortran/interface.c:2066
+#: fortran/interface.c:2173
 #, gcc-internal-format
 msgid "Actual argument to %qs at %L must be polymorphic"
 msgstr ""
 
-#: fortran/interface.c:2079
+#: fortran/interface.c:2186
 #, gcc-internal-format
 msgid "Actual argument to %qs at %L must have the same declared type"
 msgstr ""
 
-#: fortran/interface.c:2094
+#: fortran/interface.c:2201
 #, gcc-internal-format
 msgid ""
 "Actual argument to %qs at %L must be unlimited polymorphic since the formal "
@@ -51095,38 +51292,38 @@ msgid ""
 "12.5.2.5]"
 msgstr ""
 
-#: fortran/interface.c:2105
+#: fortran/interface.c:2212
 #, gcc-internal-format
 msgid "Actual argument to %qs at %L must be a coarray"
 msgstr ""
 
-#: fortran/interface.c:2124
+#: fortran/interface.c:2231
 #, gcc-internal-format
 msgid "Corank mismatch in argument %qs at %L (%d and %d)"
 msgstr ""
 
-#: fortran/interface.c:2142
+#: fortran/interface.c:2249
 #, gcc-internal-format
 msgid ""
 "Actual argument to %qs at %L must be simply contiguous or an element of such "
 "an array"
 msgstr ""
 
-#: fortran/interface.c:2157
+#: fortran/interface.c:2264
 #, 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.c:2172
+#: fortran/interface.c:2279
 #, 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.c:2191
+#: fortran/interface.c:2298
 #, gcc-internal-format
 msgid ""
 "Dummy argument %qs has to be a pointer, assumed-shape or assumed-rank array "
@@ -51134,185 +51331,185 @@ msgid ""
 "contiguous and both are ASYNCHRONOUS or VOLATILE"
 msgstr ""
 
-#: fortran/interface.c:2204
+#: fortran/interface.c:2311
 #, gcc-internal-format
 msgid ""
 "Passing coarray at %L to allocatable, noncoarray, INTENT(OUT) dummy argument "
 "%qs"
 msgstr ""
 
-#: fortran/interface.c:2211
+#: fortran/interface.c:2318
 #, 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.c:2274
+#: fortran/interface.c:2381
 #, gcc-internal-format
 msgid "Polymorphic scalar passed to array dummy argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:2283
+#: fortran/interface.c:2390
 #, gcc-internal-format
 msgid ""
 "Element of assumed-shaped or pointer array passed to array dummy argument "
 "%qs at %L"
 msgstr ""
 
-#: fortran/interface.c:2295
+#: fortran/interface.c:2402
 #, 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.c:2303
+#: fortran/interface.c:2410
 #, gcc-internal-format
 msgid ""
 "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument %qs "
 "at %L"
 msgstr ""
 
-#: fortran/interface.c:2632
+#: fortran/interface.c:2739
 #, gcc-internal-format
 msgid "Keyword argument %qs at %L is not in the procedure"
 msgstr ""
 
-#: fortran/interface.c:2640
+#: fortran/interface.c:2747
 #, gcc-internal-format
 msgid ""
 "Keyword argument %qs at %L is already associated with another actual argument"
 msgstr ""
 
-#: fortran/interface.c:2650
+#: fortran/interface.c:2757
 #, gcc-internal-format, gfc-internal-format
 msgid "More actual than formal arguments in procedure call at %L"
 msgstr ""
 
-#: fortran/interface.c:2662 fortran/interface.c:3032
+#: fortran/interface.c:2769 fortran/interface.c:3139
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing alternate return spec in subroutine call at %L"
 msgstr ""
 
-#: fortran/interface.c:2670
+#: fortran/interface.c:2777
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected alternate return spec in subroutine call at %L"
 msgstr ""
 
-#: fortran/interface.c:2697
+#: fortran/interface.c:2804
 #, gcc-internal-format
 msgid "Unexpected NULL() intrinsic at %L to dummy %qs"
 msgstr ""
 
-#: fortran/interface.c:2700
+#: fortran/interface.c:2807
 #, gcc-internal-format
 msgid "Fortran 2008: Null pointer at %L to non-pointer dummy %qs"
 msgstr ""
 
-#: fortran/interface.c:2724
+#: fortran/interface.c:2831
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Actual argument at %L to assumed-type dummy is of derived type with type-"
 "bound or FINAL procedures"
 msgstr ""
 
-#: fortran/interface.c:2746
+#: fortran/interface.c:2853
 #, gcc-internal-format
 msgid ""
 "Character length mismatch (%ld/%ld) between actual argument and pointer or "
 "allocatable dummy argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:2754
+#: fortran/interface.c:2861
 #, gcc-internal-format
 msgid ""
 "Character length mismatch (%ld/%ld) between actual argument and assumed-"
 "shape dummy argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:2768
+#: fortran/interface.c:2875
 #, 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.c:2785
+#: fortran/interface.c:2892
 #, gcc-internal-format
 msgid ""
 "Character length of actual argument shorter than of dummy argument %qs (%lu/"
 "%lu) at %L"
 msgstr ""
 
-#: fortran/interface.c:2790
+#: fortran/interface.c:2897
 #, gcc-internal-format
 msgid ""
 "Actual argument contains too few elements for dummy argument %qs (%lu/%lu) "
 "at %L"
 msgstr ""
 
-#: fortran/interface.c:2809
+#: fortran/interface.c:2916
 #, gcc-internal-format
 msgid "Expected a procedure pointer for argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:2825
+#: fortran/interface.c:2932
 #, gcc-internal-format
 msgid "Expected a procedure for argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:2839
+#: fortran/interface.c:2946
 #, gcc-internal-format
 msgid "Actual argument for %qs cannot be an assumed-size array at %L"
 msgstr ""
 
-#: fortran/interface.c:2848
+#: fortran/interface.c:2955
 #, gcc-internal-format
 msgid "Actual argument for %qs must be a pointer at %L"
 msgstr ""
 
-#: fortran/interface.c:2858
+#: fortran/interface.c:2965
 #, gcc-internal-format
 msgid "Fortran 2008: Non-pointer actual argument at %L to pointer dummy %qs"
 msgstr ""
 
-#: fortran/interface.c:2868
+#: fortran/interface.c:2975
 #, gcc-internal-format
 msgid "Coindexed actual argument at %L to pointer dummy %qs"
 msgstr ""
 
-#: fortran/interface.c:2881
+#: fortran/interface.c:2988
 #, gcc-internal-format
 msgid ""
 "Coindexed actual argument at %L to allocatable dummy %qs requires INTENT(IN)"
 msgstr ""
 
-#: fortran/interface.c:2895
+#: fortran/interface.c:3002
 #, gcc-internal-format
 msgid ""
 "Coindexed ASYNCHRONOUS or VOLATILE actual argument at %L requires that dummy "
 "%qs has neither ASYNCHRONOUS nor VOLATILE"
 msgstr ""
 
-#: fortran/interface.c:2909
+#: fortran/interface.c:3016
 #, 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.c:2921
+#: fortran/interface.c:3028
 #, gcc-internal-format
 msgid "Actual CLASS array argument for %qs must be a full array at %L"
 msgstr ""
 
-#: fortran/interface.c:2931
+#: fortran/interface.c:3038
 #, gcc-internal-format
 msgid "Actual argument for %qs must be ALLOCATABLE at %L"
 msgstr ""
 
-#: fortran/interface.c:2960
+#: fortran/interface.c:3067
 #, gcc-internal-format
 msgid ""
 "Array-section actual argument with vector subscripts at %L is incompatible "
@@ -51320,266 +51517,266 @@ msgid ""
 "dummy argument %qs"
 msgstr ""
 
-#: fortran/interface.c:2978
+#: fortran/interface.c:3085
 #, 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.c:2990
+#: fortran/interface.c:3097
 #, 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.c:3009
+#: fortran/interface.c:3116
 #, 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.c:3039
+#: fortran/interface.c:3146
 #, gcc-internal-format
 msgid "Missing actual argument for argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:3156
+#: fortran/interface.c:3263
 #, gcc-internal-format
 msgid "compare_actual_expr(): Bad component code"
 msgstr ""
 
-#: fortran/interface.c:3185
+#: fortran/interface.c:3292
 #, gcc-internal-format
 msgid "check_some_aliasing(): List mismatch"
 msgstr ""
 
-#: fortran/interface.c:3211
+#: fortran/interface.c:3318
 #, gcc-internal-format
 msgid "check_some_aliasing(): corrupted data"
 msgstr ""
 
-#: fortran/interface.c:3221
+#: fortran/interface.c:3328
 #, gcc-internal-format
 msgid ""
 "Same actual argument associated with INTENT(%s) argument %qs and INTENT(%s) "
 "argument %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:3251
+#: fortran/interface.c:3358
 #, gcc-internal-format
 msgid "check_intents(): List mismatch"
 msgstr ""
 
-#: fortran/interface.c:3271
+#: fortran/interface.c:3378
 #, 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.c:3283
+#: fortran/interface.c:3390
 #, 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.c:3293
+#: fortran/interface.c:3400
 #, 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.c:3304
+#: fortran/interface.c:3411
 #, gcc-internal-format
 msgid ""
 "Coindexed polymorphic actual argument at %L is passed polymorphic dummy "
 "argument %qs"
 msgstr ""
 
-#: fortran/interface.c:3332 fortran/interface.c:3342
+#: fortran/interface.c:3439 fortran/interface.c:3449
 #, gcc-internal-format
 msgid "Procedure %qs called at %L is not explicitly declared"
 msgstr ""
 
-#: fortran/interface.c:3338
+#: fortran/interface.c:3445
 #, gcc-internal-format
 msgid "Procedure %qs called with an implicit interface at %L"
 msgstr ""
 
-#: fortran/interface.c:3352
+#: fortran/interface.c:3459
 #, gcc-internal-format
 msgid ""
 "The pointer object %qs at %L must have an explicit function interface or be "
 "declared as array"
 msgstr ""
 
-#: fortran/interface.c:3360
+#: fortran/interface.c:3467
 #, gcc-internal-format
 msgid ""
 "The allocatable object %qs at %L must have an explicit function interface or "
 "be declared as array"
 msgstr ""
 
-#: fortran/interface.c:3368
+#: fortran/interface.c:3475
 #, gcc-internal-format
 msgid "Allocatable function %qs at %L must have an explicit function interface"
 msgstr ""
 
-#: fortran/interface.c:3378
+#: fortran/interface.c:3485
 #, gcc-internal-format
 msgid "Keyword argument requires explicit interface for procedure %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:3387
+#: fortran/interface.c:3494
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-type argument %s at %L requires an explicit interface"
 msgstr ""
 
-#: fortran/interface.c:3400
+#: fortran/interface.c:3507
 #, 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.c:3413
+#: fortran/interface.c:3520
 #, 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.c:3422
+#: fortran/interface.c:3529
 #, gcc-internal-format, gfc-internal-format
 msgid "MOLD argument to NULL required at %L"
 msgstr ""
 
-#: fortran/interface.c:3430
+#: fortran/interface.c:3537
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-rank argument requires an explicit interface at %L"
 msgstr ""
 
-#: fortran/interface.c:3468
+#: fortran/interface.c:3575
 #, gcc-internal-format
 msgid "Procedure pointer component %qs called with an implicit interface at %L"
 msgstr ""
 
-#: fortran/interface.c:3479
+#: fortran/interface.c:3586
 #, gcc-internal-format
 msgid ""
 "Keyword argument requires explicit interface for procedure pointer component "
 "%qs at %L"
 msgstr ""
 
-#: fortran/interface.c:3564
+#: fortran/interface.c:3671
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "MOLD= required in NULL() argument at %L: Ambiguity between specific "
 "functions %s and %s"
 msgstr ""
 
-#: fortran/interface.c:3634
+#: fortran/interface.c:3741
 #, gcc-internal-format
 msgid "Unable to find symbol %qs"
 msgstr ""
 
-#: fortran/interface.c:4001
+#: fortran/interface.c:4108
 #, gcc-internal-format
 msgid "Entity %qs at %L is already present in the interface"
 msgstr ""
 
-#: fortran/interface.c:4117
+#: fortran/interface.c:4224
 #, gcc-internal-format
 msgid "gfc_add_interface(): Bad interface type"
 msgstr ""
 
-#: fortran/interface.c:4212
+#: fortran/interface.c:4319
 #, gcc-internal-format
 msgid "Can't overwrite GENERIC %qs at %L"
 msgstr ""
 
-#: fortran/interface.c:4224
+#: fortran/interface.c:4331
 #, gcc-internal-format
 msgid "%qs at %L overrides a procedure binding declared NON_OVERRIDABLE"
 msgstr ""
 
-#: fortran/interface.c:4232
+#: fortran/interface.c:4339
 #, gcc-internal-format
 msgid "%qs at %L must not be DEFERRED as it overrides a non-DEFERRED binding"
 msgstr ""
 
-#: fortran/interface.c:4240
+#: fortran/interface.c:4347
 #, gcc-internal-format
 msgid "%qs at %L overrides a PURE procedure and must also be PURE"
 msgstr ""
 
-#: fortran/interface.c:4249
+#: fortran/interface.c:4356
 #, gcc-internal-format
 msgid "%qs at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL"
 msgstr ""
 
-#: fortran/interface.c:4255
+#: fortran/interface.c:4362
 #, gcc-internal-format
 msgid ""
 "%qs at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, "
 "either"
 msgstr ""
 
-#: fortran/interface.c:4264
+#: fortran/interface.c:4371
 #, gcc-internal-format
 msgid "%qs at %L overrides a SUBROUTINE and must also be a SUBROUTINE"
 msgstr ""
 
-#: fortran/interface.c:4275
+#: fortran/interface.c:4382
 #, gcc-internal-format
 msgid "%qs at %L overrides a FUNCTION and must also be a FUNCTION"
 msgstr ""
 
-#: fortran/interface.c:4283
+#: fortran/interface.c:4390
 #, gcc-internal-format
 msgid "Result mismatch for the overriding procedure %qs at %L: %s"
 msgstr ""
 
-#: fortran/interface.c:4294
+#: fortran/interface.c:4401
 #, gcc-internal-format
 msgid "%qs at %L overrides a PUBLIC procedure and must not be PRIVATE"
 msgstr ""
 
-#: fortran/interface.c:4324
+#: fortran/interface.c:4431
 #, 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.c:4335
+#: fortran/interface.c:4442
 #, gcc-internal-format
 msgid "Argument mismatch for the overriding procedure %qs at %L: %s"
 msgstr ""
 
-#: fortran/interface.c:4344
+#: fortran/interface.c:4451
 #, gcc-internal-format
 msgid ""
 "%qs at %L must have the same number of formal arguments as the overridden "
 "procedure"
 msgstr ""
 
-#: fortran/interface.c:4353
+#: fortran/interface.c:4460
 #, gcc-internal-format
 msgid "%qs at %L overrides a NOPASS binding and must also be NOPASS"
 msgstr ""
 
-#: fortran/interface.c:4364
+#: fortran/interface.c:4471
 #, gcc-internal-format
 msgid "%qs at %L overrides a binding with PASS and must also be PASS"
 msgstr ""
 
-#: fortran/interface.c:4371
+#: fortran/interface.c:4478
 #, gcc-internal-format
 msgid ""
 "Passed-object dummy argument of %qs at %L must be at the same position as "
@@ -52069,7 +52266,7 @@ msgstr ""
 msgid "UNIT number in CLOSE statement at %L must be non-negative"
 msgstr ""
 
-#: fortran/io.c:2500 fortran/match.c:2639
+#: fortran/io.c:2500 fortran/match.c:2761
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement not allowed in PURE procedure at %C"
 msgstr ""
@@ -52199,7 +52396,7 @@ msgid "Expected expression in %s statement at %C"
 msgstr ""
 
 #. A general purpose syntax error.
-#: fortran/io.c:3268 fortran/io.c:3886 fortran/gfortran.h:2718
+#: fortran/io.c:3268 fortran/io.c:3886 fortran/gfortran.h:2731
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in %s statement at %C"
 msgstr ""
@@ -52285,616 +52482,628 @@ msgstr ""
 msgid "gfc_op2string(): Bad code"
 msgstr ""
 
-#: fortran/match.c:166
+#: fortran/match.c:186
+#, gcc-internal-format, gfc-internal-format
+msgid "Expected structure component or operator name after '.' at %C"
+msgstr ""
+
+#: fortran/match.c:218
+#, gcc-internal-format, gfc-internal-format
+msgid ""
+"'%s' is neither a defined operator nor a structure component in dotted "
+"string at %C"
+msgstr ""
+
+#: fortran/match.c:288
 #, gcc-internal-format
 msgid "Missing %<)%> in statement at or before %L"
 msgstr ""
 
-#: fortran/match.c:171
+#: fortran/match.c:293
 #, gcc-internal-format
 msgid "Missing %<(%> in statement at or before %L"
 msgstr ""
 
-#: fortran/match.c:368
+#: fortran/match.c:490
 #, gcc-internal-format, gfc-internal-format
 msgid "Integer too large at %C"
 msgstr ""
 
-#: fortran/match.c:461 fortran/parse.c:973
+#: fortran/match.c:583 fortran/parse.c:1045
 #, gcc-internal-format, gfc-internal-format
 msgid "Too many digits in statement label at %C"
 msgstr ""
 
-#: fortran/match.c:467
+#: fortran/match.c:589
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement label at %C is zero"
 msgstr ""
 
-#: fortran/match.c:500
+#: fortran/match.c:622
 #, gcc-internal-format
 msgid "Label name %qs at %C is ambiguous"
 msgstr ""
 
-#: fortran/match.c:506
+#: fortran/match.c:628
 #, gcc-internal-format
 msgid "Duplicate construct label %qs at %C"
 msgstr ""
 
-#: fortran/match.c:540
+#: fortran/match.c:662
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid character in name at %C"
 msgstr ""
 
-#: fortran/match.c:553
+#: fortran/match.c:675
 #, gcc-internal-format, gfc-internal-format
 msgid "Name at %C is too long"
 msgstr ""
 
-#: fortran/match.c:564
+#: fortran/match.c:686
 #, gcc-internal-format
 msgid ""
 "Invalid character %<$%> at %L. Use %<-fdollar-ok%> to allow it as an "
 "extension"
 msgstr ""
 
-#: fortran/match.c:882
+#: fortran/match.c:1004
 #, gcc-internal-format, gfc-internal-format
 msgid "Loop variable at %C cannot be an array"
 msgstr ""
 
-#: fortran/match.c:889
+#: fortran/match.c:1011
 #, gcc-internal-format, gfc-internal-format
 msgid "Loop variable at %C cannot be a coarray"
 msgstr ""
 
-#: fortran/match.c:895
+#: fortran/match.c:1017
 #, gcc-internal-format, gfc-internal-format
 msgid "Loop variable at %C cannot be a sub-component"
 msgstr ""
 
-#: fortran/match.c:929
+#: fortran/match.c:1051
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected a step value in iterator at %C"
 msgstr ""
 
-#: fortran/match.c:941
+#: fortran/match.c:1063
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in iterator at %C"
 msgstr ""
 
-#: fortran/match.c:1109
+#: fortran/match.c:1231
 #, gcc-internal-format, gfc-internal-format
 msgid "gfc_match(): Bad match code %c"
 msgstr ""
 
-#: fortran/match.c:1182
+#: fortran/match.c:1304
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid form of PROGRAM statement at %C"
 msgstr ""
 
-#: fortran/match.c:1312 fortran/match.c:1392
+#: fortran/match.c:1434 fortran/match.c:1514
 #, gcc-internal-format, gfc-internal-format
 msgid "Arithmetic IF statement at %C"
 msgstr ""
 
-#: fortran/match.c:1367
+#: fortran/match.c:1489
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in IF-expression at %C"
 msgstr ""
 
-#: fortran/match.c:1378
+#: fortran/match.c:1500
 #, gcc-internal-format, gfc-internal-format
 msgid "Block label not appropriate for arithmetic IF statement at %C"
 msgstr ""
 
-#: fortran/match.c:1415
+#: fortran/match.c:1537
 #, gcc-internal-format, gfc-internal-format
 msgid "Block label is not appropriate for IF statement at %C"
 msgstr ""
 
-#: fortran/match.c:1503
+#: fortran/match.c:1625
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot assign to a named constant at %C"
 msgstr ""
 
-#: fortran/match.c:1513
+#: fortran/match.c:1635
 #, gcc-internal-format, gfc-internal-format
 msgid "Unclassifiable statement in IF-clause at %C"
 msgstr ""
 
-#: fortran/match.c:1520
+#: fortran/match.c:1642
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in IF-clause at %C"
 msgstr ""
 
-#: fortran/match.c:1563
+#: fortran/match.c:1685
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after ELSE statement at %C"
 msgstr ""
 
-#: fortran/match.c:1569 fortran/match.c:1604
+#: fortran/match.c:1691 fortran/match.c:1726
 #, gcc-internal-format
 msgid "Label %qs at %C doesn't match IF label %qs"
 msgstr ""
 
-#: fortran/match.c:1598
+#: fortran/match.c:1720
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after ELSE IF statement at %C"
 msgstr ""
 
-#: fortran/match.c:1662
+#: fortran/match.c:1784
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement CRITICAL at %C in PURE procedure"
 msgstr ""
 
-#: fortran/match.c:1668
+#: fortran/match.c:1790
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement CRITICAL at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:1675
+#: fortran/match.c:1797
 #, gcc-internal-format, gfc-internal-format
 msgid "CRITICAL statement at %C"
 msgstr ""
 
-#: fortran/match.c:1687
+#: fortran/match.c:1809
 #, gcc-internal-format, gfc-internal-format
 msgid "Nested CRITICAL block at %C"
 msgstr ""
 
-#: fortran/match.c:1739
+#: fortran/match.c:1861
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected association list at %C"
 msgstr ""
 
-#: fortran/match.c:1752
+#: fortran/match.c:1874
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected association at %C"
 msgstr ""
 
-#: fortran/match.c:1761
+#: fortran/match.c:1883
 #, gcc-internal-format
 msgid "Duplicate name %qs in association at %C"
 msgstr ""
 
-#: fortran/match.c:1769
+#: fortran/match.c:1891
 #, gcc-internal-format, gfc-internal-format
 msgid "Association target at %C must not be coindexed"
 msgstr ""
 
-#: fortran/match.c:1787
+#: fortran/match.c:1909
 #, gcc-internal-format
 msgid "Expected %<)%> or %<,%> at %C"
 msgstr ""
 
-#: fortran/match.c:1805
+#: fortran/match.c:1927
 #, gcc-internal-format, gfc-internal-format
 msgid "Junk after ASSOCIATE statement at %C"
 msgstr ""
 
-#: fortran/match.c:1874
+#: fortran/match.c:1996
 #, gcc-internal-format
 msgid "Derived type %qs at %L may not be ABSTRACT"
 msgstr ""
 
-#: fortran/match.c:1937
+#: fortran/match.c:2059
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid type-spec at %C"
 msgstr ""
 
-#: fortran/match.c:2036
+#: fortran/match.c:2158
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in FORALL iterator at %C"
 msgstr ""
 
-#: fortran/match.c:2301
+#: fortran/match.c:2423
 #, gcc-internal-format, gfc-internal-format
 msgid "DO CONCURRENT construct at %C"
 msgstr ""
 
-#: fortran/match.c:2426
+#: fortran/match.c:2548
 #, gcc-internal-format
 msgid "Name %qs in %s statement at %C is unknown"
 msgstr ""
 
-#: fortran/match.c:2434
+#: fortran/match.c:2556
 #, gcc-internal-format
 msgid "Name %qs in %s statement at %C is not a construct name"
 msgstr ""
 
-#: fortran/match.c:2446
+#: fortran/match.c:2568
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C leaves CRITICAL construct"
 msgstr ""
 
 #. F2008, C821 & C845.
-#: fortran/match.c:2454
+#: fortran/match.c:2576
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C leaves DO CONCURRENT construct"
 msgstr ""
 
-#: fortran/match.c:2466
+#: fortran/match.c:2588
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C is not within a construct"
 msgstr ""
 
-#: fortran/match.c:2469
+#: fortran/match.c:2591
 #, gcc-internal-format
 msgid "%s statement at %C is not within construct %qs"
 msgstr ""
 
-#: fortran/match.c:2494
+#: fortran/match.c:2616
 #, gcc-internal-format
 msgid "CYCLE statement at %C is not applicable to non-loop construct %qs"
 msgstr ""
 
-#: fortran/match.c:2499
+#: fortran/match.c:2621
 #, gcc-internal-format, gfc-internal-format
 msgid "EXIT statement with no do-construct-name at %C"
 msgstr ""
 
-#: fortran/match.c:2505
+#: fortran/match.c:2627
 #, gcc-internal-format
 msgid "%s statement at %C is not applicable to construct %qs"
 msgstr ""
 
-#: fortran/match.c:2513
+#: fortran/match.c:2635
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C leaving OpenACC structured block"
 msgstr ""
 
-#: fortran/match.c:2538
+#: fortran/match.c:2660
 #, gcc-internal-format, gfc-internal-format
 msgid "EXIT statement at %C terminating !$ACC LOOP loop"
 msgstr ""
 
-#: fortran/match.c:2543
+#: fortran/match.c:2665
 #, gcc-internal-format, gfc-internal-format
 msgid "CYCLE statement at %C to non-innermost collapsed !$ACC LOOP loop"
 msgstr ""
 
-#: fortran/match.c:2568
+#: fortran/match.c:2690
 #, gcc-internal-format, gfc-internal-format
 msgid "EXIT statement at %C terminating !$OMP DO loop"
 msgstr ""
 
-#: fortran/match.c:2573
+#: fortran/match.c:2695
 #, gcc-internal-format, gfc-internal-format
 msgid "CYCLE statement at %C to non-innermost collapsed !$OMP DO loop"
 msgstr ""
 
-#: fortran/match.c:2633
+#: fortran/match.c:2755
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C in PURE procedure"
 msgstr ""
 
-#: fortran/match.c:2649
+#: fortran/match.c:2771
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement STOP at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:2654
+#: fortran/match.c:2776
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement STOP at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:2662
+#: fortran/match.c:2784
 #, gcc-internal-format, gfc-internal-format
 msgid "STOP code at %L must be either INTEGER or CHARACTER type"
 msgstr ""
 
-#: fortran/match.c:2669
+#: fortran/match.c:2791
 #, gcc-internal-format, gfc-internal-format
 msgid "STOP code at %L must be scalar"
 msgstr ""
 
-#: fortran/match.c:2677
+#: fortran/match.c:2799
 #, gcc-internal-format, gfc-internal-format
 msgid "STOP code at %L must be default character KIND=%d"
 msgstr ""
 
-#: fortran/match.c:2685
+#: fortran/match.c:2807
 #, gcc-internal-format, gfc-internal-format
 msgid "STOP code at %L must be default integer KIND=%d"
 msgstr ""
 
-#: fortran/match.c:2731
+#: fortran/match.c:2853
 #, gcc-internal-format, gfc-internal-format
 msgid "PAUSE statement at %C"
 msgstr ""
 
-#: fortran/match.c:2752
+#: fortran/match.c:2874
 #, gcc-internal-format, gfc-internal-format
 msgid "ERROR STOP statement at %C"
 msgstr ""
 
-#: fortran/match.c:2778
+#: fortran/match.c:2900
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement EVENT %s at %C in PURE procedure"
 msgstr ""
 
-#: fortran/match.c:2793
+#: fortran/match.c:2915
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement EVENT %s at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:2800
+#: fortran/match.c:2922
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement EVENT %s at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:2830 fortran/match.c:3025 fortran/match.c:3237
-#: fortran/match.c:3747 fortran/match.c:4084
+#: fortran/match.c:2952 fortran/match.c:3147 fortran/match.c:3359
+#: fortran/match.c:3869 fortran/match.c:4206
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant STAT tag found at %L "
 msgstr ""
 
-#: fortran/match.c:2851 fortran/match.c:3046 fortran/match.c:3257
-#: fortran/match.c:3773 fortran/match.c:4109
+#: fortran/match.c:2973 fortran/match.c:3168 fortran/match.c:3379
+#: fortran/match.c:3895 fortran/match.c:4231
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant ERRMSG tag found at %L "
 msgstr ""
 
-#: fortran/match.c:2872
+#: fortran/match.c:2994
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant UNTIL_COUNT tag found at %L "
 msgstr ""
 
-#: fortran/match.c:2938
+#: fortran/match.c:3060
 #, gcc-internal-format, gfc-internal-format
 msgid "EVENT POST statement at %C"
 msgstr ""
 
-#: fortran/match.c:2948
+#: fortran/match.c:3070
 #, gcc-internal-format, gfc-internal-format
 msgid "EVENT WAIT statement at %C"
 msgstr ""
 
-#: fortran/match.c:2973
+#: fortran/match.c:3095
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement %s at %C in PURE procedure"
 msgstr ""
 
-#: fortran/match.c:2988
+#: fortran/match.c:3110
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement %s at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:2995
+#: fortran/match.c:3117
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement %s at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:3067
+#: fortran/match.c:3189
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant ACQUIRED_LOCK tag found at %L "
 msgstr ""
 
-#: fortran/match.c:3132
+#: fortran/match.c:3254
 #, gcc-internal-format, gfc-internal-format
 msgid "LOCK statement at %C"
 msgstr ""
 
-#: fortran/match.c:3142
+#: fortran/match.c:3264
 #, gcc-internal-format, gfc-internal-format
 msgid "UNLOCK statement at %C"
 msgstr ""
 
-#: fortran/match.c:3167
+#: fortran/match.c:3289
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement SYNC at %C in PURE procedure"
 msgstr ""
 
-#: fortran/match.c:3173
+#: fortran/match.c:3295
 #, gcc-internal-format, gfc-internal-format
 msgid "SYNC statement at %C"
 msgstr ""
 
-#: fortran/match.c:3185
+#: fortran/match.c:3307
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement SYNC at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:3191
+#: fortran/match.c:3313
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement SYNC at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:3371
+#: fortran/match.c:3493
 #, gcc-internal-format, gfc-internal-format
 msgid "ASSIGN statement at %C"
 msgstr ""
 
-#: fortran/match.c:3415
+#: fortran/match.c:3537
 #, gcc-internal-format, gfc-internal-format
 msgid "Assigned GOTO statement at %C"
 msgstr ""
 
-#: fortran/match.c:3459 fortran/match.c:3510
+#: fortran/match.c:3581 fortran/match.c:3632
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement label list in GOTO at %C cannot be empty"
 msgstr ""
 
-#: fortran/match.c:3520
+#: fortran/match.c:3642
 #, gcc-internal-format, gfc-internal-format
 msgid "Computed GOTO at %C"
 msgstr ""
 
-#: fortran/match.c:3592
+#: fortran/match.c:3714
 #, gcc-internal-format, gfc-internal-format
 msgid "Error in type-spec at %L"
 msgstr ""
 
-#: fortran/match.c:3602
+#: fortran/match.c:3724
 #, gcc-internal-format, gfc-internal-format
 msgid "typespec in ALLOCATE at %L"
 msgstr ""
 
-#: fortran/match.c:3645
+#: fortran/match.c:3767
 #, gcc-internal-format, gfc-internal-format
 msgid "Bad allocate-object at %C for a PURE procedure"
 msgstr ""
 
-#: fortran/match.c:3669
+#: fortran/match.c:3791
 #, gcc-internal-format, gfc-internal-format
 msgid "ALLOCATE of coarray at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:3674
+#: fortran/match.c:3796
 #, gcc-internal-format, gfc-internal-format
 msgid "ALLOCATE of coarray at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:3696
+#: fortran/match.c:3818
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Allocate-object at %L is neither a data pointer nor an allocatable variable"
 msgstr ""
 
-#: fortran/match.c:3708
+#: fortran/match.c:3830
 #, gcc-internal-format, gfc-internal-format
 msgid "Type of entity at %L is type incompatible with typespec"
 msgstr ""
 
-#: fortran/match.c:3716
+#: fortran/match.c:3838
 #, 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.c:3730
+#: fortran/match.c:3852
 #, gcc-internal-format, gfc-internal-format
 msgid "Shape specification for allocatable scalar at %C"
 msgstr ""
 
-#: fortran/match.c:3767
+#: fortran/match.c:3889
 #, gcc-internal-format, gfc-internal-format
 msgid "ERRMSG tag at %L"
 msgstr ""
 
-#: fortran/match.c:3790
+#: fortran/match.c:3912
 #, gcc-internal-format, gfc-internal-format
 msgid "SOURCE tag at %L"
 msgstr ""
 
-#: fortran/match.c:3796
+#: fortran/match.c:3918
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant SOURCE tag found at %L "
 msgstr ""
 
-#: fortran/match.c:3803
+#: fortran/match.c:3925
 #, gcc-internal-format, gfc-internal-format
 msgid "SOURCE tag at %L conflicts with the typespec at %L"
 msgstr ""
 
-#: fortran/match.c:3809
+#: fortran/match.c:3931
 #, gcc-internal-format, gfc-internal-format
 msgid "SOURCE tag at %L with more than a single allocate object"
 msgstr ""
 
-#: fortran/match.c:3827
+#: fortran/match.c:3949
 #, gcc-internal-format, gfc-internal-format
 msgid "MOLD tag at %L"
 msgstr ""
 
-#: fortran/match.c:3833
+#: fortran/match.c:3955
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant MOLD tag found at %L "
 msgstr ""
 
-#: fortran/match.c:3840
+#: fortran/match.c:3962
 #, gcc-internal-format, gfc-internal-format
 msgid "MOLD tag at %L conflicts with the typespec at %L"
 msgstr ""
 
-#: fortran/match.c:3866
+#: fortran/match.c:3988
 #, gcc-internal-format, gfc-internal-format
 msgid "MOLD tag at %L conflicts with SOURCE tag at %L"
 msgstr ""
 
-#: fortran/match.c:3874
+#: fortran/match.c:3996
 #, 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.c:3886
+#: fortran/match.c:4008
 #, 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.c:3948
+#: fortran/match.c:4070
 #, gcc-internal-format, gfc-internal-format
 msgid "Pointer object at %C shall not be coindexed"
 msgstr ""
 
-#: fortran/match.c:4034
+#: fortran/match.c:4156
 #, gcc-internal-format, gfc-internal-format
 msgid "Illegal allocate-object at %C for a PURE procedure"
 msgstr ""
 
-#: fortran/match.c:4044
+#: fortran/match.c:4166
 #, gcc-internal-format, gfc-internal-format
 msgid "DEALLOCATE of coarray at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:4051
+#: fortran/match.c:4173
 #, gcc-internal-format, gfc-internal-format
 msgid "DEALLOCATE of coarray at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:4067
+#: fortran/match.c:4189
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Allocate-object at %C is not a nonprocedure pointer nor an allocatable "
 "variable"
 msgstr ""
 
-#: fortran/match.c:4104
+#: fortran/match.c:4226
 #, gcc-internal-format, gfc-internal-format
 msgid "ERRMSG at %L"
 msgstr ""
 
-#: fortran/match.c:4161
+#: fortran/match.c:4283
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement RETURN at %C in CRITICAL block"
 msgstr ""
 
-#: fortran/match.c:4167
+#: fortran/match.c:4289
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement RETURN at %C in DO CONCURRENT block"
 msgstr ""
 
-#: fortran/match.c:4176
+#: fortran/match.c:4298
 #, gcc-internal-format, gfc-internal-format
 msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE"
 msgstr ""
 
-#: fortran/match.c:4207
+#: fortran/match.c:4329
 #, gcc-internal-format, gfc-internal-format
 msgid "RETURN statement in main program at %C"
 msgstr ""
 
-#: fortran/match.c:4235
+#: fortran/match.c:4357
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected component reference at %C"
 msgstr ""
 
-#: fortran/match.c:4244
+#: fortran/match.c:4366
 #, gcc-internal-format, gfc-internal-format
 msgid "Junk after CALL at %C"
 msgstr ""
 
-#: fortran/match.c:4255
+#: fortran/match.c:4377
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected type-bound procedure or procedure pointer component at %C"
 msgstr ""
 
-#: fortran/match.c:4476
+#: fortran/match.c:4598
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in common block name at %C"
 msgstr ""
@@ -52902,169 +53111,169 @@ 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.c:4543
+#: fortran/match.c:4665
 #, 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.c:4552
+#: fortran/match.c:4674
 #, gcc-internal-format
 msgid ""
 "Variable %qs in common block %qs at %C can not be bind(c) since it is not "
 "global"
 msgstr ""
 
-#: fortran/match.c:4559
+#: fortran/match.c:4681
 #, gcc-internal-format
 msgid "Symbol %qs at %C is already in a COMMON block"
 msgstr ""
 
-#: fortran/match.c:4567
+#: fortran/match.c:4689
 #, gcc-internal-format
 msgid "Initialized symbol %qs at %C can only be COMMON in BLOCK DATA"
 msgstr ""
 
-#: fortran/match.c:4583
+#: fortran/match.c:4705
 #, gcc-internal-format
 msgid "Array specification for symbol %qs in COMMON at %C must be explicit"
 msgstr ""
 
-#: fortran/match.c:4593
+#: fortran/match.c:4715
 #, gcc-internal-format
 msgid "Symbol %qs in COMMON at %C cannot be a POINTER array"
 msgstr ""
 
-#: fortran/match.c:4639
+#: fortran/match.c:4761
 #, gcc-internal-format
 msgid ""
 "Symbol %qs, in COMMON block %qs at %C is being indirectly equivalenced to "
 "another COMMON block %qs"
 msgstr ""
 
-#: fortran/match.c:4767
+#: fortran/match.c:4889
 #, gcc-internal-format
 msgid "Namelist group name %qs at %C already has a basic type of %s"
 msgstr ""
 
-#: fortran/match.c:4775
+#: fortran/match.c:4897
 #, gcc-internal-format
 msgid ""
 "Namelist group name %qs at %C already is USE associated and cannot be "
 "respecified."
 msgstr ""
 
-#: fortran/match.c:4801
+#: fortran/match.c:4923
 #, gcc-internal-format
 msgid "Assumed size array %qs in namelist %qs at %C is not allowed"
 msgstr ""
 
-#: fortran/match.c:4935
+#: fortran/match.c:5057
 #, gcc-internal-format, gfc-internal-format
 msgid "Derived type component %C is not a permitted EQUIVALENCE member"
 msgstr ""
 
-#: fortran/match.c:4943
+#: fortran/match.c:5065
 #, gcc-internal-format, gfc-internal-format
 msgid "Array reference in EQUIVALENCE at %C cannot be an array section"
 msgstr ""
 
-#: fortran/match.c:4971
+#: fortran/match.c:5093
 #, gcc-internal-format, gfc-internal-format
 msgid "EQUIVALENCE at %C requires two or more objects"
 msgstr ""
 
-#: fortran/match.c:4985
+#: fortran/match.c:5107
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C"
 msgstr ""
 
-#: fortran/match.c:4998
+#: fortran/match.c:5120
 #, gcc-internal-format, gfc-internal-format
 msgid "Expecting a comma in EQUIVALENCE at %C"
 msgstr ""
 
-#: fortran/match.c:5114
+#: fortran/match.c:5236
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement function at %L is recursive"
 msgstr ""
 
-#: fortran/match.c:5124
+#: fortran/match.c:5246
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement function at %L cannot appear within an INTERFACE"
 msgstr ""
 
-#: fortran/match.c:5129
+#: fortran/match.c:5251
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement function at %C"
 msgstr ""
 
-#: fortran/match.c:5254 fortran/match.c:5270
+#: fortran/match.c:5376 fortran/match.c:5392
 #, gcc-internal-format, gfc-internal-format
 msgid "Expression in CASE selector at %L cannot be %s"
 msgstr ""
 
-#: fortran/match.c:5292
+#: fortran/match.c:5414
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected initialization expression in CASE at %C"
 msgstr ""
 
-#: fortran/match.c:5324
+#: fortran/match.c:5446
 #, gcc-internal-format
 msgid "Expected block name %qs of SELECT construct at %C"
 msgstr ""
 
-#: fortran/match.c:5604
+#: fortran/match.c:5726
 #, gcc-internal-format, gfc-internal-format
 msgid "parse error in SELECT TYPE statement at %C"
 msgstr ""
 
-#: fortran/match.c:5628
+#: fortran/match.c:5750
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Selector in SELECT TYPE at %C is not a named variable; use associate-name=>"
 msgstr ""
 
-#: fortran/match.c:5662
+#: fortran/match.c:5784
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected CASE statement at %C"
 msgstr ""
 
-#: fortran/match.c:5714
+#: fortran/match.c:5836
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in CASE specification at %C"
 msgstr ""
 
-#: fortran/match.c:5732
+#: fortran/match.c:5854
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected TYPE IS statement at %C"
 msgstr ""
 
-#: fortran/match.c:5764
+#: fortran/match.c:5886
 #, 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.c:5776
+#: fortran/match.c:5898
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in TYPE IS specification at %C"
 msgstr ""
 
-#: fortran/match.c:5852
+#: fortran/match.c:5974
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in CLASS IS specification at %C"
 msgstr ""
 
-#: fortran/match.c:5970
+#: fortran/match.c:6092
 #, gcc-internal-format, gfc-internal-format
 msgid "ELSEWHERE statement at %C not enclosed in WHERE block"
 msgstr ""
 
-#: fortran/match.c:6008
+#: fortran/match.c:6130
 #, gcc-internal-format
 msgid "Label %qs at %C doesn't match WHERE label %qs"
 msgstr ""
@@ -53102,17 +53311,17 @@ msgstr ""
 msgid "match_level_4(): Bad operator"
 msgstr ""
 
-#: fortran/misc.c:105
+#: fortran/misc.c:108
 #, gcc-internal-format
 msgid "gfc_basic_typename(): Undefined type"
 msgstr ""
 
-#: fortran/misc.c:167
+#: fortran/misc.c:173
 #, gcc-internal-format
 msgid "gfc_typename(): Undefined type"
 msgstr ""
 
-#: fortran/misc.c:187
+#: fortran/misc.c:193
 #, gcc-internal-format
 msgid "gfc_code2string(): Bad code"
 msgstr ""
@@ -53214,197 +53423,197 @@ msgstr ""
 msgid "unquote_string(): got bad string"
 msgstr ""
 
-#: fortran/module.c:2661
+#: fortran/module.c:2662
 #, gcc-internal-format
 msgid "mio_array_ref(): Unknown array ref"
 msgstr ""
 
-#: fortran/module.c:3637
+#: fortran/module.c:3638
 #, gcc-internal-format, gfc-internal-format
 msgid "Namelist %s cannot be renamed by USE association to %s"
 msgstr ""
 
-#: fortran/module.c:4757
+#: fortran/module.c:4758
 #, gcc-internal-format, gfc-internal-format
 msgid "Ambiguous !$OMP DECLARE REDUCTION from module %s at %L"
 msgstr ""
 
-#: fortran/module.c:4760
+#: fortran/module.c:4761
 #, gcc-internal-format, gfc-internal-format
 msgid "Previous !$OMP DECLARE REDUCTION from module %s at %L"
 msgstr ""
 
-#: fortran/module.c:4948
+#: fortran/module.c:4955
 #, gcc-internal-format
 msgid ""
 "%qs of module %qs, imported at %C, is also the name of the current program "
 "unit"
 msgstr ""
 
-#: fortran/module.c:5309
+#: fortran/module.c:5316
 #, gcc-internal-format
 msgid "Symbol %qs referenced at %L not found in module %qs"
 msgstr ""
 
-#: fortran/module.c:5316
+#: fortran/module.c:5323
 #, gcc-internal-format
 msgid "User operator %qs referenced at %L not found in module %qs"
 msgstr ""
 
-#: fortran/module.c:5321
+#: fortran/module.c:5328
 #, gcc-internal-format
 msgid "Intrinsic operator %qs referenced at %L not found in module %qs"
 msgstr ""
 
-#: fortran/module.c:5556
+#: fortran/module.c:5563
 #, gcc-internal-format
 msgid "write_symbol(): bad module symbol %qs"
 msgstr ""
 
-#: fortran/module.c:5889
+#: fortran/module.c:5896
 #, gcc-internal-format
 msgid "write_symtree(): Symbol not written"
 msgstr ""
 
-#: fortran/module.c:6076
+#: fortran/module.c:6083
 #, gcc-internal-format
 msgid "Can't open module file %qs for writing at %C: %s"
 msgstr ""
 
-#: fortran/module.c:6095
+#: fortran/module.c:6102
 #, gcc-internal-format
 msgid "Error writing module file %qs for writing: %s"
 msgstr ""
 
-#: fortran/module.c:6106
+#: fortran/module.c:6113
 #, gcc-internal-format
 msgid "Can't delete module file %qs: %s"
 msgstr ""
 
-#: fortran/module.c:6109
+#: fortran/module.c:6116
 #, gcc-internal-format
 msgid "Can't rename module file %qs to %qs: %s"
 msgstr ""
 
-#: fortran/module.c:6115
+#: fortran/module.c:6122
 #, gcc-internal-format
 msgid "Can't delete temporary module file %qs: %s"
 msgstr ""
 
-#: fortran/module.c:6157 fortran/module.c:6484 fortran/module.c:6517
-#: fortran/module.c:6559
+#: fortran/module.c:6164 fortran/module.c:6491 fortran/module.c:6524
+#: fortran/module.c:6566
 #, gcc-internal-format
 msgid "Symbol %qs already declared"
 msgstr ""
 
-#: fortran/module.c:6227
+#: fortran/module.c:6234
 #, gcc-internal-format, gfc-internal-format
 msgid "import_iso_c_binding_module(): Unable to create symbol for %s"
 msgstr ""
 
-#: fortran/module.c:6335 fortran/module.c:6679
+#: fortran/module.c:6342 fortran/module.c:6686
 #, gcc-internal-format
 msgid "The symbol %qs, referenced at %L, is not in the selected standard"
 msgstr ""
 
-#: fortran/module.c:6463
+#: fortran/module.c:6470
 #, gcc-internal-format
 msgid "Symbol %qs referenced at %L not found in intrinsic module ISO_C_BINDING"
 msgstr ""
 
-#: fortran/module.c:6664
+#: fortran/module.c:6671
 #, gcc-internal-format
 msgid ""
 "Use of intrinsic module %qs at %C conflicts with non-intrinsic module name "
 "used previously"
 msgstr ""
 
-#: fortran/module.c:6686
+#: fortran/module.c:6693
 #, gcc-internal-format
 msgid ""
 "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module "
 "ISO_FORTRAN_ENV at %L is incompatible with option %qs"
 msgstr ""
 
-#: fortran/module.c:6754
+#: fortran/module.c:6761
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module "
 "ISO_FORTRAN_ENV at %C is incompatible with option %s"
 msgstr ""
 
-#: fortran/module.c:6808
+#: fortran/module.c:6815
 #, gcc-internal-format
 msgid ""
 "Symbol %qs referenced at %L not found in intrinsic module ISO_FORTRAN_ENV"
 msgstr ""
 
-#: fortran/module.c:6834
+#: fortran/module.c:6841
 #, gcc-internal-format, gfc-internal-format
 msgid "USE statement at %C has no ONLY qualifier"
 msgstr ""
 
-#: fortran/module.c:6863
+#: fortran/module.c:6870
 #, gcc-internal-format, gfc-internal-format
 msgid "ISO_FORTRAN_ENV intrinsic module at %C"
 msgstr ""
 
-#: fortran/module.c:6875
+#: fortran/module.c:6882
 #, gcc-internal-format, gfc-internal-format
 msgid "ISO_C_BINDING module at %C"
 msgstr ""
 
-#: fortran/module.c:6888
+#: fortran/module.c:6895
 #, gcc-internal-format
 msgid "Can't find an intrinsic module named %qs at %C"
 msgstr ""
 
-#: fortran/module.c:6894
+#: fortran/module.c:6901
 #, gcc-internal-format, gfc-internal-format
 msgid "IEEE_FEATURES module at %C"
 msgstr ""
 
-#: fortran/module.c:6900
+#: fortran/module.c:6907
 #, gcc-internal-format, gfc-internal-format
 msgid "IEEE_EXCEPTIONS module at %C"
 msgstr ""
 
-#: fortran/module.c:6906
+#: fortran/module.c:6913
 #, gcc-internal-format, gfc-internal-format
 msgid "IEEE_ARITHMETIC module at %C"
 msgstr ""
 
-#: fortran/module.c:6913
+#: fortran/module.c:6920
 #, gcc-internal-format
 msgid "Can't open module file %qs for reading at %C: %s"
 msgstr ""
 
-#: fortran/module.c:6921
+#: fortran/module.c:6928
 #, gcc-internal-format
 msgid ""
 "Use of non-intrinsic module %qs at %C conflicts with intrinsic module name "
 "used previously"
 msgstr ""
 
-#: fortran/module.c:6944
+#: fortran/module.c:6951
 #, gcc-internal-format
 msgid "File %qs opened at %C is not a GNU Fortran module file"
 msgstr ""
 
-#: fortran/module.c:6952
+#: fortran/module.c:6959
 #, gcc-internal-format
 msgid ""
 "Cannot read module file %qs opened at %C, because it was created by a "
 "different version of GNU Fortran"
 msgstr ""
 
-#: fortran/module.c:6967
+#: fortran/module.c:6974
 #, gcc-internal-format, gfc-internal-format
 msgid "Can't USE the same %smodule we're building!"
 msgstr ""
 
-#: fortran/openmp.c:289 fortran/openmp.c:497 fortran/openmp.c:2399
-#: fortran/openmp.c:2473
+#: fortran/openmp.c:289 fortran/openmp.c:521 fortran/openmp.c:2454
+#: fortran/openmp.c:2528
 #, gcc-internal-format, gfc-internal-format
 msgid "COMMON block /%s/ not found at %C"
 msgstr ""
@@ -53419,1172 +53628,1137 @@ msgstr ""
 msgid "Syntax error in OpenACC expression list at %C"
 msgstr ""
 
-#: fortran/openmp.c:465
+#: fortran/openmp.c:457
+#, gcc-internal-format
+msgid "Unexpected OpenACC parallelism."
+msgstr ""
+
+#: fortran/openmp.c:489
 #, gcc-internal-format, gfc-internal-format
 msgid "Variable at %C is an element of a COMMON block"
 msgstr ""
 
-#: fortran/openmp.c:525
+#: fortran/openmp.c:549
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after !$ACC DECLARE at %C"
 msgstr ""
 
-#: fortran/openmp.c:535
+#: fortran/openmp.c:559
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$ACC DECLARE list at %C"
 msgstr ""
 
-#: fortran/openmp.c:991
+#: fortran/openmp.c:1039
 #, gcc-internal-format, gfc-internal-format
 msgid "!$OMP DECLARE REDUCTION %s not found at %L"
 msgstr ""
 
-#: fortran/openmp.c:1091
+#: fortran/openmp.c:1139
 #, gcc-internal-format, gfc-internal-format
 msgid "COLLAPSE clause argument not constant positive integer at %C"
 msgstr ""
 
-#: fortran/openmp.c:1476
+#: fortran/openmp.c:1524
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid clause in module with $!ACC DECLARE at %L"
 msgstr ""
 
-#: fortran/openmp.c:1486
+#: fortran/openmp.c:1534
 #, gcc-internal-format, gfc-internal-format
 msgid "Variable is USE-associated with $!ACC DECLARE at %L"
 msgstr ""
 
-#: fortran/openmp.c:1494
+#: fortran/openmp.c:1542
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-size dummy array with $!ACC DECLARE at %L"
 msgstr ""
 
-#: fortran/openmp.c:1541
+#: fortran/openmp.c:1589
 #, gcc-internal-format
 msgid ""
 "%<acc update%> must contain at least one %<device%> or %<host%> or %<self%> "
 "clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:1591
-#, gcc-internal-format, gfc-internal-format
-msgid "Unexpected junk in !$ACC WAIT at %C"
-msgstr ""
-
-#: fortran/openmp.c:1600
+#: fortran/openmp.c:1651
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid argument to $!ACC WAIT at %L"
 msgstr ""
 
-#: fortran/openmp.c:1609
+#: fortran/openmp.c:1660
 #, gcc-internal-format, gfc-internal-format
 msgid "WAIT clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:1638
+#: fortran/openmp.c:1693
 #, gcc-internal-format, gfc-internal-format
 msgid "ACC CACHE directive must be inside of loop %C"
 msgstr ""
 
-#: fortran/openmp.c:1669
+#: fortran/openmp.c:1724
 #, gcc-internal-format
 msgid "Multiple loop axes specified for routine"
 msgstr ""
 
-#: fortran/openmp.c:1695
+#: fortran/openmp.c:1750
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Only the !$ACC ROUTINE form without list is allowed in interface block at %C"
 msgstr ""
 
-#: fortran/openmp.c:1722
+#: fortran/openmp.c:1777
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C, invalid function name %s"
 msgstr ""
 
-#: fortran/openmp.c:1731
+#: fortran/openmp.c:1786
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C"
 msgstr ""
 
-#: fortran/openmp.c:1738
+#: fortran/openmp.c:1793
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C, expecting ')' after NAME"
 msgstr ""
 
-#: fortran/openmp.c:1844
+#: fortran/openmp.c:1899
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP CRITICAL statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:1909
+#: fortran/openmp.c:1964
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP FLUSH statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2292 fortran/openmp.c:5151
+#: fortran/openmp.c:2347 fortran/openmp.c:5206
 #, gcc-internal-format, gfc-internal-format
 msgid "Redefinition of predefined %s !$OMP DECLARE REDUCTION at %L"
 msgstr ""
 
-#: fortran/openmp.c:2296 fortran/openmp.c:5155
+#: fortran/openmp.c:2351 fortran/openmp.c:5210
 #, gcc-internal-format, gfc-internal-format
 msgid "Redefinition of predefined !$OMP DECLARE REDUCTION at %L"
 msgstr ""
 
-#: fortran/openmp.c:2301
+#: fortran/openmp.c:2356
 #, gcc-internal-format, gfc-internal-format
 msgid "Redefinition of !$OMP DECLARE REDUCTION at %L"
 msgstr ""
 
-#: fortran/openmp.c:2303
+#: fortran/openmp.c:2358
 #, gcc-internal-format, gfc-internal-format
 msgid "Previous !$OMP DECLARE REDUCTION at %L"
 msgstr ""
 
-#: fortran/openmp.c:2323
+#: fortran/openmp.c:2378
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after !$OMP DECLARE REDUCTION at %C"
 msgstr ""
 
-#: fortran/openmp.c:2352
+#: fortran/openmp.c:2407
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Only the !$OMP DECLARE TARGET form without list is allowed in interface "
 "block at %C"
 msgstr ""
 
-#: fortran/openmp.c:2378
+#: fortran/openmp.c:2433
 #, gcc-internal-format, gfc-internal-format
 msgid "OMP DECLARE TARGET on a variable at %C is an element of a COMMON block"
 msgstr ""
 
-#: fortran/openmp.c:2417
+#: fortran/openmp.c:2472
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after !$OMP DECLARE TARGET at %C"
 msgstr ""
 
-#: fortran/openmp.c:2423
+#: fortran/openmp.c:2478
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$OMP DECLARE TARGET list at %C"
 msgstr ""
 
-#: fortran/openmp.c:2453
+#: fortran/openmp.c:2508
 #, gcc-internal-format, gfc-internal-format
 msgid "Threadprivate variable at %C is an element of a COMMON block"
 msgstr ""
 
-#: fortran/openmp.c:2490
+#: fortran/openmp.c:2545
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after OMP THREADPRIVATE at %C"
 msgstr ""
 
-#: fortran/openmp.c:2497
+#: fortran/openmp.c:2552
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$OMP THREADPRIVATE list at %C"
 msgstr ""
 
-#: fortran/openmp.c:2578
+#: fortran/openmp.c:2633
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after TASKWAIT clause at %C"
 msgstr ""
 
-#: fortran/openmp.c:2592
+#: fortran/openmp.c:2647
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after TASKYIELD clause at %C"
 msgstr ""
 
-#: fortran/openmp.c:2717
+#: fortran/openmp.c:2772
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP WORKSHARE statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2731
+#: fortran/openmp.c:2786
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP MASTER statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2745
+#: fortran/openmp.c:2800
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP ORDERED statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2790
+#: fortran/openmp.c:2845
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP ATOMIC statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2817
+#: fortran/openmp.c:2872
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP BARRIER statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2831
+#: fortran/openmp.c:2886
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP TASKGROUP statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2881
+#: fortran/openmp.c:2936
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after $OMP CANCELLATION POINT statement at %C"
 msgstr ""
 
-#: fortran/openmp.c:2901
+#: fortran/openmp.c:2956
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected junk after NOWAIT clause at %C"
 msgstr ""
 
-#: fortran/openmp.c:2941
+#: fortran/openmp.c:2996
 #, gcc-internal-format, gfc-internal-format
 msgid "%s clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:2952
+#: fortran/openmp.c:3007
 #, gcc-internal-format, gfc-internal-format
 msgid "INTEGER expression of %s clause at %L must be positive"
 msgstr ""
 
-#: fortran/openmp.c:2963
+#: fortran/openmp.c:3018
 #, gcc-internal-format
 msgid "POINTER object %qs of derived type in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2966
+#: fortran/openmp.c:3021
 #, gcc-internal-format
 msgid "Cray pointer object of derived type %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2969
+#: fortran/openmp.c:3024
 #, gcc-internal-format
 msgid "Cray pointee object of derived type %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2975
+#: fortran/openmp.c:3030
 #, gcc-internal-format
 msgid "POINTER object %qs of polymorphic type in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2980
+#: fortran/openmp.c:3035
 #, gcc-internal-format
 msgid "Cray pointer object of polymorphic type %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2985
+#: fortran/openmp.c:3040
 #, gcc-internal-format
 msgid "Cray pointee object of polymorphic type %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2995 fortran/openmp.c:3521
+#: fortran/openmp.c:3050 fortran/openmp.c:3576
 #, gcc-internal-format
 msgid "Assumed size array %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:2998
+#: fortran/openmp.c:3053
 #, gcc-internal-format
 msgid "Assumed rank array %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3002
+#: fortran/openmp.c:3057
 #, gcc-internal-format
 msgid "Noncontiguous deferred shape array %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3010
+#: fortran/openmp.c:3065
 #, gcc-internal-format
 msgid "ALLOCATABLE object %qs of derived type in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3015
+#: fortran/openmp.c:3070
 #, gcc-internal-format
 msgid "ALLOCATABLE object %qs of polymorphic type in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3027 fortran/openmp.c:3511 fortran/openmp.c:3684
+#: fortran/openmp.c:3082 fortran/openmp.c:3566 fortran/openmp.c:3739
 #, gcc-internal-format
 msgid "POINTER object %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3032 fortran/openmp.c:3687
+#: fortran/openmp.c:3087 fortran/openmp.c:3742
 #, gcc-internal-format
 msgid "Cray pointer object %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3037 fortran/openmp.c:3690
+#: fortran/openmp.c:3092 fortran/openmp.c:3745
 #, gcc-internal-format
 msgid "Cray pointee object %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3042 fortran/openmp.c:3679
+#: fortran/openmp.c:3097 fortran/openmp.c:3734
 #, gcc-internal-format
 msgid "ALLOCATABLE object %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3045
+#: fortran/openmp.c:3100
 #, gcc-internal-format
 msgid "VALUE object %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3088
+#: fortran/openmp.c:3143
 #, gcc-internal-format, gfc-internal-format
 msgid "Implicitly declared function %s used in !$OMP DECLARE REDUCTION at %L "
 msgstr ""
 
-#: fortran/openmp.c:3137
+#: fortran/openmp.c:3192
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Implicitly declared subroutine %s used in !$OMP DECLARE REDUCTION at %L "
 msgstr ""
 
-#: fortran/openmp.c:3171 fortran/resolve.c:9395 fortran/resolve.c:10617
+#: fortran/openmp.c:3226 fortran/resolve.c:9401 fortran/resolve.c:10623
 #, gcc-internal-format, gfc-internal-format
 msgid "IF clause at %L requires a scalar LOGICAL expression"
 msgstr ""
 
-#: fortran/openmp.c:3179
+#: fortran/openmp.c:3234
 #, gcc-internal-format, gfc-internal-format
 msgid "FINAL clause at %L requires a scalar LOGICAL expression"
 msgstr ""
 
-#: fortran/openmp.c:3187
+#: fortran/openmp.c:3242
 #, gcc-internal-format, gfc-internal-format
 msgid "NUM_THREADS clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3195
+#: fortran/openmp.c:3250
 #, gcc-internal-format, gfc-internal-format
 msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3210
+#: fortran/openmp.c:3265
 #, gcc-internal-format
 msgid "Variable %qs is not a dummy argument at %L"
 msgstr ""
 
-#: fortran/openmp.c:3242
+#: fortran/openmp.c:3297
 #, gcc-internal-format
 msgid "Object %qs is not a variable at %L"
 msgstr ""
 
-#: fortran/openmp.c:3258 fortran/openmp.c:3269 fortran/openmp.c:3277
-#: fortran/openmp.c:3288 fortran/openmp.c:3300 fortran/openmp.c:3315
-#: fortran/openmp.c:4958
+#: fortran/openmp.c:3313 fortran/openmp.c:3324 fortran/openmp.c:3332
+#: fortran/openmp.c:3343 fortran/openmp.c:3355 fortran/openmp.c:3370
+#: fortran/openmp.c:5013
 #, gcc-internal-format
 msgid "Symbol %qs present on multiple clauses at %L"
 msgstr ""
 
-#: fortran/openmp.c:3322
+#: fortran/openmp.c:3377
 #, gcc-internal-format
 msgid "Array %qs is not permitted in reduction at %L"
 msgstr ""
 
-#: fortran/openmp.c:3335
+#: fortran/openmp.c:3390
 #, gcc-internal-format
 msgid "Symbol %qs present on both FROM and TO clauses at %L"
 msgstr ""
 
-#: fortran/openmp.c:3357
+#: fortran/openmp.c:3412
 #, gcc-internal-format
 msgid "Non-THREADPRIVATE object %qs in COPYIN clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3365
+#: fortran/openmp.c:3420
 #, gcc-internal-format
 msgid "Assumed size array %qs in COPYPRIVATE clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3368
+#: fortran/openmp.c:3423
 #, gcc-internal-format
 msgid "INTENT(IN) POINTER %qs in COPYPRIVATE clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3376
+#: fortran/openmp.c:3431
 #, gcc-internal-format
 msgid "THREADPRIVATE object %qs in SHARED clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3379
+#: fortran/openmp.c:3434
 #, gcc-internal-format
 msgid "Cray pointee %qs in SHARED clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3382
+#: fortran/openmp.c:3437
 #, gcc-internal-format
 msgid "ASSOCIATE name %qs in SHARED clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3397
+#: fortran/openmp.c:3452
 #, gcc-internal-format
 msgid ""
 "%qs in ALIGNED clause must be POINTER, ALLOCATABLE, Cray pointer or C_PTR at "
 "%L"
 msgstr ""
 
-#: fortran/openmp.c:3409
+#: fortran/openmp.c:3464
 #, gcc-internal-format
 msgid ""
 "%qs in ALIGNED clause at %L requires a scalar positive constant integer "
 "alignment expression"
 msgstr ""
 
-#: fortran/openmp.c:3429 fortran/openmp.c:3450
+#: fortran/openmp.c:3484 fortran/openmp.c:3505
 #, gcc-internal-format
 msgid "%qs in %s clause at %L is not a proper array section"
 msgstr ""
 
-#: fortran/openmp.c:3433
+#: fortran/openmp.c:3488
 #, gcc-internal-format, gfc-internal-format
 msgid "Coarrays not supported in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3442
+#: fortran/openmp.c:3497
 #, gcc-internal-format, gfc-internal-format
 msgid "Stride should not be specified for array section in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3463
+#: fortran/openmp.c:3518
 #, gcc-internal-format
 msgid "%qs in DEPEND clause at %L is a zero size array section"
 msgstr ""
 
-#: fortran/openmp.c:3485 fortran/openmp.c:3497
+#: fortran/openmp.c:3540 fortran/openmp.c:3552
 #, gcc-internal-format
 msgid "THREADPRIVATE object %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3488 fortran/openmp.c:3500
+#: fortran/openmp.c:3543 fortran/openmp.c:3555
 #, gcc-internal-format
 msgid "Cray pointee %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3503
+#: fortran/openmp.c:3558
 #, gcc-internal-format
 msgid "ASSOCIATE name %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3508
+#: fortran/openmp.c:3563
 #, gcc-internal-format
 msgid "Procedure pointer %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3514
+#: fortran/openmp.c:3569
 #, gcc-internal-format
 msgid "Cray pointer %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3524
+#: fortran/openmp.c:3579
 #, gcc-internal-format
 msgid "Variable %qs in %s clause is used in NAMELIST statement at %L"
 msgstr ""
 
 #. case OMP_LIST_REDUCTION:
-#: fortran/openmp.c:3534
+#: fortran/openmp.c:3589
 #, gcc-internal-format
 msgid "INTENT(IN) POINTER %qs in %s clause at %L"
 msgstr ""
 
-#: fortran/openmp.c:3627
+#: fortran/openmp.c:3682
 #, gcc-internal-format, gfc-internal-format
 msgid "!$OMP DECLARE REDUCTION %s not found for type %s at %L"
 msgstr ""
 
-#: fortran/openmp.c:3650
+#: fortran/openmp.c:3705
 #, gcc-internal-format
 msgid "LINEAR variable %qs must be INTEGER at %L"
 msgstr ""
 
-#: fortran/openmp.c:3653
+#: fortran/openmp.c:3708
 #, gcc-internal-format
 msgid "LINEAR dummy argument %qs must have VALUE attribute at %L"
 msgstr ""
 
-#: fortran/openmp.c:3661
+#: fortran/openmp.c:3716
 #, gcc-internal-format
 msgid ""
 "%qs in LINEAR clause at %L requires a scalar integer linear-step expression"
 msgstr ""
 
-#: fortran/openmp.c:3665
+#: fortran/openmp.c:3720
 #, gcc-internal-format
 msgid ""
 "%qs in LINEAR clause at %L requires a constant integer linear-step expression"
 msgstr ""
 
-#: fortran/openmp.c:3709
+#: fortran/openmp.c:3764
 #, gcc-internal-format, gfc-internal-format
 msgid "SAFELEN clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3717
+#: fortran/openmp.c:3772
 #, gcc-internal-format, gfc-internal-format
 msgid "SIMDLEN clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3725
+#: fortran/openmp.c:3780
 #, gcc-internal-format, gfc-internal-format
 msgid "NUM_TEAMS clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3733
+#: fortran/openmp.c:3788
 #, gcc-internal-format, gfc-internal-format
 msgid "DEVICE clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3741
+#: fortran/openmp.c:3796
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "DIST_SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3749
+#: fortran/openmp.c:3804
 #, gcc-internal-format, gfc-internal-format
 msgid "THREAD_LIMIT clause at %L requires a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/openmp.c:3877
+#: fortran/openmp.c:3932
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
 msgstr ""
 
-#: fortran/openmp.c:3902
+#: fortran/openmp.c:3957
 #, 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.c:3907
+#: fortran/openmp.c:3962
 #, 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.c:3929 fortran/openmp.c:4220
+#: fortran/openmp.c:3984 fortran/openmp.c:4275
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC CAPTURE capture statement must read from a scalar variable of "
 "intrinsic type at %L"
 msgstr ""
 
-#: fortran/openmp.c:3944
+#: fortran/openmp.c:3999
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC CAPTURE update statement must set a scalar variable of "
 "intrinsic type at %L"
 msgstr ""
 
-#: fortran/openmp.c:3951 fortran/openmp.c:4227
+#: fortran/openmp.c:4006 fortran/openmp.c:4282
 #, 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.c:3967
+#: fortran/openmp.c:4022
 #, gcc-internal-format, gfc-internal-format
 msgid "!$OMP ATOMIC with ALLOCATABLE variable at %L"
 msgstr ""
 
-#: fortran/openmp.c:4009
+#: fortran/openmp.c:4064
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., ."
 "EQV. or .NEQV. at %L"
 msgstr ""
 
-#: fortran/openmp.c:4057
+#: fortran/openmp.c:4112
 #, 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.c:4071
+#: fortran/openmp.c:4126
 #, 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.c:4103
+#: fortran/openmp.c:4158
 #, 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.c:4127
+#: fortran/openmp.c:4182
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC assignment intrinsic IAND, IOR or IEOR must have two arguments "
 "at %L"
 msgstr ""
 
-#: fortran/openmp.c:4134
+#: fortran/openmp.c:4189
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC assignment intrinsic must be MIN, MAX, IAND, IOR or IEOR at %L"
 msgstr ""
 
-#: fortran/openmp.c:4151
+#: fortran/openmp.c:4206
 #, gcc-internal-format
 msgid ""
 "!$OMP ATOMIC intrinsic arguments except one must not reference %qs at %L"
 msgstr ""
 
-#: fortran/openmp.c:4158
+#: fortran/openmp.c:4213
 #, gcc-internal-format, gfc-internal-format
 msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L"
 msgstr ""
 
-#: fortran/openmp.c:4166
+#: fortran/openmp.c:4221
 #, gcc-internal-format
 msgid "First or last !$OMP ATOMIC intrinsic argument must be %qs at %L"
 msgstr ""
 
-#: fortran/openmp.c:4184
+#: fortran/openmp.c:4239
 #, 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.c:4198
+#: fortran/openmp.c:4253
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "!$OMP ATOMIC CAPTURE capture statement must set a scalar variable of "
 "intrinsic type at %L"
 msgstr ""
 
-#: fortran/openmp.c:4475
+#: fortran/openmp.c:4530
 #, gcc-internal-format, gfc-internal-format
 msgid "%s cannot be a DO WHILE or DO without loop control at %L"
 msgstr ""
 
-#: fortran/openmp.c:4481
+#: fortran/openmp.c:4536
 #, gcc-internal-format, gfc-internal-format
 msgid "%s cannot be a DO CONCURRENT loop at %L"
 msgstr ""
 
-#: fortran/openmp.c:4487
+#: fortran/openmp.c:4542
 #, gcc-internal-format, gfc-internal-format
 msgid "%s iteration variable must be of type integer at %L"
 msgstr ""
 
-#: fortran/openmp.c:4491
+#: fortran/openmp.c:4546
 #, gcc-internal-format, gfc-internal-format
 msgid "%s iteration variable must not be THREADPRIVATE at %L"
 msgstr ""
 
-#: fortran/openmp.c:4504
+#: fortran/openmp.c:4559
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "%s iteration variable present on clause other than PRIVATE or LASTPRIVATE at "
 "%L"
 msgstr ""
 
-#: fortran/openmp.c:4508
+#: fortran/openmp.c:4563
 #, gcc-internal-format, gfc-internal-format
 msgid "%s iteration variable present on clause other than LASTPRIVATE at %L"
 msgstr ""
 
-#: fortran/openmp.c:4512
+#: fortran/openmp.c:4567
 #, gcc-internal-format, gfc-internal-format
 msgid "%s iteration variable present on clause other than LINEAR at %L"
 msgstr ""
 
-#: fortran/openmp.c:4530
+#: fortran/openmp.c:4585
 #, gcc-internal-format, gfc-internal-format
 msgid "%s collapsed loops don't form rectangular iteration space at %L"
 msgstr ""
 
-#: fortran/openmp.c:4544
+#: fortran/openmp.c:4599
 #, gcc-internal-format, gfc-internal-format
 msgid "collapsed %s loops not perfectly nested at %L"
 msgstr ""
 
-#: fortran/openmp.c:4553 fortran/openmp.c:4561
+#: fortran/openmp.c:4608 fortran/openmp.c:4616
 #, gcc-internal-format, gfc-internal-format
 msgid "not enough DO loops for collapsed %s at %L"
 msgstr ""
 
-#: fortran/openmp.c:4645 fortran/openmp.c:4658
+#: fortran/openmp.c:4700 fortran/openmp.c:4713
 #, gcc-internal-format, gfc-internal-format
 msgid "The %s directive cannot be specified within a %s region at %L"
 msgstr ""
 
-#: fortran/openmp.c:4677
+#: fortran/openmp.c:4732
 #, gcc-internal-format, gfc-internal-format
 msgid "!$ACC LOOP cannot be a DO WHILE or DO without loop control at %L"
 msgstr ""
 
-#: fortran/openmp.c:4683
+#: fortran/openmp.c:4738
 #, gcc-internal-format, gfc-internal-format
 msgid "!$ACC LOOP iteration variable must be of type integer at %L"
 msgstr ""
 
-#: fortran/openmp.c:4699
+#: fortran/openmp.c:4754
 #, gcc-internal-format, gfc-internal-format
 msgid "!$ACC LOOP %s loops don't form rectangular iteration space at %L"
 msgstr ""
 
-#: fortran/openmp.c:4713
+#: fortran/openmp.c:4768
 #, gcc-internal-format, gfc-internal-format
 msgid "%s !$ACC LOOP loops not perfectly nested at %L"
 msgstr ""
 
-#: fortran/openmp.c:4723 fortran/openmp.c:4732
+#: fortran/openmp.c:4778 fortran/openmp.c:4787
 #, gcc-internal-format, gfc-internal-format
 msgid "not enough DO loops for %s !$ACC LOOP at %L"
 msgstr ""
 
-#: fortran/openmp.c:4747 fortran/openmp.c:4754
+#: fortran/openmp.c:4802 fortran/openmp.c:4809
 #, gcc-internal-format, gfc-internal-format
 msgid "!$ACC LOOP %s in PARALLEL region doesn't allow %s arguments at %L"
 msgstr ""
 
-#: fortran/openmp.c:4776
+#: fortran/openmp.c:4831
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Loop parallelized across gangs is not allowed inside another loop "
 "parallelized across gangs at %L"
 msgstr ""
 
-#: fortran/openmp.c:4780 fortran/openmp.c:4784
+#: fortran/openmp.c:4835 fortran/openmp.c:4839
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Loop parallelized across gangs is not allowed inside loop parallelized "
 "across workers at %L"
 msgstr ""
 
-#: fortran/openmp.c:4791
+#: fortran/openmp.c:4846
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Loop parallelized across workers is not allowed inside another loop "
 "parallelized across workers at %L"
 msgstr ""
 
-#: fortran/openmp.c:4795
+#: fortran/openmp.c:4850
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Loop parallelized across workers is not allowed inside another loop "
 "parallelized across vectors at %L"
 msgstr ""
 
-#: fortran/openmp.c:4801
+#: fortran/openmp.c:4856
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Loop parallelized across vectors is not allowed inside another loop "
 "parallelized across vectors at %L"
 msgstr ""
 
-#: fortran/openmp.c:4813
+#: fortran/openmp.c:4868
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause SEQ conflicts with INDEPENDENT at %L"
 msgstr ""
 
-#: fortran/openmp.c:4815
+#: fortran/openmp.c:4870
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause SEQ conflicts with GANG at %L"
 msgstr ""
 
-#: fortran/openmp.c:4817
+#: fortran/openmp.c:4872
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause SEQ conflicts with WORKER at %L"
 msgstr ""
 
-#: fortran/openmp.c:4819
+#: fortran/openmp.c:4874
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause SEQ conflicts with VECTOR at %L"
 msgstr ""
 
-#: fortran/openmp.c:4821
+#: fortran/openmp.c:4876
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause SEQ conflicts with AUTO at %L"
 msgstr ""
 
-#: fortran/openmp.c:4826
+#: fortran/openmp.c:4881
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause AUTO conflicts with GANG at %L"
 msgstr ""
 
-#: fortran/openmp.c:4828
+#: fortran/openmp.c:4883
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause AUTO conflicts with WORKER at %L"
 msgstr ""
 
-#: fortran/openmp.c:4830
+#: fortran/openmp.c:4885
 #, gcc-internal-format, gfc-internal-format
 msgid "Clause AUTO conflicts with VECTOR at %L"
 msgstr ""
 
-#: fortran/openmp.c:4834
+#: fortran/openmp.c:4889
 #, 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.c:4869
+#: fortran/openmp.c:4924
 #, gcc-internal-format, gfc-internal-format
 msgid "TILE requires constant expression at %L"
 msgstr ""
 
-#: fortran/openmp.c:4934
+#: fortran/openmp.c:4989
 #, gcc-internal-format
 msgid "PARAMETER object %qs is not allowed at %L"
 msgstr ""
 
-#: fortran/openmp.c:4941
+#: fortran/openmp.c:4996
 #, gcc-internal-format
 msgid "Array sections: %qs not allowed in $!ACC DECLARE at %L"
 msgstr ""
 
-#: fortran/openmp.c:5060
+#: fortran/openmp.c:5115
 #, gcc-internal-format, gfc-internal-format
 msgid "OMP TARGET UPDATE at %L requires at least one TO or FROM clause"
 msgstr ""
 
-#: fortran/openmp.c:5081
+#: fortran/openmp.c:5136
 #, gcc-internal-format
 msgid "!$OMP DECLARE SIMD should refer to containing procedure %qs at %L"
 msgstr ""
 
-#: fortran/openmp.c:5105
+#: fortran/openmp.c:5160
 #, 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.c:5113
+#: fortran/openmp.c:5168
 #, 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.c:5142
+#: fortran/openmp.c:5197
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid operator for !$OMP DECLARE REDUCTION %s at %L"
 msgstr ""
 
-#: fortran/openmp.c:5164
+#: fortran/openmp.c:5219
 #, gcc-internal-format, gfc-internal-format
 msgid "CHARACTER length in !$OMP DECLARE REDUCTION %s not constant at %L"
 msgstr ""
 
-#: fortran/openmp.c:5180
+#: fortran/openmp.c:5235
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Subroutine call with alternate returns in combiner of !$OMP DECLARE "
 "REDUCTION at %L"
 msgstr ""
 
-#: fortran/openmp.c:5195
+#: fortran/openmp.c:5250
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Subroutine call with alternate returns in INITIALIZER clause of !$OMP "
 "DECLARE REDUCTION at %L"
 msgstr ""
 
-#: fortran/openmp.c:5205
+#: fortran/openmp.c:5260
 #, 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.c:5213
+#: fortran/openmp.c:5268
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Missing INITIALIZER clause for !$OMP DECLARE REDUCTION of derived type "
 "without default initializer at %L"
 msgstr ""
 
-#: fortran/options.c:202
+#: fortran/options.c:213
 #, gcc-internal-format
 msgid "-fexcess-precision=standard for Fortran"
 msgstr ""
 
-#: fortran/options.c:289
+#: fortran/options.c:300
 #, gcc-internal-format
 msgid "Reading file %qs as free form"
 msgstr ""
 
-#: fortran/options.c:299
+#: fortran/options.c:310
 #, gcc-internal-format
 msgid "%<-fd-lines-as-comments%> has no effect in free form"
 msgstr ""
 
-#: fortran/options.c:302
+#: fortran/options.c:313
 #, gcc-internal-format
 msgid "%<-fd-lines-as-code%> has no effect in free form"
 msgstr ""
 
-#: fortran/options.c:333
+#: fortran/options.c:344
 #, gcc-internal-format
 msgid "Flag %<-fno-automatic%> overwrites %<-fmax-stack-var-size=%d%>"
 msgstr ""
 
-#: fortran/options.c:336
+#: fortran/options.c:347
 #, gcc-internal-format
 msgid "Flag %<-fno-automatic%> overwrites %<-frecursive%>"
 msgstr ""
 
-#: fortran/options.c:338
+#: fortran/options.c:349
 #, gcc-internal-format
 msgid ""
 "Flag %<-fno-automatic%> overwrites %<-frecursive%> implied by %<-fopenmp%>"
 msgstr ""
 
-#: fortran/options.c:341
+#: fortran/options.c:352
 #, gcc-internal-format
 msgid "Flag %<-frecursive%> overwrites %<-fmax-stack-var-size=%d%>"
 msgstr ""
 
-#: fortran/options.c:344
+#: fortran/options.c:355
 #, gcc-internal-format
 msgid ""
 "Flag %<-fmax-stack-var-size=%d%> overwrites %<-frecursive%> implied by %<-"
 "fopenmp%>"
 msgstr ""
 
-#: fortran/options.c:381
+#: fortran/options.c:392
 #, gcc-internal-format
 msgid "Fixed line length must be at least seven"
 msgstr ""
 
-#: fortran/options.c:384
+#: fortran/options.c:395
 #, gcc-internal-format
 msgid "Free line length must be at least three"
 msgstr ""
 
-#: fortran/options.c:387
+#: fortran/options.c:398
 #, gcc-internal-format, gfc-internal-format
 msgid "Maximum subrecord length cannot exceed %d"
 msgstr ""
 
-#: fortran/options.c:406
+#: fortran/options.c:417
 #, gcc-internal-format
 msgid "gfortran: Only one %<-J%> option allowed"
 msgstr ""
 
-#: fortran/options.c:478
+#: fortran/options.c:489
 #, gcc-internal-format
 msgid "Argument to %<-ffpe-trap%> is not valid: %s"
 msgstr ""
 
-#: fortran/options.c:480
+#: fortran/options.c:491
 #, gcc-internal-format
 msgid "Argument to %<-ffpe-summary%> is not valid: %s"
 msgstr ""
 
-#: fortran/options.c:529
+#: fortran/options.c:540
 #, gcc-internal-format
 msgid "Argument to %<-fcheck%> is not valid: %s"
 msgstr ""
 
-#: fortran/options.c:578
+#: fortran/options.c:589
 #, gcc-internal-format
 msgid "%<-static-libgfortran%> is not supported in this configuration"
 msgstr ""
 
-#: fortran/options.c:601
+#: fortran/options.c:612
 #, gcc-internal-format, gfc-internal-format
 msgid "Maximum supported identifier length is %d"
 msgstr ""
 
-#: fortran/options.c:621
+#: fortran/options.c:632
 #, gcc-internal-format
 msgid "Unrecognized option to %<-finit-logical%>: %s"
 msgstr ""
 
-#: fortran/options.c:637
+#: fortran/options.c:648
 #, gcc-internal-format
 msgid "The value of n in %<-finit-character=n%> must be between 0 and 127"
 msgstr ""
 
-#: fortran/parse.c:579
+#: fortran/parse.c:583
 #, gcc-internal-format, gfc-internal-format
 msgid "Unclassifiable statement at %C"
 msgstr ""
 
-#: fortran/parse.c:623
+#: fortran/parse.c:619
 #, gcc-internal-format, gfc-internal-format
 msgid "OpenACC directives at %C may not appear in PURE procedures"
 msgstr ""
 
-#: fortran/parse.c:692
+#: fortran/parse.c:695
 #, gcc-internal-format, gfc-internal-format
 msgid "Unclassifiable OpenACC directive at %C"
 msgstr ""
 
-#: fortran/parse.c:715
+#: fortran/parse.c:776
 #, gcc-internal-format, gfc-internal-format
 msgid "OpenMP directives at %C may not appear in PURE or ELEMENTAL procedures"
 msgstr ""
 
-#: fortran/parse.c:890
+#: fortran/parse.c:955
 #, gcc-internal-format, gfc-internal-format
 msgid "Unclassifiable OpenMP directive at %C"
 msgstr ""
 
-#: fortran/parse.c:917
+#: fortran/parse.c:989
 #, gcc-internal-format, gfc-internal-format
 msgid "Unclassifiable GCC directive at %C"
 msgstr ""
 
-#: fortran/parse.c:976 fortran/parse.c:1208
+#: fortran/parse.c:1048 fortran/parse.c:1280
 #, gcc-internal-format, gfc-internal-format
 msgid "Zero is not a valid statement label at %C"
 msgstr ""
 
-#: fortran/parse.c:983 fortran/parse.c:1200
+#: fortran/parse.c:1055 fortran/parse.c:1272
 #, gcc-internal-format, gfc-internal-format
 msgid "Non-numeric character in statement label at %C"
 msgstr ""
 
-#: fortran/parse.c:995 fortran/parse.c:1249
+#: fortran/parse.c:1067 fortran/parse.c:1321
 #, gcc-internal-format, gfc-internal-format
 msgid "Semicolon at %C needs to be preceded by statement"
 msgstr ""
 
-#: fortran/parse.c:1003 fortran/parse.c:1264
+#: fortran/parse.c:1075 fortran/parse.c:1336
 #, gcc-internal-format, gfc-internal-format
 msgid "Ignoring statement label in empty statement at %L"
 msgstr ""
 
-#: fortran/parse.c:1070 fortran/parse.c:1251
+#: fortran/parse.c:1142 fortran/parse.c:1323
 #, gcc-internal-format, gfc-internal-format
 msgid "Fortran 2008: Semicolon at %C without preceding statement"
 msgstr ""
 
-#: fortran/parse.c:1093 fortran/parse.c:1227
+#: fortran/parse.c:1165 fortran/parse.c:1299
 #, gcc-internal-format, gfc-internal-format
 msgid "Bad continuation line at %C"
 msgstr ""
 
-#: fortran/parse.c:1514
+#: fortran/parse.c:1593
 #, gcc-internal-format, gfc-internal-format
 msgid "FORMAT statement at %L does not have a statement label"
 msgstr ""
 
-#: fortran/parse.c:2194
+#: fortran/parse.c:2291
 #, gcc-internal-format
 msgid "gfc_ascii_statement(): Bad statement code"
 msgstr ""
 
-#: fortran/parse.c:2339
+#: fortran/parse.c:2436
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement at %C"
 msgstr ""
 
-#: fortran/parse.c:2485
+#: fortran/parse.c:2591
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C cannot follow %s statement at %L"
 msgstr ""
 
-#: fortran/parse.c:2502
+#: fortran/parse.c:2608
 #, gcc-internal-format
 msgid "Unexpected end of file in %qs"
 msgstr ""
 
-#: fortran/parse.c:2534
+#: fortran/parse.c:2640
 #, gcc-internal-format
 msgid "Derived-type %qs with SEQUENCE must not have a CONTAINS section at %C"
 msgstr ""
 
-#: fortran/parse.c:2537
+#: fortran/parse.c:2643
 #, gcc-internal-format
 msgid "Derived-type %qs with BIND(C) must not have a CONTAINS section at %C"
 msgstr ""
 
-#: fortran/parse.c:2557
+#: fortran/parse.c:2663
 #, gcc-internal-format, gfc-internal-format
 msgid "Components in TYPE at %C must precede CONTAINS"
 msgstr ""
 
-#: fortran/parse.c:2561
+#: fortran/parse.c:2667
 #, gcc-internal-format, gfc-internal-format
 msgid "Type-bound procedure at %C"
 msgstr ""
 
-#: fortran/parse.c:2569
+#: fortran/parse.c:2675
 #, gcc-internal-format, gfc-internal-format
 msgid "GENERIC binding at %C"
 msgstr ""
 
-#: fortran/parse.c:2577
+#: fortran/parse.c:2683
 #, gcc-internal-format, gfc-internal-format
 msgid "FINAL procedure declaration at %C"
 msgstr ""
 
-#: fortran/parse.c:2589
+#: fortran/parse.c:2695
 #, gcc-internal-format, gfc-internal-format
 msgid "Derived type definition at %C with empty CONTAINS section"
 msgstr ""
 
-#: fortran/parse.c:2599 fortran/parse.c:2702
+#: fortran/parse.c:2705 fortran/parse.c:3160
 #, gcc-internal-format, gfc-internal-format
 msgid "PRIVATE statement in TYPE at %C must be inside a MODULE"
 msgstr ""
 
-#: fortran/parse.c:2606
+#: fortran/parse.c:2712
 #, gcc-internal-format, gfc-internal-format
 msgid "PRIVATE statement at %C must precede procedure bindings"
 msgstr ""
 
-#: fortran/parse.c:2613 fortran/parse.c:2715
+#: fortran/parse.c:2719 fortran/parse.c:3173
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate PRIVATE statement at %C"
 msgstr ""
 
-#: fortran/parse.c:2623
+#: fortran/parse.c:2729
 #, gcc-internal-format, gfc-internal-format
 msgid "SEQUENCE statement at %C must precede CONTAINS"
 msgstr ""
 
-#: fortran/parse.c:2627
+#: fortran/parse.c:2733
 #, gcc-internal-format, gfc-internal-format
 msgid "Already inside a CONTAINS block at %C"
 msgstr ""
 
-#: fortran/parse.c:2685
-#, gcc-internal-format, gfc-internal-format
-msgid "FINAL declaration at %C must be inside CONTAINS"
-msgstr ""
-
-#: fortran/parse.c:2693
-#, gcc-internal-format, gfc-internal-format
-msgid "Derived type definition at %C without components"
-msgstr ""
-
-#: fortran/parse.c:2709
-#, gcc-internal-format, gfc-internal-format
-msgid "PRIVATE statement at %C must precede structure components"
-msgstr ""
-
-#: fortran/parse.c:2726
-#, gcc-internal-format, gfc-internal-format
-msgid "SEQUENCE statement at %C must precede structure components"
-msgstr ""
-
-#: fortran/parse.c:2732
-#, gcc-internal-format, gfc-internal-format
-msgid "SEQUENCE attribute at %C already specified in TYPE statement"
-msgstr ""
-
-#: fortran/parse.c:2737
-#, gcc-internal-format, gfc-internal-format
-msgid "Duplicate SEQUENCE statement at %C"
-msgstr ""
-
-#: fortran/parse.c:2747
-#, gcc-internal-format, gfc-internal-format
-msgid "CONTAINS block in derived type definition at %C"
-msgstr ""
-
 #: fortran/parse.c:2852
 #, gcc-internal-format, gfc-internal-format
 msgid ""
@@ -54679,229 +54853,279 @@ msgstr ""
 
 #: fortran/parse.c:2968
 #, gcc-internal-format, gfc-internal-format
+msgid "failed to create map component '%s'"
+msgstr ""
+
+#: fortran/parse.c:3001
+#, gcc-internal-format, gfc-internal-format
+msgid "failed to create union component '%s'"
+msgstr ""
+
+#: fortran/parse.c:3056
+#, gcc-internal-format, gfc-internal-format
+msgid "Syntax error in nested structure declaration at %C"
+msgstr ""
+
+#: fortran/parse.c:3143
+#, gcc-internal-format, gfc-internal-format
+msgid "FINAL declaration at %C must be inside CONTAINS"
+msgstr ""
+
+#: fortran/parse.c:3151
+#, gcc-internal-format, gfc-internal-format
+msgid "Derived type definition at %C without components"
+msgstr ""
+
+#: fortran/parse.c:3167
+#, gcc-internal-format, gfc-internal-format
+msgid "PRIVATE statement at %C must precede structure components"
+msgstr ""
+
+#: fortran/parse.c:3184
+#, gcc-internal-format, gfc-internal-format
+msgid "SEQUENCE statement at %C must precede structure components"
+msgstr ""
+
+#: fortran/parse.c:3190
+#, gcc-internal-format, gfc-internal-format
+msgid "SEQUENCE attribute at %C already specified in TYPE statement"
+msgstr ""
+
+#: fortran/parse.c:3195
+#, gcc-internal-format, gfc-internal-format
+msgid "Duplicate SEQUENCE statement at %C"
+msgstr ""
+
+#: fortran/parse.c:3205
+#, gcc-internal-format, gfc-internal-format
+msgid "CONTAINS block in derived type definition at %C"
+msgstr ""
+
+#: fortran/parse.c:3263
+#, gcc-internal-format, gfc-internal-format
 msgid "ENUM declaration at %C has no ENUMERATORS"
 msgstr ""
 
-#: fortran/parse.c:3055
+#: fortran/parse.c:3350
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement in INTERFACE block at %C"
 msgstr ""
 
-#: fortran/parse.c:3079
+#: fortran/parse.c:3374
 #, gcc-internal-format
 msgid ""
 "Name %qs of ABSTRACT INTERFACE at %C cannot be the same as an intrinsic type"
 msgstr ""
 
-#: fortran/parse.c:3113
+#: fortran/parse.c:3408
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement at %C in INTERFACE body"
 msgstr ""
 
-#: fortran/parse.c:3131
+#: fortran/parse.c:3426
 #, gcc-internal-format
 msgid ""
 "INTERFACE procedure %qs at %L has the same name as the enclosing procedure"
 msgstr ""
 
-#: fortran/parse.c:3261
+#: fortran/parse.c:3556
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement is not allowed inside of BLOCK at %C"
 msgstr ""
 
-#: fortran/parse.c:3291
+#: fortran/parse.c:3586
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement is not allowed inside of BLOCK DATA at %C"
 msgstr ""
 
-#: fortran/parse.c:3375
+#: fortran/parse.c:3676
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement must appear in a MODULE"
 msgstr ""
 
-#: fortran/parse.c:3383
+#: fortran/parse.c:3684
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C follows another accessibility specification"
 msgstr ""
 
-#: fortran/parse.c:3435
+#: fortran/parse.c:3736
 #, gcc-internal-format
 msgid "Bad kind expression for function %qs at %L"
 msgstr ""
 
-#: fortran/parse.c:3439
+#: fortran/parse.c:3740
 #, gcc-internal-format
 msgid "The type for function %qs at %L is not accessible"
 msgstr ""
 
-#: fortran/parse.c:3499
+#: fortran/parse.c:3800
 #, gcc-internal-format, gfc-internal-format
 msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE"
 msgstr ""
 
-#: fortran/parse.c:3521
+#: fortran/parse.c:3822
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement in WHERE block at %C"
 msgstr ""
 
-#: fortran/parse.c:3580
+#: fortran/parse.c:3881
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement in FORALL block at %C"
 msgstr ""
 
-#: fortran/parse.c:3631
+#: fortran/parse.c:3932
 #, gcc-internal-format, gfc-internal-format
 msgid "ELSE IF statement at %C cannot follow ELSE statement at %L"
 msgstr ""
 
-#: fortran/parse.c:3649
+#: fortran/parse.c:3950
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate ELSE statements at %L and %C"
 msgstr ""
 
-#: fortran/parse.c:3710
+#: fortran/parse.c:4011
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C"
 msgstr ""
 
-#: fortran/parse.c:3793
+#: fortran/parse.c:4094
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at "
 "%C"
 msgstr ""
 
-#: fortran/parse.c:3855
+#: fortran/parse.c:4156
 #, gcc-internal-format
 msgid "Variable %qs at %C cannot be redefined inside loop beginning at %L"
 msgstr ""
 
-#: fortran/parse.c:3888
+#: fortran/parse.c:4189
 #, gcc-internal-format, gfc-internal-format
 msgid "End of nonblock DO statement at %C is within another block"
 msgstr ""
 
-#: fortran/parse.c:3898
+#: fortran/parse.c:4199
 #, gcc-internal-format, gfc-internal-format
 msgid "End of nonblock DO statement at %C is interwoven with another DO loop"
 msgstr ""
 
-#: fortran/parse.c:3924
+#: fortran/parse.c:4225
 #, gcc-internal-format, gfc-internal-format
 msgid "CRITICAL block inside of OpenACC region at %C"
 msgstr ""
 
-#: fortran/parse.c:3951
+#: fortran/parse.c:4252
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement label in END CRITICAL at %C does not match CRITICAL label"
 msgstr ""
 
-#: fortran/parse.c:4020
+#: fortran/parse.c:4321
 #, gcc-internal-format, gfc-internal-format
 msgid "BLOCK construct at %C"
 msgstr ""
 
-#: fortran/parse.c:4054
+#: fortran/parse.c:4355
 #, gcc-internal-format, gfc-internal-format
 msgid "ASSOCIATE construct at %C"
 msgstr ""
 
-#: fortran/parse.c:4235
+#: fortran/parse.c:4536
 #, gcc-internal-format, gfc-internal-format
 msgid "Statement label in ENDDO at %C doesn't match DO label"
 msgstr ""
 
-#: fortran/parse.c:4251
+#: fortran/parse.c:4552
 #, gcc-internal-format, gfc-internal-format
 msgid "Named block DO at %L requires matching ENDDO name"
 msgstr ""
 
-#: fortran/parse.c:4432
+#: fortran/parse.c:4733
 #, gcc-internal-format, gfc-internal-format
 msgid "Missing !$OMP END ATOMIC after !$OMP ATOMIC CAPTURE at %C"
 msgstr ""
 
-#: fortran/parse.c:4448 fortran/parse.c:4507
+#: fortran/parse.c:4749 fortran/parse.c:4808
 #, gcc-internal-format, gfc-internal-format
 msgid "OpenACC directive inside of CRITICAL block at %C"
 msgstr ""
 
-#: fortran/parse.c:4482
+#: fortran/parse.c:4783
 #, gcc-internal-format, gfc-internal-format
 msgid "Expecting %s at %C"
 msgstr ""
 
-#: fortran/parse.c:4526
+#: fortran/parse.c:4827
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected DO loop at %C"
 msgstr ""
 
-#: fortran/parse.c:4546
+#: fortran/parse.c:4847
 #, gcc-internal-format, gfc-internal-format
 msgid "Redundant !$ACC END LOOP at %C"
 msgstr ""
 
-#: fortran/parse.c:4759
+#: fortran/parse.c:5060
 #, gcc-internal-format, gfc-internal-format
 msgid "Name after !$omp critical and !$omp end critical does not match at %C"
 msgstr ""
 
-#: fortran/parse.c:4816
+#: fortran/parse.c:5117
 #, gcc-internal-format, gfc-internal-format
 msgid "%s statement at %C cannot terminate a non-block DO loop"
 msgstr ""
 
-#: fortran/parse.c:4830
+#: fortran/parse.c:5131
 #, gcc-internal-format, gfc-internal-format
 msgid "DATA statement at %C after the first executable statement"
 msgstr ""
 
-#: fortran/parse.c:5061
+#: fortran/parse.c:5362
 #, gcc-internal-format
 msgid "Contained procedure %qs at %C is already ambiguous"
 msgstr ""
 
-#: fortran/parse.c:5118
+#: fortran/parse.c:5419
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement in CONTAINS section at %C"
 msgstr ""
 
-#: fortran/parse.c:5143
+#: fortran/parse.c:5444
 #, gcc-internal-format, gfc-internal-format
 msgid "CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
 msgstr ""
 
-#: fortran/parse.c:5255
+#: fortran/parse.c:5556
 #, gcc-internal-format, gfc-internal-format
 msgid "CONTAINS statement at %C is already in a contained program unit"
 msgstr ""
 
-#: fortran/parse.c:5301
+#: fortran/parse.c:5602
 #, gcc-internal-format
 msgid "gfc_global_used(): Bad type"
 msgstr ""
 
-#: fortran/parse.c:5306
+#: fortran/parse.c:5607
 #, gcc-internal-format
 msgid "Global binding name %qs at %L is already being used as a %s at %L"
 msgstr ""
 
-#: fortran/parse.c:5309
+#: fortran/parse.c:5610
 #, gcc-internal-format
 msgid "Global name %qs at %L is already being used as a %s at %L"
 msgstr ""
 
-#: fortran/parse.c:5330
+#: fortran/parse.c:5631
 #, gcc-internal-format, gfc-internal-format
 msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L"
 msgstr ""
 
-#: fortran/parse.c:5356
+#: fortran/parse.c:5657
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement in BLOCK DATA at %C"
 msgstr ""
 
-#: fortran/parse.c:5441
+#: fortran/parse.c:5742
 #, gcc-internal-format, gfc-internal-format
 msgid "Unexpected %s statement in MODULE at %C"
 msgstr ""
@@ -54909,7 +55133,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.c:5828
+#: fortran/parse.c:6129
 #, gcc-internal-format, gfc-internal-format
 msgid "Two main PROGRAMs at %L and %C"
 msgstr ""
@@ -55141,156 +55365,161 @@ msgstr ""
 msgid "extend_ref(): Bad tail"
 msgstr ""
 
-#: fortran/primary.c:1902
+#: fortran/primary.c:1903
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Array section designator, e.g. '(:)', is required besides the coarray "
 "designator '[...]' at %C"
 msgstr ""
 
-#: fortran/primary.c:1910
+#: fortran/primary.c:1911
 #, gcc-internal-format
 msgid "Coarray designator at %C but %qs is not a coarray"
 msgstr ""
 
-#: fortran/primary.c:1981
+#: fortran/primary.c:1988
 #, gcc-internal-format
 msgid "Symbol %qs at %C has no IMPLICIT type"
 msgstr ""
 
-#: fortran/primary.c:1987
+#: fortran/primary.c:1994
 #, gcc-internal-format
-msgid "Unexpected %<%%%> for nonderived-type variable %qs at %C"
+msgid "Unexpected %<%c%> for nonderived-type variable %qs at %C"
 msgstr ""
 
-#: fortran/primary.c:2005
+#: fortran/primary.c:2012
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected structure component name at %C"
 msgstr ""
 
-#: fortran/primary.c:2056
+#: fortran/primary.c:2063
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected argument list at %C"
 msgstr ""
 
-#: fortran/primary.c:2087
+#: fortran/primary.c:2103
 #, gcc-internal-format
 msgid "Procedure pointer component %qs requires an argument list at %C"
 msgstr ""
 
-#: fortran/primary.c:2175
+#: fortran/primary.c:2191
 #, gcc-internal-format, gfc-internal-format
 msgid "Coindexed procedure-pointer component at %C"
 msgstr ""
 
-#: fortran/primary.c:2210
+#: fortran/primary.c:2226
 #, gcc-internal-format
 msgid "gfc_variable_attr(): Expression isn't a variable"
 msgstr ""
 
-#: fortran/primary.c:2265
+#: fortran/primary.c:2281
 #, gcc-internal-format
 msgid "gfc_variable_attr(): Bad array reference"
 msgstr ""
 
-#: fortran/primary.c:2435
+#: fortran/primary.c:2451
 #, gcc-internal-format, gfc-internal-format
 msgid "Structure constructor with missing optional arguments at %C"
 msgstr ""
 
-#: fortran/primary.c:2444
+#: fortran/primary.c:2460
 #, gcc-internal-format
 msgid ""
 "No initializer for allocatable component '%qs' given in the structure "
 "constructor at %C"
 msgstr ""
 
-#: fortran/primary.c:2451
+#: fortran/primary.c:2467
 #, gcc-internal-format
 msgid ""
 "No initializer for component %qs given in the structure constructor at %C!"
 msgstr ""
 
-#: fortran/primary.c:2499
+#: fortran/primary.c:2515
 #, gcc-internal-format
 msgid "Can't construct ABSTRACT type %qs at %L"
 msgstr ""
 
-#: fortran/primary.c:2519
+#: fortran/primary.c:2535
 #, gcc-internal-format, gfc-internal-format
 msgid "Structure constructor with named arguments at %C"
 msgstr ""
 
-#: fortran/primary.c:2534
+#: fortran/primary.c:2550
 #, gcc-internal-format, gfc-internal-format
 msgid "Component initializer without name after component named %s at %L!"
 msgstr ""
 
-#: fortran/primary.c:2539
+#: fortran/primary.c:2555
 #, gcc-internal-format, gfc-internal-format
 msgid "Too many components in structure constructor at %L!"
 msgstr ""
 
-#: fortran/primary.c:2576
+#: fortran/primary.c:2592
 #, gcc-internal-format
 msgid "Component %qs is initialized twice in the structure constructor at %L!"
 msgstr ""
 
-#: fortran/primary.c:2588
+#: fortran/primary.c:2604
 #, gcc-internal-format
 msgid ""
 "Coindexed expression to pointer component %qs in structure constructor at %L!"
 msgstr ""
 
-#: fortran/primary.c:2642
+#: fortran/primary.c:2658
 #, gcc-internal-format
 msgid ""
 "component %qs at %L has already been set by a parent derived type constructor"
 msgstr ""
 
-#: fortran/primary.c:2831
+#: fortran/primary.c:2861
 #, gcc-internal-format
 msgid ""
 "%qs at %C is the name of a recursive function and so refers to the result "
 "variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)"
 msgstr ""
 
-#: fortran/primary.c:2954
+#: fortran/primary.c:2985
 #, gcc-internal-format
 msgid "Unexpected use of subroutine name %qs at %C"
 msgstr ""
 
-#: fortran/primary.c:2986
+#: fortran/primary.c:3017
 #, gcc-internal-format
 msgid "Statement function %qs requires argument list at %C"
 msgstr ""
 
-#: fortran/primary.c:2989
+#: fortran/primary.c:3020
 #, gcc-internal-format
 msgid "Function %qs requires an argument list at %C"
 msgstr ""
 
-#: fortran/primary.c:3039
+#: fortran/primary.c:3070
 #, gcc-internal-format
 msgid "Missing argument to %qs at %C"
 msgstr ""
 
-#: fortran/primary.c:3195
+#: fortran/primary.c:3228
 #, gcc-internal-format
 msgid "Missing argument list in function %qs at %C"
 msgstr ""
 
-#: fortran/primary.c:3233
+#: fortran/primary.c:3272
 #, gcc-internal-format, gfc-internal-format
 msgid "Symbol at %C is not appropriate for an expression"
 msgstr ""
 
-#: fortran/primary.c:3333
+#: fortran/primary.c:3342
+#, gcc-internal-format, gfc-internal-format
+msgid "Derived type '%s' cannot be used as a variable at %C"
+msgstr ""
+
+#: fortran/primary.c:3383
 #, gcc-internal-format, gfc-internal-format
 msgid "Named constant at %C in an EQUIVALENCE"
 msgstr ""
 
-#: fortran/primary.c:3367
+#: fortran/primary.c:3417
 #, gcc-internal-format
 msgid "%qs at %C is not a variable"
 msgstr ""
@@ -55582,86 +55811,86 @@ msgstr ""
 msgid "COMMON block %qs at %L that is also a global procedure"
 msgstr ""
 
-#: fortran/resolve.c:1168
+#: fortran/resolve.c:1174
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "The rank of the element in the structure constructor at %L does not match "
 "that of the component (%d/%d)"
 msgstr ""
 
-#: fortran/resolve.c:1189
+#: fortran/resolve.c:1195
 #, gcc-internal-format
 msgid ""
 "The element in the structure constructor at %L, for pointer component %qs, "
 "is %s but should be %s"
 msgstr ""
 
-#: fortran/resolve.c:1274
+#: fortran/resolve.c:1280
 #, gcc-internal-format
 msgid ""
 "The NULL in the structure constructor at %L is being applied to component "
 "%qs, which is neither a POINTER nor ALLOCATABLE"
 msgstr ""
 
-#: fortran/resolve.c:1308
+#: fortran/resolve.c:1314
 #, gcc-internal-format
 msgid ""
 "Interface mismatch for procedure-pointer component %qs in structure "
 "constructor at %L: %s"
 msgstr ""
 
-#: fortran/resolve.c:1324
+#: fortran/resolve.c:1330
 #, gcc-internal-format
 msgid ""
 "The element in the structure constructor at %L, for pointer component %qs "
 "should be a POINTER or a TARGET"
 msgstr ""
 
-#: fortran/resolve.c:1335
+#: fortran/resolve.c:1341
 #, gcc-internal-format, gfc-internal-format
 msgid "Pointer initialization target at %L must not be ALLOCATABLE "
 msgstr ""
 
-#: fortran/resolve.c:1353
+#: fortran/resolve.c:1359
 #, gcc-internal-format
 msgid ""
 "Invalid expression in the structure constructor for pointer component %qs at "
 "%L in PURE procedure"
 msgstr ""
 
-#: fortran/resolve.c:1477
+#: fortran/resolve.c:1483
 #, gcc-internal-format
 msgid ""
 "The upper bound in the last dimension must appear in the reference to the "
 "assumed size array %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:1539
+#: fortran/resolve.c:1545
 #, gcc-internal-format
 msgid "%qs at %L is ambiguous"
 msgstr ""
 
-#: fortran/resolve.c:1543
+#: fortran/resolve.c:1549
 #, gcc-internal-format
 msgid "GENERIC procedure %qs is not allowed as an actual argument at %L"
 msgstr ""
 
-#: fortran/resolve.c:1664
+#: fortran/resolve.c:1670
 #, gcc-internal-format
 msgid "Type specified for intrinsic function %qs at %L is ignored"
 msgstr ""
 
-#: fortran/resolve.c:1677
+#: fortran/resolve.c:1683
 #, gcc-internal-format
 msgid "Intrinsic subroutine %qs at %L shall not have a type specifier"
 msgstr ""
 
-#: fortran/resolve.c:1688
+#: fortran/resolve.c:1694
 #, gcc-internal-format
 msgid "%qs declared INTRINSIC at %L does not exist"
 msgstr ""
 
-#: fortran/resolve.c:1701
+#: fortran/resolve.c:1707
 #, gcc-internal-format
 msgid ""
 "The intrinsic %qs declared INTRINSIC at %L is not available in the current "
@@ -55669,84 +55898,84 @@ msgid ""
 "fall-intrinsics%> in order to use it."
 msgstr ""
 
-#: fortran/resolve.c:1737
+#: fortran/resolve.c:1743
 #, gcc-internal-format
 msgid ""
 "Non-RECURSIVE procedure %qs at %L is possibly calling itself recursively.  "
 "Declare it RECURSIVE or use %<-frecursive%>"
 msgstr ""
 
-#: fortran/resolve.c:1776 fortran/resolve.c:8932 fortran/resolve.c:10557
+#: fortran/resolve.c:1782 fortran/resolve.c:8938 fortran/resolve.c:10563
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d referenced at %L is never defined"
 msgstr ""
 
-#: fortran/resolve.c:1819
+#: fortran/resolve.c:1825
 #, gcc-internal-format
 msgid "Statement function %qs at %L is not allowed as an actual argument"
 msgstr ""
 
-#: fortran/resolve.c:1827
+#: fortran/resolve.c:1833
 #, gcc-internal-format
 msgid "Intrinsic %qs at %L is not allowed as an actual argument"
 msgstr ""
 
-#: fortran/resolve.c:1834
+#: fortran/resolve.c:1840
 #, gcc-internal-format
 msgid "Internal procedure %qs is used as actual argument at %L"
 msgstr ""
 
-#: fortran/resolve.c:1842
+#: fortran/resolve.c:1848
 #, gcc-internal-format
 msgid ""
 "ELEMENTAL non-INTRINSIC procedure %qs is not allowed as an actual argument "
 "at %L"
 msgstr ""
 
-#: fortran/resolve.c:1869
+#: fortran/resolve.c:1875
 #, gcc-internal-format
 msgid ""
 "Unable to find a specific INTRINSIC procedure for the reference %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:1891
+#: fortran/resolve.c:1897
 #, gcc-internal-format
 msgid "Symbol %qs at %L is ambiguous"
 msgstr ""
 
-#: fortran/resolve.c:1946
+#: fortran/resolve.c:1952
 #, gcc-internal-format, gfc-internal-format
 msgid "By-value argument at %L is not of numeric type"
 msgstr ""
 
-#: fortran/resolve.c:1953
+#: fortran/resolve.c:1959
 #, gcc-internal-format, gfc-internal-format
 msgid "By-value argument at %L cannot be an array or an array section"
 msgstr ""
 
-#: fortran/resolve.c:1967
+#: fortran/resolve.c:1973
 #, gcc-internal-format, gfc-internal-format
 msgid "By-value argument at %L is not allowed in this context"
 msgstr ""
 
-#: fortran/resolve.c:1979
+#: fortran/resolve.c:1985
 #, gcc-internal-format, gfc-internal-format
 msgid "Passing internal procedure at %L by location not allowed"
 msgstr ""
 
-#: fortran/resolve.c:1990
+#: fortran/resolve.c:1996
 #, gcc-internal-format
 msgid ""
 "ELEMENTAL procedure pointer component %qs is not allowed as an actual "
 "argument at %L"
 msgstr ""
 
-#: fortran/resolve.c:1999
+#: fortran/resolve.c:2005
 #, gcc-internal-format, gfc-internal-format
 msgid "Coindexed actual argument at %L with ultimate pointer component"
 msgstr ""
 
-#: fortran/resolve.c:2130
+#: fortran/resolve.c:2136
 #, gcc-internal-format
 msgid ""
 "%qs at %L is an array and OPTIONAL; IF IT IS MISSING, it cannot be the "
@@ -55754,375 +55983,375 @@ msgid ""
 "argument with the same rank (12.4.1.5)"
 msgstr ""
 
-#: fortran/resolve.c:2167
+#: fortran/resolve.c:2173
 #, gcc-internal-format
 msgid ""
 "Actual argument at %L for INTENT(%s) dummy %qs of ELEMENTAL subroutine %qs "
 "is a scalar, but another actual argument is an array"
 msgstr ""
 
-#: fortran/resolve.c:2439
+#: fortran/resolve.c:2445
 #, gcc-internal-format
 msgid "Return type mismatch of function %qs at %L (%s/%s)"
 msgstr ""
 
-#: fortran/resolve.c:2460
+#: fortran/resolve.c:2466
 #, gcc-internal-format
 msgid "Interface mismatch in global procedure %qs at %L: %s "
 msgstr ""
 
-#: fortran/resolve.c:2573
+#: fortran/resolve.c:2579
 #, gcc-internal-format
 msgid "There is no specific function for the generic %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:2591
+#: fortran/resolve.c:2597
 #, gcc-internal-format
 msgid ""
 "Generic function %qs at %L is not consistent with a specific intrinsic "
 "interface"
 msgstr ""
 
-#: fortran/resolve.c:2629
+#: fortran/resolve.c:2635
 #, gcc-internal-format
 msgid "Function %qs at %L is INTRINSIC but is not compatible with an intrinsic"
 msgstr ""
 
-#: fortran/resolve.c:2684
+#: fortran/resolve.c:2690
 #, gcc-internal-format
 msgid "Unable to resolve the specific function %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:2740 fortran/resolve.c:15308
+#: fortran/resolve.c:2746 fortran/resolve.c:15387
 #, gcc-internal-format
 msgid "Function %qs at %L has no IMPLICIT type"
 msgstr ""
 
-#: fortran/resolve.c:2849
+#: fortran/resolve.c:2855
 #, gcc-internal-format
 msgid "Reference to impure function %qs at %L inside a FORALL %s"
 msgstr ""
 
-#: fortran/resolve.c:2856
+#: fortran/resolve.c:2862
 #, gcc-internal-format
 msgid "Reference to impure function %qs at %L inside a DO CONCURRENT %s"
 msgstr ""
 
-#: fortran/resolve.c:2863
+#: fortran/resolve.c:2869
 #, gcc-internal-format
 msgid "Reference to impure function %qs at %L within a PURE procedure"
 msgstr ""
 
-#: fortran/resolve.c:2926
+#: fortran/resolve.c:2932
 #, gcc-internal-format
 msgid "%qs at %L is not a function"
 msgstr ""
 
-#: fortran/resolve.c:2934 fortran/resolve.c:3404
+#: fortran/resolve.c:2940 fortran/resolve.c:3410
 #, gcc-internal-format
 msgid "ABSTRACT INTERFACE %qs must not be referenced at %L"
 msgstr ""
 
 #. Internal procedures are taken care of in resolve_contained_fntype.
-#: fortran/resolve.c:2977
+#: fortran/resolve.c:2983
 #, 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.c:3011
+#: fortran/resolve.c:3017
 #, gcc-internal-format
 msgid "resolve_function(): bad function type"
 msgstr ""
 
-#: fortran/resolve.c:3031
+#: fortran/resolve.c:3037
 #, gcc-internal-format
 msgid ""
 "User defined non-ELEMENTAL function %qs at %L not allowed in WORKSHARE "
 "construct"
 msgstr ""
 
-#: fortran/resolve.c:3093
+#: fortran/resolve.c:3099
 #, gcc-internal-format
 msgid ""
 "ENTRY %qs at %L cannot be called recursively, as function %qs is not "
 "RECURSIVE"
 msgstr ""
 
-#: fortran/resolve.c:3097
+#: fortran/resolve.c:3103
 #, gcc-internal-format
 msgid "Function %qs at %L cannot be called recursively, as it is not RECURSIVE"
 msgstr ""
 
-#: fortran/resolve.c:3148
+#: fortran/resolve.c:3154
 #, gcc-internal-format
 msgid "Subroutine call to %qs in FORALL block at %L is not PURE"
 msgstr ""
 
-#: fortran/resolve.c:3154
+#: fortran/resolve.c:3160
 #, gcc-internal-format
 msgid "Subroutine call to %qs in DO CONCURRENT block at %L is not PURE"
 msgstr ""
 
-#: fortran/resolve.c:3160
+#: fortran/resolve.c:3166
 #, gcc-internal-format
 msgid "Subroutine call to %qs at %L is not PURE"
 msgstr ""
 
-#: fortran/resolve.c:3228
+#: fortran/resolve.c:3234
 #, gcc-internal-format
 msgid "There is no specific subroutine for the generic %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:3237
+#: fortran/resolve.c:3243
 #, gcc-internal-format
 msgid ""
 "Generic subroutine %qs at %L is not consistent with an intrinsic subroutine "
 "interface"
 msgstr ""
 
-#: fortran/resolve.c:3272
+#: fortran/resolve.c:3278
 #, gcc-internal-format
 msgid ""
 "Subroutine %qs at %L is INTRINSIC but is not compatible with an intrinsic"
 msgstr ""
 
-#: fortran/resolve.c:3317
+#: fortran/resolve.c:3323
 #, gcc-internal-format
 msgid "Unable to resolve the specific subroutine %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:3375
+#: fortran/resolve.c:3381
 #, gcc-internal-format
 msgid "%qs at %L has a type, which is not consistent with the CALL at %L"
 msgstr ""
 
-#: fortran/resolve.c:3414
+#: fortran/resolve.c:3420
 #, gcc-internal-format
 msgid ""
 "ENTRY %qs at %L cannot be called recursively, as subroutine %qs is not "
 "RECURSIVE"
 msgstr ""
 
-#: fortran/resolve.c:3418
+#: fortran/resolve.c:3424
 #, gcc-internal-format
 msgid ""
 "SUBROUTINE %qs at %L cannot be called recursively, as it is not RECURSIVE"
 msgstr ""
 
-#: fortran/resolve.c:3463
+#: fortran/resolve.c:3469
 #, gcc-internal-format
 msgid "resolve_subroutine(): bad function type"
 msgstr ""
 
-#: fortran/resolve.c:3501
+#: fortran/resolve.c:3507
 #, gcc-internal-format, gfc-internal-format
 msgid "Shapes for operands at %L and %L are not conformable"
 msgstr ""
 
-#: fortran/resolve.c:3733
+#: fortran/resolve.c:3739
 #, gcc-internal-format
 msgid "resolve_operator(): Bad intrinsic"
 msgstr ""
 
-#: fortran/resolve.c:3903 fortran/resolve.c:3926
+#: fortran/resolve.c:3909 fortran/resolve.c:3932
 #, gcc-internal-format
 msgid "compare_bound_int(): Bad expression"
 msgstr ""
 
-#: fortran/resolve.c:4021
+#: fortran/resolve.c:4027
 #, gcc-internal-format, gfc-internal-format
 msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4026
+#: fortran/resolve.c:4032
 #, gcc-internal-format, gfc-internal-format
 msgid "Array reference at %L is out of bounds (%ld < %ld) in codimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4036
+#: fortran/resolve.c:4042
 #, gcc-internal-format, gfc-internal-format
 msgid "Array reference at %L is out of bounds (%ld > %ld) in dimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4041
+#: fortran/resolve.c:4047
 #, gcc-internal-format, gfc-internal-format
 msgid "Array reference at %L is out of bounds (%ld > %ld) in codimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4061
+#: fortran/resolve.c:4067
 #, gcc-internal-format, gfc-internal-format
 msgid "Illegal stride of zero at %L"
 msgstr ""
 
-#: fortran/resolve.c:4078
+#: fortran/resolve.c:4084
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Lower array reference at %L is out of bounds (%ld < %ld) in dimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4086
+#: fortran/resolve.c:4092
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4102
+#: fortran/resolve.c:4108
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Upper array reference at %L is out of bounds (%ld < %ld) in dimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4111
+#: fortran/resolve.c:4117
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d"
 msgstr ""
 
-#: fortran/resolve.c:4127
+#: fortran/resolve.c:4133
 #, gcc-internal-format
 msgid "check_dimension(): Bad array reference"
 msgstr ""
 
-#: fortran/resolve.c:4150
+#: fortran/resolve.c:4156
 #, gcc-internal-format, gfc-internal-format
 msgid "Rightmost upper bound of assumed size array section not specified at %L"
 msgstr ""
 
-#: fortran/resolve.c:4160
+#: fortran/resolve.c:4166
 #, gcc-internal-format, gfc-internal-format
 msgid "Rank mismatch in array reference at %L (%d/%d)"
 msgstr ""
 
-#: fortran/resolve.c:4168
+#: fortran/resolve.c:4174
 #, gcc-internal-format, gfc-internal-format
 msgid "Coindex rank mismatch in array reference at %L (%d/%d)"
 msgstr ""
 
-#: fortran/resolve.c:4184
+#: fortran/resolve.c:4190
 #, gcc-internal-format, gfc-internal-format
 msgid "Coindex of codimension %d must be a scalar at %L"
 msgstr ""
 
-#: fortran/resolve.c:4212
+#: fortran/resolve.c:4218
 #, gcc-internal-format, gfc-internal-format
 msgid "Array index at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:4218
+#: fortran/resolve.c:4224
 #, gcc-internal-format, gfc-internal-format
 msgid "Array index at %L must be of INTEGER type, found %s"
 msgstr ""
 
-#: fortran/resolve.c:4224
+#: fortran/resolve.c:4230
 #, gcc-internal-format, gfc-internal-format
 msgid "REAL array index at %L"
 msgstr ""
 
-#: fortran/resolve.c:4263
+#: fortran/resolve.c:4269
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument dim at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:4270
+#: fortran/resolve.c:4276
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument dim at %L must be of INTEGER type"
 msgstr ""
 
-#: fortran/resolve.c:4315
+#: fortran/resolve.c:4321
 #, gcc-internal-format
 msgid "find_array_spec(): Missing spec"
 msgstr ""
 
-#: fortran/resolve.c:4326
+#: fortran/resolve.c:4332
 #, gcc-internal-format
 msgid "find_array_spec(): unused as(1)"
 msgstr ""
 
-#: fortran/resolve.c:4337
+#: fortran/resolve.c:4343
 #, gcc-internal-format
 msgid "find_array_spec(): unused as(2)"
 msgstr ""
 
-#: fortran/resolve.c:4380
+#: fortran/resolve.c:4386
 #, gcc-internal-format, gfc-internal-format
 msgid "Array index at %L is an array of rank %d"
 msgstr ""
 
-#: fortran/resolve.c:4478
+#: fortran/resolve.c:4484
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring start index at %L must be of type INTEGER"
 msgstr ""
 
-#: fortran/resolve.c:4485
+#: fortran/resolve.c:4491
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring start index at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:4494
+#: fortran/resolve.c:4500
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring start index at %L is less than one"
 msgstr ""
 
-#: fortran/resolve.c:4507
+#: fortran/resolve.c:4513
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring end index at %L must be of type INTEGER"
 msgstr ""
 
-#: fortran/resolve.c:4514
+#: fortran/resolve.c:4520
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring end index at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:4524
+#: fortran/resolve.c:4530
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring end index at %L exceeds the string length"
 msgstr ""
 
-#: fortran/resolve.c:4534
+#: fortran/resolve.c:4540
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring end index at %L is too large"
 msgstr ""
 
-#: fortran/resolve.c:4687
+#: fortran/resolve.c:4693
 #, gcc-internal-format
 msgid "resolve_ref(): Bad array reference"
 msgstr ""
 
-#: fortran/resolve.c:4701
+#: fortran/resolve.c:4707
 #, 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.c:4711
+#: fortran/resolve.c:4717
 #, 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.c:4730
+#: fortran/resolve.c:4736
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Two or more part references with nonzero rank must not be specified at %L"
 msgstr ""
 
-#: fortran/resolve.c:4828
+#: fortran/resolve.c:4834
 #, gcc-internal-format
 msgid "expression_rank(): Two array specs"
 msgstr ""
 
-#: fortran/resolve.c:4910
+#: fortran/resolve.c:4916
 #, 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.c:4920
+#: fortran/resolve.c:4926
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-type variable %s at %L may only be used as actual argument"
 msgstr ""
@@ -56131,14 +56360,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.c:4930
+#: fortran/resolve.c:4936
 #, 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.c:4945
+#: fortran/resolve.c:4951
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-rank variable %s at %L may only be used as actual argument"
 msgstr ""
@@ -56147,284 +56376,284 @@ msgstr ""
 #. for all inquiry functions in resolve_function; the reason is
 #. that the function-name resolution happens too late in that
 #. function.
-#: fortran/resolve.c:4955
+#: fortran/resolve.c:4961
 #, 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.c:4966
+#: fortran/resolve.c:4972
 #, 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.c:4975
+#: fortran/resolve.c:4981
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-type variable %s at %L shall not have a subobject reference"
 msgstr ""
 
-#: fortran/resolve.c:4990
+#: fortran/resolve.c:4996
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-rank variable %s at %L shall not have a subobject reference"
 msgstr ""
 
-#: fortran/resolve.c:5147
+#: fortran/resolve.c:5153
 #, 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.c:5152
+#: fortran/resolve.c:5158
 #, gcc-internal-format
 msgid ""
 "Variable %qs is used at %L before the ENTRY statement in which it is a "
 "parameter"
 msgstr ""
 
-#: fortran/resolve.c:5222
+#: fortran/resolve.c:5228
 #, gcc-internal-format, gfc-internal-format
 msgid "Polymorphic subobject of coindexed object at %L"
 msgstr ""
 
-#: fortran/resolve.c:5235
+#: fortran/resolve.c:5241
 #, gcc-internal-format, gfc-internal-format
 msgid "Coindexed object with polymorphic allocatable subcomponent at %L"
 msgstr ""
 
-#: fortran/resolve.c:5573
+#: fortran/resolve.c:5579
 #, gcc-internal-format, gfc-internal-format
 msgid "Passed-object at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:5580
+#: fortran/resolve.c:5586
 #, gcc-internal-format
 msgid ""
 "Base object for procedure-pointer component call at %L is of ABSTRACT type "
 "%qs"
 msgstr ""
 
-#: fortran/resolve.c:5615
+#: fortran/resolve.c:5621
 #, gcc-internal-format
 msgid "Base object for type-bound procedure call at %L is of ABSTRACT type %qs"
 msgstr ""
 
-#: fortran/resolve.c:5624
+#: fortran/resolve.c:5630
 #, 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.c:5812
+#: fortran/resolve.c:5818
 #, gcc-internal-format
 msgid ""
 "Found no matching specific binding for the call to the GENERIC %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:5839
+#: fortran/resolve.c:5845
 #, gcc-internal-format
 msgid "%qs at %L should be a SUBROUTINE"
 msgstr ""
 
-#: fortran/resolve.c:5890
+#: fortran/resolve.c:5896
 #, gcc-internal-format
 msgid "%qs at %L should be a FUNCTION"
 msgstr ""
 
-#: fortran/resolve.c:6407
+#: fortran/resolve.c:6413
 #, gcc-internal-format
 msgid "gfc_resolve_expr(): Bad expression type"
 msgstr ""
 
-#: fortran/resolve.c:6433
+#: fortran/resolve.c:6439
 #, gcc-internal-format, gfc-internal-format
 msgid "%s at %L must be a scalar"
 msgstr ""
 
-#: fortran/resolve.c:6443
+#: fortran/resolve.c:6449
 #, gcc-internal-format, gfc-internal-format
 msgid "%s at %L must be integer"
 msgstr ""
 
-#: fortran/resolve.c:6447 fortran/resolve.c:6454
+#: fortran/resolve.c:6453 fortran/resolve.c:6460
 #, gcc-internal-format, gfc-internal-format
 msgid "%s at %L must be INTEGER"
 msgstr ""
 
-#: fortran/resolve.c:6496
+#: fortran/resolve.c:6502
 #, gcc-internal-format, gfc-internal-format
 msgid "Step expression in DO loop at %L cannot be zero"
 msgstr ""
 
-#: fortran/resolve.c:6532
+#: fortran/resolve.c:6538
 #, gcc-internal-format, gfc-internal-format
 msgid "DO loop at %L will be executed zero times"
 msgstr ""
 
-#: fortran/resolve.c:6593
+#: fortran/resolve.c:6599
 #, gcc-internal-format, gfc-internal-format
 msgid "FORALL index-name at %L must be a scalar INTEGER"
 msgstr ""
 
-#: fortran/resolve.c:6598
+#: fortran/resolve.c:6604
 #, gcc-internal-format, gfc-internal-format
 msgid "FORALL start expression at %L must be a scalar INTEGER"
 msgstr ""
 
-#: fortran/resolve.c:6605
+#: fortran/resolve.c:6611
 #, gcc-internal-format, gfc-internal-format
 msgid "FORALL end expression at %L must be a scalar INTEGER"
 msgstr ""
 
-#: fortran/resolve.c:6613
+#: fortran/resolve.c:6619
 #, gcc-internal-format, gfc-internal-format
 msgid "FORALL stride expression at %L must be a scalar %s"
 msgstr ""
 
-#: fortran/resolve.c:6618
+#: fortran/resolve.c:6624
 #, gcc-internal-format, gfc-internal-format
 msgid "FORALL stride expression at %L cannot be zero"
 msgstr ""
 
-#: fortran/resolve.c:6631
+#: fortran/resolve.c:6637
 #, gcc-internal-format
 msgid "FORALL index %qs may not appear in triplet specification at %L"
 msgstr ""
 
-#: fortran/resolve.c:6729 fortran/resolve.c:7021
+#: fortran/resolve.c:6735 fortran/resolve.c:7027
 #, gcc-internal-format, gfc-internal-format
 msgid "Allocate-object at %L must be ALLOCATABLE or a POINTER"
 msgstr ""
 
-#: fortran/resolve.c:6737 fortran/resolve.c:6986
+#: fortran/resolve.c:6743 fortran/resolve.c:6992
 #, gcc-internal-format, gfc-internal-format
 msgid "Coindexed allocatable object at %L"
 msgstr ""
 
-#: fortran/resolve.c:6843
+#: fortran/resolve.c:6849
 #, 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.c:6874
+#: fortran/resolve.c:6880
 #, gcc-internal-format, gfc-internal-format
 msgid "Source-expr at %L and allocate-object at %L must have the same shape"
 msgstr ""
 
-#: fortran/resolve.c:7032
+#: fortran/resolve.c:7038
 #, gcc-internal-format, gfc-internal-format
 msgid "Type of entity at %L is type incompatible with source-expr at %L"
 msgstr ""
 
-#: fortran/resolve.c:7044
+#: fortran/resolve.c:7050
 #, 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.c:7058
+#: fortran/resolve.c:7064
 #, 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.c:7073
+#: fortran/resolve.c:7079
 #, 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.c:7086
+#: fortran/resolve.c:7092
 #, 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.c:7099
+#: fortran/resolve.c:7105
 #, 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.c:7217 fortran/resolve.c:7232
+#: fortran/resolve.c:7223 fortran/resolve.c:7238
 #, gcc-internal-format, gfc-internal-format
 msgid "Array specification required in ALLOCATE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:7224
+#: fortran/resolve.c:7230
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Array specification or array-valued SOURCE= expression required in ALLOCATE "
 "statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:7247
+#: fortran/resolve.c:7253
 #, gcc-internal-format, gfc-internal-format
 msgid "Coarray specification required in ALLOCATE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:7274
+#: fortran/resolve.c:7280
 #, gcc-internal-format, gfc-internal-format
 msgid "Bad array specification in ALLOCATE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:7293
+#: fortran/resolve.c:7299
 #, 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.c:7308
+#: fortran/resolve.c:7314
 #, gcc-internal-format, gfc-internal-format
 msgid "Expected '*' in coindex specification in ALLOCATE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:7319
+#: fortran/resolve.c:7325
 #, gcc-internal-format, gfc-internal-format
 msgid "Bad coarray specification in ALLOCATE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:7351
+#: fortran/resolve.c:7357
 #, gcc-internal-format, gfc-internal-format
 msgid "Stat-variable at %L must be a scalar INTEGER variable"
 msgstr ""
 
-#: fortran/resolve.c:7374
+#: fortran/resolve.c:7380
 #, gcc-internal-format, gfc-internal-format
 msgid "Stat-variable at %L shall not be %sd within the same %s statement"
 msgstr ""
 
-#: fortran/resolve.c:7385
+#: fortran/resolve.c:7391
 #, gcc-internal-format, gfc-internal-format
 msgid "ERRMSG at %L is useless without a STAT tag"
 msgstr ""
 
-#: fortran/resolve.c:7396
+#: fortran/resolve.c:7402
 #, gcc-internal-format, gfc-internal-format
 msgid "Errmsg-variable at %L must be a scalar CHARACTER variable"
 msgstr ""
 
-#: fortran/resolve.c:7419
+#: fortran/resolve.c:7425
 #, gcc-internal-format, gfc-internal-format
 msgid "Errmsg-variable at %L shall not be %sd within the same %s statement"
 msgstr ""
 
-#: fortran/resolve.c:7449
+#: fortran/resolve.c:7455
 #, gcc-internal-format, gfc-internal-format
 msgid "Allocate-object at %L also appears at %L"
 msgstr ""
 
-#: fortran/resolve.c:7455 fortran/resolve.c:7461
+#: fortran/resolve.c:7461 fortran/resolve.c:7467
 #, gcc-internal-format, gfc-internal-format
 msgid "Allocate-object at %L is subobject of object at %L"
 msgstr ""
@@ -56433,234 +56662,234 @@ 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.c:7673
+#: fortran/resolve.c:7679
 #, gcc-internal-format, gfc-internal-format
 msgid "CASE label at %L overlaps with CASE label at %L"
 msgstr ""
 
-#: fortran/resolve.c:7724
+#: fortran/resolve.c:7730
 #, gcc-internal-format, gfc-internal-format
 msgid "Expression in CASE statement at %L must be of type %s"
 msgstr ""
 
-#: fortran/resolve.c:7735
+#: fortran/resolve.c:7741
 #, gcc-internal-format, gfc-internal-format
 msgid "Expression in CASE statement at %L must be of kind %d"
 msgstr ""
 
-#: fortran/resolve.c:7748
+#: fortran/resolve.c:7754
 #, gcc-internal-format, gfc-internal-format
 msgid "Expression in CASE statement at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:7794
+#: fortran/resolve.c:7800
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Selection expression in computed GOTO statement at %L must be a scalar "
 "integer expression"
 msgstr ""
 
-#: fortran/resolve.c:7813
+#: fortran/resolve.c:7819
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of SELECT statement at %L cannot be %s"
 msgstr ""
 
-#: fortran/resolve.c:7823
+#: fortran/resolve.c:7829
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of SELECT statement at %L must be a scalar expression"
 msgstr ""
 
-#: fortran/resolve.c:7841 fortran/resolve.c:7849
+#: fortran/resolve.c:7847 fortran/resolve.c:7855
 #, gcc-internal-format, gfc-internal-format
 msgid "Expression in CASE statement at %L is not in the range of %s"
 msgstr ""
 
-#: fortran/resolve.c:7911 fortran/resolve.c:8350
+#: fortran/resolve.c:7917 fortran/resolve.c:8356
 #, 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.c:7937
+#: fortran/resolve.c:7943
 #, gcc-internal-format, gfc-internal-format
 msgid "Logical range in CASE statement at %L is not allowed"
 msgstr ""
 
-#: fortran/resolve.c:7949
+#: fortran/resolve.c:7955
 #, gcc-internal-format, gfc-internal-format
 msgid "Constant logical value in CASE statement is repeated at %L"
 msgstr ""
 
-#: fortran/resolve.c:7964
+#: fortran/resolve.c:7970
 #, gcc-internal-format, gfc-internal-format
 msgid "Range specification at %L can never be matched"
 msgstr ""
 
-#: fortran/resolve.c:8067
+#: fortran/resolve.c:8073
 #, gcc-internal-format, gfc-internal-format
 msgid "Logical SELECT CASE block at %L has more that two cases"
 msgstr ""
 
-#: fortran/resolve.c:8142
+#: fortran/resolve.c:8148
 #, gcc-internal-format
 msgid "Associate-name %qs at %L is used as array"
 msgstr ""
 
-#: fortran/resolve.c:8153
+#: fortran/resolve.c:8159
 #, gcc-internal-format, gfc-internal-format
 msgid "CLASS selector at %L needs a temporary which is not yet implemented"
 msgstr ""
 
-#: fortran/resolve.c:8269
+#: fortran/resolve.c:8275
 #, gcc-internal-format, gfc-internal-format
 msgid "Selector shall be polymorphic in SELECT TYPE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:8286 fortran/resolve.c:8298
+#: fortran/resolve.c:8292 fortran/resolve.c:8304
 #, gcc-internal-format, gfc-internal-format
 msgid "Selector at %L must not be coindexed"
 msgstr ""
 
-#: fortran/resolve.c:8314
+#: fortran/resolve.c:8320
 #, gcc-internal-format
 msgid "Derived type %qs at %L must be extensible"
 msgstr ""
 
-#: fortran/resolve.c:8326
+#: fortran/resolve.c:8332
 #, gcc-internal-format
 msgid "Derived type %qs at %L must be an extension of %qs"
 msgstr ""
 
-#: fortran/resolve.c:8329
+#: fortran/resolve.c:8335
 #, gcc-internal-format
 msgid "Unexpected intrinsic type %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:8338
+#: fortran/resolve.c:8344
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "The type-spec at %L shall specify that each length type parameter is assumed"
 msgstr ""
 
-#: fortran/resolve.c:8530
+#: fortran/resolve.c:8536
 #, gcc-internal-format, gfc-internal-format
 msgid "Double CLASS IS block in SELECT TYPE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:8619
+#: fortran/resolve.c:8625
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid context for NULL () intrinsic at %L"
 msgstr ""
 
 #. FIXME: Test for defined input/output.
-#: fortran/resolve.c:8647
+#: fortran/resolve.c:8653
 #, 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.c:8659
+#: fortran/resolve.c:8665
 #, 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.c:8668
+#: fortran/resolve.c:8674
 #, gcc-internal-format, gfc-internal-format
 msgid "Data transfer element at %L cannot have procedure pointer components"
 msgstr ""
 
-#: fortran/resolve.c:8675
+#: fortran/resolve.c:8681
 #, 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.c:8686 fortran/resolve.c:8692
+#: fortran/resolve.c:8692 fortran/resolve.c:8698
 #, gcc-internal-format, gfc-internal-format
 msgid "Data transfer element at %L cannot have PRIVATE components"
 msgstr ""
 
-#: fortran/resolve.c:8706
+#: fortran/resolve.c:8712
 #, 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.c:8763
+#: fortran/resolve.c:8769
 #, gcc-internal-format, gfc-internal-format
 msgid "Lock variable at %L must be a scalar of type LOCK_TYPE"
 msgstr ""
 
-#: fortran/resolve.c:8773
+#: fortran/resolve.c:8779
 #, gcc-internal-format, gfc-internal-format
 msgid "Event variable at %L must be a scalar of type EVENT_TYPE"
 msgstr ""
 
-#: fortran/resolve.c:8777
+#: fortran/resolve.c:8783
 #, gcc-internal-format, gfc-internal-format
 msgid "Event variable argument at %L must be a coarray or coindexed"
 msgstr ""
 
-#: fortran/resolve.c:8780
+#: fortran/resolve.c:8786
 #, gcc-internal-format, gfc-internal-format
 msgid "Event variable argument at %L must be a coarray but not coindexed"
 msgstr ""
 
-#: fortran/resolve.c:8787 fortran/resolve.c:8905
+#: fortran/resolve.c:8793 fortran/resolve.c:8911
 #, gcc-internal-format, gfc-internal-format
 msgid "STAT= argument at %L must be a scalar INTEGER variable"
 msgstr ""
 
-#: fortran/resolve.c:8799 fortran/resolve.c:8912
+#: fortran/resolve.c:8805 fortran/resolve.c:8918
 #, gcc-internal-format, gfc-internal-format
 msgid "ERRMSG= argument at %L must be a scalar CHARACTER variable"
 msgstr ""
 
-#: fortran/resolve.c:8811
+#: fortran/resolve.c:8817
 #, gcc-internal-format, gfc-internal-format
 msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable"
 msgstr ""
 
-#: fortran/resolve.c:8822
+#: fortran/resolve.c:8828
 #, gcc-internal-format, gfc-internal-format
 msgid "UNTIL_COUNT= argument at %L must be a scalar INTEGER expression"
 msgstr ""
 
-#: fortran/resolve.c:8882
+#: fortran/resolve.c:8888
 #, gcc-internal-format, gfc-internal-format
 msgid "Imageset argument at %L must be a scalar or rank-1 INTEGER expression"
 msgstr ""
 
-#: fortran/resolve.c:8886 fortran/resolve.c:8896
+#: fortran/resolve.c:8892 fortran/resolve.c:8902
 #, gcc-internal-format, gfc-internal-format
 msgid "Imageset argument at %L must between 1 and num_images()"
 msgstr ""
 
-#: fortran/resolve.c:8939
+#: fortran/resolve.c:8945
 #, 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.c:8949
+#: fortran/resolve.c:8955
 #, 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.c:8966 fortran/resolve.c:8989
+#: fortran/resolve.c:8972 fortran/resolve.c:8995
 #, gcc-internal-format, gfc-internal-format
 msgid "GOTO statement at %L leaves CRITICAL construct for label at %L"
 msgstr ""
 
-#: fortran/resolve.c:8970 fortran/resolve.c:8995
+#: fortran/resolve.c:8976 fortran/resolve.c:9001
 #, gcc-internal-format, gfc-internal-format
 msgid "GOTO statement at %L leaves DO CONCURRENT construct for label at %L"
 msgstr ""
@@ -56668,93 +56897,93 @@ 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.c:9010
+#: fortran/resolve.c:9016
 #, 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.c:9082
+#: fortran/resolve.c:9088
 #, gcc-internal-format, gfc-internal-format
 msgid "WHERE mask at %L has inconsistent shape"
 msgstr ""
 
-#: fortran/resolve.c:9098
+#: fortran/resolve.c:9104
 #, gcc-internal-format, gfc-internal-format
 msgid "WHERE assignment target at %L has inconsistent shape"
 msgstr ""
 
-#: fortran/resolve.c:9106 fortran/resolve.c:9193
+#: fortran/resolve.c:9112 fortran/resolve.c:9199
 #, gcc-internal-format, gfc-internal-format
 msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L"
 msgstr ""
 
-#: fortran/resolve.c:9116 fortran/resolve.c:9203
+#: fortran/resolve.c:9122 fortran/resolve.c:9209
 #, gcc-internal-format, gfc-internal-format
 msgid "Unsupported statement inside WHERE at %L"
 msgstr ""
 
-#: fortran/resolve.c:9147
+#: fortran/resolve.c:9153
 #, gcc-internal-format, gfc-internal-format
 msgid "Assignment to a FORALL index variable at %L"
 msgstr ""
 
-#: fortran/resolve.c:9156
+#: fortran/resolve.c:9162
 #, 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.c:9325
+#: fortran/resolve.c:9331
 #, gcc-internal-format, gfc-internal-format
 msgid "An outer FORALL construct already has an index with this name %L"
 msgstr ""
 
-#: fortran/resolve.c:9403
+#: fortran/resolve.c:9409
 #, gcc-internal-format, gfc-internal-format
 msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array"
 msgstr ""
 
-#: fortran/resolve.c:9481
+#: fortran/resolve.c:9487
 #, gcc-internal-format
 msgid "gfc_resolve_blocks(): Bad block type"
 msgstr ""
 
-#: fortran/resolve.c:9595
+#: fortran/resolve.c:9601
 #, gcc-internal-format, gfc-internal-format
 msgid "CHARACTER expression will be truncated in assignment (%d/%d) at %L"
 msgstr ""
 
-#: fortran/resolve.c:9627
+#: fortran/resolve.c:9633
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Coindexed expression at %L is assigned to a derived type variable with a "
 "POINTER component in a PURE procedure"
 msgstr ""
 
-#: fortran/resolve.c:9632
+#: fortran/resolve.c:9638
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "The impure variable at %L is assigned to a derived type variable with a "
 "POINTER component in a PURE procedure (12.6)"
 msgstr ""
 
-#: fortran/resolve.c:9642
+#: fortran/resolve.c:9648
 #, gcc-internal-format, gfc-internal-format
 msgid "Assignment to coindexed variable at %L in a PURE procedure"
 msgstr ""
 
-#: fortran/resolve.c:9674
+#: fortran/resolve.c:9680
 #, gcc-internal-format, gfc-internal-format
 msgid "Assignment to polymorphic coarray at %L is not permitted"
 msgstr ""
 
-#: fortran/resolve.c:9678
+#: fortran/resolve.c:9684
 #, gcc-internal-format, gfc-internal-format
 msgid "Assignment to an allocatable polymorphic variable at %L"
 msgstr ""
 
-#: fortran/resolve.c:9683
+#: fortran/resolve.c:9689
 #, gcc-internal-format
 msgid ""
 "Assignment to an allocatable polymorphic variable at %L requires %<-frealloc-"
@@ -56762,27 +56991,27 @@ msgid ""
 msgstr ""
 
 #. See PR 43366.
-#: fortran/resolve.c:9688
+#: fortran/resolve.c:9694
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Assignment to an allocatable polymorphic variable at %L is not yet supported"
 msgstr ""
 
-#: fortran/resolve.c:9694
+#: fortran/resolve.c:9700
 #, gcc-internal-format, gfc-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.c:9705
+#: fortran/resolve.c:9711
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Coindexed variable must not have an allocatable ultimate component in "
 "assignment at %L"
 msgstr ""
 
-#: fortran/resolve.c:10008
+#: fortran/resolve.c:10014
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "TODO: type-bound defined assignment(s) at %L not done because multiple part "
@@ -56791,72 +57020,72 @@ msgstr ""
 
 #. Even if standard does not support this feature, continue to build
 #. the two statements to avoid upsetting frontend_passes.c.
-#: fortran/resolve.c:10250
+#: fortran/resolve.c:10256
 #, gcc-internal-format, gfc-internal-format
 msgid "Pointer procedure assignment at %L"
 msgstr ""
 
-#: fortran/resolve.c:10262
+#: fortran/resolve.c:10268
 #, 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.c:10489
+#: fortran/resolve.c:10495
 #, gcc-internal-format, gfc-internal-format
 msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
 msgstr ""
 
-#: fortran/resolve.c:10492
+#: fortran/resolve.c:10498
 #, gcc-internal-format
 msgid "Variable %qs has not been assigned a target label at %L"
 msgstr ""
 
-#: fortran/resolve.c:10503
+#: fortran/resolve.c:10509
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier"
 msgstr ""
 
-#: fortran/resolve.c:10565
+#: fortran/resolve.c:10571
 #, gcc-internal-format, gfc-internal-format
 msgid "ASSIGN statement at %L requires a scalar default INTEGER variable"
 msgstr ""
 
-#: fortran/resolve.c:10600
+#: fortran/resolve.c:10606
 #, gcc-internal-format, gfc-internal-format
 msgid "Invalid NULL at %L"
 msgstr ""
 
-#: fortran/resolve.c:10604
+#: fortran/resolve.c:10610
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Arithmetic IF statement at %L requires a scalar REAL or INTEGER expression"
 msgstr ""
 
-#: fortran/resolve.c:10660
+#: fortran/resolve.c:10666
 #, gcc-internal-format
 msgid "gfc_resolve_code(): No expression on DO WHILE"
 msgstr ""
 
-#: fortran/resolve.c:10665
+#: fortran/resolve.c:10671
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression"
 msgstr ""
 
-#: fortran/resolve.c:10749
+#: fortran/resolve.c:10755
 #, gcc-internal-format, gfc-internal-format
 msgid "FORALL mask clause at %L requires a scalar LOGICAL expression"
 msgstr ""
 
-#: fortran/resolve.c:10820
+#: fortran/resolve.c:10826
 #, gcc-internal-format
 msgid "gfc_resolve_code(): Bad statement code"
 msgstr ""
 
-#: fortran/resolve.c:10915
+#: fortran/resolve.c:10921
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Variable %s with binding label %s at %L uses the same global identifier as "
@@ -56865,7 +57094,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.c:10928
+#: fortran/resolve.c:10934
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Variable %s from module %s with binding label %s at %L uses the same global "
@@ -56875,56 +57104,56 @@ 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.c:10945
+#: fortran/resolve.c:10951
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Procedure %s with binding label %s at %L uses the same global identifier as "
 "entity at %L"
 msgstr ""
 
-#: fortran/resolve.c:11022
+#: fortran/resolve.c:11028
 #, gcc-internal-format, gfc-internal-format
 msgid "String length at %L is too large"
 msgstr ""
 
-#: fortran/resolve.c:11358
+#: fortran/resolve.c:11364
 #, gcc-internal-format
 msgid "Allocatable array %qs at %L must have a deferred shape or assumed rank"
 msgstr ""
 
-#: fortran/resolve.c:11362
+#: fortran/resolve.c:11368
 #, gcc-internal-format
 msgid "Scalar object %qs at %L may not be ALLOCATABLE"
 msgstr ""
 
-#: fortran/resolve.c:11370
+#: fortran/resolve.c:11376
 #, gcc-internal-format
 msgid "Array pointer %qs at %L must have a deferred shape or assumed rank"
 msgstr ""
 
-#: fortran/resolve.c:11380
+#: fortran/resolve.c:11386
 #, gcc-internal-format
 msgid "Array %qs at %L cannot have a deferred shape"
 msgstr ""
 
-#: fortran/resolve.c:11395
+#: fortran/resolve.c:11401
 #, gcc-internal-format
 msgid "Type %qs of CLASS variable %qs at %L is not extensible"
 msgstr ""
 
-#: fortran/resolve.c:11407
+#: fortran/resolve.c:11413
 #, gcc-internal-format
 msgid "CLASS variable %qs at %L must be dummy, allocatable or pointer"
 msgstr ""
 
-#: fortran/resolve.c:11438
+#: fortran/resolve.c:11444
 #, 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.c:11460
+#: fortran/resolve.c:11466
 #, gcc-internal-format
 msgid ""
 "Implied SAVE for module variable %qs at %L, needed due to the default "
@@ -56933,495 +57162,500 @@ msgstr ""
 
 #. The shape of a main program or module array needs to be
 #. constant.
-#: fortran/resolve.c:11508
+#: fortran/resolve.c:11514
 #, gcc-internal-format
 msgid "The module or main program array %qs at %L must have constant shape"
 msgstr ""
 
-#: fortran/resolve.c:11520
+#: fortran/resolve.c:11526
 #, gcc-internal-format
 msgid ""
 "Entity %qs at %L has a deferred type parameter and requires either the "
 "pointer or allocatable attribute"
 msgstr ""
 
-#: fortran/resolve.c:11536
+#: fortran/resolve.c:11542
 #, 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.c:11557
+#: fortran/resolve.c:11563
 #, gcc-internal-format
 msgid "%qs at %L must have constant character length in this context"
 msgstr ""
 
-#: fortran/resolve.c:11564
+#: fortran/resolve.c:11570
 #, gcc-internal-format
 msgid "COMMON variable %qs at %L must have constant character length"
 msgstr ""
 
-#: fortran/resolve.c:11611
+#: fortran/resolve.c:11617
 #, gcc-internal-format
 msgid "Allocatable %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11614
+#: fortran/resolve.c:11620
 #, gcc-internal-format
 msgid "External %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11618
+#: fortran/resolve.c:11624
 #, gcc-internal-format
 msgid "Dummy %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11621
+#: fortran/resolve.c:11627
 #, gcc-internal-format
 msgid "Intrinsic %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11624
+#: fortran/resolve.c:11630
 #, gcc-internal-format
 msgid "Function result %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11627
+#: fortran/resolve.c:11633
 #, gcc-internal-format
 msgid "Automatic array %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11669
+#: fortran/resolve.c:11675
 #, gcc-internal-format, gfc-internal-format
 msgid "%s at %L"
 msgstr ""
 
-#: fortran/resolve.c:11696
+#: fortran/resolve.c:11702
 #, gcc-internal-format
 msgid "Character-valued statement function %qs at %L must have constant length"
 msgstr ""
 
-#: fortran/resolve.c:11718
+#: fortran/resolve.c:11724
 #, 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.c:11740
+#: fortran/resolve.c:11746
 #, gcc-internal-format
 msgid ""
 "Procedure %qs in PUBLIC interface %qs at %L takes dummy arguments of %qs "
 "which is PRIVATE"
 msgstr ""
 
-#: fortran/resolve.c:11758
+#: fortran/resolve.c:11764
 #, gcc-internal-format
 msgid "Function %qs at %L cannot have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11767
+#: fortran/resolve.c:11773
 #, gcc-internal-format
 msgid "External object %qs at %L may not have an initializer"
 msgstr ""
 
-#: fortran/resolve.c:11775
+#: fortran/resolve.c:11781
 #, gcc-internal-format
 msgid "ELEMENTAL function %qs at %L must have a scalar result"
 msgstr ""
 
-#: fortran/resolve.c:11785
+#: fortran/resolve.c:11791
 #, gcc-internal-format
 msgid ""
 "Statement function %qs at %L may not have pointer or allocatable attribute"
 msgstr ""
 
-#: fortran/resolve.c:11804
+#: fortran/resolve.c:11810
 #, gcc-internal-format
 msgid "CHARACTER(*) function %qs at %L cannot be array-valued"
 msgstr ""
 
-#: fortran/resolve.c:11808
+#: fortran/resolve.c:11814
 #, gcc-internal-format
 msgid "CHARACTER(*) function %qs at %L cannot be pointer-valued"
 msgstr ""
 
-#: fortran/resolve.c:11812
+#: fortran/resolve.c:11818
 #, gcc-internal-format
 msgid "CHARACTER(*) function %qs at %L cannot be pure"
 msgstr ""
 
-#: fortran/resolve.c:11816
+#: fortran/resolve.c:11822
 #, gcc-internal-format
 msgid "CHARACTER(*) function %qs at %L cannot be recursive"
 msgstr ""
 
-#: fortran/resolve.c:11829
+#: fortran/resolve.c:11835
 #, gcc-internal-format
 msgid "CHARACTER(*) function %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:11838
+#: fortran/resolve.c:11844
 #, gcc-internal-format
 msgid "Procedure pointer %qs at %L shall not be elemental"
 msgstr ""
 
-#: fortran/resolve.c:11844
+#: fortran/resolve.c:11850
 #, gcc-internal-format
 msgid "Dummy procedure %qs at %L shall not be elemental"
 msgstr ""
 
-#: fortran/resolve.c:11900
+#: fortran/resolve.c:11906
 #, gcc-internal-format
 msgid "PROCEDURE attribute conflicts with SAVE attribute in %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:11906
+#: fortran/resolve.c:11912
 #, gcc-internal-format
 msgid "PROCEDURE attribute conflicts with INTENT attribute in %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:11912
+#: fortran/resolve.c:11918
 #, gcc-internal-format
 msgid "PROCEDURE attribute conflicts with RESULT attribute in %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:11920
+#: fortran/resolve.c:11926
 #, gcc-internal-format
 msgid "EXTERNAL attribute conflicts with FUNCTION attribute in %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:11926
+#: fortran/resolve.c:11932
 #, gcc-internal-format
 msgid "Procedure pointer result %qs at %L is missing the pointer attribute"
 msgstr ""
 
-#: fortran/resolve.c:11964
+#: fortran/resolve.c:11970
 #, gcc-internal-format, gfc-internal-format
 msgid ""
-"Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface "
-"in %s"
+"Mismatch in ELEMENTAL attribute between MODULE PROCEDURE at %L and its "
+"interface in %s"
 msgstr ""
 
-#: fortran/resolve.c:11972
+#: fortran/resolve.c:11978
 #, gcc-internal-format, gfc-internal-format
 msgid ""
-"Mismatch in ELEMENTAL attribute between MODULE PROCEDURE at %L and its "
-"interface in %s"
+"Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface "
+"in %s"
 msgstr ""
 
-#: fortran/resolve.c:11980
+#: fortran/resolve.c:11986
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Mismatch in RECURSIVE attribute between MODULE PROCEDURE at %L and its "
 "interface in %s"
 msgstr ""
 
-#: fortran/resolve.c:11989
+#: fortran/resolve.c:11995
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "%s between the MODULE PROCEDURE declaration in module %s and the declaration "
 "at %L in SUBMODULE %s"
 msgstr ""
 
-#: fortran/resolve.c:12074
+#: fortran/resolve.c:12080
 #, gcc-internal-format
 msgid "FINAL procedure %qs at %L is not a SUBROUTINE"
 msgstr ""
 
-#: fortran/resolve.c:12083
+#: fortran/resolve.c:12089
 #, gcc-internal-format, gfc-internal-format
 msgid "FINAL procedure at %L must have exactly one argument"
 msgstr ""
 
-#: fortran/resolve.c:12092
+#: fortran/resolve.c:12098
 #, gcc-internal-format
 msgid "Argument of FINAL procedure at %L must be of type %qs"
 msgstr ""
 
-#: fortran/resolve.c:12100
+#: fortran/resolve.c:12106
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of FINAL procedure at %L must not be a POINTER"
 msgstr ""
 
-#: fortran/resolve.c:12106
+#: fortran/resolve.c:12112
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE"
 msgstr ""
 
-#: fortran/resolve.c:12112
+#: fortran/resolve.c:12118
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of FINAL procedure at %L must not be OPTIONAL"
 msgstr ""
 
-#: fortran/resolve.c:12120
+#: fortran/resolve.c:12126
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)"
 msgstr ""
 
-#: fortran/resolve.c:12129
+#: fortran/resolve.c:12135
 #, gcc-internal-format, gfc-internal-format
 msgid "Non-scalar FINAL procedure at %L should have assumed shape argument"
 msgstr ""
 
-#: fortran/resolve.c:12151
+#: fortran/resolve.c:12157
 #, gcc-internal-format
 msgid "FINAL procedure %qs declared at %L has the same rank (%d) as %qs"
 msgstr ""
 
-#: fortran/resolve.c:12188
+#: fortran/resolve.c:12194
 #, gcc-internal-format
 msgid ""
 "Only array FINAL procedures declared for derived type %qs defined at %L, "
 "suggest also scalar one"
 msgstr ""
 
-#: fortran/resolve.c:12228
+#: fortran/resolve.c:12234
 #, gcc-internal-format
 msgid "%qs and %qs can't be mixed FUNCTION/SUBROUTINE for GENERIC %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:12264
+#: fortran/resolve.c:12270
 #, gcc-internal-format
 msgid "%qs and %qs for GENERIC %qs at %L are ambiguous"
 msgstr ""
 
-#: fortran/resolve.c:12323
+#: fortran/resolve.c:12329
 #, gcc-internal-format
 msgid "Undefined specific binding %qs as target of GENERIC %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:12335
+#: fortran/resolve.c:12341
 #, gcc-internal-format
 msgid "GENERIC %qs at %L must target a specific binding, %qs is GENERIC, too"
 msgstr ""
 
-#: fortran/resolve.c:12363
+#: fortran/resolve.c:12369
 #, gcc-internal-format
 msgid "GENERIC %qs at %L can't overwrite specific binding with the same name"
 msgstr ""
 
-#: fortran/resolve.c:12419
+#: fortran/resolve.c:12425
 #, gcc-internal-format, gfc-internal-format
 msgid "Type-bound operator at %L can't be NOPASS"
 msgstr ""
 
-#: fortran/resolve.c:12601
+#: fortran/resolve.c:12607
 #, gcc-internal-format
 msgid ""
 "%qs must be a module procedure or an external procedure with an explicit "
 "interface at %L"
 msgstr ""
 
-#: fortran/resolve.c:12643
+#: fortran/resolve.c:12649
 #, gcc-internal-format
 msgid "Procedure %qs with PASS(%s) at %L has no argument %qs"
 msgstr ""
 
-#: fortran/resolve.c:12657
+#: fortran/resolve.c:12663
 #, gcc-internal-format
 msgid "Procedure %qs with PASS at %L must have at least one argument"
 msgstr ""
 
-#: fortran/resolve.c:12671 fortran/resolve.c:13166
+#: fortran/resolve.c:12677 fortran/resolve.c:13125
 #, gcc-internal-format
 msgid "Non-polymorphic passed-object dummy argument of %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:12679
+#: fortran/resolve.c:12685
 #, gcc-internal-format
 msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived-type %qs"
 msgstr ""
 
-#: fortran/resolve.c:12688
+#: fortran/resolve.c:12694
 #, gcc-internal-format
 msgid "Passed-object dummy argument of %qs at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:12694
+#: fortran/resolve.c:12700
 #, gcc-internal-format
 msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE"
 msgstr ""
 
-#: fortran/resolve.c:12700
+#: fortran/resolve.c:12706
 #, gcc-internal-format
 msgid "Passed-object dummy argument of %qs at %L must not be POINTER"
 msgstr ""
 
-#: fortran/resolve.c:12729
+#: fortran/resolve.c:12735
 #, gcc-internal-format
 msgid "Procedure %qs at %L has the same name as a component of %qs"
 msgstr ""
 
-#: fortran/resolve.c:12738
+#: fortran/resolve.c:12745
 #, gcc-internal-format
 msgid "Procedure %qs at %L has the same name as an inherited component of %qs"
 msgstr ""
 
-#: fortran/resolve.c:12830
+#: fortran/resolve.c:12837
 #, gcc-internal-format
 msgid ""
 "Derived-type %qs declared at %L must be ABSTRACT because %qs is DEFERRED and "
 "not overridden"
 msgstr ""
 
-#: fortran/resolve.c:12928
-#, gcc-internal-format
-msgid ""
-"As extending type %qs at %L has a coarray component, parent type %qs shall "
-"also have one"
-msgstr ""
-
-#: fortran/resolve.c:12941
-#, gcc-internal-format
-msgid "Non-extensible derived-type %qs at %L must not be ABSTRACT"
-msgstr ""
-
-#: fortran/resolve.c:12961
+#: fortran/resolve.c:12932
 #, gcc-internal-format
 msgid "Coarray component %qs at %L must be allocatable with deferred shape"
 msgstr ""
 
-#: fortran/resolve.c:12971
+#: fortran/resolve.c:12941
 #, gcc-internal-format
 msgid ""
 "Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray"
 msgstr ""
 
-#: fortran/resolve.c:12982
+#: fortran/resolve.c:12951
 #, gcc-internal-format
 msgid ""
 "Component %qs at %L with coarray component shall be a nonpointer, "
 "nonallocatable scalar"
 msgstr ""
 
-#: fortran/resolve.c:12992
+#: fortran/resolve.c:12960
 #, gcc-internal-format
 msgid ""
 "Component %qs at %L has the CONTIGUOUS attribute but is not an array pointer"
 msgstr ""
 
-#: fortran/resolve.c:13093
+#: fortran/resolve.c:13058
 #, gcc-internal-format
 msgid "Procedure pointer component %qs with PASS(%s) at %L has no argument %qs"
 msgstr ""
 
-#: fortran/resolve.c:13108
+#: fortran/resolve.c:13072
 #, gcc-internal-format
 msgid ""
 "Procedure pointer component %qs with PASS at %L must have at least one "
 "argument"
 msgstr ""
 
-#: fortran/resolve.c:13125
+#: fortran/resolve.c:13088
 #, gcc-internal-format
 msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived type %qs"
 msgstr ""
 
-#: fortran/resolve.c:13136
+#: fortran/resolve.c:13098
 #, gcc-internal-format
 msgid "Argument %qs of %qs with PASS(%s) at %L must be scalar"
 msgstr ""
 
-#: fortran/resolve.c:13146
+#: fortran/resolve.c:13107
 #, gcc-internal-format
 msgid ""
 "Argument %qs of %qs with PASS(%s) at %L may not have the POINTER attribute"
 msgstr ""
 
-#: fortran/resolve.c:13156
+#: fortran/resolve.c:13116
 #, gcc-internal-format
 msgid "Argument %qs of %qs with PASS(%s) at %L may not be ALLOCATABLE"
 msgstr ""
 
-#: fortran/resolve.c:13198
+#: fortran/resolve.c:13158
 #, gcc-internal-format
 msgid ""
 "Component %qs of %qs at %L has the same name as an inherited type-bound "
 "procedure"
 msgstr ""
 
-#: fortran/resolve.c:13211
+#: fortran/resolve.c:13171
 #, gcc-internal-format
 msgid ""
 "Character length of component %qs needs to be a constant specification "
 "expression at %L"
 msgstr ""
 
-#: fortran/resolve.c:13222
+#: fortran/resolve.c:13182
 #, gcc-internal-format
 msgid ""
 "Character component %qs of %qs at %L with deferred length must be a POINTER "
 "or ALLOCATABLE"
 msgstr ""
 
-#: fortran/resolve.c:13253
+#: fortran/resolve.c:13213
 #, 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.c:13261
+#: fortran/resolve.c:13221
 #, gcc-internal-format, gfc-internal-format
 msgid "Polymorphic component %s at %L in SEQUENCE or BIND(C) type %s"
 msgstr ""
 
-#: fortran/resolve.c:13270
+#: fortran/resolve.c:13230
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Component %s of SEQUENCE type declared at %L does not have the SEQUENCE "
 "attribute"
 msgstr ""
 
-#: fortran/resolve.c:13288 fortran/resolve.c:13300
+#: fortran/resolve.c:13248 fortran/resolve.c:13260
 #, gcc-internal-format
 msgid ""
 "The pointer component %qs of %qs at %L is a type that has not been declared"
 msgstr ""
 
-#: fortran/resolve.c:13312
+#: fortran/resolve.c:13272
 #, gcc-internal-format
 msgid "Component %qs with CLASS at %L must be allocatable or pointer"
 msgstr ""
 
-#: fortran/resolve.c:13380
+#: fortran/resolve.c:13339
+#, gcc-internal-format, gfc-internal-format
+msgid "Conflicting initializers in union at %L and %L"
+msgstr ""
+
+#: fortran/resolve.c:13383
+#, gcc-internal-format
+msgid ""
+"As extending type %qs at %L has a coarray component, parent type %qs shall "
+"also have one"
+msgstr ""
+
+#: fortran/resolve.c:13396
+#, gcc-internal-format
+msgid "Non-extensible derived-type %qs at %L must not be ABSTRACT"
+msgstr ""
+
+#: fortran/resolve.c:13450
 #, gcc-internal-format
 msgid ""
 "Generic name %qs of function %qs at %L being the same name as derived type "
 "at %L"
 msgstr ""
 
-#: fortran/resolve.c:13436
+#: fortran/resolve.c:13506
 #, gcc-internal-format
 msgid "Assumed size array %qs in namelist %qs at %L is not allowed"
 msgstr ""
 
-#: fortran/resolve.c:13442
+#: fortran/resolve.c:13512
 #, gcc-internal-format
 msgid "NAMELIST array object %qs with assumed shape in namelist %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13448
+#: fortran/resolve.c:13518
 #, gcc-internal-format
 msgid "NAMELIST array object %qs with nonconstant shape in namelist %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13456
+#: fortran/resolve.c:13526
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs with nonconstant character length in namelist %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13466
+#: fortran/resolve.c:13536
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs in namelist %qs at %L is polymorphic and requires a "
 "defined input/output procedure"
 msgstr ""
 
-#: fortran/resolve.c:13476
+#: fortran/resolve.c:13546
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs in namelist %qs at %L with ALLOCATABLE or POINTER "
@@ -57430,476 +57664,476 @@ msgstr ""
 
 #. FIXME: Once UDDTIO is implemented, the following can be
 #. removed.
-#: fortran/resolve.c:13484
+#: fortran/resolve.c:13554
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs in namelist %qs at %L has ALLOCATABLE or POINTER "
 "components and thus requires a defined input/output procedure"
 msgstr ""
 
-#: fortran/resolve.c:13501
+#: fortran/resolve.c:13571
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs was declared PRIVATE and cannot be member of PUBLIC "
 "namelist %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13511
+#: fortran/resolve.c:13581
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs has use-associated PRIVATE components and cannot be "
 "member of namelist %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13522
+#: fortran/resolve.c:13592
 #, gcc-internal-format
 msgid ""
 "NAMELIST object %qs has PRIVATE components and cannot be a member of PUBLIC "
 "namelist %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13549
+#: fortran/resolve.c:13619
 #, gcc-internal-format
 msgid "PROCEDURE attribute conflicts with NAMELIST attribute in %qs at %L"
 msgstr ""
 
-#: fortran/resolve.c:13568
+#: fortran/resolve.c:13638
 #, gcc-internal-format
 msgid "Parameter array %qs at %L cannot be automatic or of deferred shape"
 msgstr ""
 
-#: fortran/resolve.c:13580
+#: fortran/resolve.c:13650
 #, gcc-internal-format
 msgid ""
 "Implicitly typed PARAMETER %qs at %L doesn't match a later IMPLICIT type"
 msgstr ""
 
-#: fortran/resolve.c:13591
+#: fortran/resolve.c:13661
 #, gcc-internal-format, gfc-internal-format
 msgid "Incompatible derived type in PARAMETER at %L"
 msgstr ""
 
-#: fortran/resolve.c:13678
+#: fortran/resolve.c:13753
 #, gcc-internal-format, gfc-internal-format
 msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L"
 msgstr ""
 
-#: fortran/resolve.c:13681
+#: fortran/resolve.c:13756
 #, gcc-internal-format, gfc-internal-format
 msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L"
 msgstr ""
 
-#: fortran/resolve.c:13770
+#: fortran/resolve.c:13849
 #, 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.c:13788
+#: fortran/resolve.c:13867
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed size array at %L must be a dummy argument"
 msgstr ""
 
-#: fortran/resolve.c:13791
+#: fortran/resolve.c:13870
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed shape array at %L must be a dummy argument"
 msgstr ""
 
-#: fortran/resolve.c:13799
+#: fortran/resolve.c:13878
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-rank array at %L must be a dummy argument"
 msgstr ""
 
-#: fortran/resolve.c:13806
+#: fortran/resolve.c:13885
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Assumed-rank array at %L may not have the VALUE or CODIMENSION attribute"
 msgstr ""
 
-#: fortran/resolve.c:13819
+#: fortran/resolve.c:13898
 #, gcc-internal-format, gfc-internal-format
 msgid "Symbol at %L is not a DUMMY variable"
 msgstr ""
 
-#: fortran/resolve.c:13825
+#: fortran/resolve.c:13904
 #, gcc-internal-format
 msgid ""
 "%qs at %L cannot have the VALUE attribute because it is not a dummy argument"
 msgstr ""
 
-#: fortran/resolve.c:13835
+#: fortran/resolve.c:13914
 #, gcc-internal-format
 msgid ""
 "Character dummy variable %qs at %L with VALUE attribute must have constant "
 "length"
 msgstr ""
 
-#: fortran/resolve.c:13844
+#: fortran/resolve.c:13923
 #, gcc-internal-format
 msgid ""
 "C interoperable character dummy variable %qs at %L with VALUE attribute must "
 "have length one"
 msgstr ""
 
-#: fortran/resolve.c:13857 fortran/resolve.c:14024
+#: fortran/resolve.c:13936 fortran/resolve.c:14103
 #, gcc-internal-format
 msgid "The derived type %qs at %L is of type %qs, which has not been defined"
 msgstr ""
 
-#: fortran/resolve.c:13871
+#: fortran/resolve.c:13950
 #, gcc-internal-format, gfc-internal-format
 msgid "Variable %s at %L with NO_ARG_CHECK attribute shall be a dummy argument"
 msgstr ""
 
-#: fortran/resolve.c:13880
+#: fortran/resolve.c:13959
 #, 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.c:13889
+#: fortran/resolve.c:13968
 #, 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.c:13897
+#: fortran/resolve.c:13976
 #, 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.c:13904
+#: fortran/resolve.c:13983
 #, 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.c:13924
+#: fortran/resolve.c:14003
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed type of variable %s at %L is only permitted for dummy variables"
 msgstr ""
 
-#: fortran/resolve.c:13931
+#: fortran/resolve.c:14010
 #, 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.c:13938
+#: fortran/resolve.c:14017
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute"
 msgstr ""
 
-#: fortran/resolve.c:13945
+#: fortran/resolve.c:14024
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-type variable %s at %L shall not be an explicit-shape array"
 msgstr ""
 
-#: fortran/resolve.c:13970
+#: fortran/resolve.c:14049
 #, 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.c:14050
+#: fortran/resolve.c:14129
 #, gcc-internal-format
 msgid "PUBLIC %s %qs at %L of PRIVATE derived type %qs"
 msgstr ""
 
-#: fortran/resolve.c:14065
+#: fortran/resolve.c:14144
 #, 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.c:14078
+#: fortran/resolve.c:14157
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "Variable %s at %L of type EVENT_TYPE or with subcomponent of type LOCK_TYPE "
 "must be a coarray"
 msgstr ""
 
-#: fortran/resolve.c:14096
+#: fortran/resolve.c:14175
 #, 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.c:14108
+#: fortran/resolve.c:14187
 #, gcc-internal-format
 msgid "Dummy argument %qs at %L of LOCK_TYPE shall not be INTENT(OUT)"
 msgstr ""
 
-#: fortran/resolve.c:14117
+#: fortran/resolve.c:14196
 #, gcc-internal-format
 msgid "Dummy argument %qs at %L of EVENT_TYPE shall not be INTENT(OUT)"
 msgstr ""
 
-#: fortran/resolve.c:14129
+#: fortran/resolve.c:14208
 #, gcc-internal-format
 msgid ""
 "Function result %qs at %L shall not be a coarray or have a coarray component"
 msgstr ""
 
-#: fortran/resolve.c:14138
+#: fortran/resolve.c:14217
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray"
 msgstr ""
 
-#: fortran/resolve.c:14150
+#: fortran/resolve.c:14229
 #, 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.c:14165
+#: fortran/resolve.c:14244
 #, gcc-internal-format
 msgid ""
 "Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy "
 "argument"
 msgstr ""
 
-#: fortran/resolve.c:14173
+#: fortran/resolve.c:14252
 #, gcc-internal-format
 msgid ""
 "Coarray variable %qs at %L shall not have codimensions with deferred shape"
 msgstr ""
 
-#: fortran/resolve.c:14180
+#: fortran/resolve.c:14259
 #, gcc-internal-format
 msgid "Allocatable coarray variable %qs at %L must have deferred shape"
 msgstr ""
 
-#: fortran/resolve.c:14192
+#: fortran/resolve.c:14271
 #, 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.c:14201
+#: fortran/resolve.c:14280
 #, gcc-internal-format
 msgid "Coarray dummy variable %qs at %L not allowed in BIND(C) procedure %qs"
 msgstr ""
 
-#: fortran/resolve.c:14217
+#: fortran/resolve.c:14296
 #, gcc-internal-format
 msgid ""
 "LOGICAL dummy argument %qs at %L with non-C_Bool kind in BIND(C) procedure "
 "%qs"
 msgstr ""
 
-#: fortran/resolve.c:14223
+#: fortran/resolve.c:14302
 #, gcc-internal-format
 msgid ""
 "LOGICAL result variable %qs at %L with non-C_Bool kind in BIND(C) procedure "
 "%qs"
 msgstr ""
 
-#: fortran/resolve.c:14248
+#: fortran/resolve.c:14327
 #, gcc-internal-format, gfc-internal-format
 msgid "Namelist '%s' can not be an argument to subroutine or function at %L"
 msgstr ""
 
-#: fortran/resolve.c:14317
+#: fortran/resolve.c:14396
 #, gcc-internal-format, gfc-internal-format
 msgid "Threadprivate at %L isn't SAVEd"
 msgstr ""
 
-#: fortran/resolve.c:14328
+#: fortran/resolve.c:14407
 #, gcc-internal-format
 msgid "!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd"
 msgstr ""
 
-#: fortran/resolve.c:14420
+#: fortran/resolve.c:14499
 #, gcc-internal-format
 msgid "check_data_variable(): Bad expression"
 msgstr ""
 
-#: fortran/resolve.c:14426
+#: fortran/resolve.c:14505
 #, gcc-internal-format
 msgid "BLOCK DATA element %qs at %L must be in COMMON"
 msgstr ""
 
-#: fortran/resolve.c:14432
+#: fortran/resolve.c:14511
 #, gcc-internal-format
 msgid "DATA array %qs at %L must be specified in a previous declaration"
 msgstr ""
 
-#: fortran/resolve.c:14441
+#: fortran/resolve.c:14520
 #, gcc-internal-format
 msgid "DATA element %qs at %L cannot have a coindex"
 msgstr ""
 
-#: fortran/resolve.c:14455
+#: fortran/resolve.c:14534
 #, gcc-internal-format
 msgid "DATA element %qs at %L is a pointer and so must be a full array"
 msgstr ""
 
-#: fortran/resolve.c:14501
+#: fortran/resolve.c:14580
 #, gcc-internal-format, gfc-internal-format
 msgid "Nonconstant array section at %L in DATA statement"
 msgstr ""
 
-#: fortran/resolve.c:14514
+#: fortran/resolve.c:14593
 #, gcc-internal-format, gfc-internal-format
 msgid "DATA statement at %L has more variables than values"
 msgstr ""
 
-#: fortran/resolve.c:14613
+#: fortran/resolve.c:14692
 #, 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.c:14621
+#: fortran/resolve.c:14700
 #, 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.c:14629
+#: fortran/resolve.c:14708
 #, 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.c:14754
+#: fortran/resolve.c:14833
 #, gcc-internal-format, gfc-internal-format
 msgid "DATA statement at %L has more values than variables"
 msgstr ""
 
-#: fortran/resolve.c:14919
+#: fortran/resolve.c:14998
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d at %L defined but not used"
 msgstr ""
 
-#: fortran/resolve.c:14924
+#: fortran/resolve.c:15003
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d at %L defined but cannot be used"
 msgstr ""
 
-#: fortran/resolve.c:15008
+#: fortran/resolve.c:15087
 #, gcc-internal-format
 msgid ""
 "Derived type variable %qs at %L must have SEQUENCE attribute to be an "
 "EQUIVALENCE object"
 msgstr ""
 
-#: fortran/resolve.c:15017
+#: fortran/resolve.c:15096
 #, gcc-internal-format
 msgid ""
 "Derived type variable %qs at %L cannot have ALLOCATABLE components to be an "
 "EQUIVALENCE object"
 msgstr ""
 
-#: fortran/resolve.c:15025
+#: fortran/resolve.c:15104
 #, 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.c:15041
+#: fortran/resolve.c:15120
 #, gcc-internal-format
 msgid ""
 "Derived type variable %qs at %L with pointer component(s) cannot be an "
 "EQUIVALENCE object"
 msgstr ""
 
-#: fortran/resolve.c:15144
+#: fortran/resolve.c:15223
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in EQUIVALENCE statement at %L"
 msgstr ""
 
-#: fortran/resolve.c:15159
+#: fortran/resolve.c:15238
 #, 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.c:15171
+#: fortran/resolve.c:15250
 #, gcc-internal-format
 msgid ""
 "Common block member %qs at %L cannot be an EQUIVALENCE object in the pure "
 "procedure %qs"
 msgstr ""
 
-#: fortran/resolve.c:15180
+#: fortran/resolve.c:15259
 #, gcc-internal-format
 msgid "Named constant %qs at %L cannot be an EQUIVALENCE object"
 msgstr ""
 
-#: fortran/resolve.c:15253
+#: fortran/resolve.c:15332
 #, gcc-internal-format
 msgid ""
 "Array %qs at %L with non-constant bounds cannot be an EQUIVALENCE object"
 msgstr ""
 
-#: fortran/resolve.c:15264
+#: fortran/resolve.c:15343
 #, gcc-internal-format
 msgid "Structure component %qs at %L cannot be an EQUIVALENCE object"
 msgstr ""
 
-#: fortran/resolve.c:15275
+#: fortran/resolve.c:15354
 #, gcc-internal-format, gfc-internal-format
 msgid "Substring at %L has length zero"
 msgstr ""
 
-#: fortran/resolve.c:15318
+#: fortran/resolve.c:15397
 #, gcc-internal-format
 msgid "PUBLIC function %qs at %L of PRIVATE type %qs"
 msgstr ""
 
-#: fortran/resolve.c:15331
+#: fortran/resolve.c:15410
 #, gcc-internal-format
 msgid "ENTRY %qs at %L has no IMPLICIT type"
 msgstr ""
 
-#: fortran/resolve.c:15348
+#: fortran/resolve.c:15427
 #, gcc-internal-format
 msgid "User operator procedure %qs at %L must be a FUNCTION"
 msgstr ""
 
-#: fortran/resolve.c:15358
+#: fortran/resolve.c:15437
 #, gcc-internal-format
 msgid "User operator procedure %qs at %L cannot be assumed character length"
 msgstr ""
 
-#: fortran/resolve.c:15366
+#: fortran/resolve.c:15445
 #, gcc-internal-format
 msgid "User operator procedure %qs at %L must have at least one argument"
 msgstr ""
 
-#: fortran/resolve.c:15380
+#: fortran/resolve.c:15459
 #, gcc-internal-format, gfc-internal-format
 msgid "First argument of operator interface at %L cannot be optional"
 msgstr ""
 
-#: fortran/resolve.c:15398
+#: fortran/resolve.c:15477
 #, gcc-internal-format, gfc-internal-format
 msgid "Second argument of operator interface at %L cannot be optional"
 msgstr ""
 
-#: fortran/resolve.c:15405
+#: fortran/resolve.c:15484
 #, gcc-internal-format, gfc-internal-format
 msgid "Operator interface at %L must have, at most, two arguments"
 msgstr ""
 
-#: fortran/resolve.c:15483
+#: fortran/resolve.c:15562
 #, gcc-internal-format
 msgid "Contained procedure %qs at %L of a PURE procedure must also be PURE"
 msgstr ""
@@ -57953,32 +58187,32 @@ msgstr ""
 msgid "Missing %<&%> in continued character constant at %C"
 msgstr ""
 
-#: fortran/scanner.c:1691
+#: fortran/scanner.c:1692
 #, gcc-internal-format, gfc-internal-format
 msgid "Nonconforming tab character at %C"
 msgstr ""
 
-#: fortran/scanner.c:1779 fortran/scanner.c:1782
+#: fortran/scanner.c:1780 fortran/scanner.c:1783
 #, gcc-internal-format
 msgid "%<&%> not allowed by itself in line %d"
 msgstr ""
 
-#: fortran/scanner.c:1841
+#: fortran/scanner.c:1842
 #, gcc-internal-format, gfc-internal-format
 msgid "Nonconforming tab character in column %d of line %d"
 msgstr ""
 
-#: fortran/scanner.c:2070
+#: fortran/scanner.c:2071
 #, gcc-internal-format
 msgid "file %qs left but not entered"
 msgstr ""
 
-#: fortran/scanner.c:2108
+#: fortran/scanner.c:2109
 #, gcc-internal-format
 msgid "Illegal preprocessor directive"
 msgstr ""
 
-#: fortran/scanner.c:2235
+#: fortran/scanner.c:2236
 #, gcc-internal-format
 msgid "Can't open file %qs"
 msgstr ""
@@ -58175,44 +58409,44 @@ msgstr ""
 msgid "DIM argument at %L is out of bounds"
 msgstr ""
 
-#: fortran/simplify.c:3927
+#: fortran/simplify.c:3931
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of LOG at %L cannot be less than or equal to zero"
 msgstr ""
 
-#: fortran/simplify.c:3940
+#: fortran/simplify.c:3944
 #, gcc-internal-format, gfc-internal-format
 msgid "Complex argument of LOG at %L cannot be zero"
 msgstr ""
 
-#: fortran/simplify.c:3951
+#: fortran/simplify.c:3955
 #, gcc-internal-format
 msgid "gfc_simplify_log: bad type"
 msgstr ""
 
-#: fortran/simplify.c:3968
+#: fortran/simplify.c:3972
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of LOG10 at %L cannot be less than or equal to zero"
 msgstr ""
 
-#: fortran/simplify.c:4271
+#: fortran/simplify.c:4275
 #, gcc-internal-format
 msgid "simplify_min_max(): Bad type in arglist"
 msgstr ""
 
 #. Result is processor-dependent.
-#: fortran/simplify.c:4447
+#: fortran/simplify.c:4451
 #, gcc-internal-format, gfc-internal-format
 msgid "Second argument MOD at %L is zero"
 msgstr ""
 
 #. Result is processor-dependent.
-#: fortran/simplify.c:4458
+#: fortran/simplify.c:4462
 #, gcc-internal-format, gfc-internal-format
 msgid "Second argument of MOD at %L is zero"
 msgstr ""
 
-#: fortran/simplify.c:4469
+#: fortran/simplify.c:4473
 #, gcc-internal-format
 msgid "gfc_simplify_mod(): Bad arguments"
 msgstr ""
@@ -58220,57 +58454,57 @@ msgstr ""
 #. Result is processor-dependent. This processor just opts
 #. to not handle it at all.
 #. Result is processor-dependent.
-#: fortran/simplify.c:4495 fortran/simplify.c:4507
+#: fortran/simplify.c:4499 fortran/simplify.c:4511
 #, gcc-internal-format, gfc-internal-format
 msgid "Second argument of MODULO at %L is zero"
 msgstr ""
 
-#: fortran/simplify.c:4527
+#: fortran/simplify.c:4531
 #, gcc-internal-format
 msgid "gfc_simplify_modulo(): Bad arguments"
 msgstr ""
 
-#: fortran/simplify.c:4575
+#: fortran/simplify.c:4579
 #, gcc-internal-format, gfc-internal-format
 msgid "Result of NEAREST is NaN at %L"
 msgstr ""
 
-#: fortran/simplify.c:5051
+#: fortran/simplify.c:5055
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument NCOPIES of REPEAT intrinsic is negative at %L"
 msgstr ""
 
-#: fortran/simplify.c:5106
+#: fortran/simplify.c:5110
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument NCOPIES of REPEAT intrinsic is too large at %L"
 msgstr ""
 
-#: fortran/simplify.c:5259
+#: fortran/simplify.c:5263
 #, gcc-internal-format, gfc-internal-format
 msgid "Reshaped array too large at %C"
 msgstr ""
 
-#: fortran/simplify.c:5373
+#: fortran/simplify.c:5377
 #, gcc-internal-format, gfc-internal-format
 msgid "Result of SCALE overflows its kind at %L"
 msgstr ""
 
-#: fortran/simplify.c:5952
+#: fortran/simplify.c:5956
 #, gcc-internal-format
 msgid "Bad type in gfc_simplify_sign"
 msgstr ""
 
-#: fortran/simplify.c:5981
+#: fortran/simplify.c:5985
 #, gcc-internal-format
 msgid "in gfc_simplify_sin(): Bad type"
 msgstr ""
 
-#: fortran/simplify.c:6108 fortran/simplify.c:6353
+#: fortran/simplify.c:6112 fortran/simplify.c:6357
 #, gcc-internal-format
 msgid "Failure getting length of a constant array."
 msgstr ""
 
-#: fortran/simplify.c:6118
+#: fortran/simplify.c:6122
 #, gcc-internal-format
 msgid ""
 "The number of elements (%d) in the array constructor at %L requires an "
@@ -58278,41 +58512,41 @@ msgid ""
 "option."
 msgstr ""
 
-#: fortran/simplify.c:6184
+#: fortran/simplify.c:6188
 #, gcc-internal-format, gfc-internal-format
 msgid "Simplification of SPREAD at %L not yet implemented"
 msgstr ""
 
-#: fortran/simplify.c:6209
+#: fortran/simplify.c:6213
 #, gcc-internal-format, gfc-internal-format
 msgid "Argument of SQRT at %L has a negative value"
 msgstr ""
 
-#: fortran/simplify.c:6225
+#: fortran/simplify.c:6229
 #, gcc-internal-format, gfc-internal-format
 msgid "invalid argument of SQRT at %L"
 msgstr ""
 
-#: fortran/simplify.c:6520
+#: fortran/simplify.c:6524
 #, 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.c:6543
+#: fortran/simplify.c:6547
 #, 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.c:6878
+#: fortran/simplify.c:6882
 #, gcc-internal-format
 msgid "gfc_convert_constant(): Unexpected type"
 msgstr ""
 
-#: fortran/simplify.c:6964
+#: fortran/simplify.c:6968
 #, gcc-internal-format
 msgid ""
 "Character %qs in string at %L cannot be converted into character kind %d"
@@ -58323,50 +58557,50 @@ msgstr ""
 msgid "gfc_free_statement(): Bad statement"
 msgstr ""
 
-#: fortran/symbol.c:131
+#: fortran/symbol.c:132
 #, gcc-internal-format, gfc-internal-format
 msgid "IMPLICIT NONE (type) statement at %L following an IMPLICIT statement"
 msgstr ""
 
-#: fortran/symbol.c:168
+#: fortran/symbol.c:169
 #, gcc-internal-format
 msgid "Letter %qc already set in IMPLICIT statement at %C"
 msgstr ""
 
-#: fortran/symbol.c:190
+#: fortran/symbol.c:191
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot specify IMPLICIT at %C after IMPLICIT NONE"
 msgstr ""
 
-#: fortran/symbol.c:200
+#: fortran/symbol.c:201
 #, gcc-internal-format
 msgid "Letter %qc already has an IMPLICIT type at %C"
 msgstr ""
 
-#: fortran/symbol.c:224
+#: fortran/symbol.c:225
 #, gcc-internal-format
 msgid ""
 "Option %<-fallow-leading-underscore%> is for use only by gfortran "
 "developers, and should not be used for implicitly typed variables"
 msgstr ""
 
-#: fortran/symbol.c:229
+#: fortran/symbol.c:230
 #, gcc-internal-format
 msgid "gfc_get_default_type(): Bad symbol %qs"
 msgstr ""
 
-#: fortran/symbol.c:248
+#: fortran/symbol.c:249
 #, gcc-internal-format
 msgid "gfc_set_default_type(): symbol already has a type"
 msgstr ""
 
-#: fortran/symbol.c:256
+#: fortran/symbol.c:257
 #, gcc-internal-format
 msgid "Symbol %qs at %L has no IMPLICIT type"
 msgstr ""
 
 #. BIND(C) variables should not be implicitly declared.
-#: fortran/symbol.c:276
+#: fortran/symbol.c:277
 #, gcc-internal-format
 msgid ""
 "Implicitly declared BIND(C) variable %qs at %L may not be C interoperable"
@@ -58374,139 +58608,139 @@ msgstr ""
 
 #. Dummy args to a BIND(C) routine may not be interoperable if
 #. they are implicitly typed.
-#: fortran/symbol.c:292
+#: fortran/symbol.c:293
 #, gcc-internal-format
 msgid ""
 "Implicitly declared variable %qs at %L may not be C interoperable but it is "
 "a dummy argument to the BIND(C) procedure %qs at %L"
 msgstr ""
 
-#: fortran/symbol.c:333
+#: fortran/symbol.c:334
 #, gcc-internal-format
 msgid "Function result %qs at %L has no IMPLICIT type"
 msgstr ""
 
-#: fortran/symbol.c:429
+#: fortran/symbol.c:430
 #, gcc-internal-format, gfc-internal-format
 msgid "%s attribute not allowed in BLOCK DATA program unit at %L"
 msgstr ""
 
-#: fortran/symbol.c:453
+#: fortran/symbol.c:454
 #, gcc-internal-format, gfc-internal-format
 msgid "Namelist group name at %L cannot have the SAVE attribute"
 msgstr ""
 
-#: fortran/symbol.c:468
+#: fortran/symbol.c:469
 #, gcc-internal-format
 msgid "internal procedure %qs at %L conflicts with DUMMY argument"
 msgstr ""
 
-#: fortran/symbol.c:494
+#: fortran/symbol.c:495
 #, gcc-internal-format, gfc-internal-format
 msgid "Procedure pointer at %C"
 msgstr ""
 
-#: fortran/symbol.c:679
+#: fortran/symbol.c:680
 #, gcc-internal-format, gfc-internal-format
 msgid "%s attribute applied to %s %s at %L"
 msgstr ""
 
-#: fortran/symbol.c:686
+#: fortran/symbol.c:687
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) applied to %s %s at %L"
 msgstr ""
 
-#: fortran/symbol.c:802 fortran/symbol.c:1599
+#: fortran/symbol.c:803 fortran/symbol.c:1600
 #, gcc-internal-format, gfc-internal-format
 msgid "%s attribute conflicts with %s attribute at %L"
 msgstr ""
 
-#: fortran/symbol.c:805
+#: fortran/symbol.c:806
 #, gcc-internal-format
 msgid "%s attribute conflicts with %s attribute in %qs at %L"
 msgstr ""
 
-#: fortran/symbol.c:813
+#: fortran/symbol.c:814
 #, gcc-internal-format, gfc-internal-format
 msgid "%s attribute with %s attribute at %L"
 msgstr ""
 
-#: fortran/symbol.c:819
+#: fortran/symbol.c:820
 #, gcc-internal-format
 msgid "%s attribute with %s attribute in %qs at %L"
 msgstr ""
 
-#: fortran/symbol.c:863
+#: fortran/symbol.c:864
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot change attributes of USE-associated symbol at %L"
 msgstr ""
 
-#: fortran/symbol.c:866
+#: fortran/symbol.c:867
 #, gcc-internal-format, gfc-internal-format
 msgid "Cannot change attributes of USE-associated symbol %s at %L"
 msgstr ""
 
-#: fortran/symbol.c:882
+#: fortran/symbol.c:883
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate %s attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:924
+#: fortran/symbol.c:925
 #, gcc-internal-format, gfc-internal-format
 msgid "ALLOCATABLE specified outside of INTERFACE body at %L"
 msgstr ""
 
-#: fortran/symbol.c:950
+#: fortran/symbol.c:951
 #, gcc-internal-format
 msgid "CODIMENSION specified for %qs outside its INTERFACE body at %L"
 msgstr ""
 
-#: fortran/symbol.c:976
+#: fortran/symbol.c:977
 #, gcc-internal-format
 msgid "DIMENSION specified for %qs outside its INTERFACE body at %L"
 msgstr ""
 
-#: fortran/symbol.c:1106
+#: fortran/symbol.c:1107
 #, gcc-internal-format, gfc-internal-format
 msgid "Cray Pointee at %L appears in multiple pointer() statements"
 msgstr ""
 
-#: fortran/symbol.c:1125
+#: fortran/symbol.c:1126
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate PROTECTED attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1158
+#: fortran/symbol.c:1159
 #, gcc-internal-format, gfc-internal-format
 msgid "SAVE attribute at %L cannot be specified in a PURE procedure"
 msgstr ""
 
-#: fortran/symbol.c:1169
+#: fortran/symbol.c:1170
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate SAVE attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1189
+#: fortran/symbol.c:1190
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate VALUE attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1208
+#: fortran/symbol.c:1209
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate VOLATILE attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1227
+#: fortran/symbol.c:1228
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate ASYNCHRONOUS attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1595
+#: fortran/symbol.c:1596
 #, gcc-internal-format
 msgid "%s attribute of %qs conflicts with %s attribute at %L"
 msgstr ""
 
-#: fortran/symbol.c:1631
+#: fortran/symbol.c:1632
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "%s procedure at %L is already declared as %s procedure. \n"
@@ -58515,227 +58749,227 @@ msgid ""
 "kind of executable statement before it. FIXME"
 msgstr ""
 
-#: fortran/symbol.c:1639
+#: fortran/symbol.c:1640
 #, gcc-internal-format, gfc-internal-format
 msgid "%s procedure at %L is already declared as %s procedure"
 msgstr ""
 
-#: fortran/symbol.c:1674
+#: fortran/symbol.c:1675
 #, gcc-internal-format, gfc-internal-format
 msgid "INTENT (%s) conflicts with INTENT(%s) at %L"
 msgstr ""
 
-#: fortran/symbol.c:1698
+#: fortran/symbol.c:1699
 #, gcc-internal-format, gfc-internal-format
 msgid "ACCESS specification at %L was already specified"
 msgstr ""
 
-#: fortran/symbol.c:1715
+#: fortran/symbol.c:1716
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate BIND attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1722
+#: fortran/symbol.c:1723
 #, gcc-internal-format, gfc-internal-format
 msgid "BIND(C) at %L"
 msgstr ""
 
-#: fortran/symbol.c:1738
+#: fortran/symbol.c:1739
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate EXTENDS attribute specified at %L"
 msgstr ""
 
-#: fortran/symbol.c:1742
+#: fortran/symbol.c:1743
 #, gcc-internal-format, gfc-internal-format
 msgid "EXTENDS at %L"
 msgstr ""
 
-#: fortran/symbol.c:1768
+#: fortran/symbol.c:1769
 #, gcc-internal-format
 msgid "Symbol %qs at %L already has an explicit interface"
 msgstr ""
 
-#: fortran/symbol.c:1775
+#: fortran/symbol.c:1776
 #, gcc-internal-format
 msgid "%qs at %L has attributes specified outside its INTERFACE body"
 msgstr ""
 
-#: fortran/symbol.c:1813
+#: fortran/symbol.c:1814
 #, gcc-internal-format
 msgid ""
 "Symbol %qs at %L conflicts with symbol from module %qs, use-associated at %L"
 msgstr ""
 
-#: fortran/symbol.c:1817
+#: fortran/symbol.c:1818
 #, gcc-internal-format
 msgid "Symbol %qs at %L already has basic type of %s"
 msgstr ""
 
-#: fortran/symbol.c:1824
+#: fortran/symbol.c:1825
 #, gcc-internal-format
 msgid "Procedure %qs at %L may not have basic type of %s"
 msgstr ""
 
-#: fortran/symbol.c:1836
+#: fortran/symbol.c:1837
 #, gcc-internal-format
 msgid "Symbol %qs at %L cannot have a type"
 msgstr ""
 
-#: fortran/symbol.c:2057
+#: fortran/symbol.c:2063
 #, gcc-internal-format
 msgid "Component %qs at %C already declared at %L"
 msgstr ""
 
-#: fortran/symbol.c:2068
+#: fortran/symbol.c:2075
 #, gcc-internal-format
 msgid "Component %qs at %C already in the parent type at %L"
 msgstr ""
 
-#: fortran/symbol.c:2153
+#: fortran/symbol.c:2160
 #, gcc-internal-format
 msgid "Symbol %qs at %C is ambiguous"
 msgstr ""
 
-#: fortran/symbol.c:2185
+#: fortran/symbol.c:2192
 #, gcc-internal-format
 msgid "Derived type %qs at %C is being used before it is defined"
 msgstr ""
 
-#: fortran/symbol.c:2223
+#: fortran/symbol.c:2315
 #, gcc-internal-format
 msgid "Component %qs at %C is a PRIVATE component of %qs"
 msgstr ""
 
-#: fortran/symbol.c:2241
+#: fortran/symbol.c:2333
 #, gcc-internal-format
 msgid "%qs at %C is not a member of the %qs structure"
 msgstr ""
 
-#: fortran/symbol.c:2381
+#: fortran/symbol.c:2492
 #, gcc-internal-format, gfc-internal-format
 msgid "Duplicate statement label %d at %L and %L"
 msgstr ""
 
-#: fortran/symbol.c:2392
+#: fortran/symbol.c:2503
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d at %C already referenced as branch target"
 msgstr ""
 
-#: fortran/symbol.c:2402
+#: fortran/symbol.c:2513
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d at %C already referenced as a format label"
 msgstr ""
 
-#: fortran/symbol.c:2408
+#: fortran/symbol.c:2519
 #, gcc-internal-format, gfc-internal-format
 msgid ""
 "DO termination statement which is not END DO or CONTINUE with label %d at %C"
 msgstr ""
 
-#: fortran/symbol.c:2450
+#: fortran/symbol.c:2561
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d at %C previously used as a FORMAT label"
 msgstr ""
 
-#: fortran/symbol.c:2459
+#: fortran/symbol.c:2570
 #, gcc-internal-format, gfc-internal-format
 msgid "Label %d at %C previously used as branch target"
 msgstr ""
 
-#: fortran/symbol.c:2465
+#: fortran/symbol.c:2576
 #, gcc-internal-format, gfc-internal-format
 msgid "Shared DO termination label %d at %C"
 msgstr ""
 
-#: fortran/symbol.c:2781
+#: fortran/symbol.c:2892
 #, gcc-internal-format
 msgid "new_symbol(): Symbol name too long"
 msgstr ""
 
-#: fortran/symbol.c:2805
+#: fortran/symbol.c:2916
 #, gcc-internal-format
 msgid "Name %qs at %C is an ambiguous reference to %qs from module %qs"
 msgstr ""
 
-#: fortran/symbol.c:2808
+#: fortran/symbol.c:2919
 #, gcc-internal-format
 msgid ""
 "Name %qs at %C is an ambiguous reference to %qs from current program unit"
 msgstr ""
 
 #. Symbol is from another namespace.
-#: fortran/symbol.c:3029
+#: fortran/symbol.c:3140
 #, gcc-internal-format
 msgid "Symbol %qs at %C has already been host associated"
 msgstr ""
 
-#: fortran/symbol.c:4022
+#: fortran/symbol.c:4131
 #, gcc-internal-format
 msgid "verify_bind_c_derived_type(): Given symbol is unexpectedly NULL"
 msgstr ""
 
-#: fortran/symbol.c:4035
+#: fortran/symbol.c:4144
 #, gcc-internal-format
 msgid ""
 "Derived type %qs declared at %L must have the BIND attribute to be C "
 "interoperable"
 msgstr ""
 
-#: fortran/symbol.c:4053
+#: fortran/symbol.c:4162
 #, gcc-internal-format
 msgid ""
 "Derived type %qs with BIND(C) attribute at %L is empty, and may be "
 "inaccessible by the C companion processor"
 msgstr ""
 
-#: fortran/symbol.c:4074
+#: fortran/symbol.c:4183
 #, gcc-internal-format
 msgid ""
 "Component %qs at %L cannot have the POINTER attribute because it is a member "
 "of the BIND(C) derived type %qs at %L"
 msgstr ""
 
-#: fortran/symbol.c:4084
+#: fortran/symbol.c:4193
 #, gcc-internal-format
 msgid ""
 "Procedure pointer component %qs at %L cannot be a member of the BIND(C) "
 "derived type %qs at %L"
 msgstr ""
 
-#: fortran/symbol.c:4095
+#: fortran/symbol.c:4204
 #, gcc-internal-format
 msgid ""
 "Component %qs at %L cannot have the ALLOCATABLE attribute because it is a "
 "member of the BIND(C) derived type %qs at %L"
 msgstr ""
 
-#: fortran/symbol.c:4134
+#: fortran/symbol.c:4243
 #, gcc-internal-format
 msgid ""
 "Component %qs in derived type %qs at %L may not be C interoperable, even "
 "though derived type %qs is BIND(C)"
 msgstr ""
 
-#: fortran/symbol.c:4144
+#: fortran/symbol.c:4253
 #, gcc-internal-format
 msgid "Component %qs in derived type %qs at %L may not be C interoperable"
 msgstr ""
 
-#: fortran/symbol.c:4158
+#: fortran/symbol.c:4267
 #, gcc-internal-format
 msgid ""
 "Derived type %qs at %L cannot be declared with both PRIVATE and BIND(C) "
 "attributes"
 msgstr ""
 
-#: fortran/symbol.c:4166
+#: fortran/symbol.c:4275
 #, gcc-internal-format
 msgid ""
 "Derived type %qs at %L cannot have the SEQUENCE attribute because it is "
 "BIND(C)"
 msgstr ""
 
-#: fortran/symbol.c:4646 fortran/symbol.c:4651
+#: fortran/symbol.c:4752 fortran/symbol.c:4757
 #, gcc-internal-format
 msgid "Symbol %qs is used before it is typed at %L"
 msgstr ""
@@ -58767,101 +59001,101 @@ msgstr ""
 
 #. Problems occur when we get something like
 #. integer :: a(lots) = (/(i, i=1, lots)/)
-#: fortran/trans-array.c:5659
+#: fortran/trans-array.c:5666
 #, gcc-internal-format
 msgid ""
 "The number of elements in the array constructor at %L requires an increase "
 "of the allowed %d upper limit. See %<-fmax-array-constructor%> option"
 msgstr ""
 
-#: fortran/trans-array.c:7514
+#: fortran/trans-array.c:7531
 #, gcc-internal-format
 msgid "Creating array temporary at %L for argument %qs"
 msgstr ""
 
-#: fortran/trans-array.c:9593
+#: fortran/trans-array.c:9610
 #, gcc-internal-format, gfc-internal-format
 msgid "bad expression type during walk (%d)"
 msgstr ""
 
-#: fortran/trans-common.c:403
+#: fortran/trans-common.c:401
 #, gcc-internal-format
 msgid ""
 "Named COMMON block %qs at %L shall be of the same size as elsewhere (%lu vs "
 "%lu bytes)"
 msgstr ""
 
-#: fortran/trans-common.c:775
+#: fortran/trans-common.c:773
 #, gcc-internal-format
 msgid "get_mpz(): Not an integer constant"
 msgstr ""
 
-#: fortran/trans-common.c:803
+#: fortran/trans-common.c:801
 #, gcc-internal-format
 msgid "element_number(): Bad dimension type"
 msgstr ""
 
-#: fortran/trans-common.c:865
+#: fortran/trans-common.c:863
 #, gcc-internal-format, gfc-internal-format
 msgid "Bad array reference at %L"
 msgstr ""
 
-#: fortran/trans-common.c:873
+#: fortran/trans-common.c:871
 #, gcc-internal-format, gfc-internal-format
 msgid "Illegal reference type at %L as EQUIVALENCE object"
 msgstr ""
 
-#: fortran/trans-common.c:913
+#: fortran/trans-common.c:911
 #, gcc-internal-format
 msgid "Inconsistent equivalence rules involving %qs at %L and %qs at %L"
 msgstr ""
 
 #. Aligning this field would misalign a previous field.
-#: fortran/trans-common.c:1046
+#: fortran/trans-common.c:1044
 #, gcc-internal-format
 msgid ""
 "The equivalence set for variable %qs declared at %L violates alignment "
 "requirements"
 msgstr ""
 
-#: fortran/trans-common.c:1111
+#: fortran/trans-common.c:1109
 #, gcc-internal-format
 msgid "Equivalence for %qs does not match ordering of COMMON %qs at %L"
 msgstr ""
 
-#: fortran/trans-common.c:1126
+#: fortran/trans-common.c:1124
 #, gcc-internal-format
 msgid ""
 "The equivalence set for %qs cause an invalid extension to COMMON %qs at %L"
 msgstr ""
 
-#: fortran/trans-common.c:1142
+#: fortran/trans-common.c:1140
 #, gcc-internal-format
 msgid ""
 "Padding of %d bytes required before %qs in COMMON %qs at %L; reorder "
 "elements or use -fno-align-commons"
 msgstr ""
 
-#: fortran/trans-common.c:1148
+#: fortran/trans-common.c:1146
 #, gcc-internal-format
 msgid ""
 "Padding of %d bytes required before %qs in COMMON at %L; reorder elements or "
 "use -fno-align-commons"
 msgstr ""
 
-#: fortran/trans-common.c:1169
+#: fortran/trans-common.c:1167
 #, gcc-internal-format
 msgid "COMMON %qs at %L does not exist"
 msgstr ""
 
-#: fortran/trans-common.c:1178
+#: fortran/trans-common.c:1176
 #, gcc-internal-format
 msgid ""
 "COMMON %qs at %L requires %d bytes of padding; reorder elements or use %<-"
 "fno-align-commons%>"
 msgstr ""
 
-#: fortran/trans-common.c:1183
+#: fortran/trans-common.c:1181
 #, gcc-internal-format
 msgid ""
 "COMMON at %L requires %d bytes of padding; reorder elements or use %<-fno-"
@@ -58883,74 +59117,74 @@ msgstr ""
 msgid "non-constant initialization expression at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:1557
+#: fortran/trans-decl.c:1573
 #, gcc-internal-format
 msgid "intrinsic variable which isn't a procedure"
 msgstr ""
 
-#: fortran/trans-decl.c:4031 fortran/trans-decl.c:6231
+#: fortran/trans-decl.c:4044 fortran/trans-decl.c:6244
 #, gcc-internal-format
 msgid "Return value of function %qs at %L not set"
 msgstr ""
 
-#: fortran/trans-decl.c:4419
+#: fortran/trans-decl.c:4432
 #, gcc-internal-format
 msgid "Deferred type parameter not yet supported"
 msgstr ""
 
-#: fortran/trans-decl.c:4648
+#: fortran/trans-decl.c:4661
 #, gcc-internal-format
 msgid "backend decl for module variable %qs already exists"
 msgstr ""
 
-#: fortran/trans-decl.c:4661
+#: fortran/trans-decl.c:4674
 #, gcc-internal-format
 msgid "Unused PRIVATE module variable %qs declared at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:5230
+#: fortran/trans-decl.c:5243
 #, gcc-internal-format
 msgid "Dummy argument %qs at %L was declared INTENT(OUT) but was not set"
 msgstr ""
 
-#: fortran/trans-decl.c:5236
+#: fortran/trans-decl.c:5249
 #, 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.c:5246 fortran/trans-decl.c:5377
+#: fortran/trans-decl.c:5259 fortran/trans-decl.c:5390
 #, gcc-internal-format
 msgid "Unused dummy argument %qs at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:5261
+#: fortran/trans-decl.c:5274
 #, gcc-internal-format
 msgid "Unused module variable %qs which has been explicitly imported at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:5270
+#: fortran/trans-decl.c:5283
 #, gcc-internal-format
 msgid "Unused variable %qs declared at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:5319
+#: fortran/trans-decl.c:5332
 #, gcc-internal-format
 msgid "Unused parameter %qs declared at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:5323
+#: fortran/trans-decl.c:5336
 #, gcc-internal-format
 msgid "Unused parameter %qs which has been explicitly imported at %L"
 msgstr ""
 
-#: fortran/trans-decl.c:5349
+#: fortran/trans-decl.c:5362
 #, gcc-internal-format
 msgid "Return value %qs of function %qs declared at %L not set"
 msgstr ""
 
-#: fortran/trans-decl.c:5958
+#: fortran/trans-decl.c:5971
 #, gcc-internal-format, gfc-internal-format
 msgid "Sorry, $!ACC DECLARE at %L is not allowed in BLOCK construct"
 msgstr ""
@@ -58986,12 +59220,12 @@ msgid ""
 "not yet supported"
 msgstr ""
 
-#: fortran/trans-expr.c:3303
+#: fortran/trans-expr.c:3309
 #, gcc-internal-format
 msgid "Unknown intrinsic op"
 msgstr ""
 
-#: fortran/trans-expr.c:4591
+#: fortran/trans-expr.c:4597
 #, gcc-internal-format, gfc-internal-format
 msgid "Unknown argument list function at %L"
 msgstr ""
@@ -59027,7 +59261,7 @@ msgstr ""
 msgid "Bad IO basetype (%d)"
 msgstr ""
 
-#: fortran/trans-openmp.c:4344
+#: fortran/trans-openmp.c:4348
 #, gcc-internal-format
 msgid "gfc_trans_omp_workshare(): Bad statement code"
 msgstr ""
@@ -59112,7 +59346,7 @@ msgstr ""
 msgid "gfc_validate_kind(): Got bad kind"
 msgstr ""
 
-#: fortran/trans-types.c:1463
+#: fortran/trans-types.c:1467
 #, gcc-internal-format, gfc-internal-format
 msgid "Array element size too big at %C"
 msgstr ""
@@ -59152,22 +59386,22 @@ msgstr ""
 msgid "non-static method %q+D overrides static method"
 msgstr ""
 
-#: java/decl.c:1204
+#: java/decl.c:1197
 #, gcc-internal-format
 msgid "%q+D used prior to declaration"
 msgstr ""
 
-#: java/decl.c:1627
+#: java/decl.c:1620
 #, gcc-internal-format
 msgid "In %+D: overlapped variable and exception ranges at %d"
 msgstr ""
 
-#: java/decl.c:1678
+#: java/decl.c:1671
 #, gcc-internal-format
 msgid "bad type in parameter debug info"
 msgstr ""
 
-#: java/decl.c:1687
+#: java/decl.c:1680
 #, gcc-internal-format
 msgid "bad PC range for debug info for local %q+D"
 msgstr ""
index 9148562..3e7de80 100644 (file)
@@ -20,7 +20,7 @@ msgstr ""
 "Project-Id-Version: gcc 6.1.0\n"
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 "POT-Creation-Date: 2016-04-21 15:24+0000\n"
-"PO-Revision-Date: 2016-05-14 00:01+0200\n"
+"PO-Revision-Date: 2016-07-15 19:05+0200\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -301,7 +301,7 @@ msgstr "  --help={common|optimizers|params|target|warnings|[^]{joined|separate|u
 
 #: gcc.c:3388
 msgid "                           Display specific types of command line options.\n"
-msgstr "                           Visa specifika typer av kommandoradsflaggor-\n"
+msgstr "                           Visa specifika typer av kommandoradsflaggor.\n"
 
 #: gcc.c:3390
 msgid "  (Use '-v --help' to display command line options of sub-processes).\n"
@@ -634,7 +634,7 @@ msgstr "  merge [flaggor] <kat1> <kat2>         Slå samman innehåll i täcknin
 #: gcov-tool.c:167 gcov-tool.c:261 gcov-tool.c:417
 #, c-format
 msgid "    -v, --verbose                       Verbose mode\n"
-msgstr "    -v, --version                       Utförligt läge\n"
+msgstr "    -v, --verbose                       Utförligt läge\n"
 
 #: gcov-tool.c:168 gcov-tool.c:262
 #, c-format
@@ -709,7 +709,7 @@ msgstr "    -F, --fullname                      Skriv fullständiga filnamn\n"
 #: gcov-tool.c:421
 #, c-format
 msgid "    -o, --object                        Print object level info\n"
-msgstr "    -o, --objekt                        Skriv objektnivåinfo\n"
+msgstr "    -o, --object                        Skriv objektnivåinfo\n"
 
 #: gcov-tool.c:422
 #, c-format
@@ -2080,7 +2080,7 @@ msgstr "Övre gränsen för att dela heltalskonstanter."
 #: params.def:675
 #, no-c-format
 msgid "The lower bound for a buffer to be considered for stack smashing protection."
-msgstr "Den undre gränsen för att en buffer skall övervägas för skydd mot stacksprängning."
+msgstr "Den undre gränsen för att en buffert skall övervägas för skydd mot stacksprängning."
 
 #: params.def:680
 #, no-c-format
@@ -2140,7 +2140,7 @@ msgstr "Om kanoniska typer skall användas."
 #: params.def:773
 #, no-c-format
 msgid "Maximum length of partial antic set when performing tree pre optimization."
-msgstr "Maximal längd på partial förväntansmängd när föroptimeringar på träd görs."
+msgstr "Maximal längd på partiell förväntansmängd när föroptimeringar på träd görs."
 
 #: params.def:783
 #, no-c-format
@@ -3426,7 +3426,7 @@ msgstr "ogiltigt %%p-värde"
 #: config/iq2000/iq2000.c:3202
 #, c-format
 msgid "invalid use of %%d, %%x, or %%X"
-msgstr "ogiltig användning av %%d, %%x eller %%x"
+msgstr "ogiltig användning av %%d, %%x eller %%X"
 
 #: config/lm32/lm32.c:507
 #, c-format
@@ -3889,7 +3889,7 @@ msgstr "ogiltig operand till %%R"
 #: config/sh/sh.c:1340
 #, c-format
 msgid "invalid operand to %%S"
-msgstr "ogiltig operand till %%R"
+msgstr "ogiltig operand till %%S"
 
 #: config/sh/sh.c:10040
 msgid "created and used with different architectures / ABIs"
@@ -4446,7 +4446,7 @@ msgstr "I statisk medlemsfunktion %qs"
 #: cp/error.c:3291
 #, c-format
 msgid "In copy constructor %qs"
-msgstr "I kopieringskonstuerare %qs"
+msgstr "I kopieringskonstruerare %qs"
 
 #: cp/error.c:3293
 #, c-format
@@ -5711,7 +5711,7 @@ msgstr "Varna för avhuggna källkodsrader."
 
 #: fortran/lang.opt:262
 msgid "Warn on intrinsics not part of the selected standard."
-msgstr "Inbyggd för inbyggda om inte är med i den valda standarden."
+msgstr "Inbyggd för inbyggda som inte är med i den valda standarden."
 
 #: fortran/lang.opt:274
 msgid "Warn about USE statements that have no ONLY qualifier."
@@ -5936,7 +5936,7 @@ msgstr "Okänt argument till -floating-point initieringsvärde: %qs"
 
 #: fortran/lang.opt:551
 msgid "-finline-matmul-limit=<n>\tSpecify the size of the largest matrix for which matmul will be inlined."
-msgstr "-fblas-matmul-limit=<n>\tSpecificera storleken på den största matris för vilken matmul kommer inline:as."
+msgstr "-finline-matmul-limit=<n>\tSpecificera storleken på den största matris för vilken matmul kommer inline:as."
 
 #: fortran/lang.opt:555
 msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor."
@@ -6253,7 +6253,7 @@ msgstr "Varna för index vars typ är ”char”."
 
 #: c-family/c.opt:339
 msgid "Warn about memory access errors found by Pointer Bounds Checker."
-msgstr "Farna för minnesåtkomstfel som hittas av pekargränskontrollen."
+msgstr "Varna för minnesåtkomstfel som hittas av pekargränskontrollen."
 
 #: c-family/c.opt:343
 msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"."
@@ -6677,7 +6677,7 @@ msgstr "Varna vid misstänkta konstruktioner med omvänd ordning av skalärlagri
 
 #: c-family/c.opt:813
 msgid "Warn if a selector has multiple methods."
-msgstr "Varna för en väljare har multipla metoder."
+msgstr "Varna om en väljare har multipla metoder."
 
 #: c-family/c.opt:817
 msgid "Warn about possible violations of sequence point rules."
@@ -6793,7 +6793,7 @@ msgstr "Varna för användning av variadiska makron."
 
 #: c-family/c.opt:969
 msgid "Warn about questionable usage of the macros used to retrieve variable arguments."
-msgstr "Varna för tveksam användning av de makron som används för att hämta variabla argument.."
+msgstr "Varna för tveksam användning av de makron som används för att hämta variabla argument."
 
 #: c-family/c.opt:973
 msgid "Warn if a variable length array is used."
@@ -6809,7 +6809,7 @@ msgstr "Varna vid direkt virtuellt arv."
 
 #: c-family/c.opt:985
 msgid "Warn if a virtual base has a non-trivial move assignment operator."
-msgstr "Varna om en virtuella bas har en icketrivial flyttningstilldelningsoperator."
+msgstr "Varna om en virtuell bas har en icketrivial flyttningstilldelningsoperator."
 
 #: c-family/c.opt:989
 msgid "In C++, nonzero means warn about deprecated conversion from string literals to 'char *'.  In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard."
@@ -6829,7 +6829,7 @@ msgstr "Varna om en klasstyp har en bas eller ett fält vars typ använder den a
 
 #: c-family/c.opt:1005
 msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
-msgstr "En synonym för -std=c89 (för C) or -std=c++98 (för C++)."
+msgstr "En synonym för -std=c89 (för C) eller -std=c++98 (för C++)."
 
 #: c-family/c.opt:1013
 msgid "The version of the C++ ABI used for -Wabi warnings and link compatibility aliases."
@@ -6938,7 +6938,7 @@ msgstr "Transformera instrumenterade inbyggda anrop till anrop av inkapslingar."
 
 #: c-family/c.opt:1143
 msgid "Enable Cilk Plus."
-msgstr "Aktiver Cilk Plus."
+msgstr "Aktivera Cilk Plus."
 
 #: c-family/c.opt:1147
 msgid "Enable support for C++ concepts."
@@ -7397,7 +7397,7 @@ msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 års tekniska rättelser
 
 #: c-family/c.opt:1733
 msgid "Conform to the ISO 2011 C++ standard with GNU extensions."
-msgstr "Följ standarden ISO 2011 C med GNU-utökningar."
+msgstr "Följ standarden ISO 2011 C++ med GNU-utökningar."
 
 #: c-family/c.opt:1737
 msgid "Deprecated in favor of -std=gnu++11."
@@ -7614,7 +7614,7 @@ msgstr "Använd nollutfyllda minnesladdningar, inte teckenutfyllda."
 
 #: config/mmix/mmix.opt:45
 msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)."
-msgstr "Generera divisionsresultat så att resten har samma tecken som täljaren (inte nämnaren)."
+msgstr "Generera divisionsresultat så att resten har samma tecken som nämnaren (inte täljaren)."
 
 #: config/mmix/mmix.opt:49
 msgid "Prepend global symbols with \":\" (for use with PREFIX)."
@@ -7986,7 +7986,7 @@ msgstr "Ange MCU:n att bygga för."
 
 #: config/msp430/msp430.opt:15
 msgid "Warn if an MCU name is unrecognised or conflicts with other options (default: on)."
-msgstr "Varna om ett MCU-namn inte känns igen eller står i konflikt med andra flaggor (standar: på)."
+msgstr "Varna om ett MCU-namn inte känns igen eller står i konflikt med andra flaggor (standard: på)."
 
 #: config/msp430/msp430.opt:19
 msgid "Specify the ISA to build for: msp430, msp430x, msp430xv2."
@@ -8108,7 +8108,7 @@ msgstr "PC-relativa literala laddningar."
 
 #: config/aarch64/aarch64.opt:154
 msgid "When calculating the reciprocal square root approximation,"
-msgstr "Vid beräkning av den reciproka kvardratrotsapproximeringen,"
+msgstr "Vid beräkning av den reciproka kvadratrotsapproximeringen,"
 
 #: config/linux.opt:24
 msgid "Use Bionic C library."
@@ -8481,7 +8481,7 @@ msgstr "Betrakta åtkomst till bytestort minne som långsam."
 
 #: config/h8300/h8300.opt:50
 msgid "Enable linker relaxing."
-msgstr "Aktivera länkaravslappning."
+msgstr "Aktivera länkarlättnad."
 
 #: config/h8300/h8300.opt:54
 msgid "Generate H8/300H code."
@@ -8677,7 +8677,7 @@ msgstr "Använd 128-bitars long double."
 
 #: config/i386/i386.opt:206 config/sh/sh.opt:209
 msgid "Reserve space for outgoing arguments in the function prologue."
-msgstr "Reservera utrymmer för utgående argument i funktionsprologen."
+msgstr "Reservera utrymme för utgående argument i funktionsprologen."
 
 #: config/i386/i386.opt:210
 msgid "Align some doubles on dword boundary."
@@ -9057,15 +9057,15 @@ msgstr "Stöd kodgenerering av popcnt-instruktioner."
 
 #: config/i386/i386.opt:724
 msgid "Support BMI built-in functions and code generation."
-msgstr "Stöd inbyggda BMI-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda BMI-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:728
 msgid "Support BMI2 built-in functions and code generation."
-msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:732
 msgid "Support LZCNT built-in function and code generation."
-msgstr "Stöd inbyggda LZCNT-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda LZCNT-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:736
 msgid "Support Hardware Lock Elision prefixes."
@@ -9117,7 +9117,7 @@ msgstr "Stöd instruktionerna XSAVES och XRSTORS."
 
 #: config/i386/i386.opt:784
 msgid "Support TBM built-in functions and code generation."
-msgstr "Stöd inbyggda TBM-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda TBM-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:788
 msgid "Support code generation of cmpxchg16b instruction."
@@ -9161,11 +9161,11 @@ msgstr "Stöd inbyggda RDRND-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:828
 msgid "Support F16C built-in functions and code generation."
-msgstr "Stöd inbyggda F16C-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda F16C-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:832
 msgid "Support PREFETCHWT1 built-in functions and code generation."
-msgstr "Stöd inbyggda PREFETCHWT1-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda PREFETCHWT1-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:836
 msgid "Emit profiling counter call at function entry before prologue."
@@ -9185,7 +9185,7 @@ msgstr "Hoppa över att sätta upp RAX-register när variabelt antal argument sk
 
 #: config/i386/i386.opt:853
 msgid "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check."
-msgstr "Expandera 32bits/64bits heltalsdivision till 8bitars teckenlös heltalsdivision med kontroll vid körning.."
+msgstr "Expandera 32bits/64bits heltalsdivision till 8bitars teckenlös heltalsdivision med kontroll vid körning."
 
 #: config/i386/i386.opt:857
 msgid "Split 32-byte AVX unaligned load."
@@ -9197,11 +9197,11 @@ msgstr "Dela 32-bytes AVX ojusterade lagringar."
 
 #: config/i386/i386.opt:865
 msgid "Support RTM built-in functions and code generation."
-msgstr "Stöd inbyggda RTM-funktioner och -kodgenerering ."
+msgstr "Stöd inbyggda RTM-funktioner och -kodgenerering."
 
 #: config/i386/i386.opt:869
 msgid "Support MPX code generation."
-msgstr "Stöd MPX-kodgenerering ."
+msgstr "Stöd MPX-kodgenerering."
 
 #: config/i386/i386.opt:873
 msgid "Support MWAITX and MONITORX built-in functions and code generation."
@@ -9225,7 +9225,7 @@ msgstr "Kända stackskyddsvakter (att användas med flaggan -mstack-protector-gu
 
 #: config/i386/i386.opt:899
 msgid "Attempt to avoid generating instruction sequences containing ret bytes."
-msgstr "Försök udvika att generera instruktionssekvenser som innehåller ret-byte:ar."
+msgstr "Försök undvika att generera instruktionssekvenser som innehåller ret-byte:ar."
 
 #: config/i386/stringop.opt:8
 msgid "the Free Software Foundation; either version 3, or (at your option)"
@@ -9370,7 +9370,7 @@ msgstr "Framtvinga inte strikt justering."
 
 #: config/v850/v850.opt:86
 msgid "Put jump tables for switch statements into the .data section rather than the .code section."
-msgstr "Lägg hopptabeller för switch-satser i .data-sektionen istället för .code-sektionen.."
+msgstr "Lägg hopptabeller för switch-satser i .data-sektionen istället för .code-sektionen."
 
 #: config/v850/v850.opt:93
 msgid "Compile for the v850 processor."
@@ -9386,7 +9386,7 @@ msgstr "Kompilera för processorn v850e1."
 
 #: config/v850/v850.opt:105
 msgid "Compile for the v850es variant of the v850e1."
-msgstr "Kompilera för varianten v850es av v850el."
+msgstr "Kompilera för varianten v850es av v850e1."
 
 #: config/v850/v850.opt:109
 msgid "Compile for the v850e2 processor."
@@ -9410,7 +9410,7 @@ msgstr "Ange den maximala storleken på data som är lämpliga för ZDA-arean."
 
 #: config/v850/v850.opt:135
 msgid "Enable relaxing in the assembler."
-msgstr "Aktivera avslappning i assemblern."
+msgstr "Aktivera lättnad i assemblern."
 
 #: config/v850/v850.opt:139
 msgid "Prohibit PC relative jumps."
@@ -9426,7 +9426,7 @@ msgstr "Tillåt användningen av flyttalsinstruktioner för V850E2V3 och uppåt.
 
 #: config/v850/v850.opt:151
 msgid "Enable support for the RH850 ABI.  This is the default."
-msgstr "Aktivera stöd för ABI:et RH850.  Detta är standard.."
+msgstr "Aktivera stöd för ABI:et RH850.  Detta är standard."
 
 #: config/v850/v850.opt:155
 msgid "Enable support for the old GCC ABI."
@@ -10184,7 +10184,7 @@ msgstr "Använd PowerPC V2.06:s popcntd-instruktion."
 
 #: config/rs6000/rs6000.opt:185
 msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions."
-msgstr "Under -ffast-math, generera en FRIZ-instruktion för (double)(long long)-konverteringar.."
+msgstr "Under -ffast-math, generera en FRIZ-instruktion för (double)(long long)-konverteringar."
 
 #: config/rs6000/rs6000.opt:193
 msgid "Use vector/scalar (VSX) instructions."
@@ -10476,7 +10476,7 @@ msgstr "Tillåt double-variabler i övre register med -mcpu=power7 eller -mvsx."
 
 #: config/rs6000/rs6000.opt:594
 msgid "Allow float variables in upper registers with -mcpu=power8 or -mpower8-vector."
-msgstr "Tillåt flyttalsvariabler i övre register med -mcpu=power8 eller mpower8-vector."
+msgstr "Tillåt flyttalsvariabler i övre register med -mcpu=power8 eller -mpower8-vector."
 
 #: config/rs6000/rs6000.opt:598
 msgid "Allow float/double variables in upper registers if cpu allows it."
@@ -11300,11 +11300,11 @@ msgstr "Maximal storlek på globala och statiska variabler som kan placeras i de
 
 #: config/rx/rx.opt:93
 msgid "Generate assembler output that is compatible with the Renesas AS100 assembler.  This may restrict some of the compiler's capabilities.  The default is to generate GAS compatible syntax."
-msgstr "Genereara assemblerutdatat som är kompatibel med Renesas AS100-assembler.  Detta kan begränsa några av kompilatorns egenskaper.  Standard är att generera GAS-kompatibel syntax."
+msgstr "Generera assemblerutdatat som är kompatibel med Renesas AS100-assembler.  Detta kan begränsa några av kompilatorns egenskaper.  Standard är att generera GAS-kompatibel syntax."
 
 #: config/rx/rx.opt:99
 msgid "Enable linker relaxation."
-msgstr "Aktivera länkaravslappningar."
+msgstr "Aktivera länkarlättnader."
 
 #: config/rx/rx.opt:105
 msgid "Maximum size in bytes of constant values allowed as operands."
@@ -11674,7 +11674,7 @@ msgstr "Gå runt multiplikationsfel i hårdvara."
 
 #: config/mn10300/mn10300.opt:55
 msgid "Enable linker relaxations."
-msgstr "Aktivera länkaravslappningar."
+msgstr "Aktivera länkarlättnader."
 
 #: config/mn10300/mn10300.opt:59
 msgid "Return pointers in both a0 and d0."
@@ -11746,7 +11746,7 @@ msgstr "Aktivera funktionen konstruerare/destruerare."
 
 #: config/nds32/nds32.opt:104
 msgid "Guide linker to relax instructions."
-msgstr "Hjälp länkaren att relaxera instruktioner."
+msgstr "Hjälp länkaren att lätta instruktioner."
 
 #: config/iq2000/iq2000.opt:31
 msgid "Specify CPU for code generation purposes."
@@ -12151,7 +12151,7 @@ msgstr "Undanbedes.  Använd -matomic= istället för att välja den atomära mo
 
 #: config/sh/sh.opt:339
 msgid "Specify the model for atomic operations."
-msgstr "Ange modellen för atomiska operationer."
+msgstr "Ange modellen för atomära operationer."
 
 #: config/sh/sh.opt:343
 msgid "Use tas.b instruction for __atomic_test_and_set."
@@ -12191,7 +12191,7 @@ msgstr "Anta liten adressrymd."
 
 #: config/mep/mep.opt:23
 msgid "Enable absolute difference instructions."
-msgstr "Använd instruktioner för absoluta skillnad."
+msgstr "Använd instruktioner för absolut skillnad."
 
 #: config/mep/mep.opt:27
 msgid "Enable all optional instructions."
@@ -12227,11 +12227,11 @@ msgstr "Använd MeP-hjälpprocessor."
 
 #: config/mep/mep.opt:59
 msgid "Enable MeP Coprocessor with 32-bit registers."
-msgstr "Använd MeP-koprocessor med 32-bitars register."
+msgstr "Använd MeP-hjälpprocessor med 32-bitars register."
 
 #: config/mep/mep.opt:63
 msgid "Enable MeP Coprocessor with 64-bit registers."
-msgstr "Använd MeP-koprocessor med 64-bitars register."
+msgstr "Använd MeP-hjälpprocessor med 64-bitars register."
 
 #: config/mep/mep.opt:67
 msgid "Enable IVC2 scheduling."
@@ -12343,7 +12343,7 @@ msgstr "Fånga heltalsdivision med noll."
 
 #: config/mips/mips.opt:87
 msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code."
-msgstr "-code-readable=INSTÄLLNING\tAnge när instruktioner tillåts komma åt kod."
+msgstr "-mcode-readable=INSTÄLLNING\tAnge när instruktioner tillåts komma åt kod."
 
 #: config/mips/mips.opt:91
 msgid "Valid arguments to -mcode-readable=:"
@@ -12439,7 +12439,7 @@ msgstr "Använd 64-bitars flyttalsregister."
 
 #: config/mips/mips.opt:210
 msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines."
-msgstr "-mflush-func=FUNK\tAnvänd FUNK för att tömma cachen föra anrop av stacktrampoliner."
+msgstr "-mflush-func=FUNK\tAnvänd FUNK för att tömma cachen före anrop av stacktrampoliner."
 
 #: config/mips/mips.opt:214
 msgid "-mabs=MODE\tSelect the IEEE 754 ABS/NEG instruction execution mode."
@@ -12667,7 +12667,7 @@ msgstr "Kompilera kod för rak byteordning."
 
 #: config/arc/arc.opt:30
 msgid "Compile code for little endian mode.  This is the default."
-msgstr "Kompilera kod för omvänd byteordning.  Detta är standard.."
+msgstr "Kompilera kod för omvänd byteordning.  Detta är standard."
 
 #: config/arc/arc.opt:34
 msgid "Disable ARCompact specific pass to generate conditional execution instructions."
@@ -12971,7 +12971,7 @@ msgstr "Varna om modifierare anges när de inte behövs."
 
 #: java/lang.opt:150
 msgid "--CLASSPATH\tDeprecated; use --classpath instead."
-msgstr "--CLASSPATH\tAvrådes, använd -classpath istället."
+msgstr "--CLASSPATH\tAvrådes, använd --classpath istället."
 
 #: java/lang.opt:157
 msgid "Permit the use of the assert keyword."
@@ -13051,7 +13051,7 @@ msgstr "Anropa en biblioteksrutin för att göra heltalsdivisioner."
 
 #: java/lang.opt:269
 msgid "Generate code for built-in atomic operations."
-msgstr "Generera kod för inbyggda atomiska operationer."
+msgstr "Generera kod för inbyggda atomära operationer."
 
 #: java/lang.opt:273
 msgid "Generated should be loaded by bootstrap loader."
@@ -13168,7 +13168,7 @@ msgstr "Varna när ett optimerarpass är avaktiverat."
 
 #: common.opt:578
 msgid "Treat all warnings as errors."
-msgstr "Behandla alla varningar som fel.."
+msgstr "Behandla alla varningar som fel."
 
 #: common.opt:582
 msgid "Treat specified warning as error."
@@ -13200,7 +13200,7 @@ msgstr "Varna när en inline:ad funktion inte kan inline:as."
 
 #: common.opt:610
 msgid "Warn when an atomic memory model parameter is known to be outside the valid range."
-msgstr "Varna när en atomisk minnesmodellparameter med säkerhet är utanför det giltiga intervallet."
+msgstr "Varna när en atomär minnesmodellparameter med säkerhet är utanför det giltiga intervallet."
 
 #: common.opt:617
 msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes."
@@ -13624,7 +13624,7 @@ msgstr "Undertryck utskrift av instruktionsantal, radnummernoteringar och -adres
 
 #: common.opt:1229
 msgid "Suppress output of previous and next insn numbers in debugging dumps."
-msgstr "Undertryck utskrift föregående och nästa instruktionsnummer i felsökningsutskrifter."
+msgstr "Undertryck utskrift av föregående och nästa instruktionsnummer i felsökningsutskrifter."
 
 #: common.opt:1233
 msgid "Enable CFI tables via GAS assembler directives."
@@ -13664,7 +13664,7 @@ msgstr "Utför ett antal smärre, dyra optimeringar."
 
 #: common.opt:1269
 msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision."
-msgstr "-fexecc-precision=[fast|standard]\tAnge hantering av överskjutande precision på flyttal."
+msgstr "-fexcess-precision=[fast|standard]\tAnge hantering av överskjutande precision på flyttal."
 
 #: common.opt:1272
 #, c-format
@@ -13751,11 +13751,11 @@ msgstr "Markera alla slingor som parallella."
 #: common.opt:1397 common.opt:1401 common.opt:1405 common.opt:1409
 #: common.opt:2395
 msgid "Enable loop nest transforms.  Same as -floop-nest-optimize."
-msgstr "Aktivera transformationer av slingutbyten.  Samma som -floop-nest-interchange."
+msgstr "Aktivera transformationer av slingutbyten.  Samma som -floop-nest-optimize."
 
 #: common.opt:1413
 msgid "Enable support for GNU transactional memory."
-msgstr "Aktivera stöd för GNU:s transationsminne."
+msgstr "Aktivera stöd för GNU:s transaktionsminne."
 
 #: common.opt:1417
 msgid "Use STB_GNU_UNIQUE if supported by the assembler."
@@ -13979,7 +13979,7 @@ msgstr "Rapportera diverse optimeringsstatistik från länkningen."
 
 #: common.opt:1704
 msgid "Report various link-time optimization statistics for WPA only."
-msgstr "Rapportera diverse optimeringsstatistik från länkningen endast för WPA.."
+msgstr "Rapportera diverse optimeringsstatistik från länkningen endast för WPA."
 
 #: common.opt:1708
 msgid "Set errno after built-in math functions."
@@ -14242,7 +14242,7 @@ msgstr "Lägg till ett pass för eliminering av gemensamma deluttryck efter slin
 
 #: common.opt:2003
 msgid "Disable optimizations that assume default FP rounding behavior."
-msgstr "Avaktivera optimeringar som antar standardmässig avrundningsbeteende för FP."
+msgstr "Avaktivera optimeringar som antar standardmässigt avrundningsbeteende för FP."
 
 #: common.opt:2007
 msgid "Enable scheduling across basic blocks."
@@ -14366,7 +14366,7 @@ msgstr "Avaktivera optimeringar som kan observeras av IEEE signalerande NAN:ar."
 
 #: common.opt:2149
 msgid "Disable floating point optimizations that ignore the IEEE signedness of zero."
-msgstr "Avaktivera flyttalsoptimeringar som ignorera IEEE:s tecken på noll."
+msgstr "Avaktivera flyttalsoptimeringar som ignorerar IEEE:s tecken på noll."
 
 #: common.opt:2153
 msgid "Convert floating point constants to single precision constants."
@@ -15525,7 +15525,7 @@ msgstr "ogiltig felminnesmodell för %<__atomic_compare_exchange%>"
 #: builtins.c:5198
 #, gcc-internal-format
 msgid "invalid memory model for %<__atomic_load%>"
-msgstr "ogiltigt minnesmodell för %<_atomic_load%>"
+msgstr "ogiltig minnesmodell för %<__atomic_load%>"
 
 #: builtins.c:5230 builtins.c:5333
 #, gcc-internal-format
@@ -17750,7 +17750,7 @@ msgstr "instansvariabel %qE får inte vara privat"
 #: gimplify.c:6722
 #, gcc-internal-format
 msgid "%<linear%> clause for variable other than loop iterator specified on construct combined with %<distribute%>"
-msgstr "%<linear%>-klausul för en annan variabel än en slingiterator angiven vid konstruktion combinerad med %<distribute%>"
+msgstr "%<linear%>-klausul för en annan variabel än en slingiterator angiven vid konstruktion kombinerad med %<distribute%>"
 
 #: gimplify.c:6917
 #, gcc-internal-format
@@ -17795,7 +17795,7 @@ msgstr "ogiltig privat reduktion av %qE"
 #: gimplify.c:9948 omp-low.c:3622
 #, gcc-internal-format
 msgid "%<ordered%> construct with %<depend%> clause must be closely nested inside a loop with %<ordered%> clause with a parameter"
-msgstr "%<ordered%>-konstruktion med %<depend%>-klausul måste måste vara nära innesluten inuti en slinga med %<ordered%>-klausul med en parameter"
+msgstr "%<ordered%>-konstruktion med %<depend%>-klausul måste vara nära innesluten inuti en slinga med %<ordered%>-klausul med en parameter"
 
 #: gimplify.c:9966
 #, gcc-internal-format
@@ -18022,7 +18022,7 @@ msgstr "den första skillnaden mellan motsvarande definitioner är metoden %qD"
 #: ipa-devirt.c:1108
 #, gcc-internal-format
 msgid "type %qT defined in anonymous namespace can not match type %qT across the translation unit boundary"
-msgstr "typen %qT definierad i en namnrymd kan inte matcha typen %qT över gränsen för översättningsenheten"
+msgstr "typen %qT definierad i en anonym namnrymd kan inte matcha typen %qT över gränsen för översättningsenheten"
 
 #: ipa-devirt.c:1113
 #, gcc-internal-format
@@ -18092,7 +18092,7 @@ msgstr "en typ med andra attribut är definierad i en annan översättningsenhet
 #: ipa-devirt.c:1302
 #, gcc-internal-format
 msgid "an enum with different value name is defined in another translation unit"
-msgstr "en uppräkningstyp andra värdenamn definierad i en annan översättningsenhet"
+msgstr "en uppräkningstyp med andra värdenamn definierad i en annan översättningsenhet"
 
 #: ipa-devirt.c:1311
 #, gcc-internal-format
@@ -18102,7 +18102,7 @@ msgstr "en uppräkningstyp med andra värden är definierad i en annan översät
 #: ipa-devirt.c:1319
 #, gcc-internal-format
 msgid "an enum with mismatching number of values is defined in another translation unit"
-msgstr "en uppräkningstyp ett inte matchande antal värden är definierad i en annan översättningsenhet"
+msgstr "en uppräkningstyp med ett inte matchande antal värden är definierad i en annan översättningsenhet"
 
 #: ipa-devirt.c:1337
 #, gcc-internal-format
@@ -18152,7 +18152,7 @@ msgstr "en typ definierad i en annan översättningsenhet är polymorf"
 #: ipa-devirt.c:1533 ipa-devirt.c:1589
 #, gcc-internal-format
 msgid "a type with different virtual table pointers is defined in another translation unit"
-msgstr "en typ en annan virtuell tabellpekare är definierad i en annan översättningsenhet"
+msgstr "en typ med en annan virtuell tabellpekare är definierad i en annan översättningsenhet"
 
 #: ipa-devirt.c:1540 ipa-devirt.c:1594
 #, gcc-internal-format
@@ -18202,7 +18202,7 @@ msgstr "en metod med inkompatibel typ definierad i en annan översättningsenhet
 #: ipa-devirt.c:1654
 #, gcc-internal-format
 msgid "a type with different number of methods is defined in another translation unit"
-msgstr "en typ med ett annat antal metoder defineirad i en annan översättningsenhet"
+msgstr "en typ med ett annat antal metoder definierad i en annan översättningsenhet"
 
 #: ipa-devirt.c:1676
 #, gcc-internal-format
@@ -18665,7 +18665,7 @@ msgstr "%<ordered%> %<simd%> måste vara nära innesluten inuti en %<simd%>-regi
 #: omp-low.c:3659
 #, gcc-internal-format
 msgid "%<ordered%> region may not be closely nested inside of %<critical%>, %<ordered%>, explicit %<task%> or %<taskloop%> region"
-msgstr "en %<ordered%> region får inte vara nära innesluten inuti en %<critical%>,, %<ordered%>, explicit %<task%> eller %<taskloop%> region"
+msgstr "en %<ordered%> region får inte vara nära innesluten inuti en %<critical%>, %<ordered%>, explicit %<task%> eller %<taskloop%> region"
 
 #: omp-low.c:3670 omp-low.c:3683
 #, gcc-internal-format
@@ -19983,12 +19983,12 @@ msgstr "asm är inte tillåtet i en %<transaction_safe%>-funktion"
 #: trans-mem.c:783
 #, gcc-internal-format
 msgid "relaxed transaction in atomic transaction"
-msgstr "relaxerad transaktion i atomär transaktion"
+msgstr "lättad transaktion i atomär transaktion"
 
 #: trans-mem.c:786
 #, gcc-internal-format
 msgid "relaxed transaction in %<transaction_safe%> function"
-msgstr "relaxerad transaktion i %<transaction_safe%>-funktion"
+msgstr "lättad transaktion i %<transaction_safe%>-funktion"
 
 #: trans-mem.c:793
 #, gcc-internal-format
@@ -20158,7 +20158,7 @@ msgstr "typfel i vektorintervallreferens"
 #: tree-cfg.c:3194
 #, gcc-internal-format
 msgid "type mismatch in real/imagpart reference"
-msgstr "typfel i referens till reel-/imaginärdel"
+msgstr "typfel i referens till reell-/imaginärdel"
 
 #: tree-cfg.c:3204
 #, gcc-internal-format
@@ -23432,7 +23432,7 @@ msgstr "formatargumentet skall vara en %<%s%>-referens"
 #: c-family/c-format.c:330
 #, gcc-internal-format
 msgid "unrecognized format specifier"
-msgstr "oigenkänd formatangivelse"
+msgstr "okänd formatangivelse"
 
 #: c-family/c-format.c:345
 #, gcc-internal-format
@@ -23783,7 +23783,7 @@ msgstr "överblivet %qc i program"
 #: c-family/c-lex.c:523
 #, gcc-internal-format
 msgid "stray %<\\%o%> in program"
-msgstr "överblivet %<\\\\%o%> i program"
+msgstr "överblivet %<\\%o%> i program"
 
 #: c-family/c-lex.c:731
 #, gcc-internal-format
@@ -24343,7 +24343,7 @@ msgstr "#pragma message: %s"
 #: c-family/c-pragma.c:1164
 #, gcc-internal-format
 msgid "invalid location for %<pragma %s%>, ignored"
-msgstr "ogiltig plats för %<#pragma %s%>, ignoreras"
+msgstr "ogiltig plats för %<pragma %s%>, ignoreras"
 
 #: c-family/c-pragma.c:1171 c-family/c-pragma.c:1185
 #, gcc-internal-format
@@ -25116,7 +25116,7 @@ msgstr "L%d-cachelatens okänd för %s"
 #: config/alpha/alpha.c:575
 #, gcc-internal-format
 msgid "bad value %qs for -mmemory-latency"
-msgstr "felaktigt värde %qs till flaggan -memory-latency"
+msgstr "felaktigt värde %qs till flaggan -mmemory-latency"
 
 #: config/alpha/alpha.c:6652 config/alpha/alpha.c:6655 config/arc/arc.c:5480
 #: config/arc/arc.c:5759 config/s390/s390.c:852 config/tilegx/tilegx.c:3540
@@ -25168,7 +25168,7 @@ msgstr "Ingen FPX/FPU-blandning tillåten"
 #: config/arc/arc.c:735
 #, gcc-internal-format
 msgid "This multiplier configuration is not available for HS cores"
-msgstr "Denna multiplicerarconfiguration är inte tillgänglig för HS-kärnor"
+msgstr "Denna multiplicerarkonfiguration är inte tillgänglig för HS-kärnor"
 
 #: config/arc/arc.c:741
 #, gcc-internal-format, gfc-internal-format
@@ -25340,7 +25340,7 @@ msgstr "Du måste aktivera inbyggt krypto (t.ex. inkludera -mfloat-abi=softfp -m
 #: config/arm/arm-builtins.c:2396 config/arm/arm-builtins.c:2500
 #, gcc-internal-format
 msgid "selector must be an immediate"
-msgstr "väljare måste vara en omedelbar"
+msgstr "en väljare måste vara en omedelbar"
 
 #: config/arm/arm-builtins.c:2404 config/arm/arm-builtins.c:2449
 #: config/arm/arm-builtins.c:2507 config/arm/arm-builtins.c:2516
@@ -26023,12 +26023,12 @@ msgstr "-mmulticore kan endast användas med BF561"
 #: config/bfin/bfin.c:2393
 #, gcc-internal-format
 msgid "-mcorea should be used with -mmulticore"
-msgstr "-fcorea måste användas tillsammans med -mmulticore"
+msgstr "-mcorea måste användas tillsammans med -mmulticore"
 
 #: config/bfin/bfin.c:2396
 #, gcc-internal-format
 msgid "-mcoreb should be used with -mmulticore"
-msgstr "-fcoreb måste användas tillsammans med -mmulticore"
+msgstr "-mcoreb måste användas tillsammans med -mmulticore"
 
 #: config/bfin/bfin.c:2399
 #, gcc-internal-format
@@ -26291,7 +26291,7 @@ msgstr "denna inbyggda funktion är endast tillgänglig i fr450"
 #: config/ft32/ft32.c:175
 #, gcc-internal-format
 msgid "'h' applied to non-register operand"
-msgstr "”h” använt på operand som inte ett register"
+msgstr "”h” använt på operand som inte är ett register"
 
 #: config/ft32/ft32.c:200
 #, gcc-internal-format, gfc-internal-format
@@ -26496,7 +26496,7 @@ msgstr "%srtd%s ignoreras i 64-bitsläge"
 #: config/i386/i386.c:5219
 #, gcc-internal-format
 msgid "-mpreferred-stack-boundary is not supported for this target"
-msgstr "-mprefetch-stack-boundary stödjs inte för denna målarkitektur"
+msgstr "-mpreferred-stack-boundary stödjs inte för denna målarkitektur"
 
 #: config/i386/i386.c:5222
 #, gcc-internal-format, gfc-internal-format
@@ -26908,7 +26908,7 @@ msgstr "det sista argumentet måste vara en 32-bitars omedelbar"
 #: config/i386/i386.c:40107 config/rs6000/rs6000.c:13967
 #, gcc-internal-format
 msgid "selector must be an integer constant in the range 0..%wi"
-msgstr "selektor måste vara en heltalskonstant i intervallet 0..%wi"
+msgstr "väljaren måste vara en heltalskonstant i intervallet 0..%wi"
 
 #: config/i386/i386.c:40301
 #, gcc-internal-format
@@ -27472,7 +27472,7 @@ msgstr "%qs är inte tillgänglig i VLIW-funktioner"
 #: config/mep/mep.c:5974
 #, gcc-internal-format
 msgid "%qs is not available in non-VLIW functions"
-msgstr "%qs är är inte tillgänglig i en icke-VLIW-funktion"
+msgstr "%qs är inte tillgänglig i en icke-VLIW-funktion"
 
 #: config/mep/mep.c:6136 config/mep/mep.c:6253
 #, gcc-internal-format
@@ -27532,7 +27532,7 @@ msgstr "-mxl-multiply-high kan bara användas med -mcpu=v6.00.a eller större"
 #: config/microblaze/microblaze.c:1765
 #, gcc-internal-format
 msgid "-mxl-reorder can be used only with -mcpu=v8.30.a or greater"
-msgstr "-mxl-multiply-high kan bara användas med -mcpu=v8.30.a eller större"
+msgstr "-mxl-reorder kan bara användas med -mcpu=v8.30.a eller större"
 
 #: config/microblaze/microblaze.c:1771
 #, gcc-internal-format
@@ -27892,7 +27892,7 @@ msgstr "MCU ”%s” har inte stöd för hårdvarumultiplikation, men -mhwmult 
 #: config/msp430/msp430.c:788
 #, gcc-internal-format, gfc-internal-format
 msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 16-bit"
-msgstr "MCU ”%s” stödjer %s-hårvarumultiplikation, men -mhwmult är satt till 16-bitars"
+msgstr "MCU ”%s” stödjer %s-hårdvarumultiplikation, men -mhwmult är satt till 16-bitars"
 
 #: config/msp430/msp430.c:791
 #, gcc-internal-format, gfc-internal-format
@@ -27928,7 +27928,7 @@ msgid ""
 "Unrecognised MCU name '%s', assuming that it just supports the MSP430 ISA.\n"
 "Use the -mcpu option to set the ISA explicitly."
 msgstr ""
-"Okänt MCU-namn ”%s”, amtar att den bara stödjer ISA:n MSP430.\n"
+"Okänt MCU-namn ”%s”, antar att den bara stödjer ISA:n MSP430.\n"
 "Använd flaggan -mcpu för att sätta ISA:n explicit."
 
 #: config/msp430/msp430.c:831
@@ -27944,12 +27944,12 @@ msgstr "-mlarge behöver en 430X-kompatibel -mmcu="
 #: config/msp430/msp430.c:843
 #, gcc-internal-format
 msgid "-mcode-region=upper requires 430X-compatible cpu"
-msgstr "-mcode-region=upper behöver en 430X-kompatibel mcu"
+msgstr "-mcode-region=upper behöver en 430X-kompatibel cpu"
 
 #: config/msp430/msp430.c:845
 #, gcc-internal-format
 msgid "-mdata-region=upper requires 430X-compatible cpu"
-msgstr "-mdata-region=upper behöver en 430X-kompatibel mcu"
+msgstr "-mdata-region=upper behöver en 430X-kompatibel cpu"
 
 #: config/msp430/msp430.c:1848
 #, gcc-internal-format
@@ -28693,7 +28693,7 @@ msgstr "cpu %s är ett ogiltigt argument till den inbyggda %s"
 #: config/rs6000/rs6000.c:13545
 #, gcc-internal-format, gfc-internal-format
 msgid "hwcap %s is an invalid argument to builtin %s"
-msgstr "hwcap %s är ett ogiltigt argument tillden inbyggda %s"
+msgstr "hwcap %s är ett ogiltigt argument till den inbyggda %s"
 
 #: config/rs6000/rs6000.c:13618
 #, gcc-internal-format
@@ -29146,7 +29146,7 @@ msgstr "-f%s och -msdata=%s är inkompatibla"
 #: config/rs6000/sysv4.h:164
 #, gcc-internal-format, gfc-internal-format
 msgid "-msdata=%s and -mcall-%s are incompatible"
-msgstr "-mmsdata=%s och -mcall-%s är inkompatibla"
+msgstr "-msdata=%s och -mcall-%s är inkompatibla"
 
 #: config/rs6000/sysv4.h:173
 #, gcc-internal-format
@@ -29211,7 +29211,7 @@ msgstr "Inbyggd vec_step kan endast användas på vektortyper."
 #: config/s390/s390-c.c:671
 #, gcc-internal-format
 msgid "valid values for builtin %qF argument %d are 64, 128, 256, 512, 1024, 2048, and 4096"
-msgstr "giltiga värden för till inbyggd %qF argument %d är 64, 128, 256, 512, 1024, 2048 och 4096"
+msgstr "giltiga värden till inbyggd %qF argument %d är 64, 128, 256, 512, 1024, 2048 och 4096"
 
 #: config/s390/s390-c.c:841
 #, gcc-internal-format
@@ -29226,7 +29226,7 @@ msgstr "Fel i antalet argument till inbyggd %qF.  Förväntades: %d fick %d"
 #: config/s390/s390-c.c:907
 #, gcc-internal-format
 msgid "invalid parameter combination for intrinsic %qs"
-msgstr "ogiltigt parameterkombination för den inbyggda %qs"
+msgstr "ogiltig parameterkombination för den inbyggda %qs"
 
 #: config/s390/s390-c.c:913
 #, gcc-internal-format
@@ -29236,7 +29236,7 @@ msgstr "tvetydig överlagring för den inbyggda %qs"
 #: config/s390/s390-c.c:953
 #, gcc-internal-format
 msgid "constant argument %d for builtin %qF is out of range for target type"
-msgstr "det konstanta argumentet %d till den inbyggda %qF är utanför intervallet måltypen"
+msgstr "det konstanta argumentet %d till den inbyggda %qF är utanför intervallet för måltypen"
 
 #: config/s390/s390.c:754
 #, gcc-internal-format
@@ -29261,7 +29261,7 @@ msgstr "Inbyggd %qF stödjs inte utan -mvx (standard med -march=z13 och högre).
 #: config/s390/s390.c:848
 #, gcc-internal-format
 msgid "Unresolved overloaded builtin"
-msgstr "Ej upplöst inbyggd"
+msgstr "Ej upplöst överlagrad inbyggd"
 
 #: config/s390/s390.c:855 config/tilegx/tilegx.c:3543
 #: config/tilepro/tilepro.c:3110
@@ -32198,7 +32198,7 @@ msgstr "fel antal argument till %<__builtin_complex%>"
 #: c/c-parser.c:7929
 #, gcc-internal-format
 msgid "%<__builtin_complex%> operand not of real binary floating-point type"
-msgstr "%<__builtin_complex%>-operand är inte av en reel binär flyttalstyp"
+msgstr "%<__builtin_complex%>-operand är inte av en reell binär flyttalstyp"
 
 #: c/c-parser.c:7938
 #, gcc-internal-format
@@ -32358,7 +32358,7 @@ msgstr "%<#pragma GCC pch_preprocess%> måste komma först"
 #: c/c-parser.c:10182
 #, gcc-internal-format
 msgid "%<#pragma grainsize%> ignored because -fcilkplus is not enabled"
-msgstr "%<pragma grainsize%> ignoreras för att -fcilkplus inte är aktiverat"
+msgstr "%<#pragma grainsize%> ignoreras för att -fcilkplus inte är aktiverat"
 
 #: c/c-parser.c:10190
 #, gcc-internal-format
@@ -32632,7 +32632,7 @@ msgstr "inga giltiga klausuler angivna i %<#pragma acc declare%>"
 #: c/c-parser.c:13592 cp/parser.c:35195
 #, gcc-internal-format
 msgid "array section in %<#pragma acc declare%>"
-msgstr "vektordeklaration i %<pragma omp declare reduction%>"
+msgstr "vektorsektionen i %<pragma acc declare%>"
 
 #: c/c-parser.c:13616 cp/parser.c:35219
 #, gcc-internal-format
@@ -33411,7 +33411,7 @@ msgstr "kan inte ta adressen till skalär med omvänd lagringsordning"
 #: c/c-typeck.c:4460
 #, gcc-internal-format
 msgid "address of array with reverse scalar storage order requested"
-msgstr "adress till vektor med omvänd skalär lagringsordnin begärd"
+msgstr "adress till vektor med omvänd skalär lagringsordning begärd"
 
 #: c/c-typeck.c:4632
 #, gcc-internal-format
@@ -34465,7 +34465,7 @@ msgstr "%qD förekommer mer än en gång i dataklausuler"
 #: c/c-typeck.c:13159 cp/semantics.c:6817
 #, gcc-internal-format
 msgid "%qE is neither a variable nor a function name in clause %qs"
-msgstr "%qE är varken en variabel eller ett funktionsnamn klausulen %qs"
+msgstr "%qE är varken en variabel eller ett funktionsnamn klausulen %qs"
 
 #: c/c-typeck.c:13187 cp/semantics.c:6846
 #, gcc-internal-format
@@ -36143,17 +36143,17 @@ msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i andra o
 #: cp/cvt.c:1091
 #, gcc-internal-format
 msgid "implicit dereference will not access object of type %qT in third operand of conditional expression"
-msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i tredje operanden till villkorligt uttryck"
+msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i tredje operanden till villkorligt uttryck"
 
 #: cp/cvt.c:1096
 #, gcc-internal-format
 msgid "implicit dereference will not access object of type %qT in right operand of comma operator"
-msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i högeroperanden till kommaoperatorn"
+msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i högeroperanden till kommaoperatorn"
 
 #: cp/cvt.c:1101
 #, gcc-internal-format
 msgid "implicit dereference will not access object of type %qT in left operand of comma operator"
-msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i vänstra operanden av kommaoperatorn"
+msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i vänstra operanden av kommaoperatorn"
 
 #: cp/cvt.c:1106
 #, gcc-internal-format
@@ -36163,7 +36163,7 @@ msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i satsen"
 #: cp/cvt.c:1110
 #, gcc-internal-format
 msgid "implicit dereference will not access object of type %qT in for increment expression"
-msgstr "implicit avrefrens kommer inte att använda objekt av typ %qT i for-ökningsuttryck"
+msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i for-ökningsuttryck"
 
 #: cp/cvt.c:1124
 #, gcc-internal-format
@@ -37308,7 +37308,7 @@ msgstr "konceptet %q#D deklarerad med funktionsparametrar"
 #: cp/decl.c:7815
 #, gcc-internal-format
 msgid "concept %q#D declared with a deduced return type"
-msgstr "conceptet %q#D deklarerad med en härledd returtyp"
+msgstr "konceptet %q#D deklarerat med en härledd returtyp"
 
 #: cp/decl.c:7817
 #, gcc-internal-format
@@ -37444,7 +37444,7 @@ msgstr "en icke-mallvariabel variabel kan inte vara %<concept%>"
 #: cp/decl.c:8501
 #, gcc-internal-format
 msgid "concept must have type %<bool%>"
-msgstr "concept måste ha typen %<bool%>"
+msgstr "koncept måste ha typen %<bool%>"
 
 #: cp/decl.c:8614
 #, gcc-internal-format
@@ -38188,7 +38188,7 @@ msgstr "funktionen %qD deklarerad %<virtual%> inuti en union"
 #: cp/decl.c:11077
 #, gcc-internal-format
 msgid "%qD cannot be declared %<virtual%>, since it is always static"
-msgstr "%qD kan inte deklareras %<virtual%>, eftersom den redan är statisk"
+msgstr "%qD kan inte deklareras %<virtual%>, eftersom den alltid är statisk"
 
 #: cp/decl.c:11093
 #, gcc-internal-format
@@ -39387,7 +39387,7 @@ msgstr "värdeinitiering av referenstypen %qT"
 #: cp/init.c:556
 #, gcc-internal-format
 msgid "recursive instantiation of non-static data member initializer for %qD"
-msgstr "rekursiv instantiering av ickestatisk datamedleminitierare för %qD"
+msgstr "rekursiv instansiering av ickestatisk datamedleminitierare för %qD"
 
 #: cp/init.c:580
 #, gcc-internal-format
@@ -40510,7 +40510,7 @@ msgstr "C++11 %<thread_local%> är endast tillgängligt med -std=c++11 eller -st
 #: cp/parser.c:3176
 #, gcc-internal-format
 msgid "%<concept%> only available with -fconcepts"
-msgstr "%<concept%> är endast tillgängligt -fconcepts"
+msgstr "%<concept%> är endast tillgängligt med -fconcepts"
 
 #: cp/parser.c:3202
 #, gcc-internal-format
@@ -42033,7 +42033,7 @@ msgstr "%<@try%> förväntades"
 #: cp/parser.c:26867
 #, gcc-internal-format
 msgid "expected %<@synchronized%>"
-msgstr "%<synchronized%> förväntades"
+msgstr "%<@synchronized%> förväntades"
 
 #: cp/parser.c:26870
 #, gcc-internal-format
@@ -42048,7 +42048,7 @@ msgstr "%<__transaction_atomic%> förväntades"
 #: cp/parser.c:26876
 #, gcc-internal-format
 msgid "expected %<__transaction_relaxed%>"
-msgstr "%<__transaction _relaxed%> förväntades"
+msgstr "%<__transaction_relaxed%> förväntades"
 
 #: cp/parser.c:26907
 #, gcc-internal-format
@@ -42128,7 +42128,7 @@ msgstr "%<@encode%> måste ange en typ som ett argument"
 #: cp/parser.c:28310
 #, gcc-internal-format
 msgid "invalid Objective-C++ selector name"
-msgstr "ogiltigt Objective-C++-selekterarnamn"
+msgstr "ogiltigt Objective-C++-väljarnamn"
 
 #: cp/parser.c:28385 cp/parser.c:28403
 #, gcc-internal-format
@@ -42219,7 +42219,7 @@ msgstr "%<#pragma omp target exit data%> med en annan map-typ än %<from%>-, %<r
 #: cp/parser.c:35658
 #, gcc-internal-format
 msgid "%<#pragma omp declare simd%> of %<simd%> attribute cannot be used in the same function marked as a Cilk Plus SIMD-enabled  function"
-msgstr "%<#pragma omp declare simd%> av %<simd%>-attributkan inte användas i samma funktion som är markerad som en Cilk Plus SIMD-aktiverad funktion"
+msgstr "%<#pragma omp declare simd%> av %<simd%>-attribut kan inte användas i samma funktion som är markerad som en Cilk Plus SIMD-aktiverad funktion"
 
 #: cp/parser.c:35668
 #, gcc-internal-format
@@ -42880,7 +42880,7 @@ msgstr "  typerna %qT och %qT stämmer inte överens"
 #: cp/pt.c:6009
 #, gcc-internal-format
 msgid "  template parameter %qD is not a parameter pack, but argument %qD is"
-msgstr "mallparameter %qD är inte ett parameterpaket, men argunet %qD är det"
+msgstr "mallparameter %qD är inte ett parameterpaket, men argument %qD är det"
 
 #: cp/pt.c:6020
 #, gcc-internal-format
@@ -43543,7 +43543,7 @@ msgstr "kan inte härleda %qT från %qE"
 #: cp/pt.c:24033
 #, gcc-internal-format
 msgid "placeholder constraints not satisfied"
-msgstr "platshållabegränsningar är inte uppfyllt"
+msgstr "platshållarbegränsningar är inte uppfyllt"
 
 #: cp/pt.c:24036
 #, gcc-internal-format
@@ -43954,7 +43954,7 @@ msgstr "%qD är inte en variabel i klausul %<lastprivate%>"
 #: cp/semantics.c:6154
 #, gcc-internal-format
 msgid "%<gang%> static expression must be integral"
-msgstr "%<gang%>-statisk uttryck måste vara heltal"
+msgstr "%<gang%>-statiskt uttryck måste vara heltal"
 
 #: cp/semantics.c:6168
 #, gcc-internal-format
@@ -43994,7 +43994,7 @@ msgstr "%<vector%>-längdvärdet måste vara positivt"
 #: cp/semantics.c:6238
 #, gcc-internal-format
 msgid "%<worker%> num value must bepositive"
-msgstr "%<worker%>-numerikst värde måste vara positivt"
+msgstr "%<worker%>-numeriskt värde måste vara positivt"
 
 #: cp/semantics.c:6243
 #, gcc-internal-format
@@ -44149,7 +44149,7 @@ msgstr "operanden till vikningsuttrycket har inget oexpanderat parameterpaket"
 #: cp/semantics.c:9352
 #, gcc-internal-format
 msgid "both arguments in binary fold have unexpanded parameter packs"
-msgstr "båda argumentet i en binär vikning har oexpanderade parameterpaket"
+msgstr "båda argumenten i en binär vikning har oexpanderade parameterpaket"
 
 #: cp/semantics.c:9354
 #, gcc-internal-format
@@ -44786,7 +44786,7 @@ msgstr "uttryckslista behandlas som sammansatt uttryck i medlemsinitierare"
 #: cp/typeck.c:6322
 #, gcc-internal-format
 msgid "expression list treated as compound expression in functional cast"
-msgstr "uttryckslista behandlas som sammansatt uttryck i funtionstypkonvertering"
+msgstr "uttryckslista behandlas som sammansatt uttryck i funktionstypkonvertering"
 
 #: cp/typeck.c:6359
 #, gcc-internal-format, gfc-internal-format
@@ -45026,7 +45026,7 @@ msgstr "adress till lokal variabel %qD returnerad"
 #: cp/typeck.c:8658
 #, gcc-internal-format
 msgid "returning a value from a destructor"
-msgstr "returnerar ett värde från en destruktor"
+msgstr "returnerar ett värde från en destruerare"
 
 #. If a return statement appears in a handler of the
 #. function-try-block of a constructor, the program is ill-formed.
@@ -45222,7 +45222,7 @@ msgstr "\t%#D"
 #: cp/typeck2.c:440
 #, gcc-internal-format
 msgid "definition of %q#T is not complete until the closing brace"
-msgstr "definitionen av %q#T är inte fullständig före den avlutande klammern"
+msgstr "definitionen av %q#T är inte fullständig före den avslutande klammern"
 
 #: cp/typeck2.c:443
 #, gcc-internal-format
@@ -45487,7 +45487,7 @@ msgstr "gfc_arith_times(): Felaktig bastyp"
 #: fortran/arith.c:745
 #, gcc-internal-format
 msgid "Integer division truncated to constant %qs at %L"
-msgstr "Heltalsdivision havhuggen till konstanten %qs vid %L"
+msgstr "Heltalsdivision avhuggen till konstanten %qs vid %L"
 
 #: fortran/arith.c:791
 #, gcc-internal-format
@@ -46051,7 +46051,7 @@ msgstr "argumentet ATOM vid %L till inbyggd funktion %s skall vara ett heltal av
 #: fortran/check.c:1035
 #, gcc-internal-format, gfc-internal-format
 msgid "ATOM argument at %L of the %s intrinsic function shall be a coarray or coindexed"
-msgstr "ATOM-argumentet till vid %L till den inbyggda funktionen %s måste vara en co-vektor eller co-indexat"
+msgstr "ATOM-argumentet vid %L till den inbyggda funktionen %s måste vara en co-vektor eller co-indexerat"
 
 #: fortran/check.c:1042
 #, gcc-internal-format
@@ -46086,7 +46086,7 @@ msgstr "OLD-argumentet till den inbyggda funktionen %s vid %L måste vara defini
 #: fortran/check.c:1167
 #, gcc-internal-format, gfc-internal-format
 msgid "EVENT argument at %L to the intrinsic EVENT_QUERY shall be of type EVENT_TYPE"
-msgstr "EVENT-argumentetet vid %L till den inbyggda EVENT_QUERY skall ha typen EVENT_TYPE"
+msgstr "EVENT-argumentet vid %L till den inbyggda EVENT_QUERY skall ha typen EVENT_TYPE"
 
 #: fortran/check.c:1177
 #, gcc-internal-format, gfc-internal-format
@@ -47548,7 +47548,7 @@ msgstr "BIND(C)-procedur med NAME får inte ha attributet POINTER vid %C"
 #: fortran/decl.c:5217
 #, gcc-internal-format, gfc-internal-format
 msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME"
-msgstr "Attrapprocedur vid %C kan inte ha attributet BIND(c) tillsammans med NAME"
+msgstr "Attrapprocedur vid %C kan inte ha attributet BIND(C) tillsammans med NAME"
 
 #: fortran/decl.c:5240
 #, gcc-internal-format
@@ -50530,12 +50530,12 @@ msgstr "%s-sats vid %C i PURE-procedur"
 #: fortran/match.c:2649
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement STOP at %C in CRITICAL block"
-msgstr "Bildkontrollsatsen STOP vid %C i CRITICAL-block"
+msgstr "Bildstyrsatsen STOP vid %C i CRITICAL-block"
 
 #: fortran/match.c:2654
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement STOP at %C in DO CONCURRENT block"
-msgstr "Bildkontrollsatsen STOP vid %C i DO CONCURRENT-block"
+msgstr "Bildstyrsatsen STOP vid %C i DO CONCURRENT-block"
 
 #: fortran/match.c:2662
 #, gcc-internal-format, gfc-internal-format
@@ -50575,12 +50575,12 @@ msgstr "Bildstyrsats EVENT %s vid %C i PURE-procedur"
 #: fortran/match.c:2793
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement EVENT %s at %C in CRITICAL block"
-msgstr "Bildkontrollsatsen EVENT %s vid %C i CRITICAL-block"
+msgstr "Bildstyrsatsen EVENT %s vid %C i CRITICAL-block"
 
 #: fortran/match.c:2800
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement EVENT %s at %C in DO CONCURRENT block"
-msgstr "Bildkontrollsatsen EVENT %s vid %C i DO CONCURRENT-block"
+msgstr "Bildstyrsatsen EVENT %s vid %C i DO CONCURRENT-block"
 
 #: fortran/match.c:2830 fortran/match.c:3025 fortran/match.c:3237
 #: fortran/match.c:3747 fortran/match.c:4084
@@ -50617,12 +50617,12 @@ msgstr "Bildstyrsats %s vid %C i PURE-procedur"
 #: fortran/match.c:2988
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement %s at %C in CRITICAL block"
-msgstr "Bildkontrollsatsen %s vid %C i CRITICAL-block"
+msgstr "Bildstyrsatsen %s vid %C i CRITICAL-block"
 
 #: fortran/match.c:2995
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement %s at %C in DO CONCURRENT block"
-msgstr "Bildkontrollsatsen %s vid %C i DO CONCURRENT-block"
+msgstr "Bildstyrsatsen %s vid %C i DO CONCURRENT-block"
 
 #: fortran/match.c:3067
 #, gcc-internal-format, gfc-internal-format
@@ -50652,12 +50652,12 @@ msgstr "SYNC-sats vid %C"
 #: fortran/match.c:3185
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement SYNC at %C in CRITICAL block"
-msgstr "Bildkontrollsatsen SYNC vid %C i CRITICAL-block"
+msgstr "Bildstyrsatsen SYNC vid %C i CRITICAL-block"
 
 #: fortran/match.c:3191
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement SYNC at %C in DO CONCURRENT block"
-msgstr "Bildkontrollsatsen SYNC vid %C i DO CONCURRENT-block"
+msgstr "Bildstyrsatsen SYNC vid %C i DO CONCURRENT-block"
 
 #: fortran/match.c:3371
 #, gcc-internal-format, gfc-internal-format
@@ -50742,7 +50742,7 @@ msgstr "Överflödig SOURCE-tagg funnen vid %L "
 #: fortran/match.c:3803
 #, gcc-internal-format, gfc-internal-format
 msgid "SOURCE tag at %L conflicts with the typespec at %L"
-msgstr "SOURCE-taggen vid %L står i konflikt med typespecifikationen vid %L"
+msgstr "SOURCE-taggen vid %L står i konflikt med typspecifikationen vid %L"
 
 #: fortran/match.c:3809
 #, gcc-internal-format, gfc-internal-format
@@ -50762,7 +50762,7 @@ msgstr "Överflödig MOLD-tagg funnen vid %L "
 #: fortran/match.c:3840
 #, gcc-internal-format, gfc-internal-format
 msgid "MOLD tag at %L conflicts with the typespec at %L"
-msgstr "MOLD-taggen vid %L står i konflikt med typespecifikationen vid %L"
+msgstr "MOLD-taggen vid %L står i konflikt med typspecifikationen vid %L"
 
 #: fortran/match.c:3866
 #, gcc-internal-format, gfc-internal-format
@@ -50812,12 +50812,12 @@ msgstr "ERRMSG vid %L"
 #: fortran/match.c:4161
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement RETURN at %C in CRITICAL block"
-msgstr "Bildkontrollsatsen RETURN vid %C i CRITICAL-block"
+msgstr "Bildstyrsatsen RETURN vid %C i CRITICAL-block"
 
 #: fortran/match.c:4167
 #, gcc-internal-format, gfc-internal-format
 msgid "Image control statement RETURN at %C in DO CONCURRENT block"
-msgstr "Bildkontrollsatsen RETURN vid %C i DO CONCURRENT-block"
+msgstr "Bildstyrsatsen RETURN vid %C i DO CONCURRENT-block"
 
 #: fortran/match.c:4176
 #, gcc-internal-format, gfc-internal-format
@@ -50945,7 +50945,7 @@ msgstr "Satsfunktion vid %C"
 #: fortran/match.c:5254 fortran/match.c:5270
 #, gcc-internal-format, gfc-internal-format
 msgid "Expression in CASE selector at %L cannot be %s"
-msgstr "Uttryck i CASE-sats vid %L får inte vara %s"
+msgstr "Uttryck i CASE-väljare vid %L får inte vara %s"
 
 #: fortran/match.c:5292
 #, gcc-internal-format, gfc-internal-format
@@ -51322,7 +51322,7 @@ msgstr "Kan inte läsa modulfilen %qs öppnad vid %C, eftersom den skapades av e
 #: fortran/module.c:6967
 #, gcc-internal-format, gfc-internal-format
 msgid "Can't USE the same %smodule we're building!"
-msgstr "Det går inta att USE samma %smodul vi bygger!"
+msgstr "Det går inte att USE samma %smodul vi bygger!"
 
 #: fortran/openmp.c:289 fortran/openmp.c:497 fortran/openmp.c:2399
 #: fortran/openmp.c:2473
@@ -51353,7 +51353,7 @@ msgstr "Oväntat skräp efter !$ACC DECLARE vid %C"
 #: fortran/openmp.c:535
 #, gcc-internal-format, gfc-internal-format
 msgid "Syntax error in !$ACC DECLARE list at %C"
-msgstr "Syntaxfel i !$OMP DECLARE-lista vid %C"
+msgstr "Syntaxfel i !$ACC DECLARE-lista vid %C"
 
 #: fortran/openmp.c:991
 #, gcc-internal-format, gfc-internal-format
@@ -51378,7 +51378,7 @@ msgstr "Variabel i USE-associated med $!ACC DECLARE vid %L"
 #: fortran/openmp.c:1494
 #, gcc-internal-format, gfc-internal-format
 msgid "Assumed-size dummy array with $!ACC DECLARE at %L"
-msgstr "Attrappvektor med antagen storlek med $!ACC DECLARE at %L"
+msgstr "Attrappvektor med antagen storlek med $!ACC DECLARE vid %L"
 
 #: fortran/openmp.c:1541
 #, gcc-internal-format
@@ -52809,7 +52809,7 @@ msgstr "exponentbokstav ”q” i reell literal konstant vid %C"
 #: fortran/primary.c:562
 #, gcc-internal-format
 msgid "Extension: exponent-letter %<q%> in real-literal-constant at %C"
-msgstr "Utökning: exponentbokstav %<q%> i reeel literal konstant vid %C"
+msgstr "Utökning: exponentbokstav %<q%> i reell literal konstant vid %C"
 
 #: fortran/primary.c:578
 #, gcc-internal-format, gfc-internal-format
@@ -54739,7 +54739,7 @@ msgstr "Procedurpekarresultat %qs vid %L saknar pekarattributet"
 #: fortran/resolve.c:11964
 #, gcc-internal-format, gfc-internal-format
 msgid "Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface in %s"
-msgstr "PURE-attribute stämmer inte mellan MODULE PROCEDURE vid %L och dess gränssnitt i %s"
+msgstr "PURE-attribut stämmer inte mellan MODULE PROCEDURE vid %L och dess gränssnitt i %s"
 
 #: fortran/resolve.c:11972
 #, gcc-internal-format, gfc-internal-format
@@ -55616,7 +55616,7 @@ msgstr "i gfc_simplify_atanh(): Felaktig typ"
 #: fortran/simplify.c:1173
 #, gcc-internal-format, gfc-internal-format
 msgid "If first argument of ATAN2 %L is zero, then the second argument must not be zero"
-msgstr "Om första argumentet till ATANH2 %L är noll får inte andra argumentet vara noll"
+msgstr "Om första argumentet till ATAN2 %L är noll får inte andra argumentet vara noll"
 
 #: fortran/simplify.c:1265
 #, gcc-internal-format, gfc-internal-format
@@ -57182,7 +57182,7 @@ msgstr "%<@package%> är inte tillgängligt i Objective-C 1.0"
 #: objc/objc-act.c:707
 #, gcc-internal-format
 msgid "%<@package%> presently has the same effect as %<@public%>"
-msgstr "%<package%> har för närvarande samma effekt som %<@public%>"
+msgstr "%<@package%> har för närvarande samma effekt som %<@public%>"
 
 #: objc/objc-act.c:718
 #, gcc-internal-format
@@ -57207,7 +57207,7 @@ msgstr "%<@required%> är endast tillåtet i @protocol-sammanhang"
 #: objc/objc-act.c:837
 #, gcc-internal-format
 msgid "%<@property%> is not available in Objective-C 1.0"
-msgstr "%<property%> finns inte i Objective-C 1.0"
+msgstr "%<@property%> finns inte i Objective-C 1.0"
 
 #: objc/objc-act.c:841
 #, gcc-internal-format
@@ -57602,7 +57602,7 @@ msgstr "använder %<%c%s%>"
 #: objc/objc-act.c:5101
 #, gcc-internal-format
 msgid "multiple selectors named %<%c%E%> found"
-msgstr "multipla selektorer med namnet %<%c%E%> funna"
+msgstr "multipla väljare med namnet %<%c%E%> funna"
 
 #: objc/objc-act.c:5104
 #, gcc-internal-format
@@ -57691,7 +57691,7 @@ msgstr "%<...%> som argument.)"
 #: objc/objc-act.c:5729
 #, gcc-internal-format
 msgid "undeclared selector %qE"
-msgstr "odeklarerad selektor %qE"
+msgstr "odeklarerad väljare %qE"
 
 #. Historically, a class method that produced objects (factory
 #. method) would assign `self' to the instance that it
@@ -58069,4 +58069,4 @@ msgstr "%<-fobjc-sjlj-exceptions%> ignoreras för %<-fnext-runtime%> när %<-fob
 #: objc/objc-runtime-shared-support.c:425
 #, gcc-internal-format
 msgid "creating selector for nonexistent method %qE"
-msgstr "skapar selektor för icke existerande metod %qE"
+msgstr "skapar väljare för icke existerande metod %qE"
index 626317a..961f49a 100644 (file)
@@ -1,3 +1,425 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-22  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/62171
+       * gcc.dg/vect/pr62171.c: Remove default vector testsuite flags.
+
+2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       Backport from mainline
+       2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR middle-end/70895
+       * gfortran.dg/goacc/loop-tree-1.f90: Add gimple scan-tree-dump test.
+       * c-c++-common/goacc/reduction-1.c: Likewise.
+       * c-c++-common/goacc/reduction-2.c: Likewise.
+       * c-c++-common/goacc/reduction-3.c: Likewise.
+       * c-c++-common/goacc/reduction-4.c: Likewise.
+
+2016-08-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR testsuite/77034
+       Backported from mainline
+       2016-07-25  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/init/elide5.C (operator new): Use decltype(sizeof(1)) instead
+       of unsigned long.
+
+2016-08-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/73434
+       * gcc.dg/torture/pr73434.c: New testcase.
+
+2016-08-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/72824
+       * gcc.c-torture/execute/ieee/pr72824-2.c: New test.
+
+2016-08-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2016-08-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/76342
+       * gcc.target/i386/pr76342.c: New test.
+
+2016-08-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/71512
+       * g++.dg/ubsan/pr71512.C: New test.
+       * c-c++-common/ubsan/pr71512-1.c: New test.
+       * c-c++-common/ubsan/pr71512-2.c: New test.
+
+2016-08-12  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       Backport from mainline
+       2016-08-11  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR tree-optimization/71083
+       * gcc.c-torture/execute/pr71083.c: New test.
+       * gnat.dg/loop_optimization23.adb: New test.
+       * gnat.dg/loop_optimization23_pkg.ads: New test.
+       * gnat.dg/loop_optimization23_pkg.adb: New test.
+
+2016-08-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/67410
+       * gcc.dg/pr67410.c: New test.
+
+2016-08-12  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       Backport from mainline
+       2016-08-05  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       PR Target/72819
+       * gcc.target/aarch64/aapcs64/abitest-common.h: Define half-precision
+       registers.
+       * gcc.target/aarch64/aapcs64/abitest.S (dumpregs): Add assembly for
+       saving the half-precision registers.
+       * gcc.target/aarch64/aapcs64/func-ret-1.c: Test that an __fp16
+       value is returned in h0.
+       * gcc.target/aarch64/aapcs64/test_2.c: Check that __FP16 arguments
+       are passed in FP/SIMD registers.
+       * gcc.target/aarch64/aapcs64/test_27.c: New, test that __fp16 HFA
+       passing works corrcetly.
+       * gcc.target/aarch64/aapcs64/type-def.h (hfa_f16x1_t): New.
+       (hfa_f16x2_t): Likewise.
+       (hfa_f16x3_t): Likewise.
+       * gcc.target/aarch64/aapcs64/va_arg-1.c: Check that __fp16 values
+       are promoted to double and passed in a double register.
+       * gcc.target/aarch64/aapcs64/va_arg-2.c: Check that __fp16 values
+       are promoted to double and stacked.
+       * gcc.target/aarch64/aapcs64/va_arg-4.c: Check stacking of HFA of
+       __fp16 data types.
+       * gcc.target/aarch64/aapcs64/va_arg-5.c: Likewise.
+       * gcc.target/aarch64/aapcs64/va_arg-16.c: New, check HFAs of
+       __fp16 first get passed in FP/SIMD registers, then stacked.
+
+2016-08-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/71123
+       * gfortran.dg/namelist_90.f: New test
+
+2016-08-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/72868
+       * constexpr.c (label_matches): Handle case range expressions.
+
+       Backported from mainline
+       2016-08-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/72816
+       * gcc.dg/pr72816.c: Remove dg-error.
+
+       2016-08-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/72816
+       * gcc.dg/pr72816.c: New test.
+
+2016-08-11  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71936
+       * gfortran.dg/allocate_with_source_21.f03: New test.
+
+2016-08-11  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/72698
+       * gfortran.dg/allocate_with_source_20.f03: New test.
+
+2016-08-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-08-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/72853
+       * gcc.target/powerpc/pr72853.c: New test.
+
+2016-08-10  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2016-08-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/72824
+       * gcc.c-torture/execute/ieee/pr72824.c: New test.
+
+2016-08-09  Martin Jambor  <mjambor@suse.cz>
+
+        PR ipa/71981
+        * gcc.dg/ipa/pr71981.c: New test.
+
+2016-08-09  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2016-07-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/71881
+       * gcc.dg/torture/pr71881.c: New testcase.
+
+2016-08-09  Alan Modra  <amodra@gmail.com>
+
+       * gcc.c-torture/compile/pr72802.c: New.
+
+2016-08-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/72800
+       * g++.dg/cpp1y/lambda-ice1.C: New.
+
+2016-07-25  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/70524
+       * gfortran.dg/dependency_48.f90: New test.
+
+2016-08-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/71795
+       Backport from trunk
+       * gfortran.dg/array_constructor_50.f90:  New test.
+
+2016-08-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/70040
+       Backport from trunk
+       * gfortran.dg/pr70040.f90:  New testcase.
+
+2016-08-05  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/68724
+       * g++.dg/cpp0x/pr68724.C: New.
+
+2016-08-04  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from trunk
+       2016-07-26  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/71869
+       * gcc.target/powerpc/float128-cmp.c: New test to make sure that
+       IEEE built-in functions handle quiet and signalling NaNs
+       correctly.
+
+2016-08-01  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2016-06-16 trunk r237536, r237910.
+       2016-06-16  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
+
+       PR target/71151
+       * gcc.target/avr/pr71151-1.c: New test.
+       * gcc.target/avr/pr71151-2.c: New test.
+       * gcc.target/avr/pr71151-3.c: New test.
+       * gcc.target/avr/pr71151-4.c: New test.
+       * gcc.target/avr/pr71151-5.c: New test.
+       * gcc.target/avr/pr71151-6.c: New test.
+       * gcc.target/avr/pr71151-7.c: New test.
+       * gcc.target/avr/pr71151-8.c: New test.
+       * gcc.target/avr/pr71151-common.h: New file.
+
+2016-07-31  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-31  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/divkc3-1.c: Require POWER8 hardware.
+       * gcc.target/powerpc/mulkc3-1.c: Likewise.
+
+2016-07-28  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/71883
+       * gfortran.dg/pr71883.f90 : New test.
+
+2016-07-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/pr63354.c: Require lp64 since
+       -mprofile-kernel is not legal with -m32.
+
+2016-07-22  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backported from trunk:
+       PR fortran/71807
+       * gfortran.dg/null_9.f90: New test.
+
+2016-07-22  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/70842
+       * gfortran.dg/select_type_35.f03: New test.
+
+2016-07-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71728
+       * g++.dg/other/pr71728.C: New test.
+
+       PR c++/71941
+       * g++.dg/gomp/pr71941.C: New test.
+
+2016-07-21  Patrick Palka  <ppalka@gcc.gnu.org>
+
+       PR c++/70822
+       PR c++/70106
+       * g++.dg/cpp1y/auto-fn32.C: New test.
+       * g++.dg/cpp1y/paren4.C: New test.
+
+2016-07-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71909
+       * g++.dg/parse/pr71909.C: New test.
+       * g++.dg/tm/pr71909.C: New test.
+
+2016-07-20  Martin Jambor  <mjambor@suse.cz>
+
+        PR fortran/71688
+        gfortran.dg/pr71688.f90: New test.
+
+2016-07-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/71916
+       * gcc.c-torture/compile/pr71916.c: New test.
+
+       PR middle-end/71874
+       * g++.dg/torture/pr71874.C: New test.
+
+       Backported from mainline
+       2016-07-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/71835
+       * g++.dg/conversion/ambig3.C: New test.
+
+       PR c++/71828
+       * g++.dg/cpp0x/constexpr-71828.C: New test.
+
+       PR c++/71822
+       * g++.dg/template/defarg21.C: New test.
+
+       PR c++/71871
+       * g++.dg/ext/vector31.C: New test.
+
+       2016-07-07  Jakub Jelinek  <jakub@redhat.com>
+                   Kai Tietz  <ktietz70@googlemail.com>
+
+       PR c++/70869
+       PR c++/71054
+       * g++.dg/cpp0x/pr70869.C: New test.
+       * g++.dg/cpp0x/pr71054.C: New test.
+
+2016-07-18  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Back port from mainline
+       2016-07-18  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/71493
+       * gcc.target/powerpc/pr71493-1.c: New test.
+       * gcc.target/powerpc/pr71493-2.c: Likewise.
+
+2016-07-18  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-18  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * gcc.target/s390/nolrl-1.c: New test.
+
+2016-07-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71764
+       * gfortran.dg/pr71764.f90: New test.
+
+2016-07-15  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-15  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * g++.dg/pr70098.C: Remove XFAIL for powerpc64_no_dm.
+       * gcc.target/powerpc/pr71763.c: Likewise.
+
+2016-07-15  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-15  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/divkc3-1.c: Require p8vector support.
+       * gcc.target/powerpc/mulkc3-1.c: Likewise.
+
+2016-07-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-12  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/divkc3-1.c: New.
+       * gcc.target/powerpc/mulkc3-1.c: New.
+
+2016-07-14  Alan Modra  <amodra@gmail.com>
+
+       PR target/71733
+       * gcc.target/powerpc/p9-novsx.c: New.
+
+2016-07-13  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71623
+       * gfortran.dg/deferred_character_17.f90: New test.
+
+2016-07-13  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       Backport from mainline r238086.
+       2016-07-07  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR ipa/71624
+       * g++.dg/pr71624.C: New test.
+
+2016-07-12  Michael Meissner  <meissner@linux.vnet.ibm.com>
+           Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-05  Michael Meissner  <meissner@linux.vnet.ibm.com>
+                   Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/signbit-1.c: New test.
+       * gcc.target/powerpc/signbit-2.c: New test.
+       * gcc.target/powerpc/signbit-3.c: New test.
+
+2016-07-12  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-12  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/71805
+       * gcc.target/powerpc/pr71805.c: New test.
+
+2016-07-12  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       Backport from mainline
+       2016-07-06  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/70098
+       PR target/71763
+       * gcc.target/powerpc/pr71763.c: New file.
+
+2016-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/71758
+       * c-c++-common/gomp/pr71758.c: New test.
+       * gfortran.dg/gomp/pr71758.f90: New test.
+
+       PR tree-optimization/71823
+       * gcc.dg/vect/pr71823.c: New test.
+
+2016-07-11  Yuri Rumyantsev  <ysrumyan@gmail.com>
+
+       Backport from mainline r238055.
+       2016-07-06  Yuri Rumyantsev  <ysrumyan@gmail.com>
+
+       PR tree-optimization/71518
+        * gcc.dg/pr71518.c: New test.
+
 2016-07-09  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from trunk:
        Backport from mainline
        2016-07-06  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
 
-       PR target/50739 
+       PR target/50739
        * gcc.target/avr/pr50739.c: New test.
 
 2016-07-05  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
index 3c1c2dd..35bfc86 100644 (file)
@@ -1,3 +1,4 @@
+/* { dg-additional-options "-fdump-tree-gimple" } */
 /* Integer reductions.  */
 
 #define n 1000
@@ -65,3 +66,7 @@ main(void)
 
   return 0;
 }
+
+/* Check that default copy maps are generated for loop reductions.  */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:result \\\[len: \[0-9\]+\\\]\\)" 7 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:lresult \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */
index c3105a2..9dba035 100644 (file)
@@ -1,3 +1,4 @@
+/* { dg-additional-options "-fdump-tree-gimple" } */
 /* float reductions.  */
 
 #define n 1000
@@ -47,3 +48,7 @@ main(void)
 
   return 0;
 }
+
+/* Check that default copy maps are generated for loop reductions.  */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:result \\\[len: \[0-9\]+\\\]\\)" 4 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:lresult \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */
index 4dbde04..669cd43 100644 (file)
@@ -1,3 +1,4 @@
+/* { dg-additional-options "-fdump-tree-gimple" } */
 /* double reductions.  */
 
 #define n 1000
@@ -47,3 +48,7 @@ main(void)
 
   return 0;
 }
+
+/* Check that default copy maps are generated for loop reductions.  */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:result \\\[len: \[0-9\]+\\\]\\)" 4 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:lresult \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */
index c4572b9..5c3dfb1 100644 (file)
@@ -1,3 +1,4 @@
+/* { dg-additional-options "-fdump-tree-gimple" } */
 /* complex reductions.  */
 
 #define n 1000
@@ -35,3 +36,7 @@ main(void)
 
   return 0;
 }
+
+/* Check that default copy maps are generated for loop reductions.  */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:result \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "map\\(tofrom:lresult \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */
diff --git a/gcc/testsuite/c-c++-common/gomp/pr71758.c b/gcc/testsuite/c-c++-common/gomp/pr71758.c
new file mode 100644 (file)
index 0000000..d3c8697
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR middle-end/71758 */
+
+void
+foo (int *p)
+{
+  long long i = 0;
+  #pragma omp target device (i)
+  ;
+  #pragma omp target update device (i) to (p[0])
+}
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c b/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c
new file mode 100644 (file)
index 0000000..2a90ab1
--- /dev/null
@@ -0,0 +1,5 @@
+/* PR c/71512 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fnon-call-exceptions -ftrapv -fexceptions -fsanitize=undefined" } */
+
+#include "../../gcc.dg/pr44545.c"
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr71512-2.c b/gcc/testsuite/c-c++-common/ubsan/pr71512-2.c
new file mode 100644 (file)
index 0000000..1c95593
--- /dev/null
@@ -0,0 +1,5 @@
+/* PR c/71512 */
+/* { dg-do compile } */
+/* { dg-options "-O -fexceptions -fnon-call-exceptions -ftrapv -fsanitize=undefined" } */
+
+#include "../../gcc.dg/pr47086.c"
index aa98ffa..0552c4b 100644 (file)
@@ -1,16 +1,30 @@
 // PR c++/67159
 // { dg-options "-std=c++1z -fconcepts" }
 
+template <class T, class U>
+concept bool SameAs = __is_same_as(T, U);
+
 template <class T>
-concept bool R = requires (T& t) {
+concept bool R1 = requires (T& t) {
   { t.begin() } -> T
+  { t.end() } -> SameAs<T*>;
+};
+
+template <class T>
+concept bool R2 = requires (T& t) {
+  { t.end() } -> SameAs<T*>;
 };
 
 struct foo {
   int* begin();
+  int* end();
 };
 
-R{T}
+R1{T}
 constexpr bool f() { return true; }
 
+R2{T}
+constexpr bool g() { return true; }
+
 static_assert(f<foo>());       // { dg-error "" }
+static_assert(g<foo>());       // { dg-error "" }
index 3a7ba03..178467a 100644 (file)
@@ -24,11 +24,19 @@ template <typename T, typename U, typename... Args>
     return decltype(check<T, U, Args...>())::value;
   }
 
+template <typename T, typename U, typename... Args>
+  concept bool Similar = true;
+
 template <typename... Args>
-requires Same<Args...>()       // { dg-error "concept" }
+requires Same<Args...>() // { dg-error "invalid reference" }
   void foo( Args... args ) {}
 
+template <typename... Args>
+requires Similar<Args...> // { dg-error "invalid reference" }
+  void bar( Args... args ) {}
+
 int main()
 {
-  foo(1, 2, 3);                        // { dg-error "" }
+  foo(1, 2, 3); // { dg-error "cannot call" }
+  bar(1, 2, 3); // { dg-error "cannot call" }
 }
index ebdadc2..32b79c8 100644 (file)
@@ -31,12 +31,12 @@ class S
 int main()
 {
   f1(s); // { dg-error "cannot call" }
-  f2(s); // { dg-error "cannot call" }
+  f2(s); // { dg-error "" }
 
   // When used in non-SFINAE contexts, make sure that we fail
   // the constraint check before emitting the access check
   // failures. The context is being presented constistently
   // in both cases.
   static_assert(C1<S>(), ""); // { dg-error "failed" }
-  static_assert(C2<S>(), ""); // { dg-error "failed" }
+  static_assert(C2<S>(), ""); // { dg-error "" }
 }
diff --git a/gcc/testsuite/g++.dg/concepts/memfun2.C b/gcc/testsuite/g++.dg/concepts/memfun2.C
new file mode 100644 (file)
index 0000000..c186a18
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/72415
+// { dg-options "-std=c++1z -fconcepts" }
+
+template<int... Indices>
+struct indices {};
+
+template<typename Dummy>
+struct foo_type {
+    template<int... Indices>
+    static void impl(indices<Indices...>)
+        requires (... && (Indices, true));
+
+    static auto caller()
+    { return impl(indices<0, 1, 2> {}); }
+};
+
+int main()
+{
+    // internal compiler error: in satisfy_predicate_constraint, at cp/constraint.cc:2013
+    foo_type<void>::caller();
+}
diff --git a/gcc/testsuite/g++.dg/concepts/req19.C b/gcc/testsuite/g++.dg/concepts/req19.C
new file mode 100644 (file)
index 0000000..0564b0c
--- /dev/null
@@ -0,0 +1,13 @@
+// { dg-options "-std=c++1z -fconcepts" }
+
+struct B
+{
+  template <class T> void f(T t)
+    requires requires (T tt) { tt; }
+  { }
+};
+
+int main()
+{
+  B().f(42);
+}
diff --git a/gcc/testsuite/g++.dg/concepts/req20.C b/gcc/testsuite/g++.dg/concepts/req20.C
new file mode 100644 (file)
index 0000000..0584e98
--- /dev/null
@@ -0,0 +1,19 @@
+// { dg-options "-std=c++1z -fconcepts" }
+
+template <class T> concept bool C = true;
+
+template <class T>
+requires C<typename T::foo>
+void f(T t) { }
+
+void f(...);
+
+template <class T>
+requires C<T>
+void g(T t) { }
+
+int main()
+{
+  f(42);
+  g(42);
+}
index e7e71a4..2bd5f15 100644 (file)
@@ -9,10 +9,10 @@ template<typename T> constexpr fool p1() { return {}; }
 template<typename T> constexpr fool p2() { return {}; }
 
 template<typename T>
-  concept bool C() { return p1<T>() && p2<T>(); } // { dg-error "does not have type" }
+  concept bool C() { return p1<T>() && p2<T>(); }
 
 template<C T> void f(T x) { }
 
 int main() {
-  f(0); // { dg-error "cannot call" }
+  f(0); // { dg-error "cannot call|uses overloaded operator" }
 }
index 17db0dd..7953869 100644 (file)
@@ -9,10 +9,10 @@ template<typename T> constexpr fool p1() { return {}; }
 template<typename T> constexpr fool p2() { return {}; }
 
 template<typename T>
-  concept bool C() { return p1<T>() && p2<T>(); } // { dg-error "does not have type" }
+  concept bool C() { return p1<T>() && p2<T>(); }
 
 template<C T> void f(T x) { }
 
 int main() {
-  f(0); // { dg-error "cannot call" }
+  f(0); // { dg-error "cannot call|uses overloaded operator" }
 }
index e8e94c0..6e111b2 100644 (file)
@@ -7,7 +7,12 @@ template<typename T>
   concept bool C1() { return X(); }
 
 template<C1 T>
-  void h(T) { } // { dg-error "not|bool" }
+  void h(T) { } // OK until used.
+
+void f()
+{
+  h(0); // { dg-error "does not have|cannot call" }
+}
 
 template<typename T>
   concept bool C2() { return X() == X(); } // OK
index 7dfa240..99ffdc0 100644 (file)
@@ -13,4 +13,4 @@ template <class T>
 constexpr bool f() { return false; }
 
 static_assert(f<void>());
-static_assert(v<void>);                // { dg-error "constraints" }
+static_assert(v<void>);                // { dg-error "invalid" }
index f7aa710..e60e9ff 100644 (file)
@@ -4,10 +4,13 @@ template <class T> concept bool Copyable = requires (T t) { T(t); };
 template <class T> concept bool Constructable = requires { T(); };
 template <class T> concept bool Both = Copyable<T> && Constructable<T>;
 
-template <Copyable... Ts> void f(Ts...) { }
-template <Both... Ts> void f(Ts...) { }
+template <Copyable... Ts>
+constexpr int f(Ts...) { return 0; } // #1
+
+template <Both... Ts>
+constexpr int f(Ts...) { return 1; }     // #2
 
 int main()
 {
-  f(42);
+  static_assert(f(42) == 1);
 }
diff --git a/gcc/testsuite/g++.dg/concepts/variadic4.C b/gcc/testsuite/g++.dg/concepts/variadic4.C
new file mode 100644 (file)
index 0000000..d20fa7d
--- /dev/null
@@ -0,0 +1,20 @@
+// PR c++/73456
+// { dg-options "-std=c++1z -fconcepts" }
+
+template<typename...> struct list {};
+
+template<typename Seq>
+concept bool Sequence = true;
+
+template<Sequence... Seqs>
+struct zip;
+
+template<Sequence... Seqs>
+    requires requires { typename list<Seqs...>; }
+// main.cpp:12:8: internal compiler error: in non_atomic_constraint_p, at cp/logic.cc:315
+struct zip<Seqs...> {};
+
+int main()
+{
+    zip<list<>, list<int>> {};
+}
diff --git a/gcc/testsuite/g++.dg/conversion/ambig3.C b/gcc/testsuite/g++.dg/conversion/ambig3.C
new file mode 100644 (file)
index 0000000..e17b64e
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/71835
+// { dg-do compile }
+
+typedef void T (int);
+struct A { operator T * (); }; // { dg-message "candidate" }
+struct B { operator T * (); }; // { dg-message "candidate" }
+struct C : A, B {} c;
+
+void
+foo ()
+{
+  c (0);               // { dg-error "is ambiguous" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C
new file mode 100644 (file)
index 0000000..135ff53
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/71718
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+class A : T{};
+
+template <typename T>
+using sp = A<T>;
+
+struct Base {};
+
+template <typename T, int num = 1>
+const sp<T>
+rec()                  // { dg-error "depth" }
+{
+  return rec<T, num - 1>();
+}
+
+static void f(void) {
+  rec<Base>();
+}
+
+// { dg-prune-output "compilation terminated" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignas7.C b/gcc/testsuite/g++.dg/cpp0x/alignas7.C
new file mode 100644 (file)
index 0000000..4ea1252
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/71513
+// { dg-do compile { target c++11 } }
+
+template < int N, typename T >
+struct A
+{
+  enum alignas (N) E : T;
+};
+
+#define SA(X) static_assert((X), #X)
+
+constexpr int al = alignof(double);
+SA(alignof(A<al,char>::E) == al);
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C
new file mode 100644 (file)
index 0000000..b74cde9
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c++/71828
+// { dg-do compile { target c++11 } }
+
+constexpr _Complex int a { 1, 2 };
+static_assert (& __imag a != &__real a, "");
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C
new file mode 100644 (file)
index 0000000..c6afa50
--- /dev/null
@@ -0,0 +1,61 @@
+// PR c++/71092
+// { dg-do compile { target c++11 } }
+
+template <typename _Default> struct A { using type = _Default; };
+template <typename _Default, template <typename> class>
+using __detected_or = A<_Default>;
+template <typename _Default, template <typename> class _Op>
+using __detected_or_t = typename __detected_or<_Default, _Op>::type;
+template <typename _Tp> struct B { typedef _Tp value_type; };
+struct C {
+  template <typename _Tp> using __pointer = typename _Tp::pointer;
+};
+template <typename _Alloc> struct J : C {
+  using pointer = __detected_or_t<typename _Alloc::value_type *, __pointer>;
+};
+template <typename _T1> void _Construct(_T1 *) { new _T1; }
+struct D {
+  template <typename _ForwardIterator, typename _Size>
+  static _ForwardIterator __uninit_default_n(_ForwardIterator p1, _Size) {
+    _Construct(p1);
+  }
+};
+template <typename _ForwardIterator, typename _Size>
+void __uninitialized_default_n(_ForwardIterator p1, _Size) {
+  D::__uninit_default_n(p1, 0);
+}
+template <typename _ForwardIterator, typename _Size, typename _Tp>
+void __uninitialized_default_n_a(_ForwardIterator p1, _Size, _Tp) {
+  __uninitialized_default_n(p1, 0);
+}
+template <typename> struct __shared_ptr {
+  constexpr __shared_ptr() : _M_ptr(), _M_refcount() {}
+  int _M_ptr;
+  int _M_refcount;
+};
+template <typename _Alloc> struct F {
+  typedef _Alloc _Tp_alloc_type;
+  struct G {
+    typename J<_Tp_alloc_type>::pointer _M_start;
+    G(_Tp_alloc_type);
+  };
+  F(int, _Alloc p2) : _M_impl(p2) {}
+  G _M_impl;
+};
+template <typename _Tp, typename _Alloc = B<_Tp>> struct K : F<_Alloc> {
+  typedef _Alloc allocator_type;
+  K(int, allocator_type p2 = allocator_type()) : F<_Alloc>(0, p2) {
+    __uninitialized_default_n_a(this->_M_impl._M_start, 0, 0);
+  }
+};
+struct H {
+  H();
+  struct I {
+    __shared_ptr<int> trigger[1];
+  };
+  __shared_ptr<int> resetTrigger_;
+  K<I> states_;
+  __shared_ptr<int> triggerManager_;
+};
+__shared_ptr<int> a;
+H::H() : states_(0), triggerManager_(a) {}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C
new file mode 100644 (file)
index 0000000..f831a11
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/72457
+// { dg-do compile { target c++11 } }
+
+struct A {
+  int i;
+  constexpr A(): i(0) {}
+};
+
+struct B: A { };
+
+struct C
+{
+  B b;
+  constexpr C() : b{} {}
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C
new file mode 100644 (file)
index 0000000..ed18ab1
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/71896
+// { dg-do compile { target c++11 } }
+
+struct Foo {
+  int x;
+};
+
+constexpr bool compare(int Foo::*t) { return t == &Foo::x; }
+
+constexpr bool b = compare(&Foo::x);
+
+#define SA(X) static_assert ((X),#X)
+SA(b);
index 7f866da..eb40dd6 100644 (file)
@@ -1,3 +1,4 @@
+// Test for Core 2189.
 // { dg-do compile { target c++11 } }
 
 template <class T>
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype65.C b/gcc/testsuite/g++.dg/cpp0x/decltype65.C
new file mode 100644 (file)
index 0000000..6873488
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/71511
+// { dg-do compile { target c++11 } }
+
+template < typename T >
+class A
+{
+  static int i;
+};
+
+//okay: template < typename T > int A <T>::i = 100;
+template < typename T > int decltype (A < T > ())::i = 100; // { dg-error "decltype" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype66.C b/gcc/testsuite/g++.dg/cpp0x/decltype66.C
new file mode 100644 (file)
index 0000000..76ff1e2
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/71350
+// { dg-do compile { target c++11 } }
+
+template<typename T, unsigned int N>
+struct Array
+{
+    T data[N];
+};
+
+template<typename T>
+struct Foo
+{
+    int operator[](const Array<int, 2>& i) const { return 0; }
+    auto bar() -> decltype((*this)[{1,2}] * 0) {
+      return *this;            // { dg-error "cannot convert" }
+    }
+};
+
+template struct Foo<int>;
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-base2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-base2.C
new file mode 100644 (file)
index 0000000..68ccad9
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/55922
+// { dg-do run { target c++11 } }
+
+bool called = false;
+
+struct Base {
+  Base() { if (called) throw 1; called = true; }
+};
+
+struct B1 : virtual Base {
+  B1() { }
+};
+
+struct C : B1, virtual Base {
+  C() : B1{}
+  { }
+};
+
+int main() {
+  C c;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-base3.C b/gcc/testsuite/g++.dg/cpp0x/initlist-base3.C
new file mode 100644 (file)
index 0000000..9febac3
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/71774
+// { dg-do compile { target c++11 } }
+
+class Meow
+{
+  protected:
+    Meow() =default;        
+    virtual void f() {}
+};
+
+class Purr : public Meow
+{
+  public:
+    Purr()
+      : Meow{}
+    {}  
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C
new file mode 100644 (file)
index 0000000..a24e205
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/70824
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+constexpr
+int
+max(std::initializer_list<int> __l)
+{ return *__l.begin(); }
+
+template <class Src>
+void
+a() {
+  const int v =  max({1});
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C
new file mode 100644 (file)
index 0000000..68ac29c
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/69223
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A
+{
+  T x[20];
+};
+
+int main()
+{
+  auto l = [](const A<int>& i){ return i; };
+  A<int> a;
+
+  l(a);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C
new file mode 100644 (file)
index 0000000..f7dea7c
--- /dev/null
@@ -0,0 +1,8 @@
+// PR c++/70781
+// { dg-do compile { target c++11 } }
+
+template < typename T >
+void foo ()
+{
+  T ([=] (S) { [=] {}; });     // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr68724.C b/gcc/testsuite/g++.dg/cpp0x/pr68724.C
new file mode 100644 (file)
index 0000000..ff6d84d
--- /dev/null
@@ -0,0 +1,15 @@
+// PR 68724 ICE in  unificiation
+// { dg-do compile { target c++11 } }
+
+template <typename _Tp, _Tp>
+struct integral_constant
+{
+};
+
+integral_constant<bool, true> inst;
+
+template <typename _Tp>
+struct integral_constant<bool, __is_enum(_Tp)> // { dg-error "" }
+{
+};
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr70869.C b/gcc/testsuite/g++.dg/cpp0x/pr70869.C
new file mode 100644 (file)
index 0000000..84c532b
--- /dev/null
@@ -0,0 +1,25 @@
+// PR c++/70869
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+  int f () { return 1; }
+  int g () { return 2; }
+  int h () { return 3; }
+};
+
+int
+main ()
+{
+  int cnt = 0;
+  for (const auto &m : { &A::f, &A::g, &A::h })
+    {
+      A a;
+      if ((a.*m) () != ++cnt)
+       __builtin_abort ();
+    }
+  if (cnt != 3)
+    __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr71054.C b/gcc/testsuite/g++.dg/cpp0x/pr71054.C
new file mode 100644 (file)
index 0000000..518bafc
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/71054
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template <typename D, typename T = decltype (&D::U)>
+struct S
+{
+  struct A
+  {
+    int a;
+    int b;
+    T p;
+  };
+  S () { std::initializer_list<A> a{ {0, 0, &D::V} }; }
+};
+struct R {
+  void V (int);
+  void U (int);
+};
+S<R> b;
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for31.C b/gcc/testsuite/g++.dg/cpp0x/range-for31.C
new file mode 100644 (file)
index 0000000..13daf61
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/71604
+// { dg-do compile { target c++11 } }
+
+void foo ()
+{
+  int a[2] = { 1, 2 };
+  for (struct S { S (int) {} } S : a) // { dg-error "types may not be defined" }
+    ;
+}
index a389f66..38fe456 100644 (file)
@@ -7,9 +7,9 @@
 
 void test()
 {
-    for (struct S { } *x : { (S*)0, (S*)0 } )
+    for (struct S { } *x : { (S*)0, (S*)0 } ) // { dg-error "types may not be defined" }
         ;
 
-    for (struct S { } x : { S(), S() } )
+    for (struct S { } x : { S(), S() } ) // { dg-error "types may not be defined" }
         ;
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C
new file mode 100644 (file)
index 0000000..6b7cfba
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/71576
+// { dg-do compile { target c++11 } }
+
+template < typename T > T && foo ();
+
+struct A
+{
+  int i:5;
+};
+
+void foo ()
+{
+  int &&j = foo < A > ().i;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae57.C b/gcc/testsuite/g++.dg/cpp0x/sfinae57.C
new file mode 100644 (file)
index 0000000..975a330
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/71495
+// { dg-do compile { target c++11 } }
+
+struct A;
+template <class T> void f(T);  // { dg-bogus "initializing" }
+template <class T> T&& declval();
+struct B
+{
+  template <class T, class U> static decltype(f<T>(declval<U>())) g(int);
+  template <class T, class U> void g(...);
+} b;
+
+int main()
+{
+  b.g<A,A>(42);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C
new file mode 100644 (file)
index 0000000..b230ffa
--- /dev/null
@@ -0,0 +1,12 @@
+// Test for sZ mangling.
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_Z1fIJidEEv1AIXstDpT_EE" } }
+// { dg-options -fabi-version=9 }
+
+template <int I> struct A { };
+template <typename... Ts> void f(A<sizeof...(Ts)>);
+
+int main()
+{
+  f<int,double>(A<2>());
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C
new file mode 100644 (file)
index 0000000..3ac1517
--- /dev/null
@@ -0,0 +1,19 @@
+// Testcase from cxx-abi-dev.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=9" }
+
+struct A {
+  template<int...T> using N = int[sizeof...(T)];
+  template<int...A> void f(N<A...> &);
+
+  template<typename...T> using M = int[sizeof...(T)];
+  template<typename...A> void g(M<A...> &);
+};
+void g(A a)
+{
+  int arr[3];
+  // { dg-final { scan-assembler "_ZN1A1fIJLi1ELi2ELi3EEEEvRAszspT__i" } }
+  a.f<1,2,3>(arr);
+  // { dg-final { scan-assembler "_ZN1A1gIJiiiEEEvRAstDpT__i" } }
+  a.g<int,int,int>(arr);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C
new file mode 100644 (file)
index 0000000..f239ef7
--- /dev/null
@@ -0,0 +1,10 @@
+// Testcase from cxx-abi-dev.
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_" } }
+
+struct A {
+  template<typename...T> using N = int[sizeof...(T)];
+  template<typename...A, typename B, typename...C>
+      void f(N<A..., B, C...> &, B, C...);
+};
+void g(A a) { int arr[6]; a.f<int, int>(arr, 1, 2, 3, 4); }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C
new file mode 100644 (file)
index 0000000..eba8f59
--- /dev/null
@@ -0,0 +1,11 @@
+// Testcase from cxx-abi-dev.
+// { dg-do compile { target c++11 } }
+// { dg-options -fabi-version=9 }
+// { dg-final { scan-assembler "_ZN1A1fIJiiEiJiiiEEEvRAstDpT1__iT0_S2_" } }
+
+struct A {
+  template<typename...T> using N = int[sizeof...(T)];
+  template<typename...A, typename B, typename...C>
+      void f(N<A..., B, C...> &, B, C...);
+};
+void g(A a) { int arr[6]; a.f<int, int>(arr, 1, 2, 3, 4); }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C
new file mode 100644 (file)
index 0000000..abfb49a
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/71833
+// { dg-do compile { target c++11 } }
+
+template < typename ... Ts > struct A 
+{
+  template < Ts ..., typename ... Us > struct B {};
+};
+
+A <>::B < int > e;
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn32.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn32.C
new file mode 100644 (file)
index 0000000..0a5dafc
--- /dev/null
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++14 } }
+
+template<class,class> struct same_type;
+template<class T> struct same_type<T,T> {};
+
+struct A
+{
+  static int b;
+  int c;
+
+  template <int>
+  decltype(auto) f() { return A::c; }
+
+  template <int>
+  decltype(auto) g() { return (A::c); }
+};
+
+A a;
+
+template <int>
+decltype(auto) f() { return A::b; }
+
+template <int>
+decltype(auto) g() { return (A::b); }
+
+int main()
+{
+  same_type<decltype(f<0>()), int>();
+  same_type<decltype(g<0>()), int&>();
+
+  same_type<decltype(a.f<0>()), int>();
+  same_type<decltype(a.g<0>()), int&>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-array5.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-array5.C
new file mode 100644 (file)
index 0000000..3abdd84
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/71972
+// { dg-do compile { target c++14 } }
+
+typedef int size_t;
+template <int N> struct S {
+  template <size_t M> constexpr S(const char (&)[M]) : data{} {
+    data[0] = data[0];
+  }
+  char data[N];
+};
+int main() {
+  constexpr S<1> s1("");
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-switch4.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-switch4.C
new file mode 100644 (file)
index 0000000..383bde9
--- /dev/null
@@ -0,0 +1,27 @@
+// PR c++/72868
+// { dg-do compile }
+// { dg-options "-std=gnu++14" }
+
+constexpr int
+foo (int i)
+{
+  switch (i)
+    {
+    case 11 ... 12:
+      return 4;
+    case 0 ... 9:
+      return 3;
+    default:
+      return 7;
+    }
+}
+
+#define SA(X) static_assert((X),#X)
+SA (foo (-1) == 7);
+SA (foo (0) == 3);
+SA (foo (3) == 3);
+SA (foo (9) == 3);
+SA (foo (10) == 7);
+SA (foo (11) == 4);
+SA (foo (12) == 4);
+SA (foo (13) == 7);
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv2.C
new file mode 100644 (file)
index 0000000..5528455
--- /dev/null
@@ -0,0 +1,26 @@
+// PR c++/71117
+// { dg-do compile { target c++14 } }
+
+template <class T> T&& declval() noexcept;
+template <class, class>
+constexpr bool is_same = false;
+template <class T>
+constexpr bool is_same<T, T> = true;
+
+template <class F>
+struct indirected : F {
+    indirected(F f) : F(f) {}
+    template <class I>
+    auto operator()(I i) -> decltype(declval<F&>()(*i)) {
+        return static_cast<F&>(*this)(*i);
+    }
+};
+
+int main() {
+    auto f = [](auto rng) {
+        static_assert(is_same<decltype(rng), int>, "");
+        return 42;
+    };
+    indirected<decltype(f)> i(f);
+    static_assert(is_same<decltype(i(declval<int*>())), int>, "");
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-conv3.C
new file mode 100644 (file)
index 0000000..8ec6a20
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/70942
+// { dg-do compile { target c++14 } }
+
+int main()
+{
+    int x = 0;
+    [](auto&& xv){
+        static_cast<decltype(xv)>(xv) = 1;
+    }(x);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-ice1.C b/gcc/testsuite/g++.dg/cpp1y/lambda-ice1.C
new file mode 100644 (file)
index 0000000..86fb88a
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/72800
+// { dg-do compile { target c++14 } }
+
+void foo ()
+{
+  [n {}] {};  // { dg-error "one element|deducing" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/paren4.C b/gcc/testsuite/g++.dg/cpp1y/paren4.C
new file mode 100644 (file)
index 0000000..71abe84
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/70822
+// { dg-do compile { target c++14 } }
+
+struct a
+{
+  static int b;
+};
+
+template <typename>
+void
+foo ()
+{
+  &(a::b);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ53.C b/gcc/testsuite/g++.dg/cpp1y/var-templ53.C
new file mode 100644 (file)
index 0000000..3e30d67
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/71630
+// { dg-do compile { target c++14 } }
+
+template <class T>
+extern T pi;
+
+int main()
+{
+  return pi<int>;
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/fold-mangle.C b/gcc/testsuite/g++.dg/cpp1z/fold-mangle.C
new file mode 100644 (file)
index 0000000..709ef2e
--- /dev/null
@@ -0,0 +1,20 @@
+// PR c++/71711
+// { dg-options -std=c++1z }
+
+template < int > struct A {};
+template < int ... N > void unary_left (A < (... + N) >);
+template < int ... N > void unary_right (A < (N + ...) >);
+template < int ... N > void binary_left (A < (42 + ... + N) >);
+template < int ... N > void binary_right (A < (N + ... + 42) >);
+
+void bar ()
+{
+  // { dg-final { scan-assembler "_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE" } }
+  unary_left < 1, 2, 3 > ({});
+  // { dg-final { scan-assembler "_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE" } }
+  unary_right < 1, 2, 3 > ({});
+  // { dg-final { scan-assembler "_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE" } }
+  binary_left < 1, 2, 3 > ({});
+  // { dg-final { scan-assembler "_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE" } }
+  binary_right < 1, 2, 3 > ({});
+}
diff --git a/gcc/testsuite/g++.dg/ext/array3.C b/gcc/testsuite/g++.dg/ext/array3.C
new file mode 100644 (file)
index 0000000..e8940db
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/70709
+// { dg-options "" }
+
+struct A
+{
+  A (int);
+};
+
+struct B
+{
+  B () {} 
+  A a[0];
+};
+
+struct C
+{
+  C () {} 
+  B a[0];
+};
diff --git a/gcc/testsuite/g++.dg/ext/vector31.C b/gcc/testsuite/g++.dg/ext/vector31.C
new file mode 100644 (file)
index 0000000..a056839
--- /dev/null
@@ -0,0 +1,29 @@
+// PR c++/71871
+// { dg-do compile }
+
+typedef unsigned int V __attribute__ ((__vector_size__ (32)));
+
+template <int N>
+void
+foo (V *x)
+{
+  V a = *x;
+  a = a ? a : -1;
+  *x = a;
+}
+
+template <typename T>
+void
+bar (T *x)
+{
+  T a = *x;
+  a = a ? a : -1;
+  *x = a;
+}
+
+void
+test (V *x, V *y)
+{
+  foo<0> (x);
+  bar<V> (y);
+}
diff --git a/gcc/testsuite/g++.dg/gomp/pr71941.C b/gcc/testsuite/g++.dg/gomp/pr71941.C
new file mode 100644 (file)
index 0000000..ffa53d0
--- /dev/null
@@ -0,0 +1,22 @@
+// PR c++/71941
+// { dg-do compile }
+// { dg-options "-fopenmp" }
+
+struct A { A (); A (A &); ~A (); };
+
+template <int N>
+struct B
+{
+  struct C { A a; C () : a () {} };
+  C c;
+  void foo ();
+};
+
+void
+bar ()
+{
+  B<0> b;
+#pragma omp task
+  for (int i = 0; i < 2; i++)
+    b.foo ();
+}
diff --git a/gcc/testsuite/g++.dg/init/elide5.C b/gcc/testsuite/g++.dg/init/elide5.C
new file mode 100644 (file)
index 0000000..e52d55f
--- /dev/null
@@ -0,0 +1,26 @@
+// PR c++/71913
+// { dg-do link { target c++11 } }
+
+void* operator new(decltype(sizeof(1)), void* p) { return p; }
+
+struct IndirectReturn {
+  IndirectReturn() {}
+  // Undefined so we get a link error if the indirect return value is copied
+  IndirectReturn(const IndirectReturn&);
+  IndirectReturn& operator=(const IndirectReturn&) = delete;
+  ~IndirectReturn() {}
+};
+
+IndirectReturn foo() { return IndirectReturn(); }
+
+void bar(void* ptr) {
+  new (ptr) IndirectReturn(foo());
+}
+
+alignas (alignof (IndirectReturn))
+unsigned char c[sizeof(IndirectReturn)];
+
+int main()
+{
+  bar(c);
+}
diff --git a/gcc/testsuite/g++.dg/other/pr71728.C b/gcc/testsuite/g++.dg/other/pr71728.C
new file mode 100644 (file)
index 0000000..b70e3c2
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/71728
+// { dg-do compile }
+// { dg-options "-std=gnu++14 -Wall" }
+
+int
+foo ()
+{
+  if (({ goto test; test: 1; }) != 1)
+    return 1;
+  return 2;
+}
diff --git a/gcc/testsuite/g++.dg/parse/pr71909.C b/gcc/testsuite/g++.dg/parse/pr71909.C
new file mode 100644 (file)
index 0000000..ee592bf
--- /dev/null
@@ -0,0 +1,22 @@
+// PR c++/71909
+// { dg-do compile }
+
+struct S
+{
+  S () try : m (0) {}
+  catch (...) {}
+  void foo () try {}
+  catch (int) {}
+  catch (...) {}
+  int m;
+};
+
+struct T
+{
+  T () : m (0) {}
+  catch (...) {}       // { dg-error "expected unqualified-id before" }
+  void foo () {}
+  catch (int) {}       // { dg-error "expected unqualified-id before" }
+  catch (...) {}       // { dg-error "expected unqualified-id before" }
+  int m;
+};
index f5eb48f..c7b4f63 100644 (file)
@@ -2,8 +2,6 @@
 // { dg-do compile }
 // { dg-options -O2 }
 // { dg-require-effective-target c++11 }
-// { dg-xfail-if "PR70098" { lp64 && powerpc64_no_dm } }
-// { dg-prune-output ".*internal compiler error.*" }
 
 template < typename > struct traits;
 template < typename, int _Rows, int _Cols, int = 0, int = _Rows,
diff --git a/gcc/testsuite/g++.dg/pr71624.C b/gcc/testsuite/g++.dg/pr71624.C
new file mode 100644 (file)
index 0000000..94a75cd
--- /dev/null
@@ -0,0 +1,35 @@
+/* PR71624 */
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */
+
+class c1
+{
+public:
+  virtual int fn1 () const;
+  int fn2 (const int *) const;
+};
+
+class c2
+{
+  int fn1 ();
+  c1 obj;
+};
+
+int
+c1::fn1 () const
+{
+  return 0;
+}
+
+int
+c1::fn2 (const int *) const
+{
+  return this->fn1 ();
+}
+
+int
+c2::fn1 ()
+{
+  return obj.fn2 (0);
+}
+
diff --git a/gcc/testsuite/g++.dg/template/defarg21.C b/gcc/testsuite/g++.dg/template/defarg21.C
new file mode 100644 (file)
index 0000000..6ac2276
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/71822
+// { dg-do compile }
+
+int bar (int);
+
+template <typename T>
+struct A
+{
+  explicit A (int x = bar (sizeof (T)));
+};
+
+struct B
+{
+  A <int> b[2];
+};
+
+void
+baz ()
+{
+  B b;
+}
diff --git a/gcc/testsuite/g++.dg/template/dtor10.C b/gcc/testsuite/g++.dg/template/dtor10.C
new file mode 100644 (file)
index 0000000..0b21e30
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/71748
+
+struct A
+{
+  virtual ~A () {}
+};
+
+struct B : public A
+{
+  virtual ~B () {}
+};
+
+template < int > void foo ()
+{
+  B *b = new B;
+  b->~A ();
+}
+
+int main ()
+{
+  foo < 0 > ();
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/template/friend63.C b/gcc/testsuite/g++.dg/template/friend63.C
new file mode 100644 (file)
index 0000000..f3a292c
--- /dev/null
@@ -0,0 +1,29 @@
+// PR c++/71738
+
+template < class > struct S
+{
+  template < class > struct A
+  { 
+    template < class > struct B
+    {
+      template <class Z>
+      void operator=(Z) { S::i = 0; }
+    };
+  };
+
+  // Note that this friend declaration is useless, since nested classes are
+  // already friends of their enclosing class.
+  template < class X >
+  template < class Y >
+  template < class Z >
+  friend void A < X >::B < Y >::operator= (Z);
+
+private:
+  static int i;
+};
+
+int main()
+{
+  S<int>::A<int>::B<int> b;
+  b = 0;
+}
diff --git a/gcc/testsuite/g++.dg/template/ttp29.C b/gcc/testsuite/g++.dg/template/ttp29.C
new file mode 100644 (file)
index 0000000..7d4e03a
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/70778
+
+template <class KeyType>
+struct Stuff
+{
+  template <KeyType, class>
+  struct AddToFront;
+
+  template <KeyType ToAdd, template<KeyType> class Holder, KeyType Indexs>
+  struct AddToFront<ToAdd, Holder<Indexs> >
+  {
+  };
+};
+
+template <unsigned>
+struct Holder {};
+
+int main()
+{
+  Stuff<unsigned>::AddToFront<0, Holder<24> > t;
+}
diff --git a/gcc/testsuite/g++.dg/tm/pr71909.C b/gcc/testsuite/g++.dg/tm/pr71909.C
new file mode 100644 (file)
index 0000000..941f231
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/71909
+// { dg-do compile { target c++11 } }
+// { dg-options "-fgnu-tm" }
+
+struct S
+{
+  S () __transaction_atomic [[outer]] try : m {0} {} catch (int) {} catch (...) {}
+  int m;
+};
+
+struct T
+{
+  T () __transaction_atomic __attribute__((outer)) try : m {0} {} catch (int) {} catch (...) {}
+  int m;
+};
+
+void foo () __transaction_atomic [[outer]] try {} catch (int) {} catch (...) {}
+void bar () __transaction_atomic __attribute__((outer)) try {} catch (int) {} catch (...) {}
diff --git a/gcc/testsuite/g++.dg/torture/pr71874.C b/gcc/testsuite/g++.dg/torture/pr71874.C
new file mode 100644 (file)
index 0000000..d9b4e2f
--- /dev/null
@@ -0,0 +1,12 @@
+// PR middle-end/71874
+// { dg-do run }
+
+int
+main ()
+{
+  char str[] = "abcdefghijklmnopqrstuvwxyzABCDEF";
+  __builtin_memmove (str + 20, str + 15, 11);
+  if (__builtin_strcmp (str, "abcdefghijklmnopqrstpqrstuvwxyzF") != 0)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/ubsan/pr71512.C b/gcc/testsuite/g++.dg/ubsan/pr71512.C
new file mode 100644 (file)
index 0000000..9822c98
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR c/71512 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftrapv -fnon-call-exceptions -fsanitize=undefined" } */
+
+bool
+foo (int *x, int *y, int *z)
+{
+  try
+    {
+      x[0] = y[0] + z[0];
+      x[1] = y[1] - z[1];
+      x[2] = y[2] * z[2];
+      x[3] = -y[3];
+    }
+  catch (...)
+    {
+      return true;
+    }
+  return false;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr71916.c b/gcc/testsuite/gcc.c-torture/compile/pr71916.c
new file mode 100644 (file)
index 0000000..95bc5b7
--- /dev/null
@@ -0,0 +1,36 @@
+/* PR rtl-optimization/71916 */
+
+int a, b, c, d, f, g;
+short h;
+
+short
+foo (short p1)
+{
+  return a >= 2 || p1 > 7 >> a ? p1 : p1 << a;
+}
+
+void
+bar (void)
+{
+  for (;;)
+    {
+      int i, j[3];
+      h = b >= 2 ? d : d >> b;
+      if (foo (f > h ^ c))
+       {
+         d = 0;
+         while (f <= 2)
+           {
+             char k[2];
+             for (;;)
+               k[i++] = 7;
+           }
+       }
+      else
+       for (;;)
+         g = j[2];
+      if (g)
+       for (;;)
+         ;
+    }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr72802.c b/gcc/testsuite/gcc.c-torture/compile/pr72802.c
new file mode 100644 (file)
index 0000000..b9e1ab3
--- /dev/null
@@ -0,0 +1,211 @@
+static a[];
+static b, h, m, n, o, p, q, t, u, v, t5, t6, t16, t17, t18, t25;
+c;
+static volatile d;
+static volatile e;
+static volatile f;
+static volatile g;
+j;
+static volatile k;
+static volatile l;
+static volatile r;
+const volatile s;
+static volatile w;
+static volatile x;
+const volatile y;
+static volatile z;
+static volatile t1;
+static volatile t2;
+const t3;
+t4;
+const volatile t8;
+const volatile t9;
+const volatile t10;
+static volatile t11;
+static volatile t12;
+static volatile t13;
+static volatile t14;
+const volatile t15;
+static volatile t19;
+static volatile t20;
+const volatile t21;
+static volatile t22;
+static volatile t23;
+const volatile t24;
+*t29;
+fn1() { b = 5; }
+fn2(long);
+#pragma pack(1)
+struct S0 {
+  short f3;
+  float f4;
+  signed f5
+};
+const struct S0 t7[] = {};
+static fn3() {
+  int t26[] = {};
+  int t27[10] = {};
+  --t25;
+  if (fn4()) {
+    t5++;
+    fn5();
+    int t28[] = {t26, t27};
+    return;
+  }
+}
+fn6() {
+  int i, t30 = 0;
+  if (fn6 == 2)
+    t30 = 1;
+  {
+    int t31, i = 0;
+    for (; i < 256; i++) {
+      t31 = i;
+      if (i & 1)
+        t31 = 0;
+      a[i] = t31;
+    }
+    i = 0;
+    for (; i < 3; i++)
+      t29[i] = t6;
+    fn7();
+    fn3();
+    t4 = c = j = 0;
+  }
+  fn2(h);
+  if (t30)
+    printf(b);
+  g;
+  fn2(g);
+  printf(b);
+  f;
+  fn2(f);
+  if (t30)
+    printf(b);
+  e;
+  fn2(e);
+  printf(b);
+  fn8();
+  d;
+  fn2(d);
+  if (t30)
+    printf(b);
+  l;
+  fn2(l);
+  printf(b);
+  k;
+  fn2(k);
+  if (t30)
+    printf(b);
+  printf(b);
+  for (; i; i++) {
+    y;
+    fn2(y);
+    printf(b);
+    x;
+    fn2(x);
+    if (t30)
+      printf(b);
+    w;
+    fn2(w);
+    printf(b);
+    fn2(v);
+    printf(b);
+    fn2(u);
+    if (t30)
+      printf(b);
+    fn2(t);
+    printf(b);
+    s;
+    fn2(s);
+    if (t30)
+      printf(b);
+    r;
+    fn2(r);
+    printf(b);
+    fn2(q);
+    if (t30)
+      printf(b);
+    fn2(p);
+    printf("", b);
+    fn2(o);
+    printf(b);
+    fn2(n);
+    if (t30)
+      printf(b);
+    fn2(m);
+    printf(b);
+  }
+  fn2(z);
+  if (t30)
+    printf(b);
+  printf("", t3);
+  t2;
+  fn2(t2);
+  printf(b);
+  t1;
+  fn2(t1);
+  if (t30)
+    printf(b);
+  for (; i < 6; i++) {
+    t10;
+    fn2(t10);
+    printf(b);
+    t9;
+    fn2(t9);
+    if (t30)
+      printf(b);
+    t8;
+    fn2(t8);
+    printf(b);
+    fn2(t7[i].f3);
+    if (t30)
+      printf(b);
+    fn2(t7[i].f4);
+    printf(b);
+    fn2(t7[i].f5);
+    if (t30)
+      printf(b);
+    t15;
+    fn2(t15);
+    printf(b);
+    t14;
+    fn2(t14);
+    if (t30)
+      printf(b);
+    t13;
+    fn2(t13);
+    printf(b);
+    t12;
+    fn2(t12);
+    if (t30)
+      printf(b);
+    t11;
+    fn2(t11);
+    printf(b);
+    t21;
+    fn2(t21);
+    if (t30)
+      printf(b);
+    t20;
+    fn2(t20);
+    fn2(t19);
+    if (t30)
+      printf(b);
+    fn2(t18);
+    printf(b);
+    fn2(t17);
+    printf(b);
+    fn2(t16);
+    printf(b);
+  }
+  t24;
+  t24;
+  if (t30)
+    printf(b);
+  printf(t23);
+  t22;
+  t22;
+  if (t30)
+    printf(b);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/pr72824-2.c b/gcc/testsuite/gcc.c-torture/execute/ieee/pr72824-2.c
new file mode 100644 (file)
index 0000000..0622d01
--- /dev/null
@@ -0,0 +1,21 @@
+/* PR tree-optimization/72824 */
+
+typedef float V __attribute__((vector_size (4 * sizeof (float))));
+
+static inline void
+foo (V *x, V value)
+{
+  int i;
+  for (i = 0; i < 32; ++i)
+    x[i] = value;
+}
+
+int
+main ()
+{
+  V x[32];
+  foo (x, (V) { 0.f, -0.f, 0.f, -0.f });
+  if (__builtin_copysignf (1.0, x[3][1]) != -1.0f)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/pr72824.c b/gcc/testsuite/gcc.c-torture/execute/ieee/pr72824.c
new file mode 100644 (file)
index 0000000..1c21373
--- /dev/null
@@ -0,0 +1,19 @@
+/* PR tree-optimization/72824 */
+
+static inline void
+foo (float *x, float value)
+{
+  int i;
+  for (i = 0; i < 32; ++i)
+    x[i] = value;
+}
+
+int
+main ()
+{
+  float x[32];
+  foo (x, -0.f);
+  if (__builtin_copysignf (1.0, x[3]) != -1.0f)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr71083.c b/gcc/testsuite/gcc.c-torture/execute/pr71083.c
new file mode 100644 (file)
index 0000000..0574434
--- /dev/null
@@ -0,0 +1,43 @@
+struct lock_chain {
+  unsigned int irq_context: 2,
+    depth: 6,
+    base: 24;
+};
+
+__attribute__((noinline, noclone))
+struct lock_chain * foo (struct lock_chain *chain)
+{
+  int i;
+  for (i = 0; i < 100; i++)
+    {
+      chain[i+1].base = chain[i].base;
+    }
+  return chain;
+}
+
+struct lock_chain1 {
+  char x;
+  unsigned short base;
+} __attribute__((packed));
+
+__attribute__((noinline, noclone))
+struct lock_chain1 * bar (struct lock_chain1 *chain)
+{
+  int i;
+  for (i = 0; i < 100; i++)
+    {
+      chain[i+1].base = chain[i].base;
+    }
+  return chain;
+}
+
+struct lock_chain test [101];
+struct lock_chain1 test1 [101];
+
+int
+main ()
+{
+  foo (test);
+  bar (test1);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c
new file mode 100644 (file)
index 0000000..4fd8b74
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O0 -g -dA" } */
+
+// Test that there is only one DW_TAG_unspecified_parameters DIE.
+
+void
+foo (const char *format, ...)
+{
+}
+
+// { dg-final { scan-assembler-times "DIE.*DW_TAG_unspecified_parameters" 1 } }
diff --git a/gcc/testsuite/gcc.dg/ipa/pr71981.c b/gcc/testsuite/gcc.dg/ipa/pr71981.c
new file mode 100644 (file)
index 0000000..1b21602
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+int **a;
+static void fn1(char **p1) {
+  char s = *p1, b = &s;
+  while (*fn2()[a])
+    ;
+}
+int main() { fn1(""); return 0; }
diff --git a/gcc/testsuite/gcc.dg/pr67410.c b/gcc/testsuite/gcc.dg/pr67410.c
new file mode 100644 (file)
index 0000000..ff3c4f1
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR c/67410 */
+/* { dg-do run } */
+/* { dg-options "-std=gnu11" } */
+
+struct {
+  __CHAR16_TYPE__ s[2];
+} a[] = { u"ff", [0].s[0] = u'x', [1] = u"\u1234\u4567", [1].s[0] = u'\u89ab' };
+
+int
+main ()
+{
+  if (a[0].s[0] != u'x' || a[0].s[1] != u'f' || a[1].s[0] != u'\u89ab' || a[1].s[1] != u'\u4567')
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr71518.c b/gcc/testsuite/gcc.dg/pr71518.c
new file mode 100644 (file)
index 0000000..6240ca8
--- /dev/null
@@ -0,0 +1,25 @@
+/* PR tree-optimization/71518 */
+/* { dg-options "-O3" } */
+
+int a, *b[9], c, d, e; 
+
+static int
+fn1 ()
+{
+  for (c = 6; c >= 0; c--)
+    for (d = 0; d < 2; d++)
+      {
+        b[d * 2 + c] = 0;
+        e = a > 1 ? : 0;
+        if (e == 2) 
+          return 0;
+      }
+  return 0;
+}
+
+int
+main ()
+{
+  fn1 ();
+  return 0; 
+}
diff --git a/gcc/testsuite/gcc.dg/pr72816.c b/gcc/testsuite/gcc.dg/pr72816.c
new file mode 100644 (file)
index 0000000..b1498c7
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR c/72816 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu11" } */
+
+typedef const int A[];
+struct S {
+  int a;
+  A b;
+};
diff --git a/gcc/testsuite/gcc.dg/torture/pr71881.c b/gcc/testsuite/gcc.dg/torture/pr71881.c
new file mode 100644 (file)
index 0000000..b17db1b
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-g" } */
+
+int a, b, c, d, *e, f, g;
+
+int fn1 ()
+{
+  char h[2];
+  int i = 0;
+  for (; i < 2; i++)
+    {
+      if (c)
+       for (*e = 0; *e;)
+         {
+           int j[f];
+           i = *e;
+         }
+      h[i] = 0;
+    }
+  for (; a;)
+    return h[0];
+  for (b = 0; b;)
+    i = g = (1 & i) < d;
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr73434.c b/gcc/testsuite/gcc.dg/torture/pr73434.c
new file mode 100644 (file)
index 0000000..624e0c6
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+
+typedef struct { unsigned char x; } A;
+typedef struct { unsigned char x; } B;
+
+int idx = 0;
+
+A objs[1] = {{0}};
+
+int main()
+{
+  B *b = (B*)&objs[idx];
+  b->x++;
+  if (b->x)
+    b->x = 0;
+  if (b->x)
+    __builtin_abort ();
+  return 0;
+}
index 18517b3..dc96713 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details" } */
 /* { dg-require-effective-target vect_double } */
 
 struct omp_data_i
diff --git a/gcc/testsuite/gcc.dg/vect/pr71823.c b/gcc/testsuite/gcc.dg/vect/pr71823.c
new file mode 100644 (file)
index 0000000..079cde4
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR tree-optimization/71823 */
+/* { dg-do compile } */
+/* { dg-additional-options "-mfma" { target i?86-*-* x86_64-*-* } } */
+
+float a[4], b[4];
+
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 4; ++i)
+    b[i] = __builtin_fma (1024.0f, 1024.0f, a[i]);
+  return 0;
+}
index 4e2ef0d..138de73 100644 (file)
 #define X8     320
 #define X9     328
 
-#define STACK  336
+#define H0     336
+#define H1     338
+#define H2     340
+#define H3     342
+#define H4     344
+#define H5     346
+#define H6     348
+#define H7     350
+
+
+#define STACK  352
 
 /* The type of test.  'myfunc' in abitest.S needs to know which kind of
    test it is running to decide what to do at the runtime.  Keep the
index c2fbd83..893e68c 100644 (file)
@@ -13,7 +13,12 @@ dumpregs:
 myfunc:
       mov      x16, sp
       mov      x17, sp
-      sub      sp,  sp, 352 // 336 for registers and 16 for old sp and lr
+      sub      sp,  sp, 368 // 352 for registers and 16 for old sp and lr
+
+      sub      x17, x17, 8
+      st4      { v4.h, v5.h, v6.h, v7.h }[0], [x17] //344
+      sub      x17, x17, 8
+      st4      { v0.h, v1.h, v2.h, v3.h }[0], [x17] //336
 
       stp      x8, x9, [x17, #-16]! //320
 
index a21c926..29a1ca6 100644 (file)
@@ -44,4 +44,5 @@ FUNC_VAL_CHECK (12,         vf2_t,        vf2, D0, f32in64)
 FUNC_VAL_CHECK (13,         vi4_t,        vi4, Q0, i32in128)
 FUNC_VAL_CHECK (14,         int *,    int_ptr, X0, flat)
 FUNC_VAL_CHECK (15,         vlf1_t,    vlf1, Q0, flat)
+FUNC_VAL_CHECK (16,         __fp16,    0xabcd, H0, flat)
 #endif
index 94817ed..ce7c60a 100644 (file)
@@ -12,5 +12,6 @@
   ARG(double, 4.0, D1)
   ARG(float, 2.0f, S2)
   ARG(double, 5.0, D3)
+  ARG(__fp16, 8.0f, H4)
   LAST_ARG(int, 3, W0)
 #endif
diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/test_27.c b/gcc/testsuite/gcc.target/aarch64/aapcs64/test_27.c
new file mode 100644 (file)
index 0000000..7bc79f5
--- /dev/null
@@ -0,0 +1,46 @@
+/* Test AAPCS64 layout
+
+   Test named homogeneous floating-point aggregates of __fp16 data,
+   which should be passed in SIMD/FP registers or via the stack.  */
+
+/* { dg-do run { target aarch64*-*-* } } */
+
+#ifndef IN_FRAMEWORK
+#define TESTFILE "test_27.c"
+
+struct x0
+{
+  __fp16 v[1];
+} f16x1;
+
+struct x1
+{
+  __fp16 v[2];
+} f16x2;
+
+struct x2
+{
+  __fp16 v[3];
+} f16x3;
+
+#define HAS_DATA_INIT_FUNC
+void init_data ()
+{
+  f16x1.v[0] = 2.0f;
+  f16x2.v[0] = 4.0f;
+  f16x2.v[1] = 8.0f;
+  f16x3.v[0] = 16.0f;
+  f16x3.v[1] = 32.0f;
+  f16x3.v[2] = 64.0f;
+}
+
+#include "abitest.h"
+#else
+ARG (struct x0, f16x1, H0)
+ARG (struct x1, f16x2, H1)
+ARG (struct x2, f16x3, H3)
+ARG (struct x1, f16x2, H6)
+ARG (struct x0, f16x1, STACK)
+ARG (int, 0xdeadbeef, W0)
+LAST_ARG (double, 456.789, STACK+8)
+#endif
index 3b9b349..ca1fa58 100644 (file)
@@ -44,6 +44,24 @@ struct hfa_fx3_t
   float c;
 };
 
+struct hfa_f16x1_t
+{
+  __fp16 a;
+};
+
+struct hfa_f16x2_t
+{
+  __fp16 a;
+  __fp16 b;
+};
+
+struct hfa_f16x3_t
+{
+  __fp16 a;
+  __fp16 b;
+  __fp16 c;
+};
+
 struct hfa_dx2_t
 {
   double a;
index 4fb9a03..5b9e057 100644 (file)
@@ -19,6 +19,8 @@ signed short ss = 0xcba9;
 signed int ss_promoted = 0xffffcba9;
 float fp = 65432.12345f;
 double fp_promoted = (double)65432.12345f;
+__fp16 fp16 = 2.0f;
+__fp16 fp16_promoted = (double)2.0f;
 
 #define HAS_DATA_INIT_FUNC
 void init_data ()
@@ -46,9 +48,13 @@ void init_data ()
   ANON         (    long double   , 98765432123456789.987654321L,      Q2,      12)
   ANON         (             vf2_t, vf2   ,                            D3,      13)
   ANON         (             vi4_t, vi4   ,                            Q4,      14)
+  /* 7.2: For unprototyped (i.e. pre- ANSI or K&R C) and variadic functions,
+     in addition to the normal conversions and promotions, arguments of
+     type __fp16 are converted to type double.  */
+  ANON_PROMOTED(            __fp16, fp16  ,     double, fp16_promoted, D5,      15)
 #ifndef __AAPCS64_BIG_ENDIAN__
-  LAST_ANON    (         int      , 0xeeee,                            STACK+32,15)
+  LAST_ANON    (         int      , 0xeeee,                            STACK+32,16)
 #else
-  LAST_ANON    (         int      , 0xeeee,                            STACK+36,15)
+  LAST_ANON    (         int      , 0xeeee,                            STACK+36,16)
 #endif
 #endif
diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-16.c b/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-16.c
new file mode 100644 (file)
index 0000000..73f8f1c
--- /dev/null
@@ -0,0 +1,28 @@
+/* Test AAPCS64 layout and __builtin_va_arg.
+
+   This test is focused particularly on __fp16 unnamed homogeneous
+   floating-point aggregate types which should be passed in fp/simd
+   registers until we run out of those, then the stack.  */
+
+/* { dg-do run { target aarch64*-*-* } } */
+
+#ifndef IN_FRAMEWORK
+#define AAPCS64_TEST_STDARG
+#define TESTFILE "va_arg-16.c"
+#include "type-def.h"
+
+struct hfa_f16x1_t hfa_f16x1 = {2.0f};
+struct hfa_f16x2_t hfa_f16x2 = {4.0f, 8.0f};
+struct hfa_f16x3_t hfa_f16x3 = {16.0f, 32.0f, 64.0f};
+
+#include "abitest.h"
+#else
+  ARG      (int, 1, W0, LAST_NAMED_ARG_ID)
+  DOTS
+  ANON     (struct hfa_f16x1_t, hfa_f16x1, H0     , 0)
+  ANON     (struct hfa_f16x2_t, hfa_f16x2, H1     , 1)
+  ANON     (struct hfa_f16x3_t, hfa_f16x3, H3     , 2)
+  ANON     (struct hfa_f16x2_t, hfa_f16x2, H6     , 3)
+  ANON     (struct hfa_f16x1_t, hfa_f16x1, STACK  , 4)
+  LAST_ANON(double            , 1.0      , STACK+8, 5)
+#endif
index e972691..8f2f881 100644 (file)
@@ -19,6 +19,8 @@ signed short ss = 0xcba9;
 signed int ss_promoted = 0xffffcba9;
 float fp = 65432.12345f;
 double fp_promoted = (double)65432.12345f;
+__fp16 fp16 = 2.0f;
+__fp16 fp16_promoted = (double)2.0f;
 
 #define HAS_DATA_INIT_FUNC
 void init_data ()
@@ -64,9 +66,10 @@ void init_data ()
   ANON         (    long double   , 98765432123456789.987654321L,      STACK+80, 20)
   ANON         (             vf2_t, vf2   ,                            STACK+96, 21)
   ANON         (             vi4_t, vi4   ,                            STACK+112,22)
+  ANON_PROMOTED(         __fp16   , fp16  ,     double, fp16_promoted, STACK+128,23)
 #ifndef __AAPCS64_BIG_ENDIAN__
-  LAST_ANON    (         int      , 0xeeee,                            STACK+128,23)
+  LAST_ANON    (         int      , 0xeeee,                            STACK+136,24)
 #else
-  LAST_ANON    (         int      , 0xeeee,                            STACK+132,23)
+  LAST_ANON    (         int      , 0xeeee,                            STACK+140,24)
 #endif
 #endif
index fab3575..010ad8b 100644 (file)
@@ -29,6 +29,8 @@ struct non_hfa_ffvf2_t non_hfa_ffvf2;
 struct non_hfa_fffd_t non_hfa_fffd = {33.f, 34.f, 35.f, 36.0};
 union hfa_union_t hfa_union;
 union non_hfa_union_t non_hfa_union;
+struct hfa_f16x2_t hfa_f16x2 = {2.0f, 4.0f};
+struct hfa_f16x3_t hfa_f16x3 = {2.0f, 4.0f, 8.0f};
 
 #define HAS_DATA_INIT_FUNC
 void init_data ()
@@ -89,9 +91,12 @@ void init_data ()
   PTR_ANON (struct non_hfa_ffs_t  , non_hfa_ffs  , STACK+120, 18)
   ANON     (struct non_hfa_ffs_2_t, non_hfa_ffs_2, STACK+128, 19)
   ANON     (union  non_hfa_union_t, non_hfa_union, STACK+144, 20)
+  /* HFA of __fp16 passed on stack, directed __fp16 test is va_arg-10.c.  */
+  ANON     (struct hfa_f16x2_t    , hfa_f16x2    , STACK+152, 21)
+  ANON     (struct hfa_f16x3_t    , hfa_f16x3    , STACK+160, 22)
 #ifndef __AAPCS64_BIG_ENDIAN__
-  LAST_ANON(int                   , 2            , STACK+152, 30)
+  LAST_ANON(int                   , 2            , STACK+168, 30)
 #else
-  LAST_ANON(int                   , 2            , STACK+156, 30)
+  LAST_ANON(int                   , 2            , STACK+172, 30)
 #endif
 #endif
index 4853f92..e54f1f5 100644 (file)
@@ -17,6 +17,8 @@ struct hfa_dx4_t hfa_dx4 = {1234.123, 2345.234, 3456.345, 4567.456};
 struct hfa_ldx3_t hfa_ldx3 = {123456.7890, 234567.8901, 345678.9012};
 struct hfa_ffs_t hfa_ffs;
 union hfa_union_t hfa_union;
+struct hfa_f16x2_t hfa_f16x2 = {2.0f, 4.0f};
+struct hfa_f16x3_t hfa_f16x3 = {2.0f, 4.0f, 8.0f};
 
 #define HAS_DATA_INIT_FUNC
 void init_data ()
@@ -43,5 +45,8 @@ void init_data ()
   ANON     (struct hfa_fx1_t  , hfa_fx1  , STACK+24, 4)
   ANON     (struct hfa_fx2_t  , hfa_fx2  , STACK+32, 5)
   ANON     (struct hfa_dx2_t  , hfa_dx2  , STACK+40, 6)
-  LAST_ANON(double            , 1.0      , STACK+56, 7)
+  /* HFA of __fp16 passed on stack, directed __fp16 test is va_arg-10.c.  */
+  ANON     (struct hfa_f16x2_t, hfa_f16x2, STACK+56, 7)
+  ANON     (struct hfa_f16x3_t, hfa_f16x3, STACK+64, 8)
+  LAST_ANON(double            , 1.0      , STACK+72, 9)
 #endif
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-1.c b/gcc/testsuite/gcc.target/avr/pr71151-1.c
new file mode 100644 (file)
index 0000000..615dce8
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -ffunction-sections -fdata-sections" } */
+
+/* { dg-final { scan-assembler-not ".section   .progmem.gcc_sw_table.foo.str1.1" } } */
+/* { dg-final { scan-assembler ".section       .rodata.foo.str1.1,\"aMS\"" } } */
+
+
+extern void bar(const char*);
+void foo(void)
+{
+  bar("BBBBBBBBBB");
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-2.c b/gcc/testsuite/gcc.target/avr/pr71151-2.c
new file mode 100644 (file)
index 0000000..f745841
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -fdata-sections" } */
+
+/* Make sure jumptables work properly if placed below 64 KB i.e. 2 byte
+   flash address for loading jump table entry, 2 byte entry, after
+   removing the special section placement hook. */
+
+#define SECTION_NAME ".foo"
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-3.c b/gcc/testsuite/gcc.target/avr/pr71151-3.c
new file mode 100644 (file)
index 0000000..a8fa6b6
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -mno-relax -fdata-sections -Wl,--section-start=.foo=0x10000" } */
+
+#ifdef __AVR_HAVE_ELPM__
+/* Make sure jumptables work properly if placed above 64 KB and below 128 KB,
+   i.e. 3 byte flash address for loading jump table entry and 2 byte jump table
+   entry, with relaxation disabled, after removing the special section
+   placement hook. */
+#define SECTION_NAME ".foo"
+#else
+/* No special jump table placement so that avrtest won't abort
+   for, e.g. ATmega64.  */
+#define SECTION_NAME ".text.foo"
+#endif
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-4.c b/gcc/testsuite/gcc.target/avr/pr71151-4.c
new file mode 100644 (file)
index 0000000..659aff0
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -fdata-sections -mrelax -Wl,--section-start=.foo=0x10000" } */
+
+#ifdef __AVR_HAVE_ELPM__
+/* Make sure jumptables work properly if placed above 64 KB and below 128 KB,
+   i.e. 3 byte flash address for loading jump table entry and 2 byte jump
+   table entry, with relaxation enabled, after removing the special section
+   placement hook. */
+#define SECTION_NAME ".foo"
+#else
+/* No special jump table placement so that avrtest won't abort
+   for, e.g. ATmega64.  */
+#define SECTION_NAME ".text.foo"
+#endif
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-5.c b/gcc/testsuite/gcc.target/avr/pr71151-5.c
new file mode 100644 (file)
index 0000000..f9b09e8
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -fdata-sections -mno-relax -Wl,--section-start=.foo=0x20000" } */
+
+#ifdef __AVR_3_BYTE_PC__
+/* Make sure jumptables work properly if placed above 128 KB, i.e. 3 byte
+   flash address for loading jump table entry and a jump table entry
+   that is a stub, with relaxation disabled, after removing the special
+   section placement hook. */
+#define SECTION_NAME ".foo"
+#else
+/* No special jump table placement so that avrtest won't abort
+   for, e.g. ATmega128.  */
+#define SECTION_NAME ".text.foo"
+#endif
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-6.c b/gcc/testsuite/gcc.target/avr/pr71151-6.c
new file mode 100644 (file)
index 0000000..dedeffa
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -fdata-sections -mrelax -Wl,--section-start=.foo=0x20000" } */
+
+#ifdef __AVR_3_BYTE_PC__
+/* Make sure jumptables work properly if placed above 128 KB, i.e. 3 byte
+   flash address for loading jump table entry and a jump table entry
+   that is a stub, with relaxation enabled, after removing the special
+   section placement hook. */
+#define SECTION_NAME ".foo"
+#else
+/* No special jump table placement so that avrtest won't abort
+   for, e.g. ATmega128.  */
+#define SECTION_NAME ".text.foo"
+#endif
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-7.c b/gcc/testsuite/gcc.target/avr/pr71151-7.c
new file mode 100644 (file)
index 0000000..2a44096
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -fdata-sections -mno-relax -Wl,--section-start=.foo=0x1fffa" } */
+
+#ifdef __AVR_3_BYTE_PC__
+/* Make sure jumptables work properly if placed straddling 128 KB i.e
+   some entries below 128 KB and some above it, with relaxation disabled. */
+#define SECTION_NAME ".foo"
+#else
+/* No special jump table placement so that avrtest won't abort
+   for, e.g. ATmega128.  */
+#define SECTION_NAME ".text.foo"
+#endif
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-8.c b/gcc/testsuite/gcc.target/avr/pr71151-8.c
new file mode 100644 (file)
index 0000000..aa3015b
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-Os -fno-tree-switch-conversion -ffunction-sections -fdata-sections -mrelax -Wl,--section-start=.foo=0x1fffa" } */
+
+#ifdef __AVR_3_BYTE_PC__
+/* Make sure jumptables work properly if placed straddling 128 KB i.e
+   some entries below 128 KB and some above it, with relaxation disabled. */
+#define SECTION_NAME ".foo"
+#else
+/* No special jump table placement so that avrtest won't abort.  */
+#define SECTION_NAME ".text.foo"
+#endif
+
+#include "exit-abort.h"
+#include "pr71151-common.h"
+
+int main()
+{
+       foo(5);
+       if (y != 37)
+               abort();
+
+       foo(0);
+       if (y != 67)
+               abort();
+
+       foo(7);
+       if (y != 98)
+               abort();
+}
diff --git a/gcc/testsuite/gcc.target/avr/pr71151-common.h b/gcc/testsuite/gcc.target/avr/pr71151-common.h
new file mode 100644 (file)
index 0000000..43379be
--- /dev/null
@@ -0,0 +1,27 @@
+volatile char y;
+volatile char g;
+
+__attribute__((section(SECTION_NAME)))
+void foo(char x) 
+{
+       switch (x)
+       {
+               case 0:
+                       y = 67; break;
+               case 1:
+                       y = 20; break;
+               case 2:
+                       y = 109; break;
+               case 3:
+                       y = 33; break;
+               case 4:
+                       y = 44; break;
+               case 5:
+                       y = 37; break;
+               case 6:
+                       y = 10; break;
+               case 7:
+                       y = 98; break;
+       }
+       y = y + g;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr76342.c b/gcc/testsuite/gcc.target/i386/pr76342.c
new file mode 100644 (file)
index 0000000..d492b00
--- /dev/null
@@ -0,0 +1,11 @@
+/* PR target/76342 */
+/* { dg-do compile } */
+/* { dg-options "-mavx512f" } */
+
+#include <immintrin.h>
+
+__m512i
+test()
+{
+  return _mm512_undefined_epi32 ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/divkc3-1.c b/gcc/testsuite/gcc.target/powerpc/divkc3-1.c
new file mode 100644 (file)
index 0000000..89bf04f
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do run { target { powerpc64*-*-* && p8vector_hw } } } */
+/* { dg-options "-mfloat128 -mvsx" } */
+
+void abort ();
+
+typedef __complex float __cfloat128 __attribute__((mode(KC)));
+
+__cfloat128 divide (__cfloat128 x, __cfloat128 y)
+{
+  return x / y;
+}
+
+__cfloat128 z, a;
+
+int main ()
+{
+  z = divide (5.0q + 5.0jq, 2.0q + 1.0jq);
+  a = 3.0q + 1.0jq;
+  if (z != a)
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/float128-cmp.c b/gcc/testsuite/gcc.target/powerpc/float128-cmp.c
new file mode 100644 (file)
index 0000000..247abc0
--- /dev/null
@@ -0,0 +1,106 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target ppc_float128_sw } */
+/* { dg-options "-mvsx -O2 -mfloat128" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#ifndef TYPE
+#define TYPE __float128
+#define NAN __builtin_nanq ("")
+#define SNAN __builtin_nansq ("")
+#else
+#define NAN __builtin_nan ("")
+#define SNAN __builtin_nans ("")
+#endif
+
+extern void check (TYPE a,
+                  TYPE b,
+                  int eq,
+                  int ne,
+                  int lt,
+                  int le,
+                  int gt,
+                  int ge,
+                  int i_lt,
+                  int i_le,
+                  int i_gt,
+                  int i_ge,
+                  int i_lg,
+                  int i_un) __attribute__((__noinline__));
+
+void
+check (TYPE a,
+       TYPE b,
+       int eq,
+       int ne,
+       int lt,
+       int le,
+       int gt,
+       int ge,
+       int i_lt,
+       int i_le,
+       int i_gt,
+       int i_ge,
+       int i_lg,
+       int i_un)
+{
+  if (eq != (a == b))
+    abort ();
+
+  if (ne != (a != b))
+    abort ();
+
+  if (lt != (a < b))
+    abort ();
+
+  if (le != (a <= b))
+    abort ();
+
+  if (gt != (a > b))
+    abort ();
+
+  if (ge != (a >= b))
+    abort ();
+
+  if (i_lt != __builtin_isless (a, b))
+    abort ();
+
+  if (i_le != __builtin_islessequal (a, b))
+    abort ();
+
+  if (i_gt != __builtin_isgreater (a, b))
+    abort ();
+
+  if (i_ge != __builtin_isgreaterequal (a, b))
+    abort ();
+
+  if (i_lg != __builtin_islessgreater (a, b))
+    abort ();
+
+  if (i_un != __builtin_isunordered (a, b))
+    abort ();
+}
+
+int main (void)
+{
+  TYPE one   = (TYPE) +1.0;
+  TYPE two   = (TYPE) +2.0;
+  TYPE pzero = (TYPE) +0.0;
+  TYPE mzero = (TYPE) -0.0;
+  TYPE nan   = (TYPE) NAN;
+  TYPE snan  = (TYPE) SNAN;
+
+  check (one,   two,   0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0);
+  check (one,   one,   1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0);
+  check (one,   pzero, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0);
+  check (mzero, pzero, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0);
+  check (nan,   one,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  check (one,   nan,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  check (nan,   nan,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  check (snan,  one,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  check (one,   snan,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  check (snan,  nan,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  check (nan,   snan,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/mulkc3-1.c b/gcc/testsuite/gcc.target/powerpc/mulkc3-1.c
new file mode 100644 (file)
index 0000000..b975a91
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do run { target { powerpc64*-*-* && p8vector_hw } } } */
+/* { dg-options "-mfloat128 -mvsx" } */
+
+void abort ();
+
+typedef __complex float __cfloat128 __attribute__((mode(KC)));
+
+__cfloat128 multiply (__cfloat128 x, __cfloat128 y)
+{
+  return x * y;
+}
+
+__cfloat128 z, a;
+
+int main ()
+{
+  z = multiply (2.0q + 1.0jq, 3.0q + 1.0jq);
+  a = 5.0q + 5.0jq;
+  if (z != a)
+    abort ();
+  return 0;
+}
index fd6de4d..574e0f3 100644 (file)
@@ -3,7 +3,7 @@
 
 /* { dg-do compile { target { powerpc*-*-linux* } } } */
 /* { dg-options "-O2 -pg -mprofile-kernel" } */
-/* { dg-require-effective-target powerpc64 } */
+/* { dg-require-effective-target lp64 } */
 /* { dg-final { scan-assembler-not "mtlr" } } */
 
 int foo(void)
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71493-1.c b/gcc/testsuite/gcc.target/powerpc/pr71493-1.c
new file mode 100644 (file)
index 0000000..9ec9da0
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile { target { powerpc*-*-linux* && ilp32 } } } */
+/* { dg-options "-O2 -msvr4-struct-return" } */
+
+struct S1 { float f; };
+
+struct S1 foo1 (void)
+{
+  struct S1 s = { 1.0f };
+  return s;
+}
+
+/* { dg-final { scan-assembler     "lwz" } } */
+/* { dg-final { scan-assembler-not "lfs" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71493-2.c b/gcc/testsuite/gcc.target/powerpc/pr71493-2.c
new file mode 100644 (file)
index 0000000..e9184a6
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile { target { powerpc*-*-linux* && ilp32 } } } */
+/* { dg-options "-O2 -msvr4-struct-return" } */
+
+struct S2 { double d; };
+
+struct S2 foo2 (void)
+{
+  struct S2 s = { 1.0 };
+  return s;
+}
+
+/* { dg-final { scan-assembler     "lwz" } } */
+/* { dg-final { scan-assembler-not "lfd" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71763.c b/gcc/testsuite/gcc.target/powerpc/pr71763.c
new file mode 100644 (file)
index 0000000..b36ddfa
--- /dev/null
@@ -0,0 +1,25 @@
+// PR target/71763
+// { dg-do compile }
+// { dg-options "-O1 -mvsx" }
+
+int a, b;
+float c;
+
+void fn2(void);
+
+void fn1(void)
+{
+        long d;
+
+        for (d = 3; d; d--) {
+                for (a = 0; a <= 1; a++) {
+                        b &= 1;
+                        if (b) {
+                                for (;;) {
+                                        fn2();
+                                        c = d;
+                                }
+                        }
+                }
+        }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr71805.c b/gcc/testsuite/gcc.target/powerpc/pr71805.c
new file mode 100644 (file)
index 0000000..02db059
--- /dev/null
@@ -0,0 +1,113 @@
+/* { dg-require-effective-target p9vector_hw } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-options "-mcpu=power9 -O3 --param tree-reassoc-width=1" } */
+
+/* Originally from gcc.dg/vect/pr45752.c.  */
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void abort (void);
+extern void exit (int);
+#ifdef __cplusplus
+}
+#endif
+
+#define M00 100
+#define M10 216
+#define M20 23
+#define M30 237
+#define M40 437
+
+#define M01 1322
+#define M11 13
+#define M21 27271
+#define M31 2280
+#define M41 284
+
+#define M02 74
+#define M12 191
+#define M22 500
+#define M32 111
+#define M42 1114
+
+#define M03 134
+#define M13 117
+#define M23 11
+#define M33 771
+#define M43 71
+
+#define M04 334
+#define M14 147
+#define M24 115
+#define M34 7716
+#define M44 16
+
+#define N 20
+
+void foo (unsigned int *__restrict__ pInput,
+          unsigned int *__restrict__ pOutput,
+          unsigned int *__restrict__ pInput2,
+          unsigned int *__restrict__ pOutput2)
+{
+  unsigned int i, a, b, c, d, e;
+
+  for (i = 0; i < N / 5; i++)
+    {
+       a = *pInput++;
+       b = *pInput++;
+       c = *pInput++;
+       d = *pInput++;
+       e = *pInput++;
+
+       *pOutput++ = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e;
+       *pOutput++ = M10 * a + M11 * b + M12 * c + M13 * d + M14 * e;
+       *pOutput++ = M20 * a + M21 * b + M22 * c + M23 * d + M24 * e;
+       *pOutput++ = M30 * a + M31 * b + M32 * c + M33 * d + M34 * e;
+       *pOutput++ = M40 * a + M41 * b + M42 * c + M43 * d + M44 * e;
+
+
+       a = *pInput2++;
+       b = *pInput2++;
+       c = *pInput2++;
+       d = *pInput2++;
+       e = *pInput2++;
+
+       *pOutput2++ = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e;
+       *pOutput2++ = M10 * a + M11 * b + M12 * c + M13 * d + M14 * e;
+       *pOutput2++ = M20 * a + M21 * b + M22 * c + M23 * d + M24 * e;
+       *pOutput2++ = M30 * a + M31 * b + M32 * c + M33 * d + M34 * e;
+       *pOutput2++ = M40 * a + M41 * b + M42 * c + M43 * d + M44 * e;
+
+    }
+}
+
+int main (int argc, const char* argv[])
+{
+  unsigned int input[N], output[N], i, input2[N], output2[N];
+  unsigned int check_results[N]
+    = {3208, 1334, 28764, 35679, 2789, 13028, 4754, 168364, 91254, 12399, 
+    22848, 8174, 307964, 146829, 22009, 32668, 11594, 447564, 202404, 31619 };
+  unsigned int check_results2[N]
+    = {7136, 2702, 84604, 57909, 6633, 16956, 6122, 224204, 113484, 16243, 
+    26776, 9542, 363804, 169059, 25853, 36596, 12962, 503404, 224634, 35463 };
+
+  for (i = 0; i < N; i++)
+    {
+      input[i] = i%256;
+      input2[i] = i + 2;
+      output[i] = 0;
+      output2[i] = 0;
+      __asm__ volatile ("");
+    }
+
+  foo (input, output, input2, output2);
+
+  for (i = 0; i < N; i++)
+    if (output[i] != check_results[i]
+        || output2[i] != check_results2[i])
+      abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr72853.c b/gcc/testsuite/gcc.target/powerpc/pr72853.c
new file mode 100644 (file)
index 0000000..8eae7d4
--- /dev/null
@@ -0,0 +1,108 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-options "-mcpu=power9 -O3 -mupper-regs-df -mupper-regs-sf -funroll-loops" } */
+
+/* derived from 20021120-1.c, compiled for -mcpu=power9.  */
+
+extern void abort (void);
+extern void exit (int);
+
+volatile double gd[32];
+volatile float gf[32];
+
+void
+foo (int n)
+{
+  double d00, d10, d20, d30, d01, d11, d21, d31, d02, d12, d22, d32, d03, d13,
+    d23, d33, d04, d14, d24, d34, d05, d15, d25, d35, d06, d16, d26, d36, d07,
+    d17, d27, d37;
+  float f00, f10, f20, f30, f01, f11, f21, f31, f02, f12, f22, f32, f03, f13,
+    f23, f33, f04, f14, f24, f34, f05, f15, f25, f35, f06, f16, f26, f36, f07,
+    f17, f27, f37;
+  volatile double *pd;
+  volatile float *pf;
+  int i;
+
+  pd = gd;
+  d00 = *(pd++), d10 = *(pd++), d20 = *(pd++), d30 = *(pd++), d01 =
+    *(pd++), d11 = *(pd++), d21 = *(pd++), d31 = *(pd++), d02 = *(pd++), d12 =
+    *(pd++), d22 = *(pd++), d32 = *(pd++), d03 = *(pd++), d13 = *(pd++), d23 =
+    *(pd++), d33 = *(pd++), d04 = *(pd++), d14 = *(pd++), d24 = *(pd++), d34 =
+    *(pd++), d05 = *(pd++), d15 = *(pd++), d25 = *(pd++), d35 = *(pd++), d06 =
+    *(pd++), d16 = *(pd++), d26 = *(pd++), d36 = *(pd++), d07 = *(pd++), d17 =
+    *(pd++), d27 = *(pd++), d37 = *(pd++);
+  for (i = 0; i < n; i++)
+    {
+      pf = gf;
+      f00 = *(pf++), f10 = *(pf++), f20 = *(pf++), f30 = *(pf++), f01 =
+       *(pf++), f11 = *(pf++), f21 = *(pf++), f31 = *(pf++), f02 =
+       *(pf++), f12 = *(pf++), f22 = *(pf++), f32 = *(pf++), f03 =
+       *(pf++), f13 = *(pf++), f23 = *(pf++), f33 = *(pf++), f04 =
+       *(pf++), f14 = *(pf++), f24 = *(pf++), f34 = *(pf++), f05 =
+       *(pf++), f15 = *(pf++), f25 = *(pf++), f35 = *(pf++), f06 =
+       *(pf++), f16 = *(pf++), f26 = *(pf++), f36 = *(pf++), f07 =
+       *(pf++), f17 = *(pf++), f27 = *(pf++), f37 = *(pf++);
+      pd = gd;
+      d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
+       *(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
+       *(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
+       *(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
+       *(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
+       *(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
+       *(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
+       *(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
+      pd = gd;
+      d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
+       *(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
+       *(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
+       *(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
+       *(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
+       *(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
+       *(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
+       *(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
+      pd = gd;
+      d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
+       *(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
+       *(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
+       *(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
+       *(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
+       *(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
+       *(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
+       *(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
+      pf = gf;
+      *(pf++) = f00, *(pf++) = f10, *(pf++) = f20, *(pf++) = f30, *(pf++) =
+       f01, *(pf++) = f11, *(pf++) = f21, *(pf++) = f31, *(pf++) =
+       f02, *(pf++) = f12, *(pf++) = f22, *(pf++) = f32, *(pf++) =
+       f03, *(pf++) = f13, *(pf++) = f23, *(pf++) = f33, *(pf++) =
+       f04, *(pf++) = f14, *(pf++) = f24, *(pf++) = f34, *(pf++) =
+       f05, *(pf++) = f15, *(pf++) = f25, *(pf++) = f35, *(pf++) =
+       f06, *(pf++) = f16, *(pf++) = f26, *(pf++) = f36, *(pf++) =
+       f07, *(pf++) = f17, *(pf++) = f27, *(pf++) = f37;
+    }
+  pd = gd;
+  *(pd++) = d00, *(pd++) = d10, *(pd++) = d20, *(pd++) = d30, *(pd++) =
+    d01, *(pd++) = d11, *(pd++) = d21, *(pd++) = d31, *(pd++) = d02, *(pd++) =
+    d12, *(pd++) = d22, *(pd++) = d32, *(pd++) = d03, *(pd++) = d13, *(pd++) =
+    d23, *(pd++) = d33, *(pd++) = d04, *(pd++) = d14, *(pd++) = d24, *(pd++) =
+    d34, *(pd++) = d05, *(pd++) = d15, *(pd++) = d25, *(pd++) = d35, *(pd++) =
+    d06, *(pd++) = d16, *(pd++) = d26, *(pd++) = d36, *(pd++) = d07, *(pd++) =
+    d17, *(pd++) = d27, *(pd++) = d37;
+}
+
+int
+main ()
+{
+  int i;
+
+  for (i = 0; i < 32; i++)
+    gd[i] = i, gf[i] = i;
+  foo (1);
+  for (i = 0; i < 32; i++)
+    if (gd[i] != i * 4 || gf[i] != i)
+      abort ();
+  exit (0);
+}
+
+/* { dg-final { scan-assembler-not "stxsd \[0-9\]+,\[0-9\]+,\[0-9\]"  } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/signbit-1.c b/gcc/testsuite/gcc.target/powerpc/signbit-1.c
new file mode 100644 (file)
index 0000000..bdfeb70
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O2 -mfloat128" } */
+
+int do_signbit_kf (__float128 a) { return __builtin_signbit (a); }
+int do_signbit_if (__ibm128 a) { return __builtin_signbit (a); }
+int do_signbit_tf (long double a) { return __builtin_signbit (a); }
+
+/* { dg-final { scan-assembler-not   "stxvd2x"  } } */
+/* { dg-final { scan-assembler-not   "stxvw4x"  } } */
+/* { dg-final { scan-assembler-not   "stxsd"    } } */
+/* { dg-final { scan-assembler-not   "stxsdx"   } } */
+/* { dg-final { scan-assembler-times "mfvsrd" 3 } } */
+/* { dg-final { scan-assembler-times "srdi"   3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/signbit-2.c b/gcc/testsuite/gcc.target/powerpc/signbit-2.c
new file mode 100644 (file)
index 0000000..b5bd856
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-options "-mcpu=power9 -O2 -mfloat128" } */
+
+int do_signbit_kf (__float128 *a) { return __builtin_signbit (*a); }
+
+/* { dg-final { scan-assembler-not   "stxvd2x"  } } */
+/* { dg-final { scan-assembler-not   "stxvw4x"  } } */
+/* { dg-final { scan-assembler-not   "stxsd"    } } */
+/* { dg-final { scan-assembler-not   "stxsdx"   } } */
+/* { dg-final { scan-assembler-not   "lxvd2x"   } } */
+/* { dg-final { scan-assembler-not   "lxvw4x"   } } */
+/* { dg-final { scan-assembler-not   "lxsd"     } } */
+/* { dg-final { scan-assembler-not   "lxsdx"    } } */
+/* { dg-final { scan-assembler-times "ld"     1 } } */
+/* { dg-final { scan-assembler-times "srdi"   1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/signbit-3.c b/gcc/testsuite/gcc.target/powerpc/signbit-3.c
new file mode 100644 (file)
index 0000000..cd64143
--- /dev/null
@@ -0,0 +1,172 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target ppc_float128_sw } */
+/* { dg-options "-mcpu=power7 -O2 -mfloat128 -lm" } */
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <math.h>
+
+#if defined(__BIG_ENDIAN__)
+struct ieee128 {
+  uint64_t upper;
+  uint64_t lower;
+};
+
+#elif defined(__LITTLE_ENDIAN__)
+struct ieee128 {
+  uint64_t lower;
+  uint64_t upper;
+};
+
+#else
+#error "Unknown system"
+#endif
+
+union ieee_union {
+  __float128 f128;
+  struct ieee128 st128;
+};
+
+#ifdef DEBUG
+static int num_errors = 0;
+
+__attribute__((__noinline__))
+static void
+failure (int expected, int got, __float128 x)
+{
+  unsigned sign;
+  unsigned exponent;
+  uint64_t mantissa1;
+  uint64_t mantissa2;
+  uint64_t upper;
+  uint64_t lower;
+
+  union ieee_union u;
+
+  u.f128 = x;
+  upper  = u.st128.upper;
+  lower  = u.st128.lower;
+
+  sign      = (unsigned)((upper >> 63) & 1);
+  exponent  = (unsigned)((upper >> 48) & ((((uint64_t)1) << 16) - 1));
+  mantissa1 = (upper & ((((uint64_t)1) << 48) - 1));
+  mantissa2 = lower;
+
+  printf ("Expected %d, got %d, %c 0x%.4x 0x%.12" PRIx64 " 0x%.16" PRIx64,
+         expected, got,
+         sign ? '-' : '+',
+         exponent,
+         mantissa1,
+         mantissa2);
+
+  num_errors++;
+}
+
+#else
+
+#define failure(E, G, F) abort ()
+#endif
+
+__attribute__((__noinline__))
+static void
+test_signbit_arg (__float128 f128, int expected)
+{
+  int sign = __builtin_signbit (f128);
+
+  if ((expected != 0 && sign == 0)
+      || (expected == 0 && sign != 0))
+    failure (f128, expected, sign);
+}
+
+__attribute__((__noinline__))
+static void
+test_signbit_mem (__float128 *ptr, int expected)
+{
+  int sign = __builtin_signbit (*ptr);
+
+  if ((expected != 0 && sign == 0)
+      || (expected == 0 && sign != 0))
+    failure (*ptr, expected, sign);
+}
+
+__attribute__((__noinline__))
+static void
+test_signbit_gpr (__float128 *ptr, int expected)
+{
+  __float128 f128 = *ptr;
+  int sign;
+
+  __asm__ (" # %0" : "+r" (f128));
+
+  sign = __builtin_signbit (f128);
+  if ((expected != 0 && sign == 0)
+      || (expected == 0 && sign != 0))
+    failure (f128, expected, sign);
+}
+
+__attribute__((__noinline__))
+static void
+test_signbit (__float128 f128, int expected)
+{
+#ifdef DEBUG
+  union ieee_union u;
+  u.f128 = f128;
+  printf ("Expecting %d, trying %-5g "
+         "(0x%.16" PRIx64 " 0x%.16" PRIx64 ")\n",
+         expected, (double)f128,
+         u.st128.upper, u.st128.lower);
+#endif
+
+  test_signbit_arg (f128,  expected);
+  test_signbit_mem (&f128, expected);
+  test_signbit_gpr (&f128, expected);
+}
+
+int
+main (void)
+{
+  union ieee_union u;
+
+  test_signbit (+0.0q, 0);
+  test_signbit (+1.0q, 0);
+
+  test_signbit (-0.0q, 1);
+  test_signbit (-1.0q, 1);
+
+  test_signbit (__builtin_copysign (__builtin_infq (), +1.0q), 0);
+  test_signbit (__builtin_copysign (__builtin_infq (), -1.0q), 1);
+
+  test_signbit (__builtin_copysign (__builtin_nanq (""), +1.0q), 0);
+  test_signbit (__builtin_copysign (__builtin_nanq (""), -1.0q), 1);
+
+  /* force the bottom double word to have specific bits in the 'sign' bit to
+     make sure we are picking the right word.  */
+  u.f128 = 1.0q;
+  u.st128.lower = 0ULL;
+  test_signbit (u.f128, 0);
+
+  u.st128.lower = ~0ULL;
+  test_signbit (u.f128, 0);
+
+  u.f128 = -1.0q;
+  u.st128.lower = 0ULL;
+  test_signbit (u.f128, 1);
+
+  u.st128.lower = ~0ULL;
+  test_signbit (u.f128, 1);
+
+#ifdef DEBUG
+  printf ("%d error(s) were found\n", num_errors);
+  if (num_errors)
+    return num_errors;
+#endif
+
+  return 0;
+}
+
diff --git a/gcc/testsuite/gcc.target/s390/nolrl-1.c b/gcc/testsuite/gcc.target/s390/nolrl-1.c
new file mode 100644 (file)
index 0000000..e0d1213
--- /dev/null
@@ -0,0 +1,19 @@
+/* Make sure the compiler does not try to use a relative long
+   instruction to load the string since it might not meet the
+   alignment requirements of the instruction.  */
+
+/* { dg-do compile } */
+/* { dg-options "-march=z10 -O3 -mzarch" } */
+
+extern void foo (char*);
+
+void
+bar ()
+{
+    unsigned char z[32];
+
+    __builtin_memcpy (z, "\001\000\000\000", 4);
+    foo (z);
+}
+
+/* { dg-final { scan-assembler-not "lrl" } } */
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_20.f03 b/gcc/testsuite/gfortran.dg/allocate_with_source_20.f03
new file mode 100644 (file)
index 0000000..67b50ec
--- /dev/null
@@ -0,0 +1,21 @@
+! { dg-do run }
+
+! Check that PR72698 is fixed.
+! Contributed by Gerhard Steinmetz
+
+module m
+contains
+   integer function f()
+      f = 4
+   end
+end
+program p
+   use m
+   character(3), parameter :: c = 'abc'
+   character(:), allocatable :: z
+   allocate (z, source=repeat(c(2:1), f()))
+   if (len(z) /= 0) call abort()
+   if (z /= "") call abort()
+end
+
+
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_21.f03 b/gcc/testsuite/gfortran.dg/allocate_with_source_21.f03
new file mode 100644 (file)
index 0000000..fbf3159
--- /dev/null
@@ -0,0 +1,52 @@
+! { dg-do compile }
+
+! Check fix for pr71936.
+! Contributed by Gerhard Steinmetz
+
+program p
+  type t
+  end type
+
+  call test2()
+  call test4()
+  call test1()
+  call test3()
+contains
+  function f_p()
+    class(t), pointer :: f_p(:)
+    nullify(f_p)
+  end
+
+  function f_a()
+    class(t), allocatable :: f_a(:)
+  end
+
+  subroutine test1()
+    class(t), allocatable :: x(:)
+    allocate (x, mold=f_a())
+    deallocate (x)
+    allocate (x, source=f_a())
+  end subroutine
+
+  subroutine test2()
+    class(t), pointer :: x(:)
+    allocate (x, mold=f_p())
+    deallocate (x)
+    allocate (x, source=f_p())
+  end
+
+  subroutine test3()
+    class(t), pointer :: x(:)
+    allocate (x, mold=f_a())
+    deallocate (x)
+    allocate (x, source=f_a())
+  end
+
+  subroutine test4()
+    class(t), allocatable :: x(:)
+    allocate (x, mold=f_p())
+    deallocate (x)
+    allocate (x, source=f_p())
+  end subroutine
+end
+
diff --git a/gcc/testsuite/gfortran.dg/array_constructor_50.f90 b/gcc/testsuite/gfortran.dg/array_constructor_50.f90
new file mode 100644 (file)
index 0000000..c22c980
--- /dev/null
@@ -0,0 +1,21 @@
+! { dg-do run }
+! PR 71795 - wrong result when putting an array constructor
+! instide an iterator.
+     program test
+
+     implicit none
+     integer :: i,n
+     logical, dimension(1) :: ra
+     logical :: rs
+     integer, allocatable :: a(:)
+
+     allocate ( a(1) )
+
+     n = 1
+     a = 2
+
+     ra = (/ (any(a(i).eq.(/1,2,3/)) ,i=1,n) /)
+     if (.not. all(ra)) call abort
+     rs = any ( (/ (any(a(i).eq.(/1,2,3/)) ,i=1,n) /) )
+     if (.not. rs) call abort
+   end program test
diff --git a/gcc/testsuite/gfortran.dg/deferred_character_17.f90 b/gcc/testsuite/gfortran.dg/deferred_character_17.f90
new file mode 100644 (file)
index 0000000..5a9d725
--- /dev/null
@@ -0,0 +1,13 @@
+!{ dg-do run }
+
+! Check fix for PR fortran/71623
+
+program allocatemvce
+  implicit none
+  character(len=:), allocatable :: string
+  integer, dimension(4), target :: array = [1,2,3,4]
+  integer, dimension(:), pointer :: array_ptr
+  array_ptr => array
+  ! The allocate used to segfault
+  allocate(character(len=size(array_ptr))::string)
+end program allocatemvce
diff --git a/gcc/testsuite/gfortran.dg/dependency_48.f90 b/gcc/testsuite/gfortran.dg/dependency_48.f90
new file mode 100644 (file)
index 0000000..6470019
--- /dev/null
@@ -0,0 +1,26 @@
+! { dg-do compile }
+! { dg-options "-frepack-arrays -Warray-temporaries -O" }
+
+! Same as dependency_35 but with repack-arrays
+
+module foo
+  implicit none
+contains
+  pure function bar(i,j) ! { dg-warning "Creating array temporary at \\(1\\)" }
+    integer, intent(in) :: i,j
+    integer, dimension(2,2) :: bar
+    bar = 33
+  end function bar
+end module foo
+
+program main
+  use foo
+  implicit none
+  integer a(2,2), b(2,2),c(2,2), d(2,2), e(2)
+
+  read (*,*) b, c, d
+  a = matmul(b,c) + d
+  a = b + bar(3,4)
+  a = bar(3,4)*5 + b
+  e = sum(b,1) + 3
+end program main
index 81bdc23..150f930 100644 (file)
@@ -1,4 +1,4 @@
-! { dg-additional-options "-fdump-tree-original -std=f2008" } 
+! { dg-additional-options "-fdump-tree-original -fdump-tree-gimple -std=f2008" } 
 
 ! test for tree-dump-original and spaces-commas
 
@@ -44,3 +44,4 @@ end program test
 
 ! { dg-final { scan-tree-dump-times "private\\(m\\)" 1 "original" } } 
 ! { dg-final { scan-tree-dump-times "reduction\\(\\+:sum\\)" 1 "original" } } 
+! { dg-final { scan-tree-dump-times "map\\(tofrom:sum \\\[len: \[0-9\]+\\\]\\)" 1 "gimple" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 b/gcc/testsuite/gfortran.dg/gomp/pr71758.f90
new file mode 100644 (file)
index 0000000..47215ba
--- /dev/null
@@ -0,0 +1,10 @@
+! PR middle-end/71758
+
+subroutine pr71758 (p)
+  integer(8) :: i
+  integer :: p(20)
+  i = 0
+  !$omp target device(i)
+  !$omp end target
+  !$omp target update to(p(1:1)) device(i)
+end subroutine
diff --git a/gcc/testsuite/gfortran.dg/namelist_90.f b/gcc/testsuite/gfortran.dg/namelist_90.f
new file mode 100644 (file)
index 0000000..9c0ae5b
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do run }
+! PR71123 Namelist read failure on Windows 
+      implicit none
+      integer :: i, ierr
+      real(8), dimension(30) :: senid, res
+      character(2) :: crlf = char(13) // char(10)
+      namelist /fith/ senid
+      do i=1,30
+         res(i) = i
+      enddo
+      senid = 99.0
+      open(unit=7,file='test.out',form='formatted',
+     *         status='new',action='readwrite', access='stream')
+      write(7,'(a)') "&fith" // crlf
+      write(7,'(a)') "senid=  1.0 , 2.0 , 3.0 , 4.0  , 5.0 ," // crlf
+      write(7,'(a)') "6.0 , 7.0 ,  8.0 ,  9.0 ,  10.0 , 11.0 ," // crlf
+      write(7,'(a)') "12.0 , 13.0 , 14.0 , 15.0 , 16.0 , 17.0 ," // crlf
+      write(7,'(a)') "18.0 , 19.0 , 20.0 , 21.0 , 22.0 , 23.0 ," // crlf
+      write(7,'(a)') "24.0 , 25.0 , 26.0 , 27.0 , 28.0 , 29.0 ," // crlf
+      write(7,'(a)') "30.0 ," // crlf
+      write(7,'(a)') "/" // crlf
+      close(7)
+      open(unit=7,file='test.out',form='formatted')
+      read(7,nml=fith, iostat=ierr)
+      close(7, status="delete")
+      if (ierr.ne.0) call abort
+      if (any(senid.ne.res)) call abort
+      end
diff --git a/gcc/testsuite/gfortran.dg/null_9.f90 b/gcc/testsuite/gfortran.dg/null_9.f90
new file mode 100644 (file)
index 0000000..9afd938
--- /dev/null
@@ -0,0 +1,30 @@
+! { dg-do run }
+
+MODULE fold_convert_loc_ice
+  IMPLICIT NONE
+  PRIVATE
+
+  TYPE, PUBLIC :: ta
+    PRIVATE
+    INTEGER :: a_comp
+  END TYPE ta
+
+  TYPE, PUBLIC :: tb
+    TYPE(ta), ALLOCATABLE :: b_comp
+  END TYPE tb
+
+  PUBLIC :: proc
+CONTAINS
+  SUBROUTINE proc
+    TYPE(tb) :: b
+
+    b = tb(null())
+    if (allocated( b%b_comp )) call abort()
+  END SUBROUTINE proc
+END MODULE fold_convert_loc_ice
+
+  USE fold_convert_loc_ice
+
+  call proc()
+END
+
diff --git a/gcc/testsuite/gfortran.dg/pr70040.f90 b/gcc/testsuite/gfortran.dg/pr70040.f90
new file mode 100644 (file)
index 0000000..080083e
--- /dev/null
@@ -0,0 +1,19 @@
+! { dg-do compile }
+! PR 70040 - used to cause an ICE.
+! Test case by Martin Reinecke
+program bugrep
+  implicit none
+  type :: string
+    character (len=:), allocatable :: s
+  end type
+
+  integer l
+  type(string), allocatable, dimension(:) :: foo
+  character(len=:),allocatable ::tmp
+  allocate(foo(20))
+  do l= 1, 20
+    tmp = foo(5)%s
+    foo(5)%s = foo(l)%s
+    foo(l)%s = tmp
+  enddo
+end program
diff --git a/gcc/testsuite/gfortran.dg/pr71688.f90 b/gcc/testsuite/gfortran.dg/pr71688.f90
new file mode 100644 (file)
index 0000000..dbb6d18
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+
+program p
+   call s
+contains
+   subroutine s
+      real :: x[*] = 1
+      block
+      end block
+      x = 2
+   end
+end
diff --git a/gcc/testsuite/gfortran.dg/pr71764.f90 b/gcc/testsuite/gfortran.dg/pr71764.f90
new file mode 100644 (file)
index 0000000..48176f8
--- /dev/null
@@ -0,0 +1,34 @@
+! { dg-do run }
+! PR71764 
+program p
+   use iso_c_binding, only: c_ptr, c_null_ptr, c_ptr, c_associated, c_loc
+   logical, target :: rls
+   real, target :: t = 3.14
+   type(c_ptr) :: nullptr,c
+   real, pointer :: k
+   nullptr = c_null_ptr
+   c = nullptr
+   rls = c_associated(c)
+   if (rls) call abort
+   if (c_associated(c)) call abort
+   c = c_loc(rls)
+   if (.not. c_associated(c)) call abort
+   c = nullptr
+   if (c_associated(c)) call abort
+   c = c_loc(t)
+   k => t
+   call association_test(k, c)
+contains
+  subroutine association_test(a,b)
+    use iso_c_binding, only: c_associated, c_loc, c_ptr
+    implicit none
+    real, pointer :: a
+    type(c_ptr) :: b
+    if(c_associated(b, c_loc(a))) then
+       return
+    else
+       call abort
+    end if
+  end subroutine association_test
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr71883.f90 b/gcc/testsuite/gfortran.dg/pr71883.f90
new file mode 100644 (file)
index 0000000..23ed6a6
--- /dev/null
@@ -0,0 +1,38 @@
+! { dg-do compile }
+!
+! Test the fix for pr71883, in which an ICE would follow the error.
+!
+! Contributed by Gerhard Steinmetz  <gerhard.steinmetz.fortran@t-online.de>
+!
+program p
+   character(3), allocatable :: z(:,:)
+   z(1:2,1:2) = 'abc'
+   z(2,1) = z(12) ! { dg-error "Rank mismatch in array reference" }
+   z(21) = z(1,2) ! { dg-error "Rank mismatch in array reference" }
+contains
+   subroutine a
+      character(3), allocatable :: z(:,:)
+      z(1:2,1:2) = 'abc'
+      z(2,1) = z(-1) ! { dg-error "Rank mismatch in array reference" }
+      z(2,1) = z(99) ! { dg-error "Rank mismatch in array reference" }
+      z(2,1) = z(huge(0)) ! { dg-error "Rank mismatch in array reference" }
+      z(2,1) = z(-huge(0)) ! { dg-error "Rank mismatch in array reference" }
+      z(-1) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+      z(99) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+      z(huge(0)) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+      z(-huge(0)) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+  end subroutine
+
+   subroutine b
+      character(:), allocatable :: z(:,:)
+      z(1:2,1:2) = 'abc'
+      z(2,1) = z(-1) ! { dg-error "Rank mismatch in array reference" }
+      z(2,1) = z(99) ! { dg-error "Rank mismatch in array reference" }
+      z(2,1) = z(huge(0)) ! { dg-error "Rank mismatch in array reference" }
+      z(2,1) = z(-huge(0)) ! { dg-error "Rank mismatch in array reference" }
+      z(-1) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+      z(99) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+     z(huge(0)) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+      z(-huge(0)) = z(2,1) ! { dg-error "Rank mismatch in array reference" }
+   end subroutine
+end
diff --git a/gcc/testsuite/gfortran.dg/select_type_35.f03 b/gcc/testsuite/gfortran.dg/select_type_35.f03
new file mode 100644 (file)
index 0000000..92d2f27
--- /dev/null
@@ -0,0 +1,41 @@
+! { dg-do run }
+!
+! Contributed by Nathanael Huebbe
+! Check fix for PR/70842
+
+program foo
+
+  TYPE, ABSTRACT :: t_Intermediate
+  END TYPE t_Intermediate
+
+  type, extends(t_Intermediate) :: t_Foo
+    character(:), allocatable :: string
+  end type t_Foo
+
+  class(t_Foo), allocatable :: obj
+
+  allocate(obj)
+  obj%string = "blabarfoo"
+
+  call bar(obj)
+
+  deallocate(obj)
+contains
+  subroutine bar(me)
+    class(t_Intermediate), target :: me
+
+    class(*), pointer :: alias
+
+    select type(me)
+      type is(t_Foo)
+      if (len(me%string) /= 9) call abort()
+    end select
+
+    alias => me
+    select type(alias)
+      type is(t_Foo)
+        if (len(alias%string) /= 9) call abort()
+    end select
+  end subroutine bar
+end program foo
+
diff --git a/gcc/testsuite/gnat.dg/loop_optimization23.adb b/gcc/testsuite/gnat.dg/loop_optimization23.adb
new file mode 100644 (file)
index 0000000..4f3af50
--- /dev/null
@@ -0,0 +1,14 @@
+-- { dg-do run }
+-- { dg-options "-O3" }
+-- PR tree-optimization/71083
+with Loop_Optimization23_Pkg;
+use Loop_Optimization23_Pkg;
+procedure Loop_Optimization23 is
+  Test : ArrayOfStructB;
+begin
+  Test (0).b.b := 9999;
+  Foo (Test);
+  if Test (100).b.b /= 9999 then
+    raise Program_Error;
+  end if;
+end;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization23_pkg.adb b/gcc/testsuite/gnat.dg/loop_optimization23_pkg.adb
new file mode 100644 (file)
index 0000000..a5fc90d
--- /dev/null
@@ -0,0 +1,11 @@
+-- { dg-do compile }
+-- { dg-options "-O3" }
+-- PR tree-optimization/71083
+package body Loop_Optimization23_Pkg is
+  procedure Foo (X : in out ArrayOfStructB) is
+  begin
+    for K in 0..99 loop
+      X (K+1).b.b := X (K).b.b;
+    end loop;
+  end Foo;
+end Loop_Optimization23_Pkg;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization23_pkg.ads b/gcc/testsuite/gnat.dg/loop_optimization23_pkg.ads
new file mode 100644 (file)
index 0000000..016ad82
--- /dev/null
@@ -0,0 +1,17 @@
+-- PR tree-optimization/71083
+package Loop_Optimization23_Pkg is
+  type Nibble is mod 2**4;
+  type Int24  is mod 2**24;
+  type StructA is record
+    a : Nibble;
+    b : Int24;
+  end record;
+  pragma Pack(StructA);
+  type StructB is record
+    a : Nibble;
+    b : StructA;
+  end record;
+  pragma Pack(StructB);
+  type ArrayOfStructB is array(0..100) of StructB;
+  procedure Foo (X : in out ArrayOfStructB);
+end Loop_Optimization23_Pkg;
index 76b008e..be7377e 100644 (file)
@@ -137,6 +137,8 @@ DEFTIMEVAR (TV_PARSE_FUNC            , "parser function body")
 DEFTIMEVAR (TV_PARSE_INLINE          , "parser inl. func. body")
 DEFTIMEVAR (TV_PARSE_INMETH          , "parser inl. meth. body")
 DEFTIMEVAR (TV_TEMPLATE_INST         , "template instantiation")
+DEFTIMEVAR (TV_CONSTRAINT_SAT        , "constraint satisfaction")
+DEFTIMEVAR (TV_CONSTRAINT_SUB        , "constraint subsumption")
 DEFTIMEVAR (TV_FLATTEN_INLINING      , "flatten inlining")
 DEFTIMEVAR (TV_EARLY_INLINING        , "early inlining heuristics")
 DEFTIMEVAR (TV_INLINE_PARAMETERS     , "inline parameters")
index 7097700..3465304 100644 (file)
@@ -229,6 +229,14 @@ class auto_timevar
       m_timer->push (m_tv);
   }
 
+  explicit auto_timevar (timevar_id_t tv)
+    : m_timer (g_timer)
+    , m_tv (tv)
+  {
+    if (m_timer)
+      m_timer->push (m_tv);
+  }
+
   ~auto_timevar ()
   {
     if (m_timer)
index 3e10740..5741ea6 100644 (file)
@@ -749,12 +749,40 @@ const_with_all_bytes_same (tree val)
   int i, len;
 
   if (integer_zerop (val)
-      || real_zerop (val)
       || (TREE_CODE (val) == CONSTRUCTOR
           && !TREE_CLOBBER_P (val)
           && CONSTRUCTOR_NELTS (val) == 0))
     return 0;
 
+  if (real_zerop (val))
+    {
+      /* Only return 0 for +0.0, not for -0.0, which doesn't have
+        an all bytes same memory representation.  Don't transform
+        -0.0 stores into +0.0 even for !HONOR_SIGNED_ZEROS.  */
+      switch (TREE_CODE (val))
+       {
+       case REAL_CST:
+         if (!real_isneg (TREE_REAL_CST_PTR (val)))
+           return 0;
+         break;
+       case COMPLEX_CST:
+         if (!const_with_all_bytes_same (TREE_REALPART (val))
+             && !const_with_all_bytes_same (TREE_IMAGPART (val)))
+           return 0;
+         break;
+       case VECTOR_CST:
+         unsigned int j;
+         for (j = 0; j < VECTOR_CST_NELTS (val); ++j)
+           if (const_with_all_bytes_same (VECTOR_CST_ELT (val, j)))
+             break;
+         if (j == VECTOR_CST_NELTS (val))
+           return 0;
+         break;
+       default:
+         break;
+       }
+    }
+
   if (CHAR_BIT != 8 || BITS_PER_UNIT != 8)
     return -1;
 
@@ -887,13 +915,15 @@ destroy_loop (struct loop *loop)
   cancel_loop_tree (loop);
   rescan_loop_exit (exit, false, true);
 
-  for (i = 0; i < nbbs; i++)
+  i = nbbs;
+  do
     {
       /* We have made sure to not leave any dangling uses of SSA
          names defined in the loop.  With the exception of virtuals.
         Make sure we replace all uses of virtual defs that will remain
         outside of the loop with the bare symbol as delete_basic_block
         will release them.  */
+      --i;
       for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi);
           gsi_next (&gsi))
        {
@@ -911,6 +941,8 @@ destroy_loop (struct loop *loop)
        }
       delete_basic_block (bbs[i]);
     }
+  while (i != 0);
+
   free (bbs);
 
   set_immediate_dominator (CDI_DOMINATORS, dest,
index 07455cc..e683861 100644 (file)
@@ -43,7 +43,12 @@ struct object_size_info
   unsigned int *stack, *tos;
 };
 
-static const unsigned HOST_WIDE_INT unknown[4] = { -1, -1, 0, 0 };
+static const unsigned HOST_WIDE_INT unknown[4] = {
+  HOST_WIDE_INT_M1U,
+  HOST_WIDE_INT_M1U,
+  0,
+  0
+};
 
 static tree compute_object_offset (const_tree, const_tree);
 static unsigned HOST_WIDE_INT addr_object_size (struct object_size_info *,
index ebebdd6..843f68e 100644 (file)
@@ -213,6 +213,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-scalar-evolution.h"
 #include "params.h"
 #include "tree-affine.h"
+#include "builtins.h"
 
 /* The maximum number of iterations between the considered memory
    references.  */
@@ -1381,6 +1382,8 @@ ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
   addr = force_gimple_operand_1 (unshare_expr (addr), stmts,
                                 is_gimple_mem_ref_addr, NULL_TREE);
   tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
+  tree type = build_aligned_type (TREE_TYPE (DR_REF (dr)),
+                                 get_object_alignment (DR_REF (dr)));
   /* While data-ref analysis punts on bit offsets it still handles
      bitfield accesses at byte boundaries.  Cope with that.  Note that
      we cannot simply re-apply the outer COMPONENT_REF because the
@@ -1392,12 +1395,11 @@ ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
     {
       tree field = TREE_OPERAND (DR_REF (dr), 1);
       return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
-                    build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
-                            addr, alias_ptr),
+                    build2 (MEM_REF, type, addr, alias_ptr),
                     DECL_SIZE (field), bitsize_zero_node);
     }
   else
-    return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
+    return fold_build2 (MEM_REF, type, addr, alias_ptr);
 }
 
 /* Get the initialization expression for the INDEX-th temporary variable
index 494a7fb..db0161e 100644 (file)
@@ -1217,6 +1217,18 @@ vn_reference_maybe_forwprop_address (vec<vn_reference_op_s> *ops,
        {
          auto_vec<vn_reference_op_s, 32> tem;
          copy_reference_ops_from_ref (TREE_OPERAND (addr, 0), &tem);
+         /* Make sure to preserve TBAA info.  The only objects not
+            wrapped in MEM_REFs that can have their address taken are
+            STRING_CSTs.  */
+         if (tem.length () >= 2
+             && tem[tem.length () - 2].opcode == MEM_REF)
+           {
+             vn_reference_op_t new_mem_op = &tem[tem.length () - 2];
+             new_mem_op->op0 = fold_convert (TREE_TYPE (mem_op->op0),
+                                             new_mem_op->op0);
+           }
+         else
+           gcc_assert (tem.last ().opcode == STRING_CST);
          ops->pop ();
          ops->pop ();
          ops->safe_splice (tem);
index 00d8900..b472e2e 100644 (file)
@@ -692,6 +692,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
   tree base, base_addr;
   tree misalign = NULL_TREE;
   tree aligned_to;
+  tree step;
   unsigned HOST_WIDE_INT alignment;
 
   if (dump_enabled_p ())
@@ -822,16 +823,20 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
       DR_VECT_AUX (dr)->base_element_aligned = true;
     }
 
+  if (loop && nested_in_vect_loop_p (loop, stmt))
+    step = STMT_VINFO_DR_STEP (stmt_info);
+  else
+    step = DR_STEP (dr);
   /* If this is a backward running DR then first access in the larger
      vectype actually is N-1 elements before the address in the DR.
      Adjust misalign accordingly.  */
-  if (tree_int_cst_sgn (DR_STEP (dr)) < 0)
+  if (tree_int_cst_sgn (step) < 0)
     {
       tree offset = ssize_int (TYPE_VECTOR_SUBPARTS (vectype) - 1);
       /* DR_STEP(dr) is the same as -TYPE_SIZE of the scalar type,
         otherwise we wouldn't be here.  */
-      offset = fold_build2 (MULT_EXPR, ssizetype, offset, DR_STEP (dr));
-      /* PLUS because DR_STEP was negative.  */
+      offset = fold_build2 (MULT_EXPR, ssizetype, offset, step);
+      /* PLUS because STEP was negative.  */
       misalign = size_binop (PLUS_EXPR, misalign, offset);
     }
 
index 28951e7..6149f08 100644 (file)
@@ -5086,11 +5086,8 @@ vectorizable_operation (gimple *stmt, gimple_stmt_iterator *gsi,
            vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL,
                               slp_node, -1);
          if (op_type == ternary_op)
-           {
-             vec_oprnds2.create (1);
-             vec_oprnds2.quick_push (vect_get_vec_def_for_operand (op2,
-                                                                   stmt));
-           }
+           vect_get_vec_defs (op2, NULL_TREE, stmt, &vec_oprnds2, NULL,
+                              slp_node, -1);
        }
       else
        {
index 0a768f8..71b639e 100644 (file)
@@ -1292,7 +1292,7 @@ instrument_si_overflow (gimple_stmt_iterator gsi)
                                      ? IFN_UBSAN_CHECK_SUB
                                      : IFN_UBSAN_CHECK_MUL, 2, a, b);
       gimple_call_set_lhs (g, lhs);
-      gsi_replace (&gsi, g, false);
+      gsi_replace (&gsi, g, true);
       break;
     case NEGATE_EXPR:
       /* Represent i = -u;
@@ -1302,7 +1302,7 @@ instrument_si_overflow (gimple_stmt_iterator gsi)
       b = gimple_assign_rhs1 (stmt);
       g = gimple_build_call_internal (IFN_UBSAN_CHECK_SUB, 2, a, b);
       gimple_call_set_lhs (g, lhs);
-      gsi_replace (&gsi, g, false);
+      gsi_replace (&gsi, g, true);
       break;
     case ABS_EXPR:
       /* Transform i = ABS_EXPR<u>;
@@ -1955,6 +1955,7 @@ pass_ubsan::execute (function *fun)
 {
   basic_block bb;
   gimple_stmt_iterator gsi;
+  unsigned int ret = 0;
 
   initialize_sanitizer_builtins ();
 
@@ -2013,8 +2014,10 @@ pass_ubsan::execute (function *fun)
 
          gsi_next (&gsi);
        }
+      if (gimple_purge_dead_eh_edges (bb))
+       ret = TODO_cleanup_cfg;
     }
-  return 0;
+  return ret;
 }
 
 } // anon namespace
index 4aadb8f..b57d12a 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 8168923..51f538a 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index ba07a96..d8ea905 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index e2f522f..be4ae0d 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index fb56a2f..0c230f0 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 278948e..5128376 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-05-10  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
        Backport from mainline:
index b4e0199..8c56695 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-05-18  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/71161
index 4b9a373..4e416d0 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 52b62b4..982ac43 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-05-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        Backport from mainline
index 993302b..c921c90 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 0366fc0..254a268 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-06-03  Joseph Myers  <joseph@codesourcery.com>
 
        * sr.po: Update.
index 2bff966..806d527 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index c851366..8db84eb 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-05-23  Thomas Schwinge  <thomas@codesourcery.com>
 
        Backport trunk r236594:
index f1ae9fe..cbcab85 100644 (file)
@@ -1,3 +1,27 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-07-29  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-29  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/_divkc3.c: Add copyright/license boilerplate.
+       * config/rs6000/_mulkc3.c: Likewise.
+
+2016-07-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-12  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/_divkc3.c: New.
+       * config/rs6000/_mulkc3.c: New.
+       * config/rs6000/quad-float128.h: Define TFtype; declare _mulkc3
+       and _divkc3.
+       * config/rs6000/t-float128: Add _mulkc3 and _divkc3 to
+       fp128_ppc_funcs.
+
 2016-05-17  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
        Backport from mainline
index 0b394f2..3a3e8de 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
diff --git a/libgcc/config/rs6000/_divkc3.c b/libgcc/config/rs6000/_divkc3.c
new file mode 100644 (file)
index 0000000..638e183
--- /dev/null
@@ -0,0 +1,89 @@
+/* Copyright (C) 1989-2016 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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* This is a temporary specialization of code from libgcc/libgcc2.c.  */
+
+typedef float KFtype __attribute__ ((mode (KF)));
+typedef __complex float KCtype __attribute__ ((mode (KC)));
+
+#define COPYSIGN(x,y) __builtin_copysignq (x, y)
+#define INFINITY __builtin_infq ()
+#define FABS __builtin_fabsq
+#define isnan __builtin_isnan
+#define isinf __builtin_isinf
+#define isfinite __builtin_isfinite
+
+KCtype
+__divkc3 (KFtype a, KFtype b, KFtype c, KFtype d)
+{
+  KFtype denom, ratio, x, y;
+  KCtype res;
+
+  /* ??? We can get better behavior from logarithmic scaling instead of
+     the division.  But that would mean starting to link libgcc against
+     libm.  We could implement something akin to ldexp/frexp as gcc builtins
+     fairly easily...  */
+  if (FABS (c) < FABS (d))
+    {
+      ratio = c / d;
+      denom = (c * ratio) + d;
+      x = ((a * ratio) + b) / denom;
+      y = ((b * ratio) - a) / denom;
+    }
+  else
+    {
+      ratio = d / c;
+      denom = (d * ratio) + c;
+      x = ((b * ratio) + a) / denom;
+      y = (b - (a * ratio)) / denom;
+    }
+
+  /* Recover infinities and zeros that computed as NaN+iNaN; the only cases
+     are nonzero/zero, infinite/finite, and finite/infinite.  */
+  if (isnan (x) && isnan (y))
+    {
+      if (c == 0.0 && d == 0.0 && (!isnan (a) || !isnan (b)))
+       {
+         x = COPYSIGN (INFINITY, c) * a;
+         y = COPYSIGN (INFINITY, c) * b;
+       }
+      else if ((isinf (a) || isinf (b)) && isfinite (c) && isfinite (d))
+       {
+         a = COPYSIGN (isinf (a) ? 1 : 0, a);
+         b = COPYSIGN (isinf (b) ? 1 : 0, b);
+         x = INFINITY * (a * c + b * d);
+         y = INFINITY * (b * c - a * d);
+       }
+      else if ((isinf (c) || isinf (d)) && isfinite (a) && isfinite (b))
+       {
+         c = COPYSIGN (isinf (c) ? 1 : 0, c);
+         d = COPYSIGN (isinf (d) ? 1 : 0, d);
+         x = 0.0 * (a * c + b * d);
+         y = 0.0 * (b * c - a * d);
+       }
+    }
+
+  __real__ res = x;
+  __imag__ res = y;
+  return res;
+}
diff --git a/libgcc/config/rs6000/_mulkc3.c b/libgcc/config/rs6000/_mulkc3.c
new file mode 100644 (file)
index 0000000..25da7b9
--- /dev/null
@@ -0,0 +1,94 @@
+/* Copyright (C) 1989-2016 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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* This is a temporary specialization of code from libgcc/libgcc2.c.  */
+
+typedef float KFtype __attribute__ ((mode (KF)));
+typedef __complex float KCtype __attribute__ ((mode (KC)));
+
+#define COPYSIGN(x,y) __builtin_copysignq (x, y)
+#define INFINITY __builtin_infq ()
+#define isnan __builtin_isnan
+#define isinf __builtin_isinf
+
+KCtype
+__mulkc3 (KFtype a, KFtype b, KFtype c, KFtype d)
+{
+  KFtype ac, bd, ad, bc, x, y;
+  KCtype res;
+
+  ac = a * c;
+  bd = b * d;
+  ad = a * d;
+  bc = b * c;
+
+  x = ac - bd;
+  y = ad + bc;
+
+  if (isnan (x) && isnan (y))
+    {
+      /* Recover infinities that computed as NaN + iNaN.  */
+      _Bool recalc = 0;
+      if (isinf (a) || isinf (b))
+       {
+         /* z is infinite.  "Box" the infinity and change NaNs in
+            the other factor to 0.  */
+         a = COPYSIGN (isinf (a) ? 1 : 0, a);
+         b = COPYSIGN (isinf (b) ? 1 : 0, b);
+         if (isnan (c)) c = COPYSIGN (0, c);
+         if (isnan (d)) d = COPYSIGN (0, d);
+          recalc = 1;
+       }
+     if (isinf (c) || isinf (d))
+       {
+         /* w is infinite.  "Box" the infinity and change NaNs in
+            the other factor to 0.  */
+         c = COPYSIGN (isinf (c) ? 1 : 0, c);
+         d = COPYSIGN (isinf (d) ? 1 : 0, d);
+         if (isnan (a)) a = COPYSIGN (0, a);
+         if (isnan (b)) b = COPYSIGN (0, b);
+         recalc = 1;
+       }
+     if (!recalc
+         && (isinf (ac) || isinf (bd)
+             || isinf (ad) || isinf (bc)))
+       {
+         /* Recover infinities from overflow by changing NaNs to 0.  */
+         if (isnan (a)) a = COPYSIGN (0, a);
+         if (isnan (b)) b = COPYSIGN (0, b);
+         if (isnan (c)) c = COPYSIGN (0, c);
+         if (isnan (d)) d = COPYSIGN (0, d);
+         recalc = 1;
+       }
+      if (recalc)
+       {
+         x = INFINITY * (a * c - b * d);
+         y = INFINITY * (a * d + b * c);
+       }
+    }
+
+  __real__ res = x;
+  __imag__ res = y;
+  return res;
+}
+
index 62d198d..244a047 100644 (file)
    This define forces it to use KFmode (aka, ieee 128-bit floating point).  */
 #define TF KF
 
+/* We also need TCtype to represent complex ieee 128-bit float for
+   __mulkc3 and __divkc3.  */
+typedef __complex float TCtype __attribute__ ((mode (KC)));
+
 /* Force the use of the VSX instruction set.  */
 #if defined(_ARCH_PPC) && (!defined(__VSX__) || !defined(__FLOAT128__))
 #pragma GCC target ("vsx,float128")
@@ -154,6 +158,10 @@ extern TFtype __floatundikf (UDItype_ppc);
 extern IBM128_TYPE __extendkftf2 (TFtype);
 extern TFtype __trunctfkf2 (IBM128_TYPE);
 
+/* Complex __float128 built on __float128 interfaces.  */
+extern TCtype __mulkc3 (TFtype, TFtype, TFtype, TFtype);
+extern TCtype __divkc3 (TFtype, TFtype, TFtype, TFtype);
+
 /* Implementation of conversions between __ibm128 and __float128, to allow the
    same code to be used on systems with IEEE 128-bit emulation and with IEEE
    128-bit hardware support.  */
index 82dab36..2c52ca6 100644 (file)
@@ -25,7 +25,7 @@ fp128_softfp_obj      = $(fp128_softfp_static_obj) $(fp128_softfp_shared_obj)
 # New functions for software emulation
 fp128_ppc_funcs                = floattikf floatuntikf fixkfti fixunskfti \
                          extendkftf2-sw trunctfkf2-sw \
-                         sfp-exceptions
+                         sfp-exceptions _mulkc3 _divkc3
 
 fp128_ppc_src          = $(addprefix $(srcdir)/config/rs6000/,$(addsuffix \
                                .c,$(fp128_ppc_funcs)))
index d29c079..ffc09af 100644 (file)
@@ -1,3 +1,14 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk
+       PR libgfortran/71123
+       PR libgfortran/73142
+       * io/list_read (eat_spaces): Eat '\r' as part of spaces.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index b8e174c..244430d 100644 (file)
@@ -418,7 +418,7 @@ eat_spaces (st_parameter_dt *dtp)
   /* Now skip spaces, EOF and EOL are handled in next_char.  */
   do
     c = next_char (dtp);
-  while (c != EOF && (c == ' ' || c == '\t'));
+  while (c != EOF && (c == ' ' || c == '\r' || c == '\t'));
 
   unget_char (dtp, c);
   return c;
index 4382cf7..864fb87 100644 (file)
@@ -2632,10 +2632,9 @@ func (gccgoToolchain) pack(b *builder, p *Package, objDir, afile string, ofiles
 func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions []*action, mainpkg string, ofiles []string) error {
        // gccgo needs explicit linking with all package dependencies,
        // and all LDFLAGS from cgo dependencies.
-       apackagesSeen := make(map[*Package]bool)
+       apackagePathsSeen := make(map[string]bool)
        afiles := []string{}
        shlibs := []string{}
-       xfiles := []string{}
        ldflags := b.gccArchArgs()
        cgoldflags := []string{}
        usesCgo := false
@@ -2647,9 +2646,18 @@ func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions
                if err != nil {
                        return err
                }
+               const ldflagsPrefix = "_CGO_LDFLAGS="
                for _, line := range strings.Split(string(flags), "\n") {
-                       if strings.HasPrefix(line, "_CGO_LDFLAGS=") {
-                               cgoldflags = append(cgoldflags, strings.Fields(line[13:])...)
+                       if strings.HasPrefix(line, ldflagsPrefix) {
+                               newFlags := strings.Fields(line[len(ldflagsPrefix):])
+                               for _, flag := range newFlags {
+                                       // Every _cgo_flags file has -g and -O2 in _CGO_LDFLAGS
+                                       // but they don't mean anything to the linker so filter
+                                       // them out.
+                                       if flag != "-g" && !strings.HasPrefix(flag, "-O") {
+                                               cgoldflags = append(cgoldflags, flag)
+                                       }
+                               }
                        }
                }
                return nil
@@ -2714,10 +2722,10 @@ func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions
                        // rather than the 'build' location (which may not exist any
                        // more). We still need to traverse the dependencies of the
                        // build action though so saying
-                       // if apackagesSeen[a.p] { return }
+                       // if apackagePathsSeen[a.p.ImportPath] { return }
                        // doesn't work.
-                       if !apackagesSeen[a.p] {
-                               apackagesSeen[a.p] = true
+                       if !apackagePathsSeen[a.p.ImportPath] {
+                               apackagePathsSeen[a.p.ImportPath] = true
                                target := a.target
                                if len(a.p.CgoFiles) > 0 {
                                        target, err = readAndRemoveCgoFlags(target)
@@ -2725,17 +2733,7 @@ func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions
                                                return
                                        }
                                }
-                               if a.p.fake && a.p.external {
-                                       // external _tests, if present must come before
-                                       // internal _tests. Store these on a separate list
-                                       // and place them at the head after this loop.
-                                       xfiles = append(xfiles, target)
-                               } else if a.p.fake {
-                                       // move _test files to the top of the link order
-                                       afiles = append([]string{target}, afiles...)
-                               } else {
-                                       afiles = append(afiles, target)
-                               }
+                               afiles = append(afiles, target)
                        }
                }
                if strings.HasSuffix(a.target, ".so") {
@@ -2755,7 +2753,6 @@ func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions
                        return err
                }
        }
-       afiles = append(xfiles, afiles...)
 
        for _, a := range allactions {
                // Gather CgoLDFLAGS, but not from standard packages.
index e8d865f..4f8be82 100644 (file)
@@ -1,3 +1,30 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       Backport from mainline
+       2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR middle-end/70895
+       * testsuite/libgomp.oacc-fortran/reduction-7.f90: Add explicit
+       firstprivate clauses.
+       * testsuite/libgomp.oacc-fortran/reduction-6.f90: Remove explicit
+       copy clauses.
+       * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/reduction-flt.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/collapse-2.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/collapse-4.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise.
+       * testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c: Likewise.
+
 2016-07-02  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 62bb5e0..1ea0a6b 100644 (file)
@@ -8,7 +8,7 @@ main (void)
   int i, j, k, l = 0, f = 0, x = 0;
   int m1 = 4, m2 = -5, m3 = 17;
 
-#pragma acc parallel copy(l)
+#pragma acc parallel
   #pragma acc loop seq collapse(3) reduction(+:l)
     for (i = -2; i < m1; i++)
       for (j = m2; j < -2; j++)
index 52dd435..ea652b6 100644 (file)
@@ -11,7 +11,7 @@ main (void)
 
   memset (b, '\0', sizeof (b));
 
-#pragma acc parallel copy(b[0:3][0:3]) copy(l)
+#pragma acc parallel copy(b[0:3][0:3])
     {
 #pragma acc loop collapse(2) reduction(+:l)
        for (i = 0; i < 2; i++)
index a8684f9..d241d41 100644 (file)
@@ -11,7 +11,7 @@ int main ()
   int ondev = 0;
   int t = 0, h = 0;
   
-#pragma acc parallel num_gangs(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_gangs(32) vector_length(32) copy(ondev)
   {
 #pragma acc loop gang  reduction (+:t)
     for (unsigned ix = 0; ix < N; ix++)
index 3b104cf..4ae4b7c 100644 (file)
@@ -11,7 +11,7 @@ int main ()
   int ondev = 0;
   int t = 0, h = 0;
   
-#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) copy(ondev)
   {
 #pragma acc loop gang worker vector reduction(+:t)
     for (unsigned ix = 0; ix < N; ix++)
index b77ae76..0556455 100644 (file)
@@ -12,7 +12,7 @@ int main ()
   int ondev = 0;
   int t = 0,  h = 0;
 
-#pragma acc parallel vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel vector_length(32) copy(ondev)
   {
 #pragma acc loop vector reduction (+:t)
     for (unsigned ix = 0; ix < N; ix++)
index 9cc12b3..19021d9 100644 (file)
@@ -11,7 +11,7 @@ int main ()
   int ondev = 0;
   int t = 0,  h = 0;
 
-#pragma acc parallel num_workers(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_workers(32) vector_length(32) copy(ondev)
   {
 #pragma acc loop worker reduction(+:t)
     for (unsigned ix = 0; ix < N; ix++)
index 398b7cc..0fec2dc 100644 (file)
@@ -10,7 +10,7 @@ int main ()
   int ondev = 0;
   int t = 0, h = 0;
   
-#pragma acc parallel num_workers(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_workers(32) vector_length(32) copy(ondev)
   {
 #pragma acc loop worker vector reduction (+:t)
     for (unsigned ix = 0; ix < N; ix++)
index 76c33e4..cc3cd07 100644 (file)
@@ -13,8 +13,7 @@ void g_np_1()
   for (i = 0; i < 1024; i++)
     arr[i] = i;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang reduction(+:res)
     for (i = 0; i < 1024; i++)
@@ -28,8 +27,7 @@ void g_np_1()
 
   res = hres = 1;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang reduction(*:res)
     for (i = 0; i < 12; i++)
@@ -53,8 +51,7 @@ void gv_np_1()
   for (i = 0; i < 1024; i++)
     arr[i] = i;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang vector reduction(+:res)
     for (i = 0; i < 1024; i++)
@@ -78,8 +75,7 @@ void gw_np_1()
   for (i = 0; i < 1024; i++)
     arr[i] = i;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang worker reduction(+:res)
     for (i = 0; i < 1024; i++)
@@ -103,8 +99,7 @@ void gwv_np_1()
   for (i = 0; i < 1024; i++)
     arr[i] = i;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang worker vector reduction(+:res)
     for (i = 0; i < 1024; i++)
@@ -128,8 +123,7 @@ void gwv_np_2()
   for (i = 0; i < 32768; i++)
     arr[i] = i;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang reduction(+:res)
     for (j = 0; j < 32; j++)
@@ -161,7 +155,7 @@ void gwv_np_3()
     arr[i] = i;
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copyin(arr) copy(res)
+                      copyin(arr)
   {
     #pragma acc loop gang reduction(+:res)
     for (j = 0; j < 32; j++)
@@ -191,8 +185,7 @@ void gwv_np_4()
   for (i = 0; i < 32768; i++)
     arr[i] = i;
 
-  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
-                      copy(res, mres)
+  #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
     #pragma acc loop gang reduction(+:res) reduction(max:mres)
     for (j = 0; j < 32; j++)
index 9c8e825..aa19d49 100644 (file)
@@ -22,7 +22,7 @@ vector (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
   {
 #pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -46,7 +46,7 @@ worker (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
   {
 #pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -70,7 +70,7 @@ gang (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
   {
 #pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
index 46bb70f..5c533f2 100644 (file)
@@ -22,7 +22,7 @@ vector (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
   {
 #pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -46,7 +46,7 @@ worker (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
   {
 #pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -70,7 +70,7 @@ gang (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
   {
 #pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
index 430b199..987c4cc 100644 (file)
@@ -19,7 +19,7 @@ vector (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
   {
 #pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -43,7 +43,7 @@ worker (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
   {
 #pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -67,7 +67,7 @@ gang (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
   {
 #pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
index e6947fa..f08650a 100644 (file)
@@ -19,7 +19,7 @@ vector (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
   {
 #pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -43,7 +43,7 @@ worker (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
   {
 #pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
@@ -67,7 +67,7 @@ gang (Type ary[N], Type sum, Type prod)
 {
   Type tsum = 0, tprod = 1;
 
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
   {
 #pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
     for (int ix = 0; ix < N; ix++)
index f3ed275..c10e3f9 100644 (file)
@@ -19,7 +19,7 @@ program reduction
   hs1 = 0
   hs2 = 0
 
-  !$acc parallel num_gangs (1000) copy(gs1, gs2)
+  !$acc parallel num_gangs (1000)
   !$acc loop reduction(+:gs1, gs2) gang
   do i = 1, n
      gs1 = gs1 + 1
@@ -27,7 +27,7 @@ program reduction
   end do
   !$acc end parallel
 
-  !$acc parallel num_workers (4) vector_length (32) copy(ws1, ws2)
+  !$acc parallel num_workers (4) vector_length (32)
   !$acc loop reduction(+:ws1, ws2) worker
   do i = 1, n
      ws1 = ws1 + 1
@@ -35,7 +35,7 @@ program reduction
   end do
   !$acc end parallel
 
-  !$acc parallel vector_length (32) copy(vs1, vs2)
+  !$acc parallel vector_length (32)
   !$acc loop reduction(+:vs1, vs2) vector
   do i = 1, n
      vs1 = vs1 + 1
@@ -43,7 +43,7 @@ program reduction
   end do
   !$acc end parallel
 
-  !$acc parallel num_gangs(8) num_workers(4) vector_length(32) copy(cs1, cs2)
+  !$acc parallel num_gangs(8) num_workers(4) vector_length(32)
   !$acc loop reduction(+:cs1, cs2) gang worker vector
   do i = 1, n
      cs1 = cs1 + 1
@@ -74,7 +74,7 @@ program reduction
   red = 0
   vred = 0
 
-  !$acc parallel num_gangs(10) vector_length(32) copy(red)
+  !$acc parallel num_gangs(10) vector_length(32)
   !$acc loop reduction(+:red) gang
   do i = 1, n/chunksize
      !$acc loop reduction(+:red) vector
index 8ec36ad..1a7d69a 100644 (file)
@@ -50,7 +50,7 @@ subroutine redsub_private(sum, n, arr)
 end subroutine redsub_private
 
 
-! Bogus reduction on an impliclitly firstprivate variable.  The results do
+! Bogus reduction on a firstprivate variable.  The results do
 ! survive the parallel region.  The goal here is to ensure that gfortran
 ! doesn't ICE.
 
@@ -58,7 +58,7 @@ subroutine redsub_bogus(sum, n)
   integer :: sum, n, arr(n)
   integer :: i
 
-  !$acc parallel
+  !$acc parallel firstprivate(sum)
   !$acc loop gang worker vector reduction (+:sum)
   do i = 1, n
      sum = sum + 1
@@ -72,7 +72,7 @@ subroutine redsub_combined(sum, n, arr)
   integer :: sum, n, arr(n)
   integer :: i, j
 
-  !$acc parallel copy (arr)
+  !$acc parallel copy (arr) firstprivate(sum)
   !$acc loop gang
   do i = 1, n
      sum = i;
index 4a6b38a..9efc384 100644 (file)
@@ -1,3 +1,20 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-07-21  Jason Merrill  <jason@redhat.com>
+
+       * cp-demangle.c (cplus_demangle_operators): Add f[lrLR].
+       (d_expression_1): Handle them.
+       (d_maybe_print_fold_expression): New.
+       (d_print_comp_inner): Use it.
+       (d_index_template_argument): Handle negative index.
+
+       * cp-demangle.c (cplus_demangle_operators): Add sP and sZ.
+       (d_print_comp_inner): Handle them.
+       (d_template_args_1): Split out from d_template_args.
+       (d_args_length): New.
+
 2016-05-19  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 09d6469..be3832e 100644 (file)
@@ -344,7 +344,7 @@ struct d_print_info
   /* Set to 1 if we saw a demangling error.  */
   int demangle_failure;
   /* The current index into any template argument packs we are using
-     for printing.  */
+     for printing, or -1 to print the whole pack.  */
   int pack_index;
   /* Number of d_print_flush calls so far.  */
   unsigned long int flush_count;
@@ -466,6 +466,7 @@ static struct demangle_component *
 d_template_param (struct d_info *);
 
 static struct demangle_component *d_template_args (struct d_info *);
+static struct demangle_component *d_template_args_1 (struct d_info *);
 
 static struct demangle_component *
 d_template_arg (struct d_info *);
@@ -1761,6 +1762,10 @@ const struct demangle_operator_info cplus_demangle_operators[] =
   { "eO", NL ("^="),        2 },
   { "eo", NL ("^"),         2 },
   { "eq", NL ("=="),        2 },
+  { "fL", NL ("..."),       3 },
+  { "fR", NL ("..."),       3 },
+  { "fl", NL ("..."),       2 },
+  { "fr", NL ("..."),       2 },
   { "ge", NL (">="),        2 },
   { "gs", NL ("::"),       1 },
   { "gt", NL (">"),         2 },
@@ -1795,6 +1800,8 @@ const struct demangle_operator_info cplus_demangle_operators[] =
   { "rc", NL ("reinterpret_cast"), 2 },
   { "rm", NL ("%"),         2 },
   { "rs", NL (">>"),        2 },
+  { "sP", NL ("sizeof..."), 1 },
+  { "sZ", NL ("sizeof..."), 1 },
   { "sc", NL ("static_cast"), 2 },
   { "st", NL ("sizeof "),   1 },
   { "sz", NL ("sizeof "),   1 },
@@ -2995,6 +3002,19 @@ d_template_param (struct d_info *di)
 static struct demangle_component *
 d_template_args (struct d_info *di)
 {
+  if (d_peek_char (di) != 'I'
+      && d_peek_char (di) != 'J')
+    return NULL;
+  d_advance (di, 1);
+
+  return d_template_args_1 (di);
+}
+
+/* <template-arg>* E  */
+
+static struct demangle_component *
+d_template_args_1 (struct d_info *di)
+{
   struct demangle_component *hold_last_name;
   struct demangle_component *al;
   struct demangle_component **pal;
@@ -3004,11 +3024,6 @@ d_template_args (struct d_info *di)
      constructor or destructor.  */
   hold_last_name = di->last_name;
 
-  if (d_peek_char (di) != 'I'
-      && d_peek_char (di) != 'J')
-    return NULL;
-  d_advance (di, 1);
-
   if (d_peek_char (di) == 'E')
     {
       /* An argument pack can be empty.  */
@@ -3270,6 +3285,8 @@ d_expression_1 (struct d_info *di)
            if (op->type == DEMANGLE_COMPONENT_CAST
                && d_check_char (di, '_'))
              operand = d_exprlist (di, 'E');
+           else if (code && !strcmp (code, "sP"))
+             operand = d_template_args_1 (di);
            else
              operand = d_expression_1 (di);
 
@@ -3292,6 +3309,9 @@ d_expression_1 (struct d_info *di)
              return NULL;
            if (op_is_new_cast (op))
              left = cplus_demangle_type (di);
+           else if (code[0] == 'f')
+             /* fold-expression.  */
+             left = d_operator_name (di);
            else
              left = d_expression_1 (di);
            if (!strcmp (code, "cl"))
@@ -3326,6 +3346,13 @@ d_expression_1 (struct d_info *di)
                second = d_expression_1 (di);
                third = d_expression_1 (di);
              }
+           else if (code[0] == 'f')
+             {
+               /* fold-expression.  */
+               first = d_operator_name (di);
+               second = d_expression_1 (di);
+               third = d_expression_1 (di);
+             }
            else if (code[0] == 'n')
              {
                /* new-expression.  */
@@ -4179,13 +4206,17 @@ cplus_demangle_print (int options, const struct demangle_component *dc,
 }
 
 /* Returns the I'th element of the template arglist ARGS, or NULL on
-   failure.  */
+   failure.  If I is negative, return the entire arglist.  */
 
 static struct demangle_component *
 d_index_template_argument (struct demangle_component *args, int i)
 {
   struct demangle_component *a;
 
+  if (i < 0)
+    /* Print the whole argument pack.  */
+    return args;
+
   for (a = args;
        a != NULL;
        a = d_right (a))
@@ -4285,6 +4316,30 @@ d_pack_length (const struct demangle_component *dc)
   return count;
 }
 
+/* Returns the number of template args in DC, expanding any pack expansions
+   found there.  */
+
+static int
+d_args_length (struct d_print_info *dpi, const struct demangle_component *dc)
+{
+  int count = 0;
+  for (; dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST;
+       dc = d_right (dc))
+    {
+      struct demangle_component *elt = d_left (dc);
+      if (elt == NULL)
+       break;
+      if (elt->type == DEMANGLE_COMPONENT_PACK_EXPANSION)
+       {
+         struct demangle_component *a = d_find_pack (dpi, d_left (elt));
+         count += d_pack_length (a);
+       }
+      else
+       ++count;
+    }
+  return count;
+}
+
 /* DC is a component of a mangled expression.  Print it, wrapped in parens
    if needed.  */
 
@@ -4361,6 +4416,70 @@ d_get_saved_scope (struct d_print_info *dpi,
   return NULL;
 }
 
+/* If DC is a C++17 fold-expression, print it and return true; otherwise
+   return false.  */
+
+static int
+d_maybe_print_fold_expression (struct d_print_info *dpi, int options,
+                              const struct demangle_component *dc)
+{
+  const struct demangle_component *ops, *operator_, *op1, *op2;
+  int save_idx;
+
+  const char *fold_code = d_left (dc)->u.s_operator.op->code;
+  if (fold_code[0] != 'f')
+    return 0;
+
+  ops = d_right (dc);
+  operator_ = d_left (ops);
+  op1 = d_right (ops);
+  op2 = 0;
+  if (op1->type == DEMANGLE_COMPONENT_TRINARY_ARG2)
+    {
+      op2 = d_right (op1);
+      op1 = d_left (op1);
+    }
+
+  /* Print the whole pack.  */
+  save_idx = dpi->pack_index;
+  dpi->pack_index = -1;
+
+  switch (fold_code[1])
+    {
+      /* Unary left fold, (... + X).  */
+    case 'l':
+      d_append_string (dpi, "(...");
+      d_print_expr_op (dpi, options, operator_);
+      d_print_subexpr (dpi, options, op1);
+      d_append_char (dpi, ')');
+      break;
+
+      /* Unary right fold, (X + ...).  */
+    case 'r':
+      d_append_char (dpi, '(');
+      d_print_subexpr (dpi, options, op1);
+      d_print_expr_op (dpi, options, operator_);
+      d_append_string (dpi, "...)");
+      break;
+
+      /* Binary left fold, (42 + ... + X).  */
+    case 'L':
+      /* Binary right fold, (X + ... + 42).  */
+    case 'R':
+      d_append_char (dpi, '(');
+      d_print_subexpr (dpi, options, op1);
+      d_print_expr_op (dpi, options, operator_);
+      d_append_string (dpi, "...");
+      d_print_expr_op (dpi, options, operator_);
+      d_print_subexpr (dpi, options, op2);
+      d_append_char (dpi, ')');
+      break;
+    }
+
+  dpi->pack_index = save_idx;
+  return 1;
+}
+
 /* Subroutine to handle components.  */
 
 static void
@@ -5121,6 +5240,21 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
              }
          }
 
+       /* For sizeof..., just print the pack length.  */
+       if (code && !strcmp (code, "sZ"))
+         {
+           struct demangle_component *a = d_find_pack (dpi, operand);
+           int len = d_pack_length (a);
+           d_append_num (dpi, len);
+           return;
+         }
+       else if (code && !strcmp (code, "sP"))
+         {
+           int len = d_args_length (dpi, operand);
+           d_append_num (dpi, len);
+           return;
+         }
+
        if (op->type != DEMANGLE_COMPONENT_CAST)
          d_print_expr_op (dpi, options, op);
        else
@@ -5162,6 +5296,9 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
          return;
        }
 
+      if (d_maybe_print_fold_expression (dpi, options, dc))
+       return;
+
       /* We wrap an expression which uses the greater-than operator in
         an extra layer of parens so that it does not get confused
         with the '>' which ends the template parameters.  */
@@ -5217,6 +5354,8 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
          d_print_error (dpi);
          return;
        }
+      if (d_maybe_print_fold_expression (dpi, options, dc))
+       return;
       {
        struct demangle_component *op = d_left (dc);
        struct demangle_component *first = d_left (d_right (dc));
index d124261..9066942 100644 (file)
@@ -4421,6 +4421,24 @@ void baz<int>(A<sizeof (foo((int)(), (floatcomplex )00000000_00000000))>*)
 --format=gnu-v3
 _Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv
 X<sizeof ((P(((F)())())).array)>::Type foo<F>()
+
+_Z1fIJidEEv1AIXsZT_EE
+void f<int, double>(A<2>)
+
+_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_
+void A::f<int, int, int, int, int, int>(int (&) [6], int, int, int, int)
+
+_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE
+void unary_left<1, 2, 3>(A<(...+(1, 2, 3))>)
+
+_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE
+void unary_right<1, 2, 3>(A<((1, 2, 3)+...)>)
+
+_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE
+void binary_left<1, 2, 3>(A<((42)+...+(1, 2, 3))>)
+
+_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE
+void binary_right<1, 2, 3>(A<((1, 2, 3)+...+(42))>)
 #
 # Tests a use-after-free problem PR70481
 
index 41f4a10..e408691 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index eb5d617..a9dfa26 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-29  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
        backport from trunk:
index 7dff426..e2ae481 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index aca53ca..f0cf444 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 98bb557..23404f5 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-06-10  Ilya Enkovich  <ilya.enkovich@intel.com>
 
        Backport from mainline r237292.
index 9189070..42bbe88 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index eee7298..211f136 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index bcf6cd3..c570bf9 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 9689b26..dcdbcf4 100644 (file)
@@ -1,3 +1,13 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/71042
+       * tsan/tsan_platform_linux.cc: Cherry-pick upstream r278292.
+       * tsan/tsan_rtl_aarch64.S: Likewise.
+
 2016-05-18  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index a2e89f2..09cec5f 100644 (file)
@@ -60,6 +60,10 @@ extern "C" void *__libc_stack_end;
 void *__libc_stack_end = 0;
 #endif
 
+#if SANITIZER_LINUX && defined(__aarch64__)
+void InitializeGuardPtr() __attribute__((visibility("hidden")));
+#endif
+
 namespace __tsan {
 
 static uptr g_data_start;
@@ -261,6 +265,10 @@ void InitializePlatform() {
       SetAddressSpaceUnlimited();
       reexec = true;
     }
+#if SANITIZER_LINUX && defined(__aarch64__)
+    // Initialize the guard pointer used in {sig}{set,long}jump.
+    InitializeGuardPtr();
+#endif
     if (reexec)
       ReExec();
   }
index 20bf008..ef06f04 100644 (file)
@@ -1,4 +1,62 @@
 #include "sanitizer_common/sanitizer_asm.h"
+
+.section .bss
+.type  __tsan_pointer_chk_guard, %object
+.size  __tsan_pointer_chk_guard, 8
+__tsan_pointer_chk_guard:
+.zero  8
+
+.section .text
+
+// GLIBC mangles the function pointers in jmp_buf (used in {set,long}*jmp
+// functions) by XORing them with a random guard pointer.  For AArch64 it is a
+// global variable rather than a TCB one (as for x86_64/powerpc) and althought
+// its value is exported by the loader, it lies within a private GLIBC
+// namespace (meaning it should be only used by GLIBC itself and the ABI is
+// not stable). So InitializeGuardPtr obtains the pointer guard value by
+// issuing a setjmp and checking the resulting pointers values against the
+// original ones.
+.hidden _Z18InitializeGuardPtrv
+.global _Z18InitializeGuardPtrv
+.type _Z18InitializeGuardPtrv, @function
+_Z18InitializeGuardPtrv:
+  CFI_STARTPROC
+  // Allocates a jmp_buf for the setjmp call.
+  stp  x29, x30, [sp, -336]!
+  CFI_DEF_CFA_OFFSET (336)
+  CFI_OFFSET (29, -336)
+  CFI_OFFSET (30, -328)
+  add  x29, sp, 0
+  CFI_DEF_CFA_REGISTER (29)
+  add  x0, x29, 24
+
+  // Call libc setjmp that mangle the stack pointer value
+  adrp  x1, :got:_ZN14__interception12real__setjmpE
+  ldr   x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]
+  ldr   x1, [x1]
+  blr   x1
+
+  // glibc setjmp mangles both the frame pointer (FP, pc+4 on blr) and the
+  // stack pointer (SP). FP will be placed on ((uintptr*)jmp_buf)[11] and
+  // SP at ((uintptr*)jmp_buf)[13].
+  // The mangle operation is just 'value' xor 'pointer guard value' and
+  // if we know the original value (SP) and the expected one, we can derive
+  // the guard pointer value.
+  mov  x0, sp
+
+  // Loads the mangled SP pointer.
+  ldr  x1, [x29, 128]
+  eor  x0, x0, x1
+  adrp x2, __tsan_pointer_chk_guard
+  str  x0, [x2, #:lo12:__tsan_pointer_chk_guard]
+  ldp  x29, x30, [sp], 336
+  CFI_RESTORE (30)
+  CFI_RESTORE (19)
+  CFI_DEF_CFA (31, 0)
+  ret
+  CFI_ENDPROC
+.size _Z18InitializeGuardPtrv, .-_Z18InitializeGuardPtrv
+
 .hidden __tsan_setjmp
 .comm _ZN14__interception11real_setjmpE,8,8
 .type setjmp, @function
@@ -21,10 +79,9 @@ setjmp:
   mov     x19, x0
 
   // SP pointer mangling (see glibc setjmp)
-  adrp    x2, :got:__pointer_chk_guard
-  ldr     x2, [x2, #:got_lo12:__pointer_chk_guard]
+  adrp    x2, __tsan_pointer_chk_guard
+  ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
-  ldr     x2, [x2]
   eor     x1, x2, x0
 
   // call tsan interceptor
@@ -69,10 +126,9 @@ _setjmp:
   mov     x19, x0
 
   // SP pointer mangling (see glibc setjmp)
-  adrp    x2, :got:__pointer_chk_guard
-  ldr     x2, [x2, #:got_lo12:__pointer_chk_guard]
+  adrp    x2, __tsan_pointer_chk_guard
+  ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
-  ldr     x2, [x2]
   eor     x1, x2, x0
 
   // call tsan interceptor
@@ -119,10 +175,9 @@ sigsetjmp:
   mov     x19, x0
 
   // SP pointer mangling (see glibc setjmp)
-  adrp    x2, :got:__pointer_chk_guard
-  ldr     x2, [x2, #:got_lo12:__pointer_chk_guard]
+  adrp    x2, __tsan_pointer_chk_guard
+  ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
-  ldr     x2, [x2]
   eor     x1, x2, x0
 
   // call tsan interceptor
@@ -171,10 +226,9 @@ __sigsetjmp:
   mov     x19, x0
 
   // SP pointer mangling (see glibc setjmp)
-  adrp    x2, :got:__pointer_chk_guard
-  ldr     x2, [x2, #:got_lo12:__pointer_chk_guard]
+  adrp    x2, __tsan_pointer_chk_guard
+  ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
-  ldr     x2, [x2]
   eor     x1, x2, x0
 
   // call tsan interceptor
index 3b11a2c..708f729 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 4308c99..3e8f33c 100644 (file)
@@ -1,3 +1,128 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
+2016-08-06  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2016-08-05  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/functional (function::_Callable): Use lvalue in
+       result_of expression.
+       * testsuite/20_util/function/cons/refqual.cc: New test.
+
+       Backport from mainline
+       2016-07-22  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/71964
+       * include/bits/stl_tree.h (_Rb_tree(_Rb_tree&&)): Move allocator.
+       * testsuite/23_containers/set/allocator/71964.cc: New test.
+
+       Backport from mainline
+       2016-08-02  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc:
+       Remove reundant check for _GLIBCXX_USE_WCHAR_T and fix char type.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/move.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc:
+       Likewise.
+
+       Backport from mainline
+       2016-05-04  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/70940
+       * include/experimental/memory_resource
+       (__resource_adaptor_imp::do_allocate): Do not default-construct
+       rebound allocator.
+       (__resource_adaptor_imp::do_deallocate): Likewise. Use
+       allocator_traits to get pointer type.
+       (__null_memory_resource::do_allocate): Remove unused parameters.
+       (__null_memory_resource::do_deallocate): Likewise.
+       (__null_memory_resource::do_is_equal): Likewise. Add return statement.
+       * testsuite/experimental/type_erased_allocator/1.cc: Combine with ...
+       * testsuite/experimental/type_erased_allocator/1_neg.cc: This, and
+       move to ...
+       * testsuite/experimental/memory_resource/1.cc: Here.
+       * testsuite/experimental/memory_resource/null_memory_resource.cc: New.
+       * testsuite/experimental/memory_resource/resource_adaptor.cc: New.
+
+       Backport from mainline
+       2016-08-03  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/allocator.h (__cpp_lib_incomplete_container_elements):
+       Define feature-test macro.
+       * include/std/shared_mutex (__cpp_lib_shared_mutex): Uncomment.
+       * include/std/type_traits (__cpp_lib_logical_traits): Fix value.
+
+       Backport from mainline
+       2016-08-03  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/stl_function.h: Remove commented-out macro.
+       * include/bits/stl_tree.h (__cpp_lib_generic_associative_lookup):
+       Define feature-test macro.
+       * testsuite/experimental/feat-cxx14.cc: Add tests for more macros.
+
+       * testsuite/lib/libstdc++.exp (check_v3_target_filesystem_ts): Improve
+       comments.
+
+       * doc/xml/manual/status_cxx2011.xml: Change "mainline GCC SVN" to
+       refer to the release series.
+       * doc/xml/manual/status_cxx2014.xml: Likewise. Update TS status.
+       * doc/xml/manual/status_cxx2017.xml: Likewise.
+       * doc/html/manual/status.html: Regenerate.
+
+       * include/experimental/propagate_const (propagate_const::__t): Rename
+       to _M_t and remove comment. Qualify std::move and std::forward.
+       * testsuite/experimental/propagate_const/cons/default.cc: Fix test.
+
+2016-08-02  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/lib/libstdc++.exp (v3-build_support): Add
+       -fno-lto to additional flags for compiling libtestc++.a objects.
+
+2016-07-29  Jonathan Wakely  <jwakely@redhat.com>
+
+       * doc/xml/manual/abi.xml: Document 6.0.22 library version.
+       * doc/html/manual/abi.html: Regenerate.
+
+2016-07-19  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2016-07-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/experimental/functional: Include <parallel/algorithm> in
+       Parallel Mode.
+
+       Backport from mainline
+       2016-07-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/experimental/functional/searchers.cc: Include <algorithm>
+       for std::search.
+
+       PR libstdc++/71856
+       * include/bits/c++config (_GLIBCXX_ASSERTIONS): Define to 1 not empty.
+       * include/parallel/balanced_quicksort.h: Include <unistd.h> for sleep.
+       * include/parallel/compiletime_settings.h (_GLIBCXX_ASSERTIONS):
+       Do not define here.
+
+       Backport from mainline
+       2016-06-06  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/71320
+       * src/filesystem/ops.cc (permissions(const path&, perms, error_code&)):
+       Add or remove permissions according to perms argument.
+       * testsuite/experimental/filesystem/operations/permissions.cc: New
+       test.
+
 2016-07-06  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        Implement LWG 2451, optional<T> should 'forward' T's
index e7de3a5..276c2eb 100644 (file)
@@ -129,7 +129,7 @@ compatible.
    GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0
    release.) If a particular release is not listed, it has the same
    version labels as the preceding release.
-   </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</p></li><li class="listitem"><p>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.9.0: GLIBCXX_3.4.20, CXXABI_1.3.8</p></li><li class="listitem"><p>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
+   </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</p></li><li class="listitem"><p>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.9.0: GLIBCXX_3.4.20, CXXABI_1.3.8</p></li><li class="listitem"><p>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</p></li><li class="listitem"><p>GCC 6.1.0: GLIBCXX_3.4.22, CXXABI_1.3.10</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
     __GXX_ABI_VERSION. This macro is defined as the version of the
     compiler v3 ABI, with g++ 3.0 being version 100. This macro will
     be automatically defined whenever g++ is used (the curious can
index 8c5a7c9..ea30b51 100644 (file)
@@ -156,8 +156,7 @@ options. The pre-defined symbol
 <code class="constant">__cplusplus</code> is used to check for the
 presence of the required flag.
 </p><p>
-This page describes the C++11 support in mainline GCC SVN, not in any
-particular release.
+This page describes the C++11 support in the GCC 6 series.
 </p><div class="table"><a id="table.cxx11_status"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <span class="emphasis"><em>18</em></span>
       </td><td colspan="3" align="left">
@@ -335,8 +334,7 @@ options. The pre-defined symbol
 <code class="constant">__cplusplus</code> is used to check for the
 presence of the required flag.
 </p><p>
-This page describes the C++14 and library TS support in mainline GCC SVN,
-not in any particular release.
+This page describes the C++14 and library TS support in the GCC 6 series.
 </p><div class="table"><a id="table.cxx14_status"></a><p class="title"><strong>Table 1.3. C++ 2014 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2014 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Paper</th><th align="left">Title</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3669.pdf" target="_top">
          N3669
@@ -405,7 +403,7 @@ not in any particular release.
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3655.pdf" target="_top">
          N3655
        </a>
-      </td><td align="left">TransformationTraits Redux</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">
+      </td><td align="left">TransformationTraits Redux</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3644.pdf" target="_top">
          N3644
        </a>
@@ -433,15 +431,15 @@ not in any particular release.
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3915.pdf" target="_top">
          N3915
        </a>
-      </td><td align="left">apply() call a function with arguments from a tuple</td><td align="left">Y</td><td align="left">Library Fundamentals TS</td></tr><tr bgcolor="#C8B0B0"><td align="left">
+      </td><td align="left">apply() call a function with arguments from a tuple</td><td align="left">Y</td><td align="left">Library Fundamentals TS</td></tr><tr bgcolor="#B0B0B0"><td align="left">
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3916.pdf" target="_top">
          N3916
        </a>
-      </td><td align="left">Polymorphic memory resources</td><td align="left">N</td><td align="left">Library Fundamentals TS</td></tr><tr bgcolor="#C8B0B0"><td align="left">
+      </td><td align="left">Polymorphic memory resources</td><td align="left">Partial</td><td align="left">Library Fundamentals TS</td></tr><tr><td align="left">
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3920.html" target="_top">
          N3920
        </a>
-      </td><td align="left">Extending shared_ptr to support arrays</td><td align="left">N</td><td align="left">Library Fundamentals TS</td></tr><tr><td align="left">
+      </td><td align="left">Extending shared_ptr to support arrays</td><td align="left">Y</td><td align="left">Library Fundamentals TS</td></tr><tr><td align="left">
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3921.html" target="_top">
          N3921
        </a>
@@ -470,8 +468,7 @@ options. The pre-defined symbol
 <code class="constant">__cplusplus</code> is used to check for the
 presence of the required flag.
 </p><p>
-This page describes the C++1z and library TS support in mainline GCC SVN,
-not in any particular release.
+This page describes the C++1z and library TS support in the GCC 6 series.
 </p><div class="table"><a id="table.cxx1z_status"></a><p class="title"><strong>Table 1.5. C++ 201z Implementation Status</strong></p><div class="table-contents"><table summary="C++ 201z Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Paper</th><th align="left">Title</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n4259.pdf" target="_top">
          N4259
index a2ed57b..aa5aa5b 100644 (file)
@@ -331,6 +331,7 @@ compatible.
     <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
     <listitem><para>GCC 4.9.0: GLIBCXX_3.4.20, CXXABI_1.3.8</para></listitem>
     <listitem><para>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</para></listitem>
+    <listitem><para>GCC 6.1.0: GLIBCXX_3.4.22, CXXABI_1.3.10</para></listitem>
     </itemizedlist>
     </listitem>
 
index cf99956..e6d0f06 100644 (file)
@@ -27,8 +27,7 @@ presence of the required flag.
 </para>
 
 <para>
-This page describes the C++11 support in mainline GCC SVN, not in any
-particular release.
+This page describes the C++11 support in the GCC 6 series.
 </para>
 
 <!-- Status is Yes or No, Broken/Partial-->
index 6f1fbe5..fe91093 100644 (file)
@@ -20,8 +20,7 @@ presence of the required flag.
 </para>
 
 <para>
-This page describes the C++14 and library TS support in mainline GCC SVN,
-not in any particular release.
+This page describes the C++14 and library TS support in the GCC 6 series.
 </para>
 
 <table frame="all" xml:id="table.cxx14_status">
@@ -234,7 +233,7 @@ not in any particular release.
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
+      <?dbhtml bgcolor="#B0B0B0" ?>
       <entry>
        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3644.pdf">
          N3644
@@ -338,26 +337,25 @@ not in any particular release.
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
+      <?dbhtml bgcolor="#B0B0B0" ?>
       <entry>
        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3916.pdf">
          N3916
        </link>
       </entry>
       <entry>Polymorphic memory resources</entry>
-      <entry>N</entry>
+      <entry>Partial</entry>
       <entry>Library Fundamentals TS</entry>
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
       <entry>
        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3920.html">
          N3920
        </link>
       </entry>
       <entry>Extending shared_ptr to support arrays</entry>
-      <entry>N</entry>
+      <entry>Y</entry>
       <entry>Library Fundamentals TS</entry>
     </row>
 
index 60e5fae..1528e0f 100644 (file)
@@ -20,8 +20,7 @@ presence of the required flag.
 </para>
 
 <para>
-This page describes the C++1z and library TS support in mainline GCC SVN,
-not in any particular release.
+This page describes the C++1z and library TS support in the GCC 6 series.
 </para>
 
 <table frame="all" xml:id="table.cxx1z_status">
index 597d305..984d800 100644 (file)
@@ -49,6 +49,8 @@
 #include <type_traits>
 #endif
 
+#define __cpp_lib_incomplete_container_elements 201505
+
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
index 57024e4..4625607 100644 (file)
@@ -414,7 +414,7 @@ namespace std
 
 // Debug Mode implies checking assertions.
 #ifdef _GLIBCXX_DEBUG
-# define _GLIBCXX_ASSERTIONS
+# define _GLIBCXX_ASSERTIONS 1
 #endif
 
 // Disable std::string explicit instantiation declarations in order to assert.
index eabf9ba..68f39ff 100644 (file)
@@ -225,7 +225,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #if __cplusplus > 201103L
 
 #define __cpp_lib_transparent_operators 201210
-//#define __cpp_lib_generic_associative_lookup 201304
 
   template<>
     struct plus<void>
index a9ca3fa..8697a71 100644 (file)
@@ -73,6 +73,10 @@ namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
+#if __cplusplus > 201103L
+# define __cpp_lib_generic_associative_lookup 201304
+#endif
+
   // Red-black tree class, designed for use in implementing STL
   // associative containers (set, multiset, map, and multimap). The
   // insertion and deletion algorithms are based on those in Cormen,
@@ -851,7 +855,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       }
 
       _Rb_tree(_Rb_tree&& __x)
-      : _M_impl(__x._M_impl._M_key_compare, __x._M_get_Node_allocator())
+      : _M_impl(__x._M_impl._M_key_compare,
+               std::move(__x._M_get_Node_allocator()))
       {
        if (__x._M_root() != 0)
          _M_move_data(__x, std::true_type());
index 2095310..ed41f5a 100644 (file)
@@ -42,6 +42,9 @@
 #include <vector>
 #include <array>
 #include <bits/stl_algo.h>
+#ifdef _GLIBCXX_PARALLEL
+# include <parallel/algorithm> // For std::__parallel::search
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
index ccdf5e6..ea8afb8 100644 (file)
@@ -282,7 +282,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        size_t __new_size = _S_aligned_size(__bytes,
                                            _S_supported(__alignment) ?
                                            __alignment : _S_max_align);
-       return _Aligned_alloc().allocate(__new_size);
+       return _Aligned_alloc(_M_alloc).allocate(__new_size);
       }
 
       virtual void
@@ -292,9 +292,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        size_t __new_size = _S_aligned_size(__bytes,
                                            _S_supported(__alignment) ?
                                            __alignment : _S_max_align);
-       _Aligned_alloc().deallocate(static_cast<typename
-                                   _Aligned_alloc::pointer>(__p),
-                                   __new_size);
+       using _Ptr = typename allocator_traits<_Aligned_alloc>::pointer;
+       _Aligned_alloc(_M_alloc).deallocate(static_cast<_Ptr>(__p),
+                                           __new_size);
       }
 
       virtual bool
@@ -306,8 +306,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     private:
       // Calculate Aligned Size
-      // Returns a size that is larger than or equal to __size and divided by
-      // __alignment, where __alignment is required to be the power of 2.
+      // Returns a size that is larger than or equal to __size and divisible
+      // by __alignment, where __alignment is required to be the power of 2.
       static size_t
       _S_aligned_size(size_t __size, size_t __alignment)
       { return ((__size - 1)|(__alignment - 1)) + 1; }
@@ -342,16 +342,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     {
     protected:
       void*
-      do_allocate(size_t __bytes, size_t __alignment)
+      do_allocate(size_t, size_t)
       { std::__throw_bad_alloc(); }
 
       void
-      do_deallocate(void* __p, size_t __bytes, size_t __alignment)
+      do_deallocate(void*, size_t, size_t) noexcept
       { }
 
       bool
       do_is_equal(const memory_resource& __other) const noexcept
-      { }
+      { return this == &__other; }
 
       friend memory_resource* null_memory_resource() noexcept;
     };
index ea052ca..75cd8c0 100644 (file)
@@ -116,14 +116,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                 is_convertible<_Up&&, _Tp>>::value, bool
                          >::type=true>
       constexpr propagate_const(propagate_const<_Up>&& __pu)
-       : __t(move(get_underlying(__pu)))
+       : _M_t(std::move(get_underlying(__pu)))
       {}
       template <typename _Up, typename
                enable_if<__and_<is_constructible<_Tp, _Up&&>,
                                 __not_<is_convertible<_Up&&, _Tp>>>::value,
                          bool>::type=false>
       constexpr explicit propagate_const(propagate_const<_Up>&& __pu)
-       : __t(move(get_underlying(__pu)))
+       : _M_t(std::move(get_underlying(__pu)))
       {}
       template <typename _Up, typename
                enable_if<__and_<is_constructible<_Tp, _Up&&>,
@@ -132,7 +132,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                          typename decay<_Up>::type>>
                                 >::value, bool>::type=true>
       constexpr propagate_const(_Up&& __u)
-       : __t(forward<_Up>(__u))
+       : _M_t(std::forward<_Up>(__u))
       {}
       template <typename _Up, typename
                enable_if<__and_<is_constructible<_Tp, _Up&&>,
@@ -141,7 +141,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                          typename decay<_Up>::type>>
                                 >::value, bool>::type=false>
       constexpr explicit propagate_const(_Up&& __u)
-       : __t(forward<_Up>(__u))
+       : _M_t(std::forward<_Up>(__u))
       {}
 
       // [propagate_const.assignment], assignment
@@ -152,7 +152,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                typename enable_if<is_convertible<_Up&&, _Tp>::value>::type>
       constexpr propagate_const& operator=(propagate_const<_Up>&& __pu)
       {
-       __t = move(get_underlying(__pu));
+       _M_t = std::move(get_underlying(__pu));
       }
 
       template <typename _Up, typename =
@@ -162,13 +162,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                          >::value>::type>
       constexpr propagate_const& operator=(_Up&& __u)
       {
-       __t = forward<_Up>(__u);
+       _M_t = std::forward<_Up>(__u);
       }
 
       // [propagate_const.const_observers], const observers
       explicit constexpr operator bool() const
       {
-       return bool(__t);
+       return bool(_M_t);
       }
 
       constexpr const element_type* operator->() const
@@ -193,7 +193,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       constexpr const element_type* get() const
       {
-       return __to_raw_pointer(__t);
+       return __to_raw_pointer(_M_t);
       }
 
       // [propagate_const.non_const_observers], non-const observers
@@ -219,7 +219,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       constexpr element_type* get()
       {
-       return __to_raw_pointer(__t);
+       return __to_raw_pointer(_M_t);
       }
 
       // [propagate_const.modifiers], modifiers
@@ -227,11 +227,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       swap(propagate_const& __pt) noexcept(__is_nothrow_swappable<_Tp>::value)
       {
        using std::swap;
-       swap(__t, get_underlying(__pt));
+       swap(_M_t, get_underlying(__pt));
       }
 
     private:
-      _Tp __t; //exposition only
+      _Tp _M_t;
     };
 
   // [propagate_const.relational], relational operators
@@ -408,14 +408,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     constexpr const _Tp&
     get_underlying(const propagate_const<_Tp>& __pt) noexcept
     {
-      return __pt.__t;
+      return __pt._M_t;
     }
 
   template <typename _Tp>
     constexpr _Tp&
     get_underlying(propagate_const<_Tp>& __pt) noexcept
     {
-      return __pt.__t;
+      return __pt._M_t;
     }
 
   // @} group propagate_const
index 65dec30..16ef1ef 100644 (file)
@@ -53,6 +53,9 @@
 
 #if _GLIBCXX_ASSERTIONS
 #include <parallel/checkers.h>
+#ifdef _GLIBCXX_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 #endif
 
 namespace __gnu_parallel
index f4fb404..c1758aa 100644 (file)
 #define _GLIBCXX_SCALE_DOWN_FPU 0
 #endif
 
-#ifndef _GLIBCXX_ASSERTIONS
-/** @brief Switch on many _GLIBCXX_PARALLEL_ASSERTions in parallel code.
- *  Should be switched on only locally. */
-#define _GLIBCXX_ASSERTIONS 0
-#endif
-
 #ifndef _GLIBCXX_RANDOM_SHUFFLE_CONSIDER_L1
 /** @brief Switch on many _GLIBCXX_PARALLEL_ASSERTions in parallel code.
  *  Consider the size of the L1 cache for
index 9799410..4f5b3c5 100644 (file)
@@ -1847,7 +1847,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
       typedef _Res _Signature_type(_ArgTypes...);
 
       template<typename _Func,
-              typename _Res2 = typename result_of<_Func(_ArgTypes...)>::type>
+              typename _Res2 = typename result_of<_Func&(_ArgTypes...)>::type>
        struct _Callable : __check_func_return_type<_Res2, _Res> { };
 
       // Used so the return type convertibility checks aren't done when
index d87ac56..624139b 100644 (file)
@@ -52,7 +52,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #ifdef _GLIBCXX_HAS_GTHREADS
 
 #if __cplusplus > 201402L
-// TODO: #define __cpp_lib_shared_mutex 201505
+#define __cpp_lib_shared_mutex 201505
   class shared_mutex;
 #endif
 
index 3a2b546..00df22e 100644 (file)
@@ -156,7 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #if __cplusplus > 201402L
 
-#define __cpp_lib_logical_traits 201511
+#define __cpp_lib_logical_traits 201510
 
   template<typename... _Bn>
     struct conjunction
index 668c705..9fb5b63 100644 (file)
@@ -1084,6 +1084,28 @@ fs::permissions(const path& p, perms prms)
 
 void fs::permissions(const path& p, perms prms, error_code& ec) noexcept
 {
+  const bool add = is_set(prms, perms::add_perms);
+  const bool remove = is_set(prms, perms::remove_perms);
+  if (add && remove)
+    {
+      ec = std::make_error_code(std::errc::invalid_argument);
+      return;
+    }
+
+  prms &= perms::mask;
+
+  if (add || remove)
+    {
+      auto st = status(p, ec);
+      if (ec)
+       return;
+      auto curr = st.permissions();
+      if (add)
+       prms |= curr;
+      else
+       prms = curr & ~prms;
+    }
+
 #if _GLIBCXX_USE_FCHMODAT
   if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), 0))
 #else
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/refqual.cc b/libstdc++-v3/testsuite/20_util/function/cons/refqual.cc
new file mode 100644 (file)
index 0000000..d3744ee
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+
+#include <functional>
+
+struct F {
+  void operator()() && { }
+  int operator()() & { return 0; }
+};
+
+int main() {
+  F f;
+  std::function<int()> ff{f};
+  return ff();
+}
index 2ed238a..110f4d9 100644 (file)
@@ -21,9 +21,9 @@
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
-using C = char;
-const C c = 'a';
+#if _GLIBCXX_USE_CXX11_ABI
+using C = wchar_t;
+const C c = L'a';
 using traits = std::char_traits<C>;
 
 using __gnu_test::propagating_allocator;
index fefa77f..3ac15bb 100644 (file)
@@ -21,9 +21,9 @@
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
-using C = char;
-const C c = 'a';
+#if _GLIBCXX_USE_CXX11_ABI
+using C = wchar_t;
+const C c = L'a';
 using traits = std::char_traits<C>;
 
 using __gnu_test::propagating_allocator;
index 3306438..1563abb 100644 (file)
@@ -22,7 +22,7 @@
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
+#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
index 84504bc..1cee2ac 100644 (file)
@@ -21,9 +21,9 @@
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
-using C = char;
-const C c = 'a';
+#if _GLIBCXX_USE_CXX11_ABI
+using C = wchar_t;
+const C c = L'a';
 using traits = std::char_traits<C>;
 
 using __gnu_test::uneq_allocator;
index d1efc0b..8c94d79 100644 (file)
@@ -21,9 +21,9 @@
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
-using C = char;
-const C c = 'a';
+#if _GLIBCXX_USE_CXX11_ABI
+using C = wchar_t;
+const C c = L'a';
 using traits = std::char_traits<C>;
 
 using __gnu_test::propagating_allocator;
index 0ed6940..6c462a6 100644 (file)
@@ -21,9 +21,9 @@
 #include <string>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
-using C = char;
-const C c = 'a';
+#if _GLIBCXX_USE_CXX11_ABI
+using C = wchar_t;
+const C c = L'a';
 using traits = std::char_traits<C>;
 
 using __gnu_test::propagating_allocator;
index dd496e9..667d475 100644 (file)
@@ -21,9 +21,9 @@
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI && defined(_GLIBCXX_USE_WCHAR_T)
-using C = char;
-const C c = 'a';
+#if _GLIBCXX_USE_CXX11_ABI
+using C = wchar_t;
+const C c = L'a';
 using traits = std::char_traits<C>;
 
 using __gnu_test::propagating_allocator;
diff --git a/libstdc++-v3/testsuite/23_containers/set/allocator/71964.cc b/libstdc++-v3/testsuite/23_containers/set/allocator/71964.cc
new file mode 100644 (file)
index 0000000..f13828f
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+
+#include <set>
+#include <testsuite_hooks.h>
+
+template<typename T>
+  struct mv_allocator
+  {
+    using value_type = T;
+    using size_type = unsigned;
+
+    mv_allocator()
+    : moved_to(false), moved_from(false) { }
+
+    template<typename U>
+      mv_allocator(const mv_allocator<U> & a)
+      : moved_to(a.moved_to), moved_from(a.moved_from) { }
+
+    mv_allocator(const mv_allocator &) = default;
+
+    mv_allocator(mv_allocator && a) noexcept : moved_to(true)
+    {
+      a.moved_from = true;
+    }
+
+    T* allocate(unsigned n) { return std::allocator<T>{}.allcoate(n); }
+    void deallocate(T* p, unsigned n) { std::allocator<T>{}.deallocate(p, n); }
+
+    bool moved_to;
+    bool moved_from;
+  };
+
+template<typename T, typename U>
+bool
+operator==(const mv_allocator<T>&, const mv_allocator<U>&) { return true; }
+
+template<typename T, typename U>
+bool
+operator!=(const mv_allocator<T>&, const mv_allocator<U>&) { return false; }
+
+void
+test01()
+{
+  std::set<int, std::less<int>, mv_allocator<int>> s;
+  auto t = std::move(s);
+  VERIFY( s.get_allocator().moved_from );
+  VERIFY( t.get_allocator().moved_to );
+}
+
+int
+main()
+{
+  test01();
+}
index 2cc31ca..42b633f 100644 (file)
@@ -11,6 +11,8 @@
 #include <complex>
 #include <iomanip>
 #include <shared_mutex>
+#include <map>
+#include <set>
 
 #ifndef  __cpp_lib_integer_sequence
 #  error "__cpp_lib_integer_sequence"
 #  error "__cpp_lib_complex_udls != 201309"
 #endif
 
-//#ifndef  __cpp_lib_generic_associative_lookup
-//#  error "__cpp_lib_generic_associative_lookup"
-//#elif  __cpp_lib_generic_associative_lookup != 201304
-//#  error "__cpp_lib_generic_associative_lookup != 201304"
-//#endif
+#ifndef  __cpp_lib_generic_associative_lookup
+#  error "__cpp_lib_generic_associative_lookup"
+#elif  __cpp_lib_generic_associative_lookup != 201304
+#  error "__cpp_lib_generic_associative_lookup != 201304"
+#endif
 
 //#ifndef  __cpp_lib_null_iterators
 //#  error "__cpp_lib_null_iterators"
 #elif  __cpp_lib_is_final != 201402
 #  error "__cpp_lib_is_final != 201402"
 #endif
+
+#ifndef  __cpp_lib_is_null_pointer
+#  error "__cpp_lib_is_null_pointer"
+#elif  __cpp_lib_is_null_pointer != 201309
+#  error "__cpp_lib_is_null_pointer != 201309"
+#endif
+
+#ifndef  __cpp_lib_make_reverse_iterator
+#  error "__cpp_lib_make_reverse_iterator"
+#elif  __cpp_lib_make_reverse_iterator != 201402
+#  error "__cpp_lib_make_reverse_iterator != 201402"
+#endif
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc
new file mode 100644 (file)
index 0000000..e414860
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11 -lstdc++fs" }
+// { dg-require-filesystem-ts "" }
+
+// 15.26 Permissions [fs.op.permissions]
+
+#include <experimental/filesystem>
+#include <fstream>
+#include <testsuite_fs.h>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+  using perms = std::experimental::filesystem::perms;
+
+  auto p = __gnu_test::nonexistent_path();
+  std::ofstream{p.native()};
+  VERIFY( exists(p) );
+  permissions(p, perms::owner_all);
+  VERIFY( status(p).permissions() == perms::owner_all );
+  permissions(p, perms::group_read | perms::add_perms);
+  VERIFY( status(p).permissions() == (perms::owner_all | perms::group_read) );
+  permissions(p, perms::group_read | perms::remove_perms);
+  VERIFY( status(p).permissions() == perms::owner_all );
+
+  remove(p);
+}
+
+int
+main()
+{
+  test01();
+}
index 5e585f8..143593f 100644 (file)
@@ -22,6 +22,7 @@
 #ifdef _GLIBCXX_USE_WCHAR_T
 # include <cwchar>
 #endif
+#include <algorithm>
 #include <testsuite_hooks.h>
 
 using std::experimental::make_default_searcher;
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++14" }
+// { dg-require-atomic-builtins "" }
 
 // Copyright (C) 2015-2016 Free Software Foundation, Inc.
 //
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <memory>
 #include <experimental/memory_resource>
 #include <vector>
-#include <bits/uses_allocator.h>
+#include <cstdlib>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
@@ -37,6 +37,7 @@ struct A
   static int ctor_count;
   static int dtor_count;
 };
+
 int A::ctor_count = 0;
 int A::dtor_count = 0;
 
@@ -44,7 +45,7 @@ struct CountedResource : public memory_resource
 {
 public:
   CountedResource() = default;
-  ~ CountedResource() = default;
+  ~CountedResource() = default;
 
   static size_t get_alloc_count()  { return alloc_count;  }
   static size_t get_dalloc_count() { return dalloc_count; }
@@ -55,23 +56,23 @@ protected:
   void* do_allocate(size_t bytes, size_t alignment)
   {
     alloc_count += bytes;
-    if (auto ptr = std::malloc(bytes)) {
+    if (auto ptr = std::malloc(bytes))
       return ptr;
-    }
     throw std::bad_alloc();
   }
 
   void do_deallocate(void *p, size_t bytes, size_t alignment)
   {
     dalloc_count += bytes;
-    free(p);
+    std::free(p);
   }
 
   bool do_is_equal(const memory_resource& __other) const noexcept
   { return this == &__other; }
 };
-  size_t  CountedResource::alloc_count  = 0;
-  size_t  CountedResource::dalloc_count = 0;
+
+size_t CountedResource::alloc_count  = 0;
+size_t CountedResource::dalloc_count = 0;
 
 void clear()
 {
@@ -82,8 +83,11 @@ void clear()
 }
 
 // memory resource
-void test01()
+void
+test01()
 {
+  bool test __attribute((unused)) = false;
+
   memory_resource* r = new_delete_resource();
   VERIFY(get_default_resource() == r);
   void *p = get_default_resource()->allocate(5);
@@ -102,8 +106,11 @@ void test01()
 }
 
 // polymorphic_allocator
-void test02()
+void
+test02()
 {
+  bool test __attribute((unused)) = false;
+
   clear();
   {
     CountedResource cr;
@@ -116,7 +123,11 @@ void test02()
   VERIFY(CountedResource::get_dalloc_count() == 5);
 }
 
-void test03() {
+void
+test03()
+{
+  bool test __attribute((unused)) = false;
+
   clear();
   CountedResource cr;
   polymorphic_allocator<A> pa(&cr);
@@ -130,7 +141,11 @@ void test03() {
   VERIFY(CountedResource::get_dalloc_count() == 1);
 }
 
-void test04() {
+void
+test04()
+{
+  bool test __attribute((unused)) = false;
+
   polymorphic_allocator<A> pa1(get_default_resource());
   polymorphic_allocator<A> pa2(get_default_resource());
   VERIFY(pa1 == pa2);
@@ -138,10 +153,10 @@ void test04() {
   VERIFY(pa1 == pa3);
 }
 
-int main() {
+int main()
+{
   test01();
   test02();
   test03();
   test04();
-  return 0;
 }
@@ -1,7 +1,6 @@
-// { dg-do run { xfail *-*-* } }
 // { dg-options "-std=gnu++14" }
 
-// Copyright (C) 2015-2016 Free Software Foundation, Inc.
+// Copyright (C) 2016 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 #include <experimental/memory_resource>
 #include <bits/uses_allocator.h>
 #include <testsuite_hooks.h>
-#include <testsuite_allocator.h>
 
-using std::experimental::pmr::polymorphic_allocator;
-using std::experimental::pmr::null_memory_resource;
 using std::experimental::pmr::memory_resource;
+using std::experimental::pmr::null_memory_resource;
+using std::experimental::pmr::new_delete_resource;
+
+// null_memory_resource
+void
+test06()
+{
+  bool test __attribute((unused)) = false;
 
-void test01() {
   memory_resource* r = null_memory_resource();
-  auto p = r->allocate(1);
+  bool caught = false;
+
+  void* p = nullptr;
+  try {
+    p = r->allocate(1);
+  } catch (const std::bad_alloc&) {
+    caught = true;
+  }
+  VERIFY( caught );
+
+  VERIFY( *r == *r );
+  VERIFY( r->is_equal(*r) );
+  VERIFY( !r->is_equal(*new_delete_resource()) );
 }
 
-int main() {
-  test01();
+int main()
+{
+  test06();
 }
diff --git a/libstdc++-v3/testsuite/experimental/memory_resource/resource_adaptor.cc b/libstdc++-v3/testsuite/experimental/memory_resource/resource_adaptor.cc
new file mode 100644 (file)
index 0000000..299bb72
--- /dev/null
@@ -0,0 +1,87 @@
+// { dg-options "-std=gnu++14" }
+
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <experimental/memory_resource>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using std::experimental::pmr::memory_resource;
+using std::experimental::pmr::resource_adaptor;
+
+template<typename T>
+  struct Allocator : __gnu_test::SimpleAllocator<T>
+  {
+    Allocator(int) { } // not default constructible
+
+    template<typename U>
+      Allocator(const Allocator<U>&) { }
+  };
+
+template<typename T>
+  bool aligned(void* p)
+  {
+    return (reinterpret_cast<std::uintptr_t>(p) % alignof(T)) == 0;
+  }
+
+// resource_adaptor
+void
+test05()
+{
+  bool test __attribute((unused)) = false;
+  using std::max_align_t;
+  using std::uintptr_t;
+  void* p = nullptr;
+
+  Allocator<int> a1(1), a2(2); // minimal interface allocators
+  resource_adaptor<decltype(a1)> r1(a1), r2(a2);
+  VERIFY( r1 == r1 );
+  VERIFY( r1 == r2 );
+  p = r1.allocate(1);
+  VERIFY( aligned<max_align_t>(p) );
+  r1.deallocate(p, 1);
+  p = r1.allocate(1, alignof(short));
+  VERIFY( aligned<short>(p) );
+  r1.deallocate(p, 1, alignof(short));
+  p = r1.allocate(1, alignof(long));
+  VERIFY( aligned<long>(p) );
+  r1.deallocate(p, 1, alignof(long));
+
+  __gnu_test::uneq_allocator<double> a3(3), a4(4); // non-equal allocators
+  resource_adaptor<decltype(a3)> r3(a3), r4(a4);
+  VERIFY( r3 == r3 );
+  VERIFY( r4 == r4 );
+  VERIFY( r3 != r4 );
+  p = r3.allocate(1);
+  VERIFY( aligned<max_align_t>(p) );
+  r3.deallocate(p, 1);
+  p = r3.allocate(1, alignof(short));
+  VERIFY( aligned<short>(p) );
+  r3.deallocate(p, 1, alignof(short));
+  p = r3.allocate(1, alignof(long));
+  VERIFY( aligned<long>(p) );
+  r3.deallocate(p, 1, alignof(long));
+
+  // TODO test with an allocator that doesn't use new or malloc, so
+  // returns pointers that are not suitably aligned for any type.
+}
+
+int main()
+{
+  test05();
+}
index 6a9a8c6..ed597fb 100644 (file)
@@ -27,6 +27,7 @@ int main()
 {
   constexpr propagate_const<int*> test1{};
   static_assert(!test1.get(), "");
-  propagate_const<int*> test2;
-  VERIFY(!test2.get());
+  propagate_const<int*> test2; // wrapped pointer is not initialized
+  propagate_const<int*> test3{};
+  VERIFY(!test3.get());
 }
index 9a930de..18ee318 100644 (file)
@@ -635,8 +635,9 @@ proc v3-build_support { } {
        set object_file [file tail $obj]
        # Compile with "-w" so that warnings issued by the compiler
        # do not prevent compilation.
+       # Disable LTO so that ar/ranlib don't need the LTO plugin.
        if { [v3_target_compile $srcdir/util/$f $object_file "object" \
-                 [list "incdir=$srcdir" "additional_flags=-w"]]
+                 [list "incdir=$srcdir" "additional_flags=-w -fno-lto"]]
             != "" } {
            error "could not compile $f"
        }
@@ -1923,6 +1924,8 @@ proc check_v3_target_little_endian { } {
     return $et_little_endian
 }
 
+# Return 1 if the Filesystem TS is supported, 0 otherwise.
+# Cache the result.
 proc check_v3_target_filesystem_ts { } {
     global cxxflags
     global DEFAULT_CXXFLAGS
@@ -1950,7 +1953,7 @@ proc check_v3_target_filesystem_ts { } {
        set et_filesystem_ts 0
 
        # Set up and preprocess a C++ test program that depends
-       # on debug mode activated.
+       # on the Filesystem TS feature-test macro being defined.
        set src filesystem_ts[pid].cc
 
        set f [open $src "w"]
index d7b36fe..a9ca617 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-05-02  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * Makefile.am (toolexeclib_LTLIBRARIES): Only set if
index 4bbff69..4fae3a5 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.
index 485a48c..8a6fabd 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-06-13  Jonathan Wakely  <jwakely@redhat.com>
 
        * generate_libstdcxx_web_docs: Use realpath to get absolute path.
index 1d492e6..c4c16ad 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-22  Release Manager
+
+       * GCC 6.2.0 released.
+
 2016-04-27  Release Manager
 
        * GCC 6.1.0 released.